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