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