blob: 22cc17771f44cf2aa298a224e13548f914255f7b [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001NewDoor()
2=========
3
4FUNKTION
5--------
6::
7
8 varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
9 mapping|<int|string|string*>* props);
10
11DEFINIERT IN
12------------
13::
14
15 /std/room/doors.c
16
17ARGUMENTE
18---------
19::
20
21 cmds (string|string*)
22 String oder Array von Strings mit den Befehlen, mit denen man
23 durch die Tuer geht (in der Regel Richtungen wie "norden").
24 dest (string)
25 Pfad des Zielraumes, OHNE ".c", sonst wird eine zweiseitige Tuer
26 (wie sie ueblich ist) nicht als solche erkannt.
27 ids (string|string*)
28 String oder Array von Strings mit den Bezeichnern der Tuer. Kann
29 auch 0 sein; in diesem Fall laesst sich die Tuer nur als "tuer"
30 ansprechen.
31 props (mapping|<int|string|string*>*)
32 Die Eigenschaften der Tuer (s.u.).
33
34BESCHREIBUNG
35------------
36::
37
38 Es wird eine neue Tuer geschaffen. Die Tuer laesst sich, wenn sie
39 geoeffnet ist, mit den in <cmds> angegebenen Befehlen durchschreiten.
40 Man gelangt dann in den Raum <dest>.
41
42 Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
43 Ausgaenge eingefuegt.
44
45 In <props> lassen sich Aussehen und Eigenschaften der Tuer festlegen.
46 Historisch ist es ein Array mit Paaren von Schluesseln und Werten, d.h.
47 es kommt immer erst ein Element, welches die Eigenschaft bezeichnet und
48 dann ein Element mit dem Wert dieser Eigenschaft.
49 Moderner ist es, ein Mapping mit den entsprechenden Schluesseln und
50 Werten zu uebergeben. Dies ist auch dringend empfohlen.
51
52 In <doorroom.h> sind dazu folgende Eigenschaften definiert:
53 D_FLAGS
54 DOOR_OPEN
55 Die Tuer ist beim Erzeugen geoeffnet.
56 DOOR_CLOSED
57 Die Tuer ist beim Erzeugen geschlossen.
58 DOOR_NEEDKEY
59 Man benoetigt einen Schluessel zum Oeffnen der Tuer.
60 DOOR_CLOSEKEY
61 Man benoetigt einen Schluessel zum Schliessen der Tuer.
62 DOOR_RESET_CL
63 Die Tuer schliesst sich beim Reset.
64 DOOR_RESET_OP
65 Die Tuer oeffnet sich beim Reset.
66
67 D_LONG
68 Die Langbeschreibung der Tuer.
69 Hier kann ein Mapping eingetragen werden, das als Keys den Tuer-
70 Status hat und die zugehoerige Langbeschreibung dazu. Beispiel:
71 ([ D_STATUS_CLOSED : "Die Tuer ist geschlossen.\n",
72 D_STATUS_OPEN : "Die Tuer ist offen.\n" ])
73
74
75
76 Default: "Eine Tuer.\n"
77
78 D_SHORT
79 Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
80 bzw. "geschlossen" ersetzt.
81
82 Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
83 aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
84 das Ganze mit break_string() umgebrochen und an P_INT_LONG
85 angehaengt.
86
87 Default: "Eine %se Tuer."
88
89 D_NAME
90 Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
91 der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
92 P_NAME einen String oder ein Array von Strings angeben.
93
94 Default: "Tuer"
95
96 D_GENDER
97 Das Geschlecht der Tuer.
98
99 Default: FEMALE
100
101 D_MSGS
102 String oder Array von drei Strings. Diese Strings werden beim
103 Durchschreiten der Tuer an move() als dir bzw. dir, textout und
104 textin uebergeben.
105
106 D_FUNC
107 String mit dem Namen einer Funktion, die im Startraum vor dem
108 Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
109 kann das Durchschreiten jedoch nicht verhindern!
110
111 D_FUNC2
112 String mit dem Namen einer Funktion, die im Zielraum nach dem
113 Durchschreiten der Tuer aufgerufen werden soll.
114
115 D_TESTFUNC
116 Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
117 vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
118 Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten.
119
120 D_RESET_MSG
121 Meldung, die beim Reset der Tuer ausgegeben wird.
122
123 D_OPEN_WITH_MOVE
124 Tuer oeffnet automatisch bei Eingabe des Befehls zum
125 Hindurchgehen.
126
127
128
129RUECKGABEWERT
130-------------
131::
132
133 1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
134
135BEMERKUNGEN
136-----------
137::
138
139 Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
140 Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
141 wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
142 geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
143 und beim Reset.
144
145 Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
146 auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
147 einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
148 jedoch kein Schluessel noetig ist.
149
150 Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
151 veraendern will, kann dafuer in /obj/doormaster die Funktionen
152 QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
153
154 *** ACHTUNG ***
155 Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
156 Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
157 per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
158 oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
159 dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
160 erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
161
162BEISPIELE
163---------
164::
165
166 ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
167 Extra-Beschreibung:
168
169 NewDoor("sueden","/players/rochus/room/test1");
170
171 ** Ein Portal:
172
173 NewDoor("norden","/players/rochus/room/test2",
174 "portal",
175 ([ D_NAME: "Portal",
176 D_GENDER: NEUTER,
177 D_SHORT: "Im Norden siehst Du ein %ses Portal.",
178 D_LONG: "Das Portal ist einfach nur gigantisch.\n",
179 ]) );
180
181 Alternativ mit props in alter Arraynotation:
182 NewDoor("norden","/players/rochus/room/test2",
183 "portal",
184 ({ D_NAME, "Portal",
185 D_GENDER, NEUTER,
186 D_SHORT, "Im Norden siehst Du ein %ses Portal.",
187 D_LONG, "Das Portal ist einfach nur gigantisch.\n"
188 }) );
189
190
191
192 ** Tueren mit Bewegungsmeldung:
193
194 NewDoor("norden","/room/see2",
195 ({ D_MSGS, ({"nach Norden","schwimmt",
196 "kommt hereingeschwommen"}) }) );
197
198 ** Eine Tuer mit Testfunktion:
199
200 NewDoor("osten","/mein/zielraum",
201 ({ D_TESTFUNC, "blocker_da" }) );
202
203 Die Funktion blocker_da:
204
205 int blocker_da() // KEINE protected-Funktion! Sie wird sonst NICHT
206 { // aufgerufen und ausgewertet!
207 if ( present("mein_fieses_mo\nster",this_object()) )
208 {
209 write("Ein fieses Monster stellt sich Dir in den Weg.\n");
210 return 1;
211 }
212 return 0; // optional
213 }
214
215 ** Nun noch eine Tuer mit einigen Extras:
216
217 NewDoor("nordwesten","/rooms/kammer",
218 ({"tuer","holztuer"}),
219 ({
220 D_FLAGS, (DOOR_CLOSED|DOOR_RESET_CL),
221 D_MSGS, ({"nach Nordwesten","geht",
222 "kommt durch eine Tuer herein"}),
223 D_SHORT, "Im Nordwesten siehst Du eine %se Holztuer.",
224 D_LONG, "Sie trennt den Laden vom dahinterliegenden Raum.\n",
225 D_NAME, "Holztuer",
226 D_FUNC, "view",
227 D_FUNC2, "look_up"
228 }) );
229
230 Im Startraum:
231
232 void view()
233 {
234 write("Der Angestellte wirft Dir einen missbilligenden Blick zu, "
235 "laesst Dich aber passieren.\n");
236 }
237
238 Im Zielraum:
239
240 void look_up()
241 {
242 write("Ein alter Mann schaut kurz zu Dir auf und vertieft sich dann "
243 "wieder in seine Akten.\n");
244 }
245
246SIEHE AUCH
247----------
248::
249
250 QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
251 /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
252
253
25408.02.2015, Arathorn
255