blob: c1041277c8fa166ac94537884c4c34ae4ca7f4a6 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001RegisterEvent()
2===============
3
4FUNKTION
5--------
6::
7
8 int RegisterEvent(string eid, string fun, object listener);
9
10DEFINIERT IN
11------------
12::
13
14 /p/daemon/eventd.c
15
16DEKLARIERT IN
17-------------
18::
19
20 /sys/events.h
21
22ARGUMENTE
23---------
24::
25
26 string eid,
27 Die ID des Events, fuer den man sich registrieren will. Da dieser
28 String fuer alle Events jeweils eindeutig sein muss, empfiehlt es sich,
29 fuer eigene Events z.B. als Praefix den eigenen Magiernamen zu nehmen,
30 z.B. "zesstra_vulkanausbruch".
31 ACHTUNG: IDs, die mit '_evt_lib_' beginnen, sind AUSSCHLIESSLICH der
32 Mudlib vorbehalten!
33 string fun,
34 Name der Funktion, die im Objekt listener bei Auftreten des Events
35 gerufen werden soll.
36 object listener,
37 Das Objekt, das als Lauscher fuer diesen Event registriert werden soll.
38
39BESCHREIBUNG
40------------
41::
42
43 Das Objekt 'listener' wird als Lauscher dieses Events registriert. Ab
44 diesem Moment wird immer dann, wenn ein Event mit der ID 'eid' ausgeloest
45 wird, in 'listener' die Funktion 'fun' aufgerufen (zeitverzoegert, meist
46 0-2s).
47
48
49
50 Die Funktion wird dabei immer mit 3 Argumenten aufgerufen:
51 listener->fun(eid, triggerob, data);
52 Hierbei ist 'eid' die jeweilige Event-ID und 'triggerob' ist das Objekt,
53 welches den Event ausloeste.
54 'data' kann jeder LPC-Datentyp sein und enthaelt die Daten, die das
55 triggernde Objekt an alle Listener uebermitteln will (damit sind Datentyp
56 und Inhalt komplett abhaengig vom Event!)
57
58 Existiert bisher noch kein Event mit der ID 'eid', wird implizit ein
59 neuer Event erstellt, der erstmal nur das sich gerade registrierende
60 Objekt als Lauscher hat.
61
62RUeCKGABEWERT
63-------------
64::
65
66 1 fuer Erfolg, <=0 fuer Misserfolg.
67 1 - Erfolg, 'listener' wurde eingetragen.
68 -1 - falsche Argumente wurden uebergeben
69 -2 - nicht-oeffentlicher Event und 'listener' wurde nicht fuer diesen
70 Event freigegeben (momentan gibt es noch keine nicht-oeffentlichen
71 Events)
72 -3 - 'fun' in 'listener' ist nicht vorhanden oder nicht von aussen
73 aufrufbar (protected, static, private).
74
75
76
77BEMERKUNGEN
78-----------
79::
80
81 Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
82 Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
83 Funktionsname).
84 Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
85 ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
86 Problemen auch jederzeit reduziert werden!
87 Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
88 Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
89 werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
90 unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
91 Clones!
92
93BEISPIELE
94---------
95::
96
97 1. Ein Objekt moechte ueber Spielertode informiert werden:
98 EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot",
99 this_object());
100 Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die
101 Funktion "spieler_ist_tot" aufgerufen.
102
103 2. Ein Objekt will informiert werden, wenn der Event
104 "boing_zwergenkoenig_angriff" ausgeloest wird:
105 EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
106 this_object());
107
108SIEHE AUCH
109----------
110::
111
112 events, eventd, UnregisterEvent(), TriggerEvent()
113
114
115Last modified: 15.08.2007, Zesstra
116