GESCHUETZT
SYNOPSIS
        void set_this_object(object objekt-an-stelle-von-originalobjekt)

BESCHREIBUNG
        Dies ist eine geschuetzte Funktion, die nur vom Master-Objekt und im
        Simul-Efun-Objekt genutzt werden darf. Bei sonstiger Benutzung
        erzeugt diese Funktion einen Fehler.

        Die Funktion aendert das Resultat von this_object() in der laufenden
        Funktion, ebenso das Resultat von previous_object() in Funktionen in
        anderen Objekten, die einen call_other() Aufruf machen.

        Der Effekt von set_this_object() bleibt bestehen, bis ein externer
        Funktionsaufruf abgeschlossen ist oder bis zu einem erneuten Aufruf
        von set_this_object(). Waehrend der Ausfuehrung von Code im
        Master-Objekt oder im Simul-Efun-Objekt ist set_this_object()
        garantiert, auch wenn this_object() durch set_this_object()
        veraendert wird. Die gilt nicht fuer Funktionen, die aus anderen
        Programmen geerbt werden.

        Diese Funktion darf nur mit hoechster Sorgfalt verwendet werden, um
        Inkonsistenzen zu vermeiden. Nach einem Aufruf von set_this_object()
        koennen sich gewisse LPC-Konstrukte merkwuerdig verhalten oder gar
        das System zum Absturz bringen. Insbesondere die Verwendung von
        globalen Variablen oder der Aufruf von lokalen Funktionen (ausser
        durch call_other()) ist unzulaessig und wird aktiv verhindert.

        Erlaubt sind call_other(), map(), der Zugriff auf lokale Variablen
        (die auch Pointers auf globale Arrays enthalten duerfen), einfache
        Arithmetik und der Zuweisungs-Operator.

FEHLER
        Es ist momentan nicht moeglich, das originale gueltige Objekt wieder
        herzustellen. Anstelle von:

            object ich = this_object();
            set_this_object(dings);
            <irgendwelcher Code>
            set_this_object(ich);
            <mehr Code>

        muss das ueber einen Umweg geloest werden:

            private void tuwas(object dings) {
                set_this_object(dings);
                <irgendwelcher code>
            }

            funcall(#'tuwas, dings);
            <mehr Code>

        Manche Leute bezeichnen das als Feature.

GESCHICHTE
        LDMud 3.2.10 verhindert aktiv die Referenz auf globale Variablen und
            Funktionsaufrufe nach Adresse, waehrend set_this_object() gilt.

SIEHE AUCH
        this_object(E), set_this_player(E)
