Configure()
***********

Configure()

   public mixed Configure(mixed data)


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

   Beliebigen Objekten


ARGUMENTE
=========

   <data>
     0 fuer Datenabfrage
     beliebige Daten, die ein Configure(0) vorher lieferte


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

   Viele Objekte werden fuer bestimmte Spieler konfiguriert und so
   personalisiert. Sie enthalten zusaetzlich zu den Daten, welche waehrend des
   create() gesetzt wurden, noch weitere spieler-individuelle Daten.
   Damit diese Objekte im Bedarfsfall neu erstellt werden koennen, sollte ein
   geeignetes Configure() definfiert werden, um diese Daten abzurufen und in
   einem neuen Clone (oder neugeladener Blueprint) wieder zu setzen.



   Existiert Configure() im Objekt, MUSS dieses bei einem Aufruf mit
   <data>==0 (d.h. Configure(0)) alle individuellen Daten zurueckliefern,
   die noetig sind, um den aktuellen Zustand des Objektes spaeter
   wiederherzustellen.
   Das Objekt darf nach dem Zurueckgeben dieser Daten diese NICHT mehr
   veraendern, d.h. es muss ggf. eine Kopie erstellt werden (copy, deep_copy)

   Genau diese Daten werden in einem neu geclonten Objekt durch den Aufruf
   von Configure(data) wieder gesetzt. Das Configure MUSS genau die Daten, die
   es im alten Objekt zurueckliefert, wieder akzeptieren.


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

   Wenn <data>==0:
     Alle individuellen Daten in einer beliebigen Form. Ein Mapping bietet
     sich jedoch an.
     Nicht erlaubt sind: Objekte und Closures.

   Wenn <data>!=0:
     1, wenn die Daten zur Konfiguration akzeptiert wurden.
     0, sonst.


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

   Configure() ist nicht verpflichtet, erneut Daten zu akzeptieren, wenn es
   bereits einmal mit gueltigen Daten aufgerufen wurde.
   Das Zurueckschreiben der Daten kann auch nach Ablauf laengerer Zeit
   und/oder in einer anderen Uptime erfolgen.


BEISPIELE
=========

   Ein Objekt, welches ein anderes Objekt sicher ersetzt, d.h. die
   individuelle Konfiguration bleibt erhalten:
   mixed data;
   if (call_resolved(data,ob,"Configure",0) == 1) {
     string obname = load_name(ob);
     ob->remove();
     ob = clone_object(obname);
     if (data) {
       if (ob->Configure(data) == 1) {
         printf("Instanz von %s erfolgreich ersetzt, neues Objekt: %O\n",
             obname,ob);
       }
       else {
         raise_error(sprintf("Configure() in %O akzeptierte Daten nicht!\n",
             ob));
       }
     }
   }
   else {
     printf(break_string(
         "Das Objekt %O definiert keine Funktion Configure(). Es kann "
         "nicht sicher ersetzt werden, da unbekannt ist, ob es individuelle "
         "Daten enthaelt.",78));
   }


LETZTE AeNDERUNG
================

26.09.2011, Zesstra
