
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
