
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
