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