| Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 1 | RegisterEvent() |
| 2 | *************** |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 3 | |
| 4 | |
| Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 5 | FUNKTION |
| 6 | ======== |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 7 | |
| Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 8 | int RegisterEvent(string eid, string fun, object listener); |
| 9 | |
| 10 | |
| 11 | DEFINIERT IN |
| 12 | ============ |
| 13 | |
| 14 | /p/daemon/eventd.c |
| 15 | |
| 16 | |
| 17 | DEKLARIERT IN |
| 18 | ============= |
| 19 | |
| 20 | /sys/events.h |
| 21 | |
| 22 | |
| 23 | ARGUMENTE |
| 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 | |
| 40 | BESCHREIBUNG |
| 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 | |
| 63 | RUeCKGABEWERT |
| 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 | BEMERKUNGEN |
| 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 | |
| 92 | BEISPIELE |
| 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 User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 104 | this_object()); |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 105 | |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 106 | |
| Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 107 | SIEHE AUCH |
| 108 | ========== |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 109 | |
| Zesstra | 953f997 | 2017-02-18 15:37:36 +0100 | [diff] [blame] | 110 | events, eventd, UnregisterEvent(), TriggerEvent() |
| 111 | |
| MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame] | 112 | Last modified: 15.08.2007, Zesstra |