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

