create()
********


FUNKTION
========

   protected void create();


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

   allen Standardobjekten


ARGUMENTE
=========

   keine


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

   Diese Funktion wird aufgerufen, wenn ein Objekt geladen oder
   geclont wird. In dieser Funktion wird das Objekt initialisiert und
   konfiguriert. Waehrend des create() kann es einen
   this_player()/this_interactive() geben, muss aber nicht! Im
   create() hat das Objekt noch kein environment(). create() wird nur
   gerufen, wenn das Objekte geclont oder explizit geladen wird. Wenn
   es aufgrund eines inherit in einem anderen Objekt vom Driver
   geladen wird, wird das create() nicht ausgefuehrt (s.
   create_super()).


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

   keiner


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

   Erbt man von anderen Objekten, so besteht die erste Aktion
   innerhalb von create() normalerweise darin, in diesen Objekten
   create() aufzurufen.

   In altem Code wird create() haeufig ohne Sichtbarkeitsmodifikator
   verwendet, es sollte aber immer protected gewaehlt werden, es gibt
   keinen guten Grund create() mehr als einmal zu rufen, im Gegenteil,
   wird das geerbte create() mehrfach gerufen kann das zu schwer zu
   findenden Bugs fuehren.

   Um Speicher zu sparen, kann man bei Blueprints von der
   Konfigurierung absehen (siehe Beispiel). Dies sollte man allerdings
   nicht bei Objekten machen, von denen keine Clones erzeugt werden
   sollen (zB. bei Raeumen).

   Man sollte bei Abbruch des create() in BP unbedingt
   set_next_reset(-1); rufen, da sonst die (nicht konfigurierte) BP
   resetten kann und dann buggt.


BEISPIELE
=========

   Ein Gegenstand wuerde wie folgt konfiguriert:

   inherit "/std/thing";

   #include <properties.h>

   protected void create()
   {
     // Wenn wir die Blueprint sind: NICHT konfigurieren!
     // Bei normalen Raeumen oder Transportern sind diese
     // Zeilen wegzulassen!!!
     if (!clonep(this_object()))
     {
       set_next_reset(-1);    // wichtig, damit die BP nicht resettet.
       return;
     }

     // Ansonsten die allgemeinen Eigenschaften von /std/thing
     // konfigurieren...
     ::create();

     // ...und nun unsere speziellen Eigenschaften:
     SetProp(P_NAME, "Muell");
     SetProp(P_SHORT, "Muell");
     SetProp(P_LONG, "Voellig unnuetzer Muell!\n");
     SetProp(P_ARTICLE, 0);
     SetProp(P_VALUE, 0);
     SetProp(P_GENDER, MALE);
   }


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

   create(), reset(), create_super() set_next_reset()

Letzte Aenderung: 27.10.2018, Bugfix
