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
+