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
