Dokumentation zu: send_event(S)

HR Image


FUNKTION
        varargs mapping send_event(string type, mapping data, mixed dest,
                                 int mode)

ARGUMENTE
        type  - der Event-Typ als String (event_types(WL))
        data  - die Event-Daten als Mapping (event_types(WL))
        dest  - Objekt oder Array aus Objekten oder String oder Array aus
                Strings oder Array gemischt aus Strings und Objekten, an
                die der Event gesendet werden soll. Strings stellen in
                dem Falle die Pfadnamen der Zielobjekte dar und werden
                vorm Senden automatisch gesucht oder geladen mittels 
                load_object(). Globale Lauscher oder Default-Handler 
                muessen nicht angegeben werden. (automatisch)
                Alle Objekte im deep_inventory() von dest erhalten den
                Event, wenn sie ihm lauschen.
        mode  - Ein Sende-Modus. Wird kein Modus angegeben, wird EM_SIMPLE
                benutzt. In /sys/events.h sind definiert:
                EM_SIMPLE      - Standard Modus - maximale Performance
                EM_COPY        - einfache Kopie des Daten-Mappings
                EM_DEEP_COPY   - echte Kopie des Daten-Mappings
                EM_NO_MODIFY   - macht genau das gleiche wie EM_DEEP_COPY. Ein
                                 Modifizieren der Event-Daten ist dadurch un-
                                 moeglich.
                EM_NO_CANCEL   - der Event kann durch niemanden abgebrochen
                                 werden. cancel_event() returnt 0.
                EM_FAKE        - Simuliert den Event nur intern im Daemon
                                 interessant i.V.m. EM_DEBUG, um alle Lauscher
                                 auf einen Event zu finden
                Einer der vorhergehenden Modi kann kombiniert werden mit:
                EM_COMPLEX     - Mehr Daten in E_RECEIVERS
                EM_DEBUG       - maximale Infos in E_DEBUG_INFO
                EM_STOP_CANCEL - 'spekulative Ausfuehrung', siehe hierzu
                                 auch event_senders(WL)

RÜCKGABEWERT
        mapping - Das Daten-Mapping NACH abgearbeitetem Event mit ggf. ver-
                  aenderten Daten. Zum debuggen interessant, oder um zu er-
                  fahren, ob alles so geklappt hat, wie gewuenscht.
        0       - schwerer Argumentfehler

BESCHREIBUNG
        Kernfunktion zum Event-Senden. Es wird ein Event 'type' mit den
        Event-Daten 'data' erzeugt. Alle Objekte im deep_inventory() von
        'dest' und natuerlich die 'dest' selbst koennen den Event empfangen,
        wenn sie ihm lauschen. Wie der Event gesendet wird, haengt mass-
        geblich von 'mode' ab. Gewoehnlich wird EM_SIMPLE verwendet. Dann
        erhalten die Lauscher das Daten-Mapping als volle Referenz und
        koennen so die Daten relativ einfach veraendern. Fuer mehr sicher-
        heitsbeduerftige Events wird eher EM_COPY oder EM_DEEP_COPY in Frage
        kommen. EM_FAKE oder in Kombination mit EM_COMPLEX und EM_DEBUG sind
        zum Debuggen und Event-Entwicklung nuetzlich. Welche Daten versandt
        werden ist bei jedem Event unterschiedlich.

        Um alle Lauscher eines Events zu finden, ohne den Event wirklich
        auszufuehren, empfiehlt sich: modus=(EM_FAKE|EM_DEBUG). Dann steht
        im Daten-Mapping in E_DEBUG_INFO eine Alist mit folgendes Werten:
        ({ Prios, Closures, Kosten }) (Kosten ist bei EM_FAKE nat. immer 0);

BEACHTE
        Events koennen zu Rekursionen fuehren. Es kann also passieren, dass
        2 sich gegenseitig ausloesende Events eine Endlosschleife bilden.
        Daran sollte man beim Versenden denken...

BEISPIEL
        Will man in einem Raum einen GO-Event senden, wenn der Spieler
        'keller' eingibt, sieht das wie folgt aus:

        mapping result;
        string zielraum; // Der Zielraum als String

        result = send_event(ET_GO,
                   ([ E_MOVE_OBJ  : this_player(),
                      E_MOVE_DEST : zielraum,
                      E_MOVE_MSGS : 
                        ({"Du steigst in den Keller.",
                          "&Name steigt in den Keller.",
                          "&Name kommt herab."})
                    ]), ({ this_object(), zielraum }) );

        Danach wird der Event wie ein normaler GO-Event behandelt, wie ihn
        die MUDlib selbst auch ausloest. result[E_HANDLED] ist auf ME_OK
        oder ME_SILENT gesetzt, wenn alles geklappt hat.

SIEHE AUCH
        listen_event(S), unlisten_event(S), set_global_listener(S),
        cancel_event(S), handle_event(S), events(WL), event_senders(WL),
        event_prioritaeten(WL), event_types(WL)


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