Dokumentation zu: cancel_event(S)

HR Image


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)


Start » Magierhandbuch » Docu » Sfun » Cancel_event Letzte Generierung: 01.05.2021, 16:59
Valid HTML 4.01!