"IsTimer" unter "leave"? Ich hab doch noch extra geschrieben, dass IsTimerExpired in eine der verfügbaren rep_exes muss.
Das Prinzip ist folgendermaßen: SetTimer(1,1000) startet einen internem Timer. 1000 frames sind per Grundeinstellung 25 Sekunden (1 Sek. = 40 Frames).
Dieser Timer läuft nun im Hintergrund runter.
Wird jetzt IsTimerExpired(1) aufgerufen, solange er noch läuft, wird "false" zurückgeliefert. Sobald der Timer abgelaufen ist, liefert IsTimerExpired(1)
genau einmal "true" zurück, danach wieder false.
Wenn das Wasser erst auslaufen soll, nachdem man den Raum verlassen hat, setzt man SetTimer(1, GetGameSpeed()*60*3); in leave_room.
(Das sind übrgens drei Minuten. Man kann auch den Raum jederzeit wieder betreten. Falls es nur in Abwesenheit auslaufen soll, deaktiviert man den Timer einfach beim Betreten wieder: SetTimer(1, 0);
Hat übrigens bisschen was von alten Sierra-Spielen, dieses Rätsel. Und das ist kein Kompliment
)
Dann fügt man Folgendes in repeatedly_execute in Global.asc ein:
[ags] if (IsTimerexpired(1)) {
CallRoomScript(1);
wasser_ausgelaufen = true;
}[/ags]
wasser_ausgelaufen ist eine globale bool-Variable, mit der ich in "before fadein" der betroffenen Räume beispielsweise Wasserflecken einschalten kann.
CallRoomScript(1) bewirkt, dass AGS in meinem Raumskript "on_call(1);" aufruft, d.h. ich setze z.B. Folgendes ins Raumskript des Flurs vor dem Bad:
[ags]void on_call(int p) {
if (p == 1) { // wasser läuft aus
oWasserLache.Visible = true;
Wait(5);
player.Say("Hier ist gerade Wasser ausgelaufen.");
}[/ags]