SYNOPSIS
        object clone_object(string name)
        object clone_object(object template)

BESCHREIBUNG
        Clont ein neues Objekt aus der Definiton <name> oder alternativ aus
        dem Objekt <template>. In beiden Faellen wird dem Clon ein
        individueller Name zugeordnet, dann wird der Clon zurueck gegeben.

        Das Original, Blueprint genannt, wird nur fuer das Clonen verwendet
        und sollte deshalb nicht im Spiel genutzt werden. Die geclonten
        Objekte enthalten nur Daten, der Blueprint hingegen auch den
        Funktionscode.

        Den Blueprint erkennt man daran, dass er keine Nummer im Objektnamen
        traegt. clone_object() liefert niemals einen Blueprint zurueck.

        Wenn der Blueprint existiert und einen heart_beat() aufweist, schaltet
        clone_object() diesen aus.

        Die Pfadangabe muss komplett sein. Relative Pfade sind nicht gestattet.
        Wenn strikte EUIDs gefordert werden, muss das clonende Objekt eine
        EUID != 0 haben.


        -- Variablen Initialisierung --

        Allgemein werden die Variablen in Blueprints und Clones gleichermassen
        durch Aufruf der internen lfun __INIT() initialisiert.

        Ist allerdings das #pragma share_variables in Effekt (entweder
        explizit im Objekt angegeben, oder als allgemeine Laufzeitoption),
        werden die Werte fuer die Klonvariable aus den _aktuellen_ Variablen
        der Blueprint kopiert.

        Variablen ohne explizite Initialisierung sind hiervon unbetroffen und
        werden stets auf 0 gesetzt.


BEISPIELE
        // Clone eine Fackel (Name des Files nicht im Compat Format)
        object fackel;
        fackel = clone_object("/obj/fackel");

        // Clone zwei Schluessel (Name des Files im Compat Format)
        object key1, key2;
        key1 = clone_object(load_object("obj/key"));
        key2 = clone_object(key1);

        // Create a specialized weapons blueprint.
        --- std/weapon.c: --- 
        #pragma share_variables
        int weapon_class = 1;

        --- broadsword.c: ---
        inherit "/std/weapon";

        int create() {
            weapon_class = 2;
            replace_program("/std/weapon");
        }


GESCHICHTE
        Modifiziert in LDMud 3.2.6: es werden auch Objekte als Argument
            akzeptiert.
        LDMud 3.3.378 fuehrte das pragma share_variables ein.

SIEHE AUCH
        blueprint(E), clonep(E), destruct(E), clones(E), load_name(E),
        load_object(E), move_object(E), uids(C), program_name(E), pragma(LPC)
