....................
Charakter der Blocken noch nicht so hoch hat, schau wie viele Angriffe es dauert bis der Schild kaputt ist, und rechne aus wie viel Health der Schild im Schnitt pro Treffer verloren hat. Dann nimm das als feste Punktzahl die ein Schild pro Block verlieren sollte und modifizier es evtl. noch mit dem Level des Charakters, da höherstufige Chars im Spiel auch auf härtere Gegner treffen die mehr austeilen können. Auf der anderen Seite kann man natürlich auch mit einem festen Wert arbeiten, da hochstufige Chars ja i.d.R. auch besser im Blocken sein sollten und damit den Schild nicht so sehr beschädigen..............
Interessanter Gedankengang. Soweit dachte ich garnicht. Das scheint mir hochkompliziert. keine Ahnung wie das abgefragt werden könnte. Erst mal die Grundabfrage überhaupt hinbekommen. ich weiss nicht mal ob die Engine das bevor der Skill so bescheuert gesetzt wird vorher so gamacht hat.
Hier das funktionierende Zwischenerbgebnis
PHP:
Das Script liegt auf beliebigen Gegenstand im Inventar.
scn A0ItemBlockingDamage
float fWeaponHealthBasis
float fWeaponHealth
float fSchaden
short sTreffer
short sDamage
;===================================================
BEGIN GAMEMODE
If player.IsAnimGroupPlaying BlockHit && sTreffer <1
set fWeaponHealthBasis to player.getEquippedCurrentHealth 13
printToConsole "Schildwert = %.0f"fWeaponHealthBasis
endif
If player.IsAnimGroupPlaying BlockHit && sTreffer <12
set fWeaponHealth to player.getEquippedCurrentHealth 13
set sTreffer to sTreffer+1
printToConsole "Trefferzähler = %.0f"sTreffer
;2 Treffer sind erfolgt
if sTreffer >5 && sDamage !=1
set sDamage to 1
endif
;4 Treffer sind erfolgt
if sTreffer >10 && sDamage !=3
set sDamage to 3
endif
Message "Trefferzähler:%.0f und Zustand des Schildes:%.0f"sTreffer, fWeaponHealth
endif
;===================Schadensberechnung 1=======================================
if sTreffer >5 && sTreffer <=6 && sDamage ==1
set fWeaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandA1= %.0f"fWeaponhealth
;10% Schaden
set fSchaden to 0.1
set fWeaponHealth to fWeaponHealth - (fWeaponhealth*fSchaden)
player.SetEquippedCurrentHealth fWeaponHealth 13
printToConsole "Damage =1 WaffenzustandA2= %.0f"fWeaponhealth
Message "Mein Schild hat Schaden davon getragen!"
set sDamage to 2
endif
;===================Schadensberechnung 2=======================================
if sTreffer >10 && sTreffer <=11 && sDamage ==3
set fWeaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandB1= %.0f"fWeaponhealth
;weitere 15% Schaden
set fSchaden to fSchaden*1.5
set fWeaponHealth to fWeaponHealth - (fWeaponhealth*fSchaden)
player.SetEquippedCurrentHealth fWeaponHealth 13
printToConsole "Damage =1 WaffenzustandB2= %.0f"fWeaponhealth
Message "Mein Schild hat sehr viel Schaden davon getragen!"
set sDamage to 4
endif
;===============ENDE der Abfragen da Gesundheit zu gering======================
If player.IsBlocking==1 && sDamage ==4 && fWeaponHealth <10
set fWeaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenZustand= %.0f"fWeaponhealth
Message "Mein Schild macht es nicht mehr lang"
set sDamage to 5
endif
;==============Reparaturabfrage================================================
if SDamage>1
set fWeaponhealth to player.getEquippedCurrentHealth 13
if fWeaponHealth == fWeaponHealthBasis
Message "Zustand des Schildes ist Neu:%.0f"fWeaponHealth
set sTreffer to 0
set sDamage to 0
endif
endif
End
Zur info:
2 Schadensberechnungen und auch die Hitpoints dienen nur des Tests. Wenn alles funtkioniert sind es weitere Berechnungen und die nötigen Hitpoints werden auch erhöht.
Soweit so gut. Aber.....
Wirft man ein kaputtes Schild ohne es zuvor zureparieren weg. So läuft das Script auf dem Neuen heilen Schild nicht. Wie denn auch. Das Script weiss ja nicht welches Schild gemeint ist und denkt das momentan benutzte ist immer noch kaputt.
Wäre es möglich die Abfrage über getSelf irgendwie zu nutzen?
Sprich das Script liegt dann auf dem jeweiligem Schild, deren Healthpunkte werden nicht über
set fWeaponhealth to player.getEquippedCurrentHealth 13
abgefragt sondern über die REF auf der das Script liegt. Nur wie lässt sich die Ref in diesem Falle dann abfragen?
Da würden mir spontan nur EventHandler einfallen. Da gibt es das Event "onHitWith", das du auf den Spieler wirken lassen kannst und in einer Variable kannst du dann die ID der Waffe speichern. Dann kannst du mit "getWeaponType" die Art der Waffe abfragen. Du könntest zusätzlich auch checken, wie viel Schaden der Spieler genommen hat, damit du daraus einen dynamischen Schadenswert für den Schild errechnen kannst.
Eine mit OnHIT ID-zuweisung wäre glaube ich zu Aufwendig. Schliesslich sollen ja alle Hiebwaffen und Bögen am Schild Schaden verursachen.
Als Kompromiss könnte jedoch die Einhand und Zweihandwaffe verschiedenen Schaden verursachen.
2: Blunt1H
3: Blunt2H
ref weapon
short weapontype
set weapon to player.GetEquippedObject 16
set weapontype to GetWeaponType weapon
Wie lässt sich abfragen welche Waffe der Angreifer benutzt. Das obengenannte läuft ja nur über die Abfrage welche Waffe der Player benutzt.
Zuletzt bearbeitet: