Continue() per Callout rufen
Wenn der Transporter per Init-Callback neugestartet wird, setzt er seine
Route fort und bewegt sich damit u.U. direkt in den Raum des ausloesenden
Spielers, und der Spieler wird unmittelbar danach in den Transporter bewegt.
Das init() des Hafenraumes laeuft erst im Anschluss daran weiter, so dass
Raumkommandos im Spieler registriert werden, dieser aber schon nicht mehr im
Raum ist. Das loest den Fehler 'add_action from object xy that was not
present to <player>' aus. Daher wird Continue() per Callout gerufen, damit
das init() des Hafens vollstaendig durchlaufen kann, bevor der Transporter
den Spieler rausbewegt.
Change-Id: I54d76fe416a0e118316d701ac707c5dd0792318e
diff --git a/std/transport.c b/std/transport.c
index 125bea5..0888283 100644
--- a/std/transport.c
+++ b/std/transport.c
@@ -571,7 +571,9 @@
meet_last_player = time();
// Wenn jemand in uns ist, auch falls noetig die Route fortsetzen,
// denn wir haben natuerlich nicht H_HOOK_INIT in uns selbst abonniert.
- if(environment(PL)==ME)
+ // Aber auch nur, wenn nicht jemand schon nen zeitverzögertes
+ // Continue per Hook getriggert hat.
+ if(environment(PL)==ME && find_call_out(#'Continue)==-1)
Continue();
}
}
@@ -579,9 +581,9 @@
// we try to continue our route once some living triggers init.
private mixed InitHookCallback(object source, int hookid, mixed hookdata)
{
- if (hookid == H_HOOK_INIT && previous_object() == source)
- Continue();
-
+ if (hookid == H_HOOK_INIT && previous_object() == source &&
+ find_call_out(#'Continue)==-1)
+ call_out(#'Continue, 0);
return ({H_NO_MOD, hookdata});
}