blob: c13e3f846f21ca0963df694547dba98f2ea05407 [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
Zesstra18626972017-01-31 10:38:27 +010074 Default: "Eine Tuer.\n"
75
76 D_SHORT
77 Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
78 bzw. "geschlossen" ersetzt.
79
80 Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
81 aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
82 das Ganze mit break_string() umgebrochen und an P_INT_LONG
83 angehaengt.
84
85 Default: "Eine %se Tuer."
86
87 D_NAME
88 Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
89 der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
90 P_NAME einen String oder ein Array von Strings angeben.
91
92 Default: "Tuer"
93
94 D_GENDER
95 Das Geschlecht der Tuer.
96
97 Default: FEMALE
98
99 D_MSGS
100 String oder Array von drei Strings. Diese Strings werden beim
101 Durchschreiten der Tuer an move() als dir bzw. dir, textout und
102 textin uebergeben.
103
104 D_FUNC
105 String mit dem Namen einer Funktion, die im Startraum vor dem
106 Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
107 kann das Durchschreiten jedoch nicht verhindern!
108
109 D_FUNC2
110 String mit dem Namen einer Funktion, die im Zielraum nach dem
111 Durchschreiten der Tuer aufgerufen werden soll.
112
113 D_TESTFUNC
114 Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
115 vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
116 Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten.
117
118 D_RESET_MSG
119 Meldung, die beim Reset der Tuer ausgegeben wird.
120
121 D_OPEN_WITH_MOVE
122 Tuer oeffnet automatisch bei Eingabe des Befehls zum
123 Hindurchgehen.
124
125
126
127RUECKGABEWERT
128-------------
129::
130
131 1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
132
133BEMERKUNGEN
134-----------
135::
136
137 Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
138 Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
139 wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
140 geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
141 und beim Reset.
142
143 Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
144 auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
145 einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
146 jedoch kein Schluessel noetig ist.
147
148 Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
149 veraendern will, kann dafuer in /obj/doormaster die Funktionen
150 QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
151
152 *** ACHTUNG ***
153 Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
154 Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
155 per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
156 oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
157 dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
158 erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
159
160BEISPIELE
161---------
162::
163
164 ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
165 Extra-Beschreibung:
166
167 NewDoor("sueden","/players/rochus/room/test1");
168
169 ** Ein Portal:
170
171 NewDoor("norden","/players/rochus/room/test2",
172 "portal",
173 ([ D_NAME: "Portal",
174 D_GENDER: NEUTER,
175 D_SHORT: "Im Norden siehst Du ein %ses Portal.",
176 D_LONG: "Das Portal ist einfach nur gigantisch.\n",
177 ]) );
178
179 Alternativ mit props in alter Arraynotation:
180 NewDoor("norden","/players/rochus/room/test2",
181 "portal",
182 ({ D_NAME, "Portal",
183 D_GENDER, NEUTER,
184 D_SHORT, "Im Norden siehst Du ein %ses Portal.",
185 D_LONG, "Das Portal ist einfach nur gigantisch.\n"
186 }) );
187
188
189
190 ** Tueren mit Bewegungsmeldung:
191
192 NewDoor("norden","/room/see2",
Arathorn78eab1b2019-11-26 19:24:18 +0100193 ({"gitter","eisengitter"}),
Zesstra18626972017-01-31 10:38:27 +0100194 ({ D_MSGS, ({"nach Norden","schwimmt",
Arathorn78eab1b2019-11-26 19:24:18 +0100195 "schwimmt von Sueden herein"}),
196 D_GENDER, NEUTER}) );
Zesstra18626972017-01-31 10:38:27 +0100197
198 ** Eine Tuer mit Testfunktion:
199
200 NewDoor("osten","/mein/zielraum",
Arathorn78eab1b2019-11-26 19:24:18 +0100201 ({"tuer"}),
Zesstra18626972017-01-31 10:38:27 +0100202 ({ D_TESTFUNC, "blocker_da" }) );
203
204 Die Funktion blocker_da:
205
206 int blocker_da() // KEINE protected-Funktion! Sie wird sonst NICHT
207 { // aufgerufen und ausgewertet!
208 if ( present("mein_fieses_mo\nster",this_object()) )
Arathorn78eab1b2019-11-26 19:24:18 +0100209 {
210 tell_object(this_player(),
211 "Ein fieses Monster stellt sich Dir in den Weg.\n");
Zesstra18626972017-01-31 10:38:27 +0100212 return 1;
Arathorn78eab1b2019-11-26 19:24:18 +0100213 }
214 return 0;
Zesstra18626972017-01-31 10:38:27 +0100215 }
216
217 ** Nun noch eine Tuer mit einigen Extras:
218
219 NewDoor("nordwesten","/rooms/kammer",
220 ({"tuer","holztuer"}),
221 ({
Arathorn78eab1b2019-11-26 19:24:18 +0100222 D_FLAGS, (DOOR_CLOSED|DOOR_RESET_CL),
223 D_MSGS, ({"nach Nordwesten","geht",
224 "kommt durch eine Tuer herein"}),
225 D_SHORT, "Im Nordwesten siehst Du eine %se Holztuer.",
226 D_LONG, "Sie trennt den Laden vom dahinterliegenden Raum.\n",
227 D_NAME, "Holztuer",
228 D_FUNC, "view",
229 D_FUNC2, "look_up"
Zesstra18626972017-01-31 10:38:27 +0100230 }) );
231
232 Im Startraum:
233
234 void view()
235 {
Arathorn78eab1b2019-11-26 19:24:18 +0100236 tell_object(this_player(), break_string("Der Angestellte wirft Dir "
237 "einen missbilligenden Blick zu, laesst Dich aber passieren.",78));
Zesstra18626972017-01-31 10:38:27 +0100238 }
239
240 Im Zielraum:
241
242 void look_up()
243 {
Arathorn78eab1b2019-11-26 19:24:18 +0100244 tell_object(this_player(), break_string("Ein alter Mann schaut kurz "
245 "zu Dir auf und vertieft sich dann wieder in seine Akten.",78));
Zesstra18626972017-01-31 10:38:27 +0100246 }
247
248SIEHE AUCH
249----------
250::
251
252 QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
253 /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
254
255
25608.02.2015, Arathorn
257