blob: c7157aeec9e627976e9d1749ff9b112801563713 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001RegisterEvent()
2***************
MG Mud User88f12472016-06-24 23:31:02 +02003
4
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 int RegisterEvent(string eid, string fun, object listener);
9
10
11DEFINIERT IN
12============
13
14 /p/daemon/eventd.c
15
16
17DEKLARIERT IN
18=============
19
20 /sys/events.h
21
22
23ARGUMENTE
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
39
40BESCHREIBUNG
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
62
63RUeCKGABEWERT
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
76BEMERKUNGEN
77===========
78
79 Wenn 'listener' bereits fuer den Event registriert wird, wird die alte
80 Registrierung ueberschrieben (als ggf. gilt dann der jetzt uebergebene
81 Funktionsname).
82 Die Funktion 'fun' sollte sparsam mit den Eval-Ticks umgehen. Momentan
83 ist die max. Menge an Ticks auf 30000 beschraenkt. Dies kann bei
84 Problemen auch jederzeit reduziert werden!
85 Der EVENTD merkt sich Event-Lauscher nicht ueber Reboots hinaus.
86 Sollte sich eine Blueprint anmelden, sich zerstoeren und neugeladen
87 werden, ist die neue Blueprint noch angemeldet, weil das neue Objekt
88 unter dem alten Namen wiedergefunden wird. Dies gilt _nicht_ fuer
89 Clones!
90
91
92BEISPIELE
93=========
94
95 1. Ein Objekt moechte ueber Spielertode informiert werden:
96 EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot",
97 this_object());
98 Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die
99 Funktion "spieler_ist_tot" aufgerufen.
100
101 2. Ein Objekt will informiert werden, wenn der Event
102 "boing_zwergenkoenig_angriff" ausgeloest wird:
103 EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
MG Mud User88f12472016-06-24 23:31:02 +0200104 this_object());
MG Mud User88f12472016-06-24 23:31:02 +0200105
MG Mud User88f12472016-06-24 23:31:02 +0200106
Zesstra953f9972017-02-18 15:37:36 +0100107SIEHE AUCH
108==========
MG Mud User88f12472016-06-24 23:31:02 +0200109
Zesstra953f9972017-02-18 15:37:36 +0100110 events, eventd, UnregisterEvent(), TriggerEvent()
111
MG Mud User88f12472016-06-24 23:31:02 +0200112Last modified: 15.08.2007, Zesstra