
die()
*****


FUNKTION
========

   public varargs void die(int poisondeath,int extern);


DEFINIERT IN
============

   /std/living/life.c


ARGUMENTE
=========

   poisondeath
      Dieses Flag sollte bei einem Gifttod (P_POISON) gesetzt sein.

   extern
      Ex- oder interner Aufruf.


BESCHREIBUNG
============

   Das Lebewesen stirbt, meist automatisch von do_damage() ausgeloest,
   wenn 0 HP unterschritten werden. In diesem Fall wird der Kampf
   beendet, Gift, Alkohol, Trink- und Esswerte, Blindheit, Taubheit
   u.s.w. auf Null gesetzt oder geloescht.

   Es wird automatisch eine Leiche (siehe auch P_CORPSE, P_NOCORPSE)
   nebst Todesmeldungen (siehe auch P_DIE_MSG) erzeugt, und fuer
   Spieler werden Killstupse vergeben, sofern notwendig.

   Ueber den Hook H_HOOK_DIE kann man jedoch auf den Automatismus
   Einfluss nehmen, z.B. koennte ein temporaerer Todesbann-Zauber das
   Sterben fuer kurze Zeit verhindern.


RUeCKGABEWERT
=============

   keiner


BEMERKUNGEN
===========

   Diese Funktion sollte nur selten direkt verwendet werden. Meist ist
   der uebliche Weg ueber Defend() -> do_damage() -> die() die logisch
   bessere und balancetechnisch guenstigere Loesung.

   Diese Funktion sollte nur ueberschrieben werden,  wenn tatsaechlich
   einfluss auf das Sterben genommen werden soll. Wird nur ein Item
   hinzugefuegt, ist es sinnvoller second_life() zu verwenden.

   Wird die() ueberschrieben, sollte man nicht nur das Argument extern
   uebergeben, sondern mit extern_call() verodern (siehe Beispiel),
   weil das geerbte die() den externen Aufruf nicht mehr erkennen
   kann.


BEISPIEL
========

   public varargs void die(int poisondeath, int extern)
   {
     // Dieser NPC soll nicht an Gift sterben.
     if(poisondeath) return;

     // Das geerbte die() aufrufen, dabei die Argumente uebergeben und ggf.
     // extern setzen.
     ::die(poisondeath, extern||extern_call());
   }


SIEHE AUCH
==========

   Defend(), do_damage(), second_life(), P_POISON, P_DEADS,
   P_KILL_NAME, P_KILL_MSG, P_MURDER_MSG, P_DIE_MSG, P_ZAP_MSG,
   P_ENEMY_DEATH_SEQUENCE, P_CORPSE, P_NOCORPSE, extern_call,
   /std/corpse, /std/hooks

Letzte Aenderung: 17.03.2019, Bugfix
