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