Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/events/EVT_GUILD_ADVANCE b/doc/events/EVT_GUILD_ADVANCE
new file mode 100644
index 0000000..f421f43
--- /dev/null
+++ b/doc/events/EVT_GUILD_ADVANCE
@@ -0,0 +1,36 @@
+EVENT:
+ EVT_GUILD_ADVANCE
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/gilden_ob.c
+
+BESCHREIBUNG:
+ Dieser Event wird immer ausgeloest, wenn sich der Gildenlevel eines
+ Spielers erhoeht oder auch, wenn nur der Gildenlevel eines Spielers von
+ einer Gilde geaendert wird (weil sie keine Gildenlevel kennt).
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Spielerobjekt
+ E_PLNAME: (string) UID/Spielername
+ E_ENVIRONMENT: (object) Environment des Spielers
+ E_GUILDNAME: (string) Gildenname
+ P_GUILD_LEVEL (string) s. Property, neuer Gildenlevel
+ P_GUILD_TITLE: (string) s. Property, neuer Gildentitel
+ P_SUBGUILD_TITLE: (string) s. Property, neuer Subguild-Title
+ ])
+
+BEMERKUNGEN:
+ Wenn Gilden keine Gildenlevel kenne, sondern andere Formen des Gildenstatus
+ vergeben und der Gildentitel allein nicht ausreicht, muss hier ueber eine
+ Ergaenzung der Daten nachgedacht werden.
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_GUILD_CHANGE b/doc/events/EVT_GUILD_CHANGE
new file mode 100644
index 0000000..4acb906
--- /dev/null
+++ b/doc/events/EVT_GUILD_CHANGE
@@ -0,0 +1,31 @@
+EVENT:
+ EVT_GUILD_CHANGE
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /secure/gildenmaster.c
+
+BESCHREIBUNG:
+ Dieser Event wird immer ausgeloest, wenn ein Spieler eine Gilde wechselt.
+ Da Spieler bei einem Gildenaustritt in ihrer Standardgilde landen, ist
+ jeder Aus- und Eintritt letztendlich ein Wechsel.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Spielerobjekt, was die Gilde wechselte,
+ E_PLNAME: (string) UID/Playername des Spielers,
+ E_ENVIRONMENT: (object) Environment des Spielers,
+ E_GUILDNAME: (string) neue Gilde,
+ E_LAST_GUILDNAME: (string) alte Gilde,
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_ADVANCE b/doc/events/EVT_LIB_ADVANCE
new file mode 100644
index 0000000..9dd8fd1
--- /dev/null
+++ b/doc/events/EVT_LIB_ADVANCE
@@ -0,0 +1,30 @@
+EVENT:
+ EVT_LIB_ADVANCE
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/gilde.c
+
+BESCHREIBUNG:
+ Dieses Event wird ausgeloest, wenn sich der Spielerlevel eines Spielers
+ aendert. (Momentan erhoeht er sich nur.)
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Spielerobjekt
+ E_PLNAME: (string) UID/Spielername
+ E_ENVIRONMENT: (object) Environment des Spielers
+ E_GUILDNAME: (string) Name der Gilde des Spielers
+ P_LEVEL: (int) s. Prop, neuer Spielerlevel
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_CLOCK b/doc/events/EVT_LIB_CLOCK
new file mode 100644
index 0000000..22ff451
--- /dev/null
+++ b/doc/events/EVT_LIB_CLOCK
@@ -0,0 +1,32 @@
+EVENT:
+ EVT_LIB_CLOCK
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /obj/uhr.c
+
+BESCHREIBUNG:
+ Alle Viertelstunde wird dieser Event gerufen. Wenn man Ereignisse jeweils
+ zur vollen Stunde, xx:15, xx:30 und xx:45 durchfuehren will, bietet es sich
+ an, diesem Event zu lauschen.
+
+EVENT-DATEN:
+ Die Daten sind ein Mapping mit den Arrayindizes von localtime() als Keys
+ und den dazu gehoerigen Daten als Values.
+
+BEMERKUNGEN:
+ Will man ermitteln, in welcher Viertelstunde man sich gerade befindet,
+ bietet sich ((minuten/15) % 4) an. Das ergibt immer eine Zahl zwischen 0
+ und 3. 0-> volle Stunde, 1-> viertel nach, 2-> halb, 3-> viertel vor voll.
+ Hierbei wird nach Benachrichtigen der Objekt um ueblicherweise 0-2s
+ verzoegert, wenn es als wirklich exakt sein muss, laesst sich dieser Event
+ dann doch nicht verwenden.
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+28.11.2012, Zesstra
+
diff --git a/doc/events/EVT_LIB_DATECHANGE b/doc/events/EVT_LIB_DATECHANGE
new file mode 100644
index 0000000..3638b49
--- /dev/null
+++ b/doc/events/EVT_LIB_DATECHANGE
@@ -0,0 +1,24 @@
+EVENT:
+ EVT_LIB_DATECHANGE
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /obj/uhr.c
+
+BESCHREIBUNG:
+ Dieser Event tritt auf, wenn sich das Datum aendert. Also immer um 00:00.
+
+EVENT-DATEN:
+ Die Daten sind ein Mapping mit den Arrayindizes von localtime() als Keys
+ und den dazu gehoerigen Daten als Values.
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+ EVT_LIB_CLOCK
+-----------------------------------------------------------------------------
+28.11.2012, Zesstra
+
diff --git a/doc/events/EVT_LIB_LOGIN b/doc/events/EVT_LIB_LOGIN
new file mode 100644
index 0000000..22cba32
--- /dev/null
+++ b/doc/events/EVT_LIB_LOGIN
@@ -0,0 +1,32 @@
+EVENT:
+ EVT_LIB_LOGIN
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/player/base.c
+
+BESCHREIBUNG:
+ Ein Spieler hat sich gerade eingeloggt.
+ Bitte beachten: Objekt im Inventar und im Environment eines Spieler sollten
+ weiterhin BecomesNetAlive() benutzen! Dieser Event ist nur fuer Objekte
+ gedacht, die das Einloggen mitkriegen wollen, aber nicht in der Naehe des
+ Spieler sind.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Objekt des eingeloggten Spielers,
+ E_PLNAME: (string) UID/Name des eingeloggten Spielers,
+ E_ENVIRONMENT: (object) Environment nach dem Einloggen,
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+ EVT_LIB_LOGOUT
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_LOGOUT b/doc/events/EVT_LIB_LOGOUT
new file mode 100644
index 0000000..b3b3afa
--- /dev/null
+++ b/doc/events/EVT_LIB_LOGOUT
@@ -0,0 +1,32 @@
+EVENT:
+ EVT_LIB_LOGOUT
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/player/base.c
+
+BESCHREIBUNG:
+ Ein Spieler hat sich gerade ausgeloggt.
+ Bitte beachten: Objekt im Inventar und im Environment eines Spieler sollten
+ weiterhin BecomesNetDead() benutzen! Dieser Event ist nur fuer Objekte
+ gedacht, die das Ausloggen mitkriegen wollen, aber nicht in der Naehe des
+ Spieler sind.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Objekt des ausgeloggten Spielers,
+ E_PLNAME: (string) UID/Name des ausgeloggten Spielers,
+ E_ENVIRONMENT: (object) letztes Environment vor dem Ausloggen,
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+ EVT_LIB_LOGIN
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_MINIQUEST_SOLVED b/doc/events/EVT_LIB_MINIQUEST_SOLVED
new file mode 100644
index 0000000..932f02d
--- /dev/null
+++ b/doc/events/EVT_LIB_MINIQUEST_SOLVED
@@ -0,0 +1,29 @@
+EVENT:
+ EVT_LIB_MINIQUEST_SOLVED
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /secure/questmaster.c
+
+BESCHREIBUNG:
+ Dieser Event wird vom Questmaster ausgeloest, wenn ein Spieler eine
+ Miniquest geloest hat.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Questgeber-Objekt,
+ E_OBNAME: (string) Objektname des Questgebers
+ E_PLNAME: (string) Spielername,
+ E_MINIQUESTNAME: (string) Titel der Miniquest
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+2014-Feb-03, Arathorn
+
diff --git a/doc/events/EVT_LIB_NEW_ERROR b/doc/events/EVT_LIB_NEW_ERROR
new file mode 100644
index 0000000..9c04648
--- /dev/null
+++ b/doc/events/EVT_LIB_NEW_ERROR
@@ -0,0 +1,31 @@
+EVENT:
+ EVT_LIB_NEW_ERROR
+
+DEFINIERT IN:
+ /sys/events.h
+ /secure/errord.h (Konstanten fuer Eventdaten sind dort definiert)
+
+GETRIGGERT VON:
+ /secure/errord.c
+
+BESCHREIBUNG:
+ Ein neuer Fehlereintrag wurde im ErrorD eingetragen. Hierbei muss es kein
+ echter Fehler sein, sondern kann auch eine Warnung oder eine Idee eines
+ Spielers sein (alle Fehlertypen T_* aus /secure/errord.h sind moeglich).
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ F_TYPE: (int) Typ des Fehlereintrags
+ F_HASHKEY: (string) ID des Fehlereintrages
+ F_UID: (string) UID des Objektes, in welchen der Fehler auftrat
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd,
+ fehlerteufel
+
+-----------------------------------------------------------------------------
+07.09.2011, Zesstra
+
diff --git a/doc/events/EVT_LIB_NPC_DEATH b/doc/events/EVT_LIB_NPC_DEATH
new file mode 100644
index 0000000..6b1fb00
--- /dev/null
+++ b/doc/events/EVT_LIB_NPC_DEATH
@@ -0,0 +1,69 @@
+EVENT:
+ EVT_LIB_NPC_DEATH(x)
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/living/life.c
+
+BESCHREIBUNG:
+ Dieser Event wird immer dann von einem NPC ausgeloest, wenn dieser gerade
+ getoetet wurde (um genau zu sein: im die()).
+ Dieser Event macht vermutlich die meisten Die-Hooks einfach unnoetig, da es
+ bei vielen nur darum geht, zu erfahren, ob der NPC tot ist, wer ihn
+ getoetet hat und ob derjenige genug Schaden gemacht hat. Dies laesst sich
+ aus den Daten dieses Event ebenfalls ermitteln, ohne den Aufwand eines
+ Hooks zu betreiben.
+
+ Bitte beachtet, dass in diesem Fall das ebenfalls gelieferte triggernde
+ Objekt (der NPC) bereits zerstoert ist, wenn ihr den Event empfangt,
+ 'trigob' also 0 ist! Ihr muesst also den Eintrag E_OBNAME im Datenmapping
+ des Events nutzen, um herauszufinden, welcher NPC getoetet wurde.
+
+PARAMETER:
+ Der an das Event-Define zu uebergebende Parameter "x" muss ein String
+ sein.
+ Uebergibt man den Leerstring "", registriert man sich fuer das globale
+ Event EVT_LIB_NPC_DEATH(""), ueber das der Tod saemtlicher NPCs
+ weitergemeldet wird.
+ Uebergibt man den load_name() des Zielobjekts als Parameter, so werden
+ nur die Tode von NPCs gemeldet, die sich von der Blueprint des
+ Zielobjekts ableiten, also auch aller Clones.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBNAME: (string) Objektname des getoeteten NPCs,
+ E_ENVIRONMENT: (object) Environment des Opfer beim Tod,
+ E_TIME: (int) Zeitstempel des Todes,
+ P_NAME: (string,string*) P_NAME,
+ P_KILLER: (object) der Killer, s. Property,
+ P_ENEMY_DAMAGE: (mapping) s. Manpage P_ENEMY_DAMAGE,
+ P_LAST_DAMAGE: (int) s. Property,
+ P_LAST_DAMTYPES: (string *) s. Property,
+ E_EXTERNAL_DEATH:(int) Flag, ob die() von aussen gerufen,
+ E_POISON_DEATH: (int) Flag, ob der Tod durch Gift ausgeloest,
+ E_CORPSE: (object) Leiche, sofern es eine gibt
+ P_XP: (int) P_XP,
+ P_ATTRIBUTES: (int*) P_ATTRIBUTES,
+ P_MAX_HP: (int) P_MAX_HP,
+ P_HANDS: (mixed) P_HANDS,
+ P_ALIGN: (int) P_ALIGN)
+ P_RACE: (string) P_RACE,
+ P_CLASS: (string*) P_CLASS,
+ ])
+
+BEMERKUNGEN:
+ Bei der Registrierung fuer die Todes-Events von einzelnen NPCs kann es
+ im Fall von VC-generierten NPCs zu unerwarteten Effekten kommen, da hier
+ load_name() fuer jedes Objekt den Namen des VC-Standardobjekts
+ zurueckliefert.
+ Die Registrierung fuer das Todes-Event eines einzelnen Clones ist nicht
+ moeglich.
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+21.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_PLAYER_ATTR_CHANGE b/doc/events/EVT_LIB_PLAYER_ATTR_CHANGE
new file mode 100644
index 0000000..8ad2fd4
--- /dev/null
+++ b/doc/events/EVT_LIB_PLAYER_ATTR_CHANGE
@@ -0,0 +1,24 @@
+EVENT:
+ EVT_LIB_PLAYER_ATTR_CHANGE
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/living/life.c
+
+BESCHREIBUNG:
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_PLAYER_CREATION b/doc/events/EVT_LIB_PLAYER_CREATION
new file mode 100644
index 0000000..abff825
--- /dev/null
+++ b/doc/events/EVT_LIB_PLAYER_CREATION
@@ -0,0 +1,31 @@
+EVENT:
+ EVT_LIB_PLAYER_CREATION
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/player/base.c
+
+BESCHREIBUNG:
+ Dieser Event wird vom Spielerobjekt ausgeloest, wenn sich ein Spieler
+ erstmalig ins MorgenGrauen eingeloggt hat.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_PLNAME: (string) UID/Name des erstellten Spielers,
+ E_OBJECT: (object) Objekt des Spielers,
+ ])
+
+BEMERKUNGEN:
+ Da zu diesem Zeitpunkt das Spielerobjekt noch nicht vollstaendig
+ konfiguriert ist, werden nur Objekt und Spielername in den Daten
+ uebermittelt.
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+ EVT_LIB_PLAYER_DELETION
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_PLAYER_DEATH b/doc/events/EVT_LIB_PLAYER_DEATH
new file mode 100644
index 0000000..45e5598
--- /dev/null
+++ b/doc/events/EVT_LIB_PLAYER_DEATH
@@ -0,0 +1,36 @@
+EVENT:
+ EVT_LIB_PLAYER_DEATH
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/living/life.c
+
+BESCHREIBUNG:
+ Dieser Event wird immer dann von einem Spielerobjekt ausgeloest, wenn
+ der Spieler gerade getoetet wurde (um genau zu sein: im die()).
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Objekt des getoeteten Spielers,
+ E_PLNAME: (string) UID/Playername des getoeteten Spielers,
+ E_ENVIRONMENT: (object) Environment des Opfer beim Tod,
+ E_TIME: (int) Zeitstempel des Todes,
+ P_LAST_KILLER: (object) Der Killer, s. Property
+ P_LAST_DAMAGE: (int) s. Property,
+ P_LAST_DAMTYPES: (string *) s. Property,
+ P_LAST_DEATH_PROPS: (mixed) s. Property
+ E_EXTERNAL_DEATH:(int) Flag, ob die() von aussen gerufen,
+ E_POISON_DEATH: (int) Flag, ob der Tod durch Gift ausgeloest,
+ E_CORPSE: (object) Leiche, sofern es eine gibt
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+21.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_PLAYER_DELETION b/doc/events/EVT_LIB_PLAYER_DELETION
new file mode 100644
index 0000000..7d63856
--- /dev/null
+++ b/doc/events/EVT_LIB_PLAYER_DELETION
@@ -0,0 +1,32 @@
+EVENT:
+ EVT_LIB_PLAYER_DELETION
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/player/base.c
+
+BESCHREIBUNG:
+ Dieser Event wird vom Spielerobjekt ausgeloest, wenn sich ein Spieler
+ mittels "selbstloeschung" loescht. Der Event wird umittelbar vor der
+ Zerstoerung des Spielerobjekts ausgeloest.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_PLNAME: (string) UID/Name des geloeschten Spielers,
+ E_ENVIRONMENT: (object) letztes Environment des Spielers,
+ E_GUILDNAME: (string) Name der letzten Gilde des Spielers,,
+ ])
+
+BEMERKUNGEN:
+ Wenn Spieler vom Loeschscript erfasst oder vom Sheriff oder einem EM
+ geloescht werden, wird dieser Event natuerlich nicht ausgeloest.
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+ EVT_LIB_PLAYER_CREATION
+
+-----------------------------------------------------------------------------
+16.08.2007, Zesstra
+
diff --git a/doc/events/EVT_LIB_QUEST_SOLVED b/doc/events/EVT_LIB_QUEST_SOLVED
new file mode 100644
index 0000000..6abbfc9
--- /dev/null
+++ b/doc/events/EVT_LIB_QUEST_SOLVED
@@ -0,0 +1,30 @@
+EVENT:
+ EVT_LIB_QUEST_SOLVED
+
+DEFINIERT IN:
+ /sys/events.h
+
+GETRIGGERT VON:
+ /std/player/quests.c
+
+BESCHREIBUNG:
+ Dieser Event wird vom Spielerobjekt ausgeloest, wenn der Spieler eine Quest
+ geloest hat.
+
+EVENT-DATEN:
+ Die Daten werden als Mapping uebergeben:
+ ([ E_OBJECT: (object) Spielerobjekt,
+ E_PLNAME: (string) Spielername,
+ E_ENVIRONMENT: (object) Environment des Spielers,
+ E_QUESTNAME: (string) Name der Quest,
+ E_QP_GRANTED: (int) vergebene Abenteuerpunkte,
+ ])
+
+BEMERKUNGEN:
+
+SIEHE AUCH:
+ events, RegisterEvent(), UnregisterEvent(), TriggerEvent(), eventd
+
+-----------------------------------------------------------------------------
+2014-Feb-03, Arathorn
+
diff --git a/doc/events/eventd b/doc/events/eventd
new file mode 100644
index 0000000..790e35f
--- /dev/null
+++ b/doc/events/eventd
@@ -0,0 +1,29 @@
+Event-Dispatcher: /p/daemon/eventd.c
+
+BENUTZUNG:
+ #include <events.h>
+ EVENTD->fun(bla);
+
+BESCHREIBUNG:
+ Der Event-Dispatcher merkt sich Event und Daten, die ihr ueber
+ TriggerEvent() an ihn meldet und informiert mit kurzer Zeitverzoegerung
+ alle fuer den jeweiligen Event-Typ angemeldeten Objekte.
+
+FUNKTIONEN:
+ - RegisterEvent(): anmelden fuer einen Event
+ - UnregisterEvent(): von einem Event abmelden
+ - TriggerEvent(): einen Event melden
+ - CheckEventID(): wieviele Lauscher gibt es fuer den Event?
+
+BEMERKUNGEN:
+ Wenn Bedarf fuer einen spezialisierten Event-Dispatcher besteht, der
+ Sonderfunktionen hat oder auch nicht-oeffentliche Events anbietet, besteht
+ die Moeglichkeit, den normalen eventd zu erben. Bitte sprecht in dem Fall
+ aber bitte vorher Zesstra an.
+
+SIEHE AUCH:
+ events,
+ RegisterEvent(), UnregisterEvent(), TriggerEvent(), CheckEventID()
+
+18.08.2007, Zesstra
+
diff --git a/doc/events/events b/doc/events/events
new file mode 100644
index 0000000..fa0dfa8
--- /dev/null
+++ b/doc/events/events
@@ -0,0 +1,120 @@
+Was sind Events?
+================
+Events im MorgenGrauen sind Ereignisse, die von beliebigen Objekten ausgeloest
+werden koennen. Es gibt eine Reihe von vordefinierten Ereignissen, die die
+Basis-Lib bereitstellt (s.u.). Zusaetzlich zu diesen koennen Magier beliebige
+weitere Events erstellen bzw. benutzen.
+
+Wenn ein Objekt dem zentralen Event-Dispatcher einen bestimmten Event meldet,
+merkt dieser sich dies und die Daten, die ihm vom ausloesenden Objekt
+uebergeben wurde. Mit kurzer Verzoegerung (0-2s) informiert der
+Event-Dispatcher dann alle Objekte, die sich fuer diesen Event interessieren,
+d.h. dafuer angemeldet sind. Hierzu ruft er eine bestimmte Funktion in den
+angemeldeten Objekten auf.
+Hierbei ist zu beachten, dass die informierten Objekte das Ereignis in keinem
+Fall mehr beeinflussen koennen, da es bereits abgeschlossen wurde. Es ist
+lediglich eine Information ueber das Ereignis. Wenn ein Objekt Einfluss nehmen
+will (z.B. auf einen Tod), ist dafuer ein Hook zu verwenden.
+
+
+Welche Events definiert die Mudlib?
+==================================
+Diese Events haben in /sys/events.h vordefinierte Event-IDs und werden von der
+Basis-Mudlib mit den entsprechenden Daten ausgeloest (s. jew. Event):
+- EVT_LIB_LOGIN: Login eines Spielers
+- EVT_LIB_LOGOUT: Logout eines Spielers
+- EVT_LIB_PLAYER_DEATH: Ein Spieler ist gestorben
+- EVT_LIB_PLAYER_DELETION: Ein Spieler hat sich geloescht
+- EVT_LIB_PLAYER_CREATION: Ein Spieler wurde neu angelegt.
+- EVT_LIB_NPC_DEATH(): Ein NPC ist gestorben (Parameter s. Event-Manpage)
+- EVT_LIB_ADVANCE: Ein Spieler hat seine Spielerstufe erhoeht
+- EVT_LIB_PLAYER_ATTR_CHANGE: Die Attribute eines Spielers wurden geaendert
+- EVT_LIB_CLOCK: Die volle Stunde ist erreicht
+- EVT_LIB_DATECHANGE: Ein neuer Tag ist angebrochen. ;-)
+- EVT_LIB_QUEST_SOLVED: Ein Spieler hat eine Quest geloest
+- EVT_LIB_MINIQUEST_SOLVED: Ein Spieler hat eine Miniquest geloest
+
+Gilden muessen definieren (ggf. via /std/gilden_ob.c):
+- EVT_GUILD_CHANGE: Spieler hat seine Gilde gewechselt.
+- EVT_GUILD_ADVANCE: Ein Spieler hat seine Gildenstufe erhoeht
+
+
+Namenskonvention fuer Event-IDs:
+===============================
+- Die IDs aller Standardevents beginnen mit "evt_lib_".
+ Dementsprechend sind alle Strings, die damit anfangen, fuer ALLE ausser
+ der Mudlib TABU! D.h.
+ - diese Events werden NIEMALS von Objekten ausserhalb der Basislib
+ ausgeloest!
+ - es duerfen keine Events registriert werden, die mit dieser Zeichenfolge
+ anfangen, ausser mit den symbolischen Namen in /sys/events.h
+- Gilden-Events beginnen mit "evt_guild_", sofern es ein Event ist, den jede
+ Gilde definiert (s. /sys/events.h).
+ Die Events einzelner Gilden sollten mit "evt_gildenname_" beginnen.
+- Die IDs einzelner Magier sollten am besten zwecks Eindeutigkeit mit
+ "magiername_" beginnen.
+
+
+Was ist als lauschendes Objekt zu beachten?
+==========================================
+Das lauschende Objekt muss zunaechst /sys/events.h inkludieren und sich
+mittels Aufrufs von RegisterEvent() als Lauscher registrieren.
+Weiterhin muss es eine Funktion oeffentlich definieren (Name beliebig), die
+der EVENTD aufrufen kann. Diese Funktion bekommt 3 Argumente uebergeben:
+Event-ID, event-ausloesendes Objekt und die Event-Daten:
+ public void listen_event(string eid, object trigob, mixed data);
+'data' ist ein Datentyp, der vom Eventtyp abhaengt. Oft handelt es sich
+um ein Mapping. Fuer eine genaue Beschreibung schaut bitte die in die Manpage
+des konkreten Events.
+
+Bitte beachten: Die Daten in 'data' im Falle eines Arrays/Mappings niemals
+aendern. Aus Effizienzgruenden wird 'data' nicht kopiert, bevor es an die
+einzelnen Objekte uebergeben wird. Wenn ihr also Muell reinschreibt, werden
+nach euch informierte Lauscher euren Schrott empfangen. Sollte hier
+'Missbrauch' auffallen, wird das entsprechend geahndet!
+
+Und zum Schluss: Bitte missbraucht die Events nicht und meldet euch (speziell
+fuer haeufige Events) nur an, wenn ihr mit den Informationen was sinnvolles
+macht (also z.B. nicht nur, um ein Log der getoeteten NPCs im Spiel zu
+erstellen. ;-)).
+
+
+Was ist als ausloesendes Objekt zu beachten?
+===========================================
+Eigentlich gar nicht viel. Ihr muesst lediglich /sys/events.h inkludieren und
+bei Auftreten des Events die Funktion TriggerEvent() im EVENTD aufrufen und
+ihr die Event-ID und die Event-Daten uebergeben.
+Bitte uebergebt als Event-Daten ggf. Kopien von Mappings/Arrays, da lauschende
+Objekte diese Daten veraendern koennen.
+
+
+Beispiele:
+========
+1. Ein Objekt moechte ueber Spielertode informiert werden:
+ EVENTD->RegisterEvent(EVT_LIB_PLAYER_DEATH, "spieler_ist_tot",
+ this_object());
+ Ab jetzt wird im Objekt jedes Mal, wenn ein Spieler stirbt, die Funktion
+ "spieler_ist_tot" aufgerufen.
+
+2. Ein Objekt moechte nicht mehr ueber Spielertode informiert werden:
+ EVENTD->UnregisterEvent(EVT_LIB_PLAYER_DEATH, this_object());
+
+3. Ein Objekt will informiert werden, wenn der Event
+ "boing_zwergenkoenig_angriff" ausgeloest wird:
+ EVENTD->RegisterEvent("boing_zwergenkoenig_angriff","alarm",
+ this_object());
+
+4. Der Zwergenkoenig (oder einer seiner Waechter) wird angegriffen:
+ EVENTD->TriggerEvent("boing_zwergenkoenig_angriff", daten);
+ Anschliessend wird jedes Objekt, das es wissen will (s. 3.) vom EVENTD
+ informiert und kriegt dabei 'daten' uebergeben. Dies kann ein beliebiger
+ Datentyp sein (z.b. ein Mapping). In diesem Fall enthaelt 'daten'
+ zweckmaessigerweise den Angreifer.
+
+
+Siehe auch:
+==========
+ eventd, TriggerEvent(), RegisterEvent(), UnregisterEvent()
+
+18.08.2007, Zesstra
+