P_NETDEAD_INFO
**************


NAME
====

   P_NETDEAD_INFO                "netdead_info"


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

   /sys/player.h


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

   Wird im Raum X gesetzt und wirkt nur, falls dieser Raum ein '#' im
   object_name() hat (normale Clones, zB "/room/void#10153018").



   Bei Einschlafen eines Spielers in diesem Raum werden die Werte aus
   der Property im Spieler gespeichert (Netztoteninformationen).

   Ist beim Aufwachen des Spielers das Raumobjekt X zerstoert worden, dann
   wird bei der Blueprint von X per SetProp() die gespeicherte Information
   gesetzt. Der Rueckgabewert des SetProp wird als Pfad zu einem Ausweich-
   Aufwach-Raum interpretiert und der Spieler wird in dem Fall dorthin
   bewegt.


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

   Zum Clonen von Raeumen sollten Virtual Compiler benutzt werden:
   Wird in den erzeugten Objektnamen KEIN '#' verwendet, dann ist diese
   Property nicht sinnvoll und wird nicht verwendet. Ein ordentlicher
   VC kann Bewegen eines Spielers in dessen alten, nicht mehr existierenden
   Raum oder einen Ersatzraum beim Aufwachen selbst loesen.


BEISPIELE
=========

   // #1: geclonter Raum mit Ausweich-Aufwachraum: Klerus-Gilde
   #include <properties.h>
   inherit "/std/room";



   void create() {
     ::create();

     SetProp(P_NETDEAD_INFO, "/gilden/klerus");
     SetProp(P_LIGHT, 1);
   }



   // #2: komplexerer Beispielraum fuer P_NETDEAD_INFO-Funktionalitaet
   // Siehe auch: /doc/beispiele/testobjekte/netdead_info_testraum.c
   #include <properties.h>
   inherit "/std/room";

   void create() {
     ::create();

     if (clonep(this_object()))
       // setze Informationen, die im Netztoten gespeichert werden sollen
       Set(P_NETDEAD_INFO, random(5));
     else
       // Blueprint: hier kann man zu einem Cloneraum gehen
       AddExit("cloneraum", #'create_room);

     // Set-Method, um die Informationen aus P_NETDEAD_INFO beim Aufwachen
     // in der Blueprint auswerten zu koennen
     Set(P_NETDEAD_INFO, #'create_destiny, F_SET_METHOD);
     SetProp(P_LIGHT, 1);
   }



   // Raum entfernen, normalerweise so KEINE GUTE IDEE!
   void BecomesNetDead(object pl) {
     call_out(#'remove, 30);
   }

   // erzeuge einen Cloneraum und bewege den Spieler dahin
   int create_room(string dir) {
     object dest = clone_object(object_name(this_object()));
     this_player()->move(dest, M_NOCHECK);
     return 1;
   }



   // Set-Method fuer P_NETDEAD_INFO: gibt Pfad zurueck
   // benutze die Informationen aus dem jetzt aufwachenden Netztoten, um
   // einen alternativen Aufwachraum zu ermitteln, da der Einschlafraum
   // zerstoert ist
   string create_destiny(mixed val) {
     if (intp(val)) {
       switch (val) {
         case 0:
           return "/d/ebene/room/PortVain/po_haf1";
         case 1:
           return "/gilden/klerus";
         case 2:
           return "/gilden/karate";
         default:
       }
       return "/d/ebene/room/waldweg4";
     }
   }

2. Jan 2012 Gloinson
