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");
        }


AENDERUNGEN
        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)
