Lpc Manpages

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)