@darknightwalker:
Einfach eine kleine Variable einbauen ala doonce.
Code:
ScriptName Objekctweg
short doonce
Begin GameMode
if (Global == 1 && doonce == 0)
PositionCell 76345, 100.56, 215, 176, DummyCell
Olddoor.disable
set doonce to 1
endif
End
@robinh:
Also, den von dir bereits genannten timer brauchst du.
Wie man das nun jedoch genau baut, hängt etwas davon ab, was du für Gegenstände benutzt.
Ich kann dir mal grob schreiben, wie der timer eingebaut wird.
Also, erst mal, der timer kann nur im GameMode den Wert ändern, sprich runterzählen, raufzählen, wie man es gerade will.
Hier von der Struktur ein kleines Beispielscript:
Code:
scn xyz
short step
[COLOR="Blue"]float timer[/COLOR]
begin OnActivate
if (step == 0)
Message "Der Timer startet."
[COLOR="Blue"]set timer to 10[/COLOR]
set step to 1
endif
end
begin GameMode
if (step == 1 && [COLOR="Blue"]timer > 0[/COLOR])
[COLOR="Blue"]set timer to timer - GetSecondsPassed[/COLOR]
elseif (step == 1 && [COLOR="Blue"]timer > 4 && timer < 6[/COLOR])
Message "Der Timer hat die Hälfte erreicht."
elseif (step == 1 && [COLOR="Blue"]timer <= 0[/COLOR])
Message "Der Timer ist abgelaufen."
player.AddItem gold001 100
set step to 2
endif
end
Das farblich markierte ist für den Ablauf wichtig.
Erst einmal braucht der timer einen Wert, deswegen "set timer to 10".
Des weiteren soll der timer in diesem Script runterlaufen, sofern der Wert der Variable timer größer als 0 ist, deswegen "set timer to timer -
GetSecondsPassed".
Wie dir oben auffallen könnte, ist timer nicht einfach als short deklariert, sondern als float. Das liegt daran, dass wir mit GetSecondsPassed arbeiten, diese Funktion arbeitet mit float-Werten.
Des Weiteren läuft der timer, deswegen ist es nicht so gut, einen direkten Wert über timer == X abzufragen, sondern mit Bereichseinschränkung zu arbeiten, sprich <, >, <=, >=.
Was bei dir jetzt ein kleines Problem sein könnte, ist, dass ein GameMode-Block auf Items, die im Inventar sind, nicht läuft, sondern nur auf Activators und Quests.
Du müsstest also mit einem kleinen Umweg über eine Quest arbeiten. Dazu kannst du beispielsweise eine Quest starten lassen, wenn man den Gegenstand das erst mal ausrüstet/im Inventar anklickt.
In dem Quest-Script sieht das dann etwa so aus:
Code:
scn ...
short step
float timer
begin GameMode
if (step == 0)
set timer to 10
set step to 1
elseif (step == 1 && timer > 0)
set timer to timer - GetSecondsPassed
elseif (step == 1 && timer > 4 && timer < 6)
Message "Der Timer hat die Hälfte erreicht."
elseif (step == 1 && timer <= 0)
Message "Der Timer ist abgelaufen."
player.AddItem gold001 100
set step to 2
endif
end
Mit dieser Variante brauchst du dementsprechen zwei Scripts.