Construction Set Skriptthread zum Construction Set

Ich hab mal wieder ein Problem...
PHP:
scn aaDROrd0NQ03SeltsamesBuchSkript

Short Once
Float Timer

Begin onActivate
If ( Once == 0 )
	Set Once To 1
	DisablePlayerControls
	MessageBox "Seltsame Schriftzeichen bedecken dieses Buch... als du sie berührst, fühlst du ein leichtes Kribbeln in deinen Fingern..."
Endif
End

Begin GameMode
If ( Once == 0 )
	Return
Elseif ( Once == 1 )
	Set Once To 2
	DROrdNQ03KelbKeenarRef.Enable
	PrintToConsole "Calenad - NQ03 - Nekro enabled"
Elseif ( Once == 2 )
	Set Once To 3
	Set Timer To DROrdNQ03KelbKeenarRef.SayTo Player aaDROrdNQ03KelbSayTo1 1
	PrintToConsole "Calenad - NQ03 - Nekro SayTo 01"
	TriggerHitShader 3
Elseif ( Once == 3 )
	If ( Timer > 0 )
		Set Timer To ( Timer - GetSecondsPassed )
	Else
		Set Once To 4
	Endif
Elseif ( Once == 4 )
	Set Once To 5
	Set Timer To DROrdNQ03KelbKeenarRef.SayTo Player aaDROrdNQ03KelbSayTo2 1
	PrintToConsole "Calenad - NQ03 - Nekro SayTo 02"
	TriggerHitShader 5
Elseif ( Once == 5 )
	If ( Timer > 0 )
		Set Timer To ( Timer - GetSecondsPassed )
	Else
		Set Once To 6
	Endif
Elseif ( Once == 6 )
	Set Once To 7
	DROrdNQ03KelbKeenarRef.StartConversation Player aaDROrdNQ03KelbTalk01
	PrintToConsole "Calenad - NQ03 - Nekro Gespraech"
Endif
End

Nach der Aktivierung eines Objekts soll ein NPC enabled werden.
Dieser NPC soll zunächst zwei Sätze einfach so sagen. Dann soll er auf den Spieler zugehen und ihn in ein Gespräch verwickeln. Ich habe DummySoundFiles generiert, doch trotzdem rauscht der Skript einfach durch die SayTos durch. Alle PrintToConsole-Debugs tauchen auf, aber ich kann mir nicht erklären, wieso keine SayTos kommen.
 
Gibt es eine Möglichkeit per Script die Health eines Schildes zu reduzieren und durch repair wieder auf den Urzustand zu setzen?

Am Anfang nimmt ein Schild ja noch Schaden. Jedoch ist mein Player inzwischen "leider" so weit, das die Schilde keinen Schaden mehr nehmen. ich find das total dumm. Hatte ich sonst immer, wenn keine Rapairhammer zu finden waren, ein kaputtes Schild durch ein Neues ersetzt, ist das nun nicht mehr nötig. Wie langweilig.
Daher würde ich gerne das per Script steuern. Die Globale die Ingame für diese Fähigkeit durch Aufstieg in der Stufe geändert wurde wieder zurückzusetzen hat nichts gebracht.

Oder Lässt sich da sogar etwas Ingame mit der Console machen?

Gruss
robin
 
@DarkRuler: Keine Ahnung, woran es liegt. Zur Not kannst du ja auch einfach den Ton per "playSound3D" abspielen lassen. Ist zwar nicht so schön, weil es keine Untertitel und Lippensynchronisation gibt, aber zur Not...

@robinH: Ich habe jetzt auch keine entsprechende Einstellung in den Game Settings gefunden. Höchstens "iArmorDamageShieldChance", aber das wirkt sich dann gleich noch auf mehr aus.
Per Skript ist es, denke ich, mit "setEquippedCurrentHealth" bzw. "mod..." möglich.
 
  • Like
Reaktionen: robinH
Gibt es denn keine Möglichkeit diesen bescheuerten Skillzustand Ingame oder per Script zu ändern?

Skill
Journeyman

Shield or weapon no longer damaged when blocking.

Mit player.SetEquippedCurrentHealth 100 werde ich mal experimentieren.
 
Zuletzt bearbeitet:
Was mache ich nun falsch. Ausser das ständig die Message "Schild macht es nicht mehr lang" erscheint passiert nichts. Health steht auf 100%. Console gibt nichts aus.

Die Idee:
Ich wollte die Abfrage über das Blocken, welches einem zum taumeln bringt starten. Immer genau dann soll die Variable Recoil um 1 erhöht werden.

Wenn diese eine entsprechende Ziffer erreicht, soll das Schild in der Gesundheit reduziert werden. Doch irgendetwas scheint nicht zu stimmen.

Das Script liegt auf einem Amulett.

PHP:
scn A0ItemBlockingDamage

;13 = Schild auf 100% zurücksetzen
;set Weaponhealth to player.getEquippedCurrentHealth 13
;set WeaponHealth to (100 - WeaponHealth)
;player.ModEquippedCurrentHealth WeaponHealth 13




float WeaponHealth

Ref PlayerWaffe
Short Waffentyp
short WaffenNutzung
Short WaffenBruch
short Recoil


;===================================================
BEGIN GAMEMODE

If player.IsAnimGroupPlaying recoil		
Message "Uff ..."
		
player.playgroup BlockHit 1
player.playgroup idle 1
set Recoil to Recoil+1
return		
Endif
	
	
if Recoil >2 && Recoil <=4	
set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandA1 = %.0f"Weaponhealth

;13 = Schild auf 80% setzen
player.SetEquippedCurrentHealth 80 13

set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandB1 = %.0f"Weaponhealth
Message "Mein Schild hat Schaden davon getragen!"		
		
endif
	
if Recoil >4 && Recoil <=8	
set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandA2 = %.0f"Weaponhealth

;13 = Schild auf 40% setzen
player.SetEquippedCurrentHealth 40 13

set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandB2 = %.0f"Weaponhealth
Message "Mein Schild hat mehr Schaden davon getragen!"
		
endif	

	
	
Set PlayerWaffe to player.GetEquippedObject 16
Set Waffentyp to GetWeaponType PlayerWaffe

	
If Waffentyp==1 || Waffentyp==3 || player.GetEquippedObject 13
Set WaffenNutzung to 1
Else
Set WaffenNutzung to 0
EndIf

	
If player.IsBlocking==1 && WaffenNutzung==1 && WeaponHealth < 50
Set WaffenBruch to 1
Endif

If Waffenbruch ==1
Message "Mein Schild macht es nicht mehr lang"
set Waffenbruch to 0		
endif	

End
 
Zuletzt bearbeitet:
Ich weiß jetzt nicht genau, was das Skript machen soll...
Probier mal am Anfang "player.isAnimGroupPlaying 30". Laut Wiki muss man als Parameter die ID-Zahl verwenden.
 
  • Like
Reaktionen: robinH
@ robinH: Ich versteht leider herzlich wenig vom Scripten, oder davon wie die Skill Benefits im Spiel implementiert sind. Aber... könnte es sein, daß der Vorteil der Blocken Fähigkeit vom Spiel als permanenter "Repair" Effekt umgesetzt wird, also gar nicht deine Schilde "unverwundbar" gemacht werden, sondern sich selbständig reparieren um die unbegrenzte Haltbarkeit zu erreichen? Ein Schild muß ja (m.W.), um brauchbar zu sein, eine Haltbarkeit haben, das Spiel kann allerdings wohl kaum als Haltbarkeit "Unendlich" als Zahl verarbeiten. Würde mich zumindest wundern. In so fern vermute ich mal, daß hier andere Mechanismen am wirken sind. Dann würde die Haltbarkeit immer wieder konstant auf Max gesetzt, egal wie viele Punkte du abziehst. So fern es in deinem Script keine Fehler gibt (was ich leider nicht beurteilen kann) könnte das erklären warum du keinen spürbaren Effekt erzielst, aber zwischen den Momenten in denen dein Script Haltbarkeit abzieht, und das Spiel sie wieder hinzufügt die Meldung auftaucht dein gegenstand sei beschädigt.

Vielleicht bringt es was, wenn du statt dessen nach X mal blocken das Blocken Attribut deines Charakters entsprechend reduzierst. Vielleicht nicht die Lösung die du suchst, aber es wäre evtl. trotzdem den Versuch wert.
 
  • Like
Reaktionen: robinH
Ich weiß jetzt nicht genau, was das Skript machen soll...
Probier mal am Anfang "player.isAnimGroupPlaying 30". Laut Wiki muss man als Parameter die ID-Zahl verwenden.

Du meinst das Recoil mit der 30 ersetzen.
Vieleicht ist dort der Fehler da ich nun sehe, dass ich die selbe Bezeichnug auch als Short verwendet habe.
Aber warum verstehst du nicht was das Script machen soll? Es soll einfach wie schon beim vor letztem Mal von dir als Tipp gegeben
per Script eine Möglichkeit geschaffen werden, das das Schild durch einen Treffer auch Schaden nimmt.
Halt so wie vor dem dummen Skill "Yourneyman".

Eventuell kennst du einen anderen Weg für die Abfrage.
Ich dachte die Abfrage könnte über die Recoilanimation erfolgen. Denn immer dann wird der Schild ja zuvor mit solcher Wucht getroffen. Das wäre doch ideal.

hier noch einmal das Script. Wegen der leichteren Übersicht

Das Script liegt auf einem Amulett.

PHP:
scn A0ItemBlockingDamage

float WeaponHealth
Ref PlayerWaffe
Short Waffentyp
short WaffenNutzung
Short WaffenBruch
short Recoil

;===================================================
BEGIN GAMEMODE

If player.IsAnimGroupPlaying 30	; vorher recoil	
Message "Uff ..."
		
player.playgroup BlockHit 1
player.playgroup idle 1
set Recoil to Recoil+1                      ; hier erfolgt die Erhöhung der Variable
return		
Endif
	
if Recoil >2 && Recoil <=4	        ;Gesundheit des Schildes wird in einer Variable und danach auf 80% gesetzt.
set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandA1 = %.0f"Weaponhealth

;13 = Schild auf 80% setzen
player.SetEquippedCurrentHealth 80 13

set Weaponhealth to player.getEquippedCurrentHealth 13    ; Die neue Gesundheit wird wieder in die Variable gesetzt damit diese über die Cosole ausgegeben wird.
printToConsole "WaffenzustandB1 = %.0f"Weaponhealth
Message "Mein Schild hat Schaden davon getragen!"		
		
endif
	
if Recoil >4 && Recoil <=8	; Der Gleiche Vorgang wie zuvor nur diesmal mit 40%
set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandA2 = %.0f"Weaponhealth

;13 = Schild auf 40% setzen
player.SetEquippedCurrentHealth 40 13

set Weaponhealth to player.getEquippedCurrentHealth 13
printToConsole "WaffenzustandB2 = %.0f"Weaponhealth
Message "Mein Schild hat mehr Schaden davon getragen!"
		
endif	

	
	
Set PlayerWaffe to player.GetEquippedObject 16 ; Wird für das Schild nicht gebraucht
Set Waffentyp to GetWeaponType PlayerWaffe
	
If Waffentyp==1 || Waffentyp==3 || player.GetEquippedObject 13  ; Abfrage ob ein Schwert, eine Hiebwaffe oder ein Schild im Gebrauch ist
Set WaffenNutzung to 1
Else
Set WaffenNutzung to 0
EndIf

	
If player.IsBlocking==1 && WaffenNutzung==1 && WeaponHealth < 50  ;Liegt die Gesundheit unter 50%, soll die nachfolgende Nachricht ausgegeben werden.
Set WaffenBruch to 1
Endif

If Waffenbruch ==1
Message "Mein Schild macht es nicht mehr lang"
set Waffenbruch to 0		
endif	

End

@Andy1967
Nee ich glaub schon das das Schild die Gesundheit verliert. Es gibt ja auch einen Zauber der das Selbe bewirkt.
"Waffenrost". Aber interessanter Gedankengang.

Gruss robin
 
Zuletzt bearbeitet:
If player.IsAnimGroupPlaying 30
Dieser Befehl wird leider nicht erkannt.
Auch die Abfrage über die Animation Recoil scheint nicht so zu laufen wie gedacht.

Habe nun den Blockhit zum Test einmal abgefragt
If player.IsAnimGroupPlaying BlockHit

Das funktioniert. Jedesmal wenn das Schild getroffen wird wird die Variable hochgezählt. Alleridings= 3 Stufen. Weiss jemand warum?

Die Console gibt folgendes aus:

Bei einem Schildtreffer
Recoil =1
Recoil =2
Recoil =3

Bei einem erneuten Treffer
Recoil =4
Recoil =5
Recoil =6
...usw


Darüberhinaus ist mir nicht klar wie die Health gesetzt werden.

Das Schild hat vor dem Treffer WeaponHealth= 400Punkte bei voller Gesundheit =100%
;13 = Schild auf 80% setzen
player.SetEquippedCurrentHealth 80 13
ergibt Health des Schildes = 20%

So wie es scheint sieht der Befehl das Schild auf 100% und nicht auf 400 Healthpunkte ( ich dachte das sind dann 400%)

player.SetEquippedCurrentHealth 300 13
ergibt 75% Gesundheit des Schildes

Die Ziffer als Variable vorher zu berechnen klappt leider nicht. Da der Befehl player.SetEquippedCurrentHealth Ingame nur eine Zahl akzeptiert.
Ich verstehe nicht recht warum. Die Zahl befindet sich doch in einer vorgegebenen Float-Variable. Doch bei Nutzung stoppt das Script an dieser Stelle.
Bsp:
set Weaponhealth to player.getEquippedCurrentHealth 13
set WeaponHealth to (Weaponhealth - WeaponHealth*10%)
player.SetEquippedCurrentHealth Weaponhealth 13

Desweiteren lässt sich das kaputte Schild mit einem Repairhammer auch wieder auf 100% reparieren. Soweit funktioniert das alles wie gedacht.

Nur die Addierung der Variablen und die Berechnung des Schadens scheint noch nicht richtig zu sein. Jemand eine Idee?
 
1. Vielleicht dauert die Animation genau drei Frames.

2. Vielleicht nimmt der Befehl keine Prozentangaben, sondern absolute Werte an. Du könntest sonst auch mal mit den Variablentypen spielen. Laut Wiki braucht der "set"-Befehl eine "long"-Variable...
 
  • Like
Reaktionen: robinH
..............

2. Vielleicht nimmt der Befehl keine Prozentangaben, sondern absolute Werte an. Du könntest sonst auch mal mit den Variablentypen spielen. Laut Wiki braucht der "set"-Befehl eine "long"-Variable...[/QUOTE]

Oh na dann. Doch dann lässt sich ja keine prozentuale Berechnungausgeben. Long bedeutet doch nur Ganze Zahl. Gibt es ein Befehl mit dem der berechnete krumme Wert entsprechend aufgerundet werden kann. Oder werden automatisch nur die Vorkommastellen bei Long benutzt.

Bsp: 370 HP *25% = 92,5 Auf 93 aufrunden lassen.
 
When using only numbers in a division, you need to use at least one decimal point to tell the game that you want to use floating point division, without a decimal point the remainder is truncated at the end of the division:
float a
set a to 9/5 ; will set "a" to 1.000
set a to 9.0/5 ; will set "a" to 1.800
  • When you want to store the correctly rounded result of a division in an integer-variable, you need to make sure, that the calculation uses floating point (so that the decimal-fraction isn't truncated) and add 0.5:
short a
set a to 9/5 ; will set "a" to 1
set a to 9/5 + 0.5 ; will set "a" to 1
set a to 9.0/5 ; will set "a" to 1
set a to 9.0/5 + 0.5 ; will set "a" to 2
set a to 7.0/5 + 0.5 ; will set "a" to 1

Hilft das bzgl. der Rundungsfrage?
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH
Oblivion rundet unter 0.5 ab und darüber auf.

Code:
set Weaponhealth to player.getEquippedCurrentHealth 13
set WeaponHealth to Weaponhealth - (WeaponHealth/10)

Macht dasselbe wie

set Weaponhealth to player.getEquippedCurrentHealth 13
set WeaponHealth to (Weaponhealth - WeaponHealth*10%)
 
Zuletzt bearbeitet von einem Moderator:
Code:
set Weaponhealth to player.getEquippedCurrentHealth 13
set WeaponHealth to Weaponhealth - (WeaponHealth*(WeaponHealth/10))
Hast du da nicht ein Weaponhealth zu viel? Er will den Wert um 10% verringern, aber bei (z.B.) Weaponhealth von 400 ergibt dein Klammersatz (400*40), also 1600. Zieh das von den urspr. 400 ab und du läufst ins negative.
Code:
set weaponhealth to Weaponhealth-(Weaponhealth/10)
passt eher.
 
  • Like
Reaktionen: robinH
Oblivion scheint die % Angabe nicht zu wollen.
Sobald ich 400-40 in die Variable eingebe berechnet die Engine die 360 und alles läuft wie erwartet.
Wenn jedoch die % Angabe mit eingegeben wird. Bleibt das Script einfach stehen.

TEst 1:
set Test to 40
set WeaponHealth to Weaponhealth-Test

Ausgabe= 360

TEst 2:
set Test to 40*50%
set WeaponHealth to Weaponhealth-Test

Ausgabe müsste 380 lauten. Jedoch wird keine Ausgabe ausgegeben. Das Script läuft nicht weiter.
auch der Zähler stoppt sofort.

Jetzt stellt sich nur die Frage warum. Ich dachte Prozentuale Angaben werden so berechnet.

----------------------------------------------------------------------------------------------------
Das hier werde ich mal probieren
set weaponhealth to Weaponhealth- (Weaponhealth/10)
Sollte das klappen liegt der Fehler wohl am "%"
Jedoch hilft das nur bedingt. Denn bei 50% ergebe 400/50 dann 8 und nicht 200

Ich denke mal das
set weaponhealth to Weaponhealth- (Weaponhealth*0.1)
der richtige Weg sein könnte.
 
Zuletzt bearbeitet:
Das hier werde ich mal probieren
set weaponhealth to Weaponhealth- (Weaponhealth/10)
Sollte das klappen liegt der Fehler wohl am "%"
Jedoch hilft das nur bedingt. Denn bei 50% ergebe 400/50 dann 8 und nicht 200
Klar ist das 8. 50% = 1/2. ;)

Du könntest doch auch am Anfang einen Wert "ShieldDamage" definieren, und zwar als Volle Health des Gegenstandes/10. Den Wert multiplizierst Du dann später im Script mit 1, 2, 3, etc. um Abzüge von 10%, 20%, 30% etc. zu errechnen. Wenn Du dann im Spiel irgendwann mal feststellst Du hättest lieber kleinere oder größere Schädigungen an den Schilden veränderst Du nur ein mal die Berechnung des ShieldDamage Wertes und die Schritte zwischen den Beschädigungsstufen werden automatisch kleiner oder größer, ohne das Du irgendwelche anderen Werte ändern musst.

Edit: Wenn Du das ausprobierst musst Du natürlich drauf achten wie Du an dieser Stelle:
If player.IsBlocking==1 && WaffenNutzung==1 && WeaponHealth < 50 ;Liegt die Gesundheit unter 50%, soll die nachfolgende Nachricht ausgegeben werden.
Set WaffenBruch to 1
Endif

If
Waffenbruch ==1
Message
"Mein Schild macht es nicht mehr lang"
set Waffenbruch to 0
die Gesundheit errechnest. Wenn Du die Meldung grundsätzlich bei <50% haben willst musst Du hier VolleHealth/2 an Stelle der 50 einsetzen, denn sonst passiert es Dir, daß die Meldung schon ausgespuckt wird wenn der Schild noch mehr als 50% hat, oder u.U. auch viel weniger als das, je nach dem welchen Divisor Du bei der Berechnung von "ShieldDamage" benutzt. Hier die 50 durch ShieldDamage*5 zu ersetzen funktioniert nur solange Du den ShieldDamage als ein Zehntel der vollen Health definierst.

--------------------------------------------

Edit #2: Davon abgesehn, hat Dein ganzes Konzept evtl. einen kleinen Haken, oder nennen wir's eine mögliche Unlogik?

So wie ich das Script verstehe berechnest Du die Schadenspunkte die ein Schild beim Blocken nimmt als % des CurrentHealth wie der Wert beim Eintritt des ersten Recoil eines Kampfes ist. Was passiert aber wenn ein Schild am Beginn eines Kampfes schon beschädigt ist?

Beispiel: Der Schild hat Health 400 und wird in einem Kampf um 10%, also 40 Punkte geschädigt. Der Schild wird vor dem nächsten Kampf nicht repariert.
Im nächsten Kampf hat der Schild als CurrentHealth 360 und wird wieder um 10% geschädigt. Am Ende des Kampfes ist die Health bei 360-36=324.
Das selbe passiert im nächsten Kampf (Schild ist immer noch nicht repariert) und der Schild verliert somit diesmal nur 32,4 Punkte.
Etc. etc.

Je schwerer der Schild beschädigt ist wenn Du in den Kampf gehst, desto weniger Schadenspunkte verursacht ein individuelles Schadensereignis. Das kommt mir irgendwie komisch vor.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH
Ich verstehe nicht recht warum. Die Zahl befindet sich doch in einer vorgegebenen Float-Variable. Doch bei Nutzung stoppt das Script an dieser Stelle.
Bsp:
set Weaponhealth to player.getEquippedCurrentHealth 13
set WeaponHealth to (Weaponhealth - WeaponHealth*10%)
player.SetEquippedCurrentHealth Weaponhealth 13

Desweiteren lässt sich das kaputte Schild mit einem Repairhammer auch wieder auf 100% reparieren. Soweit funktioniert das alles wie gedacht.

Nur die Addierung der Variablen und die Berechnung des Schadens scheint noch nicht richtig zu sein. Jemand eine Idee?

Stimmt, ich habe dass falsch interpretiert :)
 
Klar ist das 8. 50% = 1/2. ;)
......................
So wie ich das Script verstehe berechnest Du die Schadenspunkte die ein Schild beim Blocken nimmt als % des CurrentHealth wie der Wert beim Eintritt des ersten Recoil eines Kampfes ist. Was passiert aber wenn ein Schild am Beginn eines Kampfes schon beschädigt ist?

Beispiel: Der Schild hat Health 400 und wird in einem Kampf um 10%, also 40 Punkte geschädigt. Der Schild wird vor dem nächsten Kampf nicht repariert.
Im nächsten Kampf hat der Schild als CurrentHealth 360 und wird wieder um 10% geschädigt. Am Ende des Kampfes ist die Health bei 360-36=324.
Das selbe passiert im nächsten Kampf (Schild ist immer noch nicht repariert) und der Schild verliert somit diesmal nur 32,4 Punkte.
Etc. etc.

Je schwerer der Schild beschädigt ist wenn Du in den Kampf gehst, desto weniger Schadenspunkte verursacht ein individuelles Schadensereignis. Das kommt mir irgendwie komisch vor.

Verdammt du hast recht.
Doch wie lässt sich das lösen? Ich glaub ich hätte das nicht mal bemerkt.

Letztendlich wäre ich schon froh wenn so ein Schild überhaupt einen Schaden abbekommt.
Der Orc drescht mit seinem schweren Hammer sowas darauf ein. Das muss einfach Schaden nehmen.

Eventuel wäre es gut noch abzufragen ob der Gegner eine Hiebwaffe oder einen Bogen benutzt.
Denn ein Schwert oder eine Faust macht glaub ich kaum Schaden. Habe ich jedenfalls in einem Film noch nie gesehen.

Wie lässt sich eine Abfrage von Hiebwaffe und Bogen am besten integrieren. Jemand ein Idee?
 
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.
 
  • Like
Reaktionen: robinH
Robin, leider keine Ahnung wie Du das in der Praxis realisieren könntest, aber jetzt wo ich mir Dank Diarrhoe mal Events angeschaut habe stelle ich fest, daß es da auch OnBlock, OnRecoil, und OnStagger Events gibt. Wenn Du die eigentliche Berechnung geregelt kriegst ist einer dieser Events vielleicht besser geeignet Dein Skript zu starten, als die Animationsabfrage.

Für den Schaden den der Schild nimmt würde ich es mir aber nicht zu kompliziert machen. Nimm einen 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. Warum machst Du es Dir nicht einfach, solange es Dir nur drum geht, daß Schilde trotz hohem Blocken Skill überhaupt noch Schaden nehmen? Modifizieren kannst Du das Skript später immer noch, aber warum nicht erst mal ein "proof of concept"? An den Details kannst Du immer noch feilen. Ist vielleicht besser, als an den Details zu lange zu verzweifeln ohne wenigstens ein oder zwei Erfolgserlebnisse zwischendrin.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: robinH