SYNOPSIS
        object present(string str)
        object present(string str, int n)
        object present(string str, object env)
        object present(string str, int n, object env)

        object present(object ob)
        object present(object ob, object env)

BESCHREIBUNG
        Wenn ein Objekt mit der Id <str> sich im Inventar oder in der Umgebung
        von this_object() befindet, wird es zurueck geliefert.
        
        Ist das Argument <n> gegeben, wird das n-te Objekt mit Namen <id>
        zurueck geliefert. Das heisst, der Driver fuehrt fuer alle Objekte
        im Inventar und in der Umgebung von this_object() die Funktion
        id(str) aus, bis ein Treffer erzielt wird (wenn ueberhaupt).

        Ist <n> nicht gegeben, aber <str> hat die Form "<id> <n>" , wird
        ebenfalls das n-te Objekt mit Namen <id> zurueckgeliefert.

        <str> kann auch ein Objekt (anstatt einer Id) sein, was den Test
        schneller und einfacher macht.

        Das Argument <env> ist optional. <env> gibt das Objekt an, in welchem
        nach <str> gesucht wird. Nur das Inventory von <env> wird durchsucht,
        nicht jedoch dessen Umgebung.

ANMERKUNGEN
        Wenn die efun sowohl in this_object() als auch dessen Umgebung
        sucht, werden, soweit es die Numerierung betrifft, die beiden
        Umgebungen zusammenhaengend betrachtet.

BEISPIELE
        present("chest");
          --> findet das erste 'chest' Objekt

        present("chest 2");
          --> findet das zweite 'chest' Objekt

        present("chest 2", 1);
          --> findet das erste 'chest 2' Objekt

        Wenn sich eine "chest" im this_object() befindet, und zwei
        ausserhalb:
          present("chest", 1) -> findet die chest im Objekt
          present("chest", 2) -> findet die erste chest ausserhalb
          present("chest", 3) -> findet die zweite chest ausserhalb
        
        Wenn ein Objekt die Forum "<id> <n>" in Verbindung mit einem selbst
        ueber add_action() gesetzten Verb unterstuetzen soll (damit z. B.
        "oeffne Kiste 3" funktioniert), kann das folgendermassen geloest
        werden:

            void init() { add_action("oeffne_kiste", "oeffne"); }

            int oeffne_kiste(string str)
            {
                if(present(str) != this_object() )
                {
                    return 0; /* nicht diese Kiste */
                    ...
                }
            }

GESCHICHTE
        LDMud 3.2.11/3.3.610 fuehrte die (str, n)-Form ein.
        LDMud 3.3.713 aenderte die Numerierung wenn sowohl Inventory
          als auch Umgebung durchsucht werden. In der vorherigen
          Implementierung wurde eine Numerierung auf beiden Umgebungen
          einzeln angewandt, was zur Folge hatte, dass niedere Objekte
          in der aeusseren Umgebung nicht gefunden werden koennten, da
          sie von den Objekten in Inneren verdeckt wurden.

SIEHE AUCH
        move_object(E), environment(E), this_object(E), present_clone(E),
        id(A), init(A)
