second_life()
*************


FUNKTION
========

   protected varargs int second_life(object corpse);


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

   /std/player/life.c


ARGUMENTE
=========

   corpse
      Leiche des Lebewesens (sofern es eine hat)


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

   Diese Funktion wird im die() des Lebewesens aufgerufen, wenn sicher
   ist, dass es stirbt. Die Funktion bestimmt dabei, ob ein Lebewesen
   nach dem Tod zerstoert (NPC) oder nur zum Geist wird (Spieler).

   Ueblicherweise ist diese Funktion nur im Spieler definiert und
   regelt EP-Verlust und dergleichen. Sie wird aber auch in NPCs
   gerufen und man kann dort z.B. Items clonen oder entsorgen.

   NPC *muessen* 0 zurueckgeben, Spieler geben immer 1 zurueck.


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

   0
      wenn das Objekt nach dem Tod zerstoert wird (NPC)

   1
      wenn das Objekt im Tod nicht zerstoert wird (Spieler)


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

   Das Inventar des Livings wurde bei Aufruf von second_live()
   normalerweise schon in die Leiche bewegt, sofern diese existiert.
   War das Inventar sehr gross, koennen allerdings noch vereinzelte
   Objekte im Living sein, die erst spaeter bewegt werden. Will man
   noch Gegenstaende hinzufuegen, muss man diese direkt in die Leiche
   bewegen, *nicht* in das gestorbene Lebewesen.


BEISPIEL
========

   protected varargs int second_life(object corpse)
   {
     // Wenn man sich wirklich sicher ist, dass das Lebewesen eine Leiche
     // hat (weil es der eigene NPC ist), ist es verfuehrerisch, die Pruefung
     // auf die Existenz der Leiche wegzulassen. Aber auch dann koennte es ja
     // passieren, dass diese vom Raum bereits zerstoert wurde.
     if (corpse)
         corpse->AddItem("tolle_trophaehe",REFRESH_NONE);
     return 0;
   }


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

   die()

Letzte Aenderung: 04.09.2019, Bugfix
