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
