blob: 7b7d8d3de06171ea05e18b0acbc05db86428a92b [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
22 Es ist: id(str) { return str == <name>; }
23
24 <str> kann auch ein Objekt (anstatt einem object_name()) sein, was den
25 Test schneller und einfacher macht.
26
27 Das Argument <env> ist optional. <env> gibt an, wo nach <str> gesucht
28 wird. Nur das Inventory von <env> wird durchsucht, nicht jedoch dessen
29 Umgebung. Oftmals wird fuer <env> this_player() gesetzt.
30
31
32ANMERKUNG
33 Diese efun kann u.U. _sehr_ teuer sein! Bitte schaut euch auf jeden
34 Fall auch die efun present_clone() an und schaut, ob die evtl. das
35 kann, was ihr machen wollt. present_clone() ist erheblich billiger.
36
37 Wenn die efun sowohl in this_object() als auch dessen Umgebung
38 sucht, werden, soweit es die Numerierung betrifft, die beiden
39 Umgebungen zusammenhaengend betrachtet.
40
41BEISPIELE
42 present("chest");
43 --> findet das erste 'chest' Objekt
44
45 present("chest 2");
46 --> findet das zweite 'chest' Objekt
47
48 present("chest 2", 1);
49 --> findet das erste 'chest 2' Objekt
50
51 Wenn sich eine "chest" im this_object() befindet, und zwei
52 ausserhalb:
53 present("chest", 1) -> findet die chest im Objekt
54 present("chest", 2) -> findet die erste chest ausserhalb
55 present("chest", 3) -> findet die zweite chest ausserhalb
56
57 Wenn ein Objekt die Forum "<id> <n>" in Verbindung mit einem selbst
58 ueber add_action() gesetzten Verb unterstuetzen soll (damit z. B.
59 "oeffne Kiste 3" funktioniert), kann das folgendermassen geloest
60 werden:
61
62 void init() { add_action("oeffne_kiste", "oeffne"); }
63
64 int oeffne_kiste(string str)
65 {
66 if(present(str) != this_object() )
67 {
68 return 0; /* nicht diese Kiste */
69 ...
70 }
71 }
72
73HISTORY
74 LDMud 3.2.11/3.3.610 fuehrte die (str, n)-Form ein.
75 LDMud 3.3.713 aenderte die Numerierung wenn sowohl Inventory
76 als auch Umgebung durchsucht werden. In der vorherigen
77 Implementierung wurde eine Numerierung auf beiden Umgebungen
78 einzeln angewandt, was zur Folge hatte, dass niedere Objekte
79 in der aeusseren Umgebung nicht gefunden werden koennten, da
80 sie von den Objekten in Inneren verdeckt wurden.
81
82SIEHE AUCH
83 move_object(E), environment(E), this_object(E), present_clone(E),
84 id(A), init(A)