| 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 |