Ja das ist richtig. Soweit klappte das schon. Wenn auch viel zu komplex da ohne die Event Handler.
Nur der Schildschaden sollte sich mit weiteren Treffern erhöhen. Ab einem bestimmten Unterschreiten des Schildwertes sollte das Script den Spieler drauf hinweisen, dass es repariert werden müsste.
Soweit so gut.
Nur wenn man das Schild nun nicht repariert wurde, sondern einfach das nächste Schild zum Einsatz kam, stand das Script noch an der selben Stelle und hat dem dann benutztem heilem Schild keinen Schaden zugefügt.
Und du hast wahrscheinlich recht ich verstehe noch immer nicht, wie die Event Handler funktionieren. Zwar habe ich Ihn starten können und auch die Abfrage ob der Gegner eine Hiebwaffe benutzt hat soweit geklappt, doch weiter bin ich halt noch nicht gekommen.
Hier das funktionierende Zwischenergebnis noch ohne Eventhandler
Hier der Scriptanfang mit den Event Handler
Ich bin zuversichtlich das wir irgendwann diese Modifikation in Funktion sehen werden.
Im Grunde wollte ich einfach nur die Skilländerung, die der Player im Blocken ab der Stufe Journeyman erhält wieder umkehren. Ich finde es einfach langweilig, dass die Schilde dann nicht mehr kaputt gehen.
Allerdings ist das jetzt auch gut so und müsste von Anfang an so laufen. Ich meine es ist viel besser, wenn ein Schild nur Schaden nimmt wenn der Gegner Hiebwaffen nutzt.
Der Clou des Ganzen und damit die Krönung wenn die Höhe des Schildschadens sogar noch mit bestimmten Wafffen zusätzlich geändert werden würde. Sprich je mehr Gewicht die Hiebwaffe umso mehr Schaden beim Auftreffen. Wäre doch cool. Man stelle sich vor ein mächtiger Gegner kommt angeprecht und zerschmettert mit einem einzigen oder wenigen Hieben das Schild. Oh ha. So bekommen mächtige Gegner ein ganz neues Nivau.
Nur der Schildschaden sollte sich mit weiteren Treffern erhöhen. Ab einem bestimmten Unterschreiten des Schildwertes sollte das Script den Spieler drauf hinweisen, dass es repariert werden müsste.
Soweit so gut.
Nur wenn man das Schild nun nicht repariert wurde, sondern einfach das nächste Schild zum Einsatz kam, stand das Script noch an der selben Stelle und hat dem dann benutztem heilem Schild keinen Schaden zugefügt.
Und du hast wahrscheinlich recht ich verstehe noch immer nicht, wie die Event Handler funktionieren. Zwar habe ich Ihn starten können und auch die Abfrage ob der Gegner eine Hiebwaffe benutzt hat soweit geklappt, doch weiter bin ich halt noch nicht gekommen.
Hier das funktionierende Zwischenergebnis noch ohne Eventhandler
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.
Hier der Scriptanfang mit den Event Handler
PHP:
Der Event Handler wird über eine Quest gestartet.
Das Script diente zum Testen, um die Event Handler zu verstehen
scn A0ItemBlockingPlayer
ref target
ref weapon
short WeaponType
short Schild; EDIT Falsch muss eine REF sein
;Target speichert die Zielref
;Weapon speichert die ID der Waffe mit der der Player getroffen wird
;========================================================
Begin Function {target weapon}
if target.isBlocking ==0
return
;----------Player blockt-------------------------
else
;message $target + "?????" + $Weapon ;funktioniert nicht
PrintToConsole "Begin Function {target weapon} Ausdruck1= %.0f, Ausdruck2= %.0f"target, weapon
endif
set WeaponType to getWeaponType weapon
;-----Hiebwaffenabfrage-----1H,2H----------------
if WeaponType ==2 || WeaponType ==3
;message $Weapon + "Typ Hieb 1Hand oder 2Hand" ;funktioniert nicht
PrintToConsole "Waffentyp Hieb= %.0f"weaponType ; funktioniert- siehe Ausgabe Console im Bild oben
set Schild to player.GetEquippedObject 16 ; EDIT Muss 13 heissen und als REF deklariert werden
;message $Schild + wid zum Blocken genutzt" ;funktioniert nicht
PrintToConsole "Object16= %.0f"schild
;--------------Keine Hiebwaffe------------------------
else
PrintToConsole "Waffentyp kein Hieb= %.0f"weaponType
endif
end
Ich bin zuversichtlich das wir irgendwann diese Modifikation in Funktion sehen werden.
Im Grunde wollte ich einfach nur die Skilländerung, die der Player im Blocken ab der Stufe Journeyman erhält wieder umkehren. Ich finde es einfach langweilig, dass die Schilde dann nicht mehr kaputt gehen.
Allerdings ist das jetzt auch gut so und müsste von Anfang an so laufen. Ich meine es ist viel besser, wenn ein Schild nur Schaden nimmt wenn der Gegner Hiebwaffen nutzt.
Der Clou des Ganzen und damit die Krönung wenn die Höhe des Schildschadens sogar noch mit bestimmten Wafffen zusätzlich geändert werden würde. Sprich je mehr Gewicht die Hiebwaffe umso mehr Schaden beim Auftreffen. Wäre doch cool. Man stelle sich vor ein mächtiger Gegner kommt angeprecht und zerschmettert mit einem einzigen oder wenigen Hieben das Schild. Oh ha. So bekommen mächtige Gegner ein ganz neues Nivau.
Zuletzt bearbeitet: