Construction Set selbstschaden bei angriff

Nord & Magier

Neuankömmling
meinscript sieht momentan so aus


scn wandlerschwertschleudern
ref me
short doonce

begin scripteffectstart
if ( player.getisrace x == 1 ) && ( player.getitemcount y > 0 ) && ( doonce == 0 )
set me to getself
player.pushactoraway me 200
player.removeitem y 1
set doonce to 1
endif


elseif ( doonce == 0 ) && ( player.getitemcount y < 1 )
set me to getself
cast sebstschadenzauber player
player.pushactoraway me 200
set doonce to 1
endif


end
begin scripteffectfinish
set doonce to 0
end

dabei sieht der selbstschadenzauber so aus

-feuerschaden, magnitude 20, duration 0
-keine häkchen links in den kästen
-selbst, zauber

problem ich bekomm obwohl ich keine y gegenstände hab und nicht rasse x bin keinen schaden hab schon jmd. gefragt der hat aber keinen fehler gefunden

danke
 
scn wandlerschwertschleudern
ref me
short doonce

begin scripteffectstart
if ( player.getisrace x == 1 ) && ( player.getitemcount y > 0 ) && ( doonce == 0 )
set me to getself
player.pushactoraway me 200
player.removeitem y 1
set doonce to 1
endif


elseif ( doonce == 0 ) && ( player.getitemcount y < 1 )
set me to getself
cast sebstschadenzauber player
player.pushactoraway me 200
set doonce to 1
endif


end
begin scripteffectfinish
set doonce to 0
end
Der ist da falsch. endif beendet den If-Block, Schema:
If
ElseIf
EndIf
;)
Aber eigentlich sollte er dir da n Fehler ala "Mismatched If-block" oder so geben...
mfg erc
Eidt: Außerdem würde ich else statt elseIf nehmen und y<1 kommt mir auch komisch vor...
falls das oben nicht geht, versuchsmal mit
scn wandlerschwertschleudern
ref me
short doonce

begin scripteffectstart
if ( player.getisrace x == 1 ) && ( player.getitemcount y > 0 ) && ( doonce == 0 )
set me to getself
player.pushactoraway me 200
player.removeitem y 1
set doonce to 1

else ( doonce == 0 ) && ( player.getitemcount y == 0 )
set me to getself
cast sebstschadenzauber player
player.pushactoraway me 200
set doonce to 1
endif


end
begin scripteffectfinish
set doonce to 0
end
schließlich gibt es in Oblivion keine "halben" Items, sprich items mit einer anzahl unter 1, also kannst u auch direkt nach 0 fragen
 
Zuletzt bearbeitet:
Also ich würde das elseif schon lassen, weil es gibt ja andere Bedingungen und bei else kann man doch keine Bedingungen mehr anschliessen, oder? Immerhin heißt es übersetzt ja: else-andernfalls und elseif-ansonsten wenn ( oder so ähnlich ). Und wenn man das Skript speichert bekommt man mit dem endif auch keine Fehlermeldung, allerdings ohne auch nicht :huh:.
 
Vor einem elseif darf kein endif stehen.
Das endif beendet den if-Block.
Wenn das endif dort belassen wird, muss das elseif in eine if geändert werden.
 
hab alles versucht funktioniert nichts

wie wäre es denn den zauber als eigenschaft zu machen die 20 sekunden nach dem treffer weggeht

nur weiß ich nciht wie man so einen timer setzt
 
Ich glaube das sieht so aus:
Code:
scn wandlerschwertschleudern
ref me
short doonce
[COLOR="Red"]float timer[/COLOR]

begin scripteffectstart
if ( player.getisrace x == 1 ) && ( player.getitemcount y > 0 ) && ( doonce == 0 )
set me to getself
player.pushactoraway me 200
player.removeitem y 1
set doonce to 1

else ( doonce == 0 ) && ( player.getitemcount y == 0 )
set me to getself
player.addspell selbstschadenszauber
[COLOR="Red"]set timer to timer + getsecondspassed[/COLOR]
player.pushactoraway me 200
set doonce to 1
endif
[COLOR="Red"]if ( timer >= 20 )
player.removespell selbstschadenzauber
set timer to 0
else
set timer to timer + 1
return[/COLOR]
endif

end
begin scripteffectfinish
set doonce to 0
end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Nord & Magier
nicht ganz. Wenn du einen timer "hochzählen" willst, musst das so aussehen:
Code:
set timer to timer + getsecondpassed
Und ich würde "if timer == 20" so umschreiben:
Code:
If timer >= 20
Denn es ist ziemlich unwahrscheinlich, dass der timer irgendwann genau 20 sein wird.
 
So nun sieht mein script so aus


scn wandlerschwertschleudern
ref me
short doonce
float timer

begin scripteffectstart
if ( player.getisrace x == 1 ) && ( player.getitemcount y > 0 ) && ( doonce == 0 )
set me to getself
player.pushactoraway me 200
player.removeitem knochenelement 1
set doonce to 1

elseif ( doonce == 0 ) && ( player.getitemcount y == 0 )
set me to getself
player.addspell selbstschadenzauber
set timer to timer + getsecondspassed
player.pushactoraway me 150
set doonce to 1
endif

if ( timer >= 2 )
player.removespell feuerwandlerschwert
else
set timer to timer + 1
return
endif
end

begin scripteffectfinish
set doonce to 0
set timer to 0
end


funktioniert nur immer noch nicht
 
Also kann man in einem Skript einfach mit duration auch einen Timer ersetzen.

Wie müsste das dann aussehen, damit erst z.B. 15 Sekunden verstreichen müssen.

So ?
Code:
if ( duration >= 15 )

Und sind die Klammern eigentlich notwendig ?

Mfg Master of Worlds
 
Die Klammern dienen nur der Übersicht.
Da sind nur die Operatoren wichtig, die haben unterschiedliche Proritäten.
|| beispielsweise eine höhere als &&

Mit der Duration meinte ich das noch anders, obwohl man auch per Script eine Zeit einstellen kann. (Halt mit dem Timer)

Ich meinte das so:
Man kann, wenn man die Eigenschaft erstellt, eine Zeit einstellen, wenn man den Skript-Effekt hinzufügt.

Eigenschaften wirken entweder unendlich (dann müssen sie entfernt werden, Duration lässt man in dem Fall auf 0) oder solange, wie die Dauer eingestellt ist.
 
@ knochenkeule muss ich dich leider enttäuchen, eigenschaften selbst mit duration wollen danach net enden, habs eben ausprobiert. Duration 2, der balken is auch schön abgelaufen, dann war der Balken weg aber die eigenschaft noch da.


edit: so habs hinbekommen über mehrere umwege

und zwar wird jetzt nicht direkt der sebstschadenzauber hinzugefügt sondern eine eigenschaft die den selbstschadenzauber castet, der wiederum ist eine geringe macht und dauert 2 sekunden hat ein script drauf was am ende sowohl die eigenschaft als auch den zauber wieder entfernt
 
Zuletzt bearbeitet: