RegisterEvent()
===============

FUNKTION
--------
::

     int RegisterEvent(string eid, string fun, object listener);

DEFINIERT IN
------------
::

     /p/daemon/eventd.c

DEKLARIERT IN
-------------
::

     /sys/events.h

ARGUMENTE
---------
::

     string eid,
       Die ID des Events, fuer den man sich registrieren will. Da dieser
       String fuer alle Events jeweils eindeutig sein muss, empfiehlt es sich,
       fuer eigene Events z.B. als Praefix den eigenen Magiernamen zu nehmen,
       z.B. "zesstra_vulkanausbruch".
       ACHTUNG: IDs, die mit '_evt_lib_' beginnen, sind AUSSCHLIESSLICH der
       Mudlib vorbehalten!
     string fun,
       Name der Funktion, die im Objekt listener bei Auftreten des Events
       gerufen werden soll.
     object listener,
       Das Objekt, das als Lauscher fuer diesen Event registriert werden soll.

BESCHREIBUNG
------------
::

     Das Objekt 'listener' wird als Lauscher dieses Events registriert. Ab
     diesem Moment wird immer dann, wenn ein Event mit der ID 'eid' ausgeloest
     wird, in 'listener' die Funktion 'fun' aufgerufen (zeitverzoegert, meist
     0-2s).

     

     Die Funktion wird dabei immer mit 3 Argumenten aufgerufen:
     listener->fun(eid, triggerob, data);
     Hierbei ist 'eid' die jeweilige Event-ID und 'triggerob' ist das Objekt,
     welches den Event ausloeste. 
     'data' kann jeder LPC-Datentyp sein und enthaelt die Daten, die das
     triggernde Objekt an alle Listener uebermitteln will (damit sind Datentyp
     und Inhalt komplett abhaengig vom Event!)

     Existiert bisher noch kein Event mit der ID 'eid', wird implizit ein
     neuer Event erstellt, der erstmal nur das sich gerade registrierende
     Objekt als Lauscher hat.

RUeCKGABEWERT
-------------
::

     1 fuer Erfolg, <=0 fuer Misserfolg.
     1   - Erfolg, 'listener' wurde eingetragen.
     -1  - falsche Argumente wurden uebergeben
     -2  - nicht-oeffentlicher Event und 'listener' wurde nicht fuer diesen
           Event freigegeben (momentan gibt es noch keine nicht-oeffentlichen
           Events)
     -3  - 'fun' in 'listener' ist nicht vorhanden oder nicht von aussen 
           aufrufbar (protected, static, private).

     

BEMERKUNGEN
-----------
::

     Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
     Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
     Funktionsname).
     Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
     ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
     Problemen auch jederzeit reduziert werden!
     Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
     Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
     werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
     unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
     Clones!

BEISPIELE
---------
::

     1. Ein Objekt moechte ueber Spielertode informiert werden:
          EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot", 
                                this_object());
        Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die 
        Funktion "spieler_ist_tot" aufgerufen.

     2. Ein Objekt will informiert werden, wenn der Event
        "boing_zwergenkoenig_angriff" ausgeloest wird:
           EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
                                  this_object());

SIEHE AUCH
----------
::

     events, eventd, UnregisterEvent(), TriggerEvent()


Last modified: 15.08.2007, Zesstra

