SYNOPSIS
        int restore_object(string name);
        int restore_object(string str);     (VORLAEUFIG)

BESCHREIBUNG
        Laedt Werte von Variablen fuer das aktuelle Objekt aus der Datei
        <name> oder direkt aus dem String <str>.

        Um direkt aus einem String Variablen laden zu koennen, muss dieser
        mit der typischen Zeile "#x:y" beginnen. Strings, die von der Efun
        save_object() erzeugt wurden, beginnen so.

        Wenn Variablen aus einer Datei geladen werden, kann <name> mit .c
        enden. Diese Dateiendung wird vom Treiber entfernt. Das Masterobjekt
        fuegt dem Dateinamen ein .o hinzu. Die Gueltigkeit des Dateinamens
        wird mit der Funktion check_valid_path() automatisch ueberprueft.

        Die Funktion gibt 1 zurueck, wenn die Variablen erfolgreich geladen
        wurden und 0, wenn es nichts zu laden gab.

        Variablen mit dem Typenvermerk nosave werden nicht geladen, zum
        Beispiel nosave int xxx;

        Closures aus Lfuns, Variablne und simul_efuns werden nur geladen,
        wenn sie gefunden werden. Falls nicht, werden sie mit dem Wert '0'
        geladen.

        Wenn Vererbung verwendet wird, kann es vorkommen, dass mehrere
        Variablen mit dem gleichen Namen an unterschiedlichen Orten vorkommen
        und deshalb in der Speicherdatei mehrmals auftreten. Beim Laden der
        Variablen werden sie in Reihenfolge ihres Auftretens im Vererbungsbaum
        geladen. Ein geeignetes Vorgehen ist die Verwendung von Verbose und
        einzigartigen Namen bei nicht-statischen Variablen. So wird auch das
        manuelle Lesen oder Editieren des Savefiles einfacher.

AENDERUNGEN
        Das direkte Laden aus einem String wurde in LDMud 3.2.8 eingefuehrt,
            wird aber moeglicherweise in Zukunft in eine separate Efun
            ausgelagert.
        LDMud 3.2.9 ergaenzte die Funktion um die Moeglichkeit,
            NonLambda-Closures, Symbole und gequotete Arrays zu laden,
            indem ein neues Format fuer das Savefile verwendet wird.

SIEHE AUCH
        save_object(E), restore_value(E), valid_read(M)
