PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Scripting: Wenn in der Nähe, dann... && Timer



bg2408
18.08.2007, 08:53
Aloa,

ich mal wieder mit zwei Fragen:

1. Ist es möglich, einer Kreatur ein Script zu geben, womit sie jedem beeinflußt, der z.B. näher als 25 Meter kommt?
2. Wie genau baue ich einen Timer ein, sodaß z.B. im Rahmen eines Script Effects nach 15 Sekunden etwas bestimmtes passiert?

Rung
18.08.2007, 09:01
1. Das ist durchaus möglich. Die Funktion dazu heißt GetDistance (http://cs.elderscrolls.com/constwiki/index.php/GetDistance), allerdings solltest Du die Abfragen dazu etwas eingrenzen, damit nicht in jedem Frame abgefragt wird, wie nahe der Spieler ist. Das könnte sonst auf die Performance gehen.

2. Bei einem ScriptEffect kannst Du ausnutzen, dass der Block ScriptEffectFinish am Ende des Zaubers liegt. Das heißt Du gibst einem Zauber die Wirkungsdauer 15 Sekunden, dann läuft der Block ScriptEffectFinish erst nach 15 Sekunden und auch nur einmal.
Ansonsten heißt die Funktion, die Du suchst, GetSecondsPassed (http://cs.elderscrolls.com/constwiki/index.php/GetSecondsPassed).

bg2408
18.08.2007, 09:06
1. Das ist durchaus möglich. Die Funktion dazu heißt GetDistance (http://cs.elderscrolls.com/constwiki/index.php/GetDistance), allerdings solltest Du die Abfragen dazu etwas eingrenzen, damit nicht in jedem Frame abgefragt wird, wie nahe der Spieler ist. Das könnte sonst auf die Performance gehen.Wie genau kann ich das eingrenzen? Sorry für die dumme Frage, aber diesbezüglich bin ich etwas überfragt :\.


2. Bei einem ScriptEffect kannst Du ausnutzen, dass der Block ScriptEffectFinish am Ende des Zaubers liegt. Das heißt Du gibst einem Zauber die Wirkungsdauer 15 Sekunden, dann läuft der Block ScriptEffectFinish erst nach 15 Sekunden und auch nur einmal.Das geht so leider nicht. Grund: Der Script Effect dauert 60 Sekunden - aber nach 15 Sekunden soll sich für den Spieler etwas ändern.

Ansonsten heißt die Funktion, die Du suchst, GetSecondsPassed (http://cs.elderscrolls.com/constwiki/index.php/GetSecondsPassed).Danke!

Rung
18.08.2007, 09:24
1. Hm, wie genau man das eingrenzt, kommt darauf an, was Du damit machen willst. :) Aber verkehrt sollte diese Zeile am Anfang Deines Scripts nicht sein:
if ( GetDistance Player > 2500 )
return
else
;Code
endif

2. Ich weiß nicht, wie GetSecondsPassed innerhalb eines ScriptEffects reagiert. Ich würde hier auf den ScriptEffectUpdate-Block zurückgreifen. Du müsstest allerdings testen, ob dieser Block wirklich jede Sekunde durchläuft. :\

Scriptname MeinMagieEffektScript

short Start
short done

Begin ScriptEffectStart

set Start to 0

End

Begin ScriptEffectUpdate

if ( Start == 15 )
if ( done == 0 )
set done to 1
;Code
endif
elseif ( Start < 15 )
set Start to ( Start + 1 )
endif

End

Begin ScriptEffectFinish

End

Brausebart
18.08.2007, 11:14
Ich weiß nicht, wie GetSecondsPassed innerhalb eines ScriptEffects reagiert.

Soweit ich sagen kann, genauso wie in einem GameMode-Block. Es gibt auch noch dieses ScriptEffectElapsedSeconds (http://cs.elderscrolls.com/constwiki/index.php/ScriptEffectElapsedSeconds), was ich aber noch nie benutzt habe, da Timer mit GetSecondsPassed in einem Skripteffekt ebenso gut zu realisieren sind.


Du müsstest allerdings testen, ob dieser Block wirklich jede Sekunde durchläuft.

Der Update-Block wird in jedem Frame einmal ausgeführt. Das Skriptbeispiel würde demnach nach 15 Frames den Effekt auslösen, nicht nach 15 sek. Ich würde folgenden Code vorschlagen:


scn MeinMagieEffektScript

short Done
float Timer

begin ScriptEffectStart

set Timer to 15

end

begin ScriptEffectUpdate

if Done == 0
set Timer to Timer - GetSecondsPassed
if Timer < 0
set Done to 1

; Code

endif
endif

end

Rung
18.08.2007, 11:50
Danke Brausebart.
Wenn der Update-Block einmal jeden Frame durchläuft, funktioniert mein Script natürlich nicht. Und dass GetSecondsPassed in ScriptEffekten ebenso arbeitet, ist eine wertvolle Information. :)

bg2408
18.08.2007, 13:33
Super, danke, hat alles funktioniert!

Huzzah, und wieder ein neuer Zauberspruch für mein Magieplugin. Jetzt nur noch ein paar für Alteration und ein Meteoritenhagel (oder so) für Destruction und ich bin glücklich ^^.