FUNKTION
varargs int cancel_event(mixed info)
ARGUMENTE
info - Beliebiger Wert (optional)
Empfohlen: Abbruchbegruendung als String
RÜCKGABEWERT
1 - wenn der Event erfolgreich abgebrochen wurde.
0 - wenn der Event nicht abgebrochen werden konnte. Passiert zum
Beispiel bei Events, die mit EM_NO_CANCEL gesendet wurden oder
wenn ein Objekt versucht einen Event abzubrechen, welches als
Reactor auf einen Event lauscht (Prio > 0).
BESCHREIBUNG
Bricht den aktuell laufenden Event ab. Moeglich ist dies natuerlich
nur, wenn gerade ein Event laeuft, cancel_event() also im gleichen
Backend-Cycle abgearbeitet wird, wie der Event. Es macht daher
nur Sinn, cancel_event() auszufuehren, wenn das Objekt als Lauscher
angemeldet ist, und gerade einen Event mitgeteilt bekommt.
'info' muss nicht gesetzt werden. Wird es gesetzt, wird es im Event-
Daten-Mapping in Key E_CANCELLED gespeichert. Das abbrechende Objekt
wird automatisch immer in Key E_CANCELLER des mappings gespeichert.
BEACHTE
? Viele Events (z.B. ET_GO) erwarten beim Abbruch einen bestimmten
? 'info'-Typ. Beim ET_GO zum Beispiel Integer. Also es ist dringend
? anzuraten, entweder gar kein 'info' anzugeben oder wenn schon, dann
? (int) 1.
cancel_event() 'markiert' den gerade laufenden Event als abge-
brochen. Das heisst, der Event ist noch im Event-Daemon vermerkt und
wird erst nach dem 'return' der call_back-Funktion tatsaechlich aus
der internen Event-Queue entfernt. Nachfolgende Objekte bekommen den
Event aber nicht mehr.
ES IST NICHT MOEGLICH, ALS REAGIERER (PRIORITAET > 0) EINEN EVENT
ABZUBRECHEN! Returnwert von cancel_event() checken!
BEISPIEL
Objekt (ein Steinhaufen in einem Raum) lauscht als Canceller auf
ET_GO und erwartet den Event in myfun():
listen_event(ET_GO, EPRIO_CANCEL, #'cancel_it);
listen_event(ET_GO, EPRIO_C_HANDLE, #'say_it);
listen_event(ET_COMM, EPRIO_CANCEL, #'psst);
void cancel_it(mapping data, string type, int prio) {
// Sicher ist sicher
if (type!=ET_GO || !mappingp(data)) return;
// Nur wenn der Spieler hier im Raum ist
if (!present(data[E_MOVE_OBJ], environment()) return;
// KEINE Ausgabe/Aktion
cancel_event();
}
void say_it(mapping data, string type, int prio) {
tell_object(data[E_MOVE_OBJ], "Dieser Weg ist verschuettet.\n");
}
Ein Go-Event im gleichen Raum wird durch den Steinhaufen abge-
brochen.
void psst(mapping data, string type, int prio) {
cancel_event("Pssst, Poljana schlaeft doch!\n");
}
SIEHE AUCH
listen_event(S), unlisten_event(S), set_global_listener(S),
send_event(S), handle_event(S), events(WL), event_senders(WL),
event_prioritaeten(WL), event_types(WL)
|