blob: 2a9d0be76b186020d85cd508e169018cca183a58 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 object present(string str)
3 object present(string str, int n)
4 object present(string str, object env)
5 object present(string str, int n, object env)
6
7 object present(object ob)
8 object present(object ob, object env)
9
10BESCHREIBUNG
11 Wenn ein Objekt mit der Id <str> sich im Inventar oder in der Umgebung
12 von this_object() befindet, wird es zurueck geliefert.
13
14 Ist das Argument <n> gegeben, wird das n-te Objekt mit Namen <id>
15 zurueck geliefert. Das heisst, der Driver fuehrt fuer alle Objekte
16 im Inventar und in der Umgebung von this_object() die Funktion
17 id(str) aus, bis ein Treffer erzielt wird (wenn ueberhaupt).
18
19 Ist <n> nicht gegeben, aber <str> hat die Form "<id> <n>" , wird
20 ebenfalls das n-te Objekt mit Namen <id> zurueckgeliefert.
21
Zesstrad59c3892019-11-28 20:53:39 +010022 <str> kann auch ein Objekt (anstatt einer Id) sein, was den Test
23 schneller und einfacher macht.
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstrad59c3892019-11-28 20:53:39 +010025 Das Argument <env> ist optional. <env> gibt das Objekt an, in welchem
26 nach <str> gesucht wird. Nur das Inventory von <env> wird durchsucht,
27 nicht jedoch dessen Umgebung.
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstrad59c3892019-11-28 20:53:39 +010029ANMERKUNGEN
MG Mud User88f12472016-06-24 23:31:02 +020030 Wenn die efun sowohl in this_object() als auch dessen Umgebung
31 sucht, werden, soweit es die Numerierung betrifft, die beiden
32 Umgebungen zusammenhaengend betrachtet.
33
34BEISPIELE
35 present("chest");
36 --> findet das erste 'chest' Objekt
37
38 present("chest 2");
39 --> findet das zweite 'chest' Objekt
40
41 present("chest 2", 1);
42 --> findet das erste 'chest 2' Objekt
43
44 Wenn sich eine "chest" im this_object() befindet, und zwei
45 ausserhalb:
46 present("chest", 1) -> findet die chest im Objekt
47 present("chest", 2) -> findet die erste chest ausserhalb
48 present("chest", 3) -> findet die zweite chest ausserhalb
49
50 Wenn ein Objekt die Forum "<id> <n>" in Verbindung mit einem selbst
51 ueber add_action() gesetzten Verb unterstuetzen soll (damit z. B.
52 "oeffne Kiste 3" funktioniert), kann das folgendermassen geloest
53 werden:
54
55 void init() { add_action("oeffne_kiste", "oeffne"); }
56
57 int oeffne_kiste(string str)
58 {
59 if(present(str) != this_object() )
60 {
61 return 0; /* nicht diese Kiste */
62 ...
63 }
64 }
65
Zesstrad59c3892019-11-28 20:53:39 +010066GESCHICHTE
MG Mud User88f12472016-06-24 23:31:02 +020067 LDMud 3.2.11/3.3.610 fuehrte die (str, n)-Form ein.
68 LDMud 3.3.713 aenderte die Numerierung wenn sowohl Inventory
69 als auch Umgebung durchsucht werden. In der vorherigen
70 Implementierung wurde eine Numerierung auf beiden Umgebungen
71 einzeln angewandt, was zur Folge hatte, dass niedere Objekte
72 in der aeusseren Umgebung nicht gefunden werden koennten, da
73 sie von den Objekten in Inneren verdeckt wurden.
74
75SIEHE AUCH
76 move_object(E), environment(E), this_object(E), present_clone(E),
77 id(A), init(A)