Dokumentation zu: event_prioritaeten(WL)

HR Image


KONZEPT
        Event Prioritaeten

AUTOR
        Holger@Wunderland

BEDEUTUNG
        Wichtig fuer ein funktionierendes Event-System ist eine sinnvolle
        Verwendung der Prioritaeten der Lauscher. (Das heisst, je hoeher
        die Prioritaet eines Lauschers ist, desto eher wird er abgearbeitet.)
        Die Prioritaeten haben nichts mit Macht oder Staerke eines Objektes
        zu tun, sondern sollten mit der Realitaet korrespondieren! Es gibt
        grundsaetzlich 4 Arten von Lauschern fuer einen Event:

        1.)  Veraenderer
             Diese Lauscher modifizieren den Event. Zum Beispiel ein Bein-
             steller veraendert den Zielraum eines 'Move-Events' oder ein
             Chinesenhut vertauscht alle 'r' in einem 'Sag-Event' mit 'l'.
        2.)  Abbrecher
             Diese Lauscher brechen einen Event ganz ab. Zum Beispiel ein
             Sperrmonster in einem Raum bricht alle 'Move-Events' eines
             Lebewesens ab, die einen bestimmten Ausgang benutzen wollen.
        3a.) Handler
             Der oder die Handler fuehren die eigentliche Aktion des Events
             aus. In aller Regel sind dies MUDlib interne Objekte. Z.B. ein
             Move-Handler.
        3b.) C-Handler
             Wenn das Ereignis abgebrochen wurde wird natuerlich nicht der
             normale Handler aufgerufen, da hierdurch zB die Bewegnung
             stattfinden wuerde. Manchmal moechte man aber auch bei einem
             Abbruch eine Aktion starten (zB ein beinstellender Npc lacht),
             dies kann man mit einem C-Handler machen. Achtung, es wird immer
             nur das Objekt welches auch das Ereignis abbrach als C-Handler
             benutzt.
        4a.) Reagierer
             Ein Reagierer fuehrt seine Aktion aus, wenn der Event schon
             verarbeitet wurde. Zum Beispiel, wenn ein Lebewesen einen Raum
             betreten hat und der Reagierer sich daraufhin verneigen soll.
             Dazu gehoeren auch Funktionen, die einfach nur zur Benach-
             richtigung ueber den Event dienen, ohne fuer Spieler sichtbare
             Handlungen auszuloesen (notifier).
        4b.) C-Reagierer
             Diese Reagierer koennen wiederum auf abgebrochene Ereignisse
             reagieren, so zum Beispiel ein Npc der stoehnt, wenn der
             Schluessel eines Spielers im Tuerschloss abgebrochen ist.

        Es macht keinen Sinn, einem Reagierer eine positive Prioritaet zu
        geben, denn moeglicherweise will ein anderes Objekt den Event noch
        abbrechen. Um die Objekte der Magier untereinander zu koordinieren,
        muesse Listen angelegt werden, in denen vermerkt ist, welcher Objekt
        mit welcher Prioritaet einem Event lauscht.

STANDARD
        Die Standard-Prioriaeten sehen wie folgt aus. Innerhalb der Grenzen
        dieser Vorgaben sollte jedes Objekt eines bestimmten Typs liegen!

           999 <= Abbrecher/Veraenderer <=    200
           199 <=       Handler         <=      1 (0 == Default Handler)
                    Default Handler     ==      0
            -1 <=      Reagierer        <=   -999
                       C-Handler        == -10000 (immer nur das Abbrecher-Obj)
        -10001 <=     C-Reagierer       <= -10999

        Es gibt in /sys/events.h einige Defines, die bestimmte Prioritaeten
        vorschlagen und die als Ausgangspunkt fuer die eigne Prioritaet
        benutzt werden sollten.

        EPRIO_MODIFY       700  -  Prioritaet fuer Modifizierer
        EPRIO_CANCEL       400  -  Prioritaet fuer Abbrecher
        EPRIO_HANDLE       100  -  Prioritaet fuer einen Handler
        EPRIO_DEF_HANDLE     0  -  Prioritaet fuer System-Handler
        EPRIO_REACT      (-300) -  Prioritaet fuer Reagierer
        EPRIO_NOTIFY     (-999) -  Prioritaet fuer Benachrichtigungen
        EPRIO_C_HANDLE (-10000) -  Prioritaet fuer den Abbruch-Handler
        EPRIO_C_REACT  (-10300) -  Prioritaet fuer Abbruch-Reagierer

        Nuetzlichstes Hilfsmittel beim Finden einer 'vernuenftigen' Prio-
        ritaet ist eine Liste /doc/WL/events/prio_liste die immer auf
        aktuellem Stand gehalten werden sollte. Jeder Magier ab Level 30
        kann diese Liste ergaenzen. Fuer Regions/Erzmagier sollte es
        selbstverstaendlich sein.

BEACHTE
        Es ist wichtig, dass ein Lauscher auch wirklich nur das tut, was man
        von ihm 'erwartet'. Super-Mega-Magie-Schilde, die mit Prioritaet 999
        lauschen und alles abfangen, was nach Magie aussieht, sind schlicht
        ueberfluessig und unrealistisch. Es gilt hierfuer das gleiche wie
        fuer Waffen&Ruestungen (Augenmass!).

        Weiterhin ist es eminent wichtig, dass Modifizierer und Abbrecher
        wirklich nichts weiter tun als das Ereignis zu beeinflussen. Ins
        besondere sollen sie weder etwas Ausgeben noch Aktionen oder Events
        starten! Auch das setzen eines notify_fail()s ist nicht erwuenscht
        (Abbruchgruende koennen als Argument von cancel_event() uebergeben
        werden). Moechte man mehr als einen Text als Abbruchbegruendung oder
        Abbruchreaktion, so muss das abbrechende Objekt EPRIO_C_HANDLE
        lauschen und darf nur dort (!) die gewuenschten Dinge durchfuehren.

SIEHE AUCH
        events(WL), prio_liste(WL)


Start » Magierhandbuch » Docu » Konzepte » Event_prioritaeten Letzte Generierung: 16.04.2009, 21:44
Email an: mud@wl.mud.de
Valid HTML 4.01!