blob: c534be52ec7cd67058242b3a659f8cdc1346ed65 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001
Zesstra953f9972017-02-18 15:37:36 +01002NewDoor()
3*********
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
10 mapping|<int|string|string*>* props);
MG Mud User88f12472016-06-24 23:31:02 +020011
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstra953f9972017-02-18 15:37:36 +010013DEFINIERT IN
14============
MG Mud User88f12472016-06-24 23:31:02 +020015
Zesstra953f9972017-02-18 15:37:36 +010016 /std/room/doors.c
MG Mud User88f12472016-06-24 23:31:02 +020017
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019ARGUMENTE
20=========
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022 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.).
MG Mud User88f12472016-06-24 23:31:02 +020034
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra953f9972017-02-18 15:37:36 +010036BESCHREIBUNG
37============
MG Mud User88f12472016-06-24 23:31:02 +020038
Zesstra953f9972017-02-18 15:37:36 +010039 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>.
MG Mud User88f12472016-06-24 23:31:02 +020042
Zesstra953f9972017-02-18 15:37:36 +010043 Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
44 Ausgaenge eingefuegt.
MG Mud User88f12472016-06-24 23:31:02 +020045
Zesstra953f9972017-02-18 15:37:36 +010046 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.
MG Mud User88f12472016-06-24 23:31:02 +020052
Zesstra953f9972017-02-18 15:37:36 +010053 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.
MG Mud User88f12472016-06-24 23:31:02 +020067
Zesstra953f9972017-02-18 15:37:36 +010068 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" ])
MG Mud User88f12472016-06-24 23:31:02 +020074
MG Mud User88f12472016-06-24 23:31:02 +020075
MG Mud User88f12472016-06-24 23:31:02 +020076
Zesstra953f9972017-02-18 15:37:36 +010077 Default: "Eine Tuer.\n"
MG Mud User88f12472016-06-24 23:31:02 +020078
Zesstra953f9972017-02-18 15:37:36 +010079 D_SHORT
80 Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
81 bzw. "geschlossen" ersetzt.
MG Mud User88f12472016-06-24 23:31:02 +020082
Zesstra953f9972017-02-18 15:37:36 +010083 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.
MG Mud User88f12472016-06-24 23:31:02 +020087
Zesstra953f9972017-02-18 15:37:36 +010088 Default: "Eine %se Tuer."
MG Mud User88f12472016-06-24 23:31:02 +020089
Zesstra953f9972017-02-18 15:37:36 +010090 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.
MG Mud User88f12472016-06-24 23:31:02 +020094
Zesstra953f9972017-02-18 15:37:36 +010095 Default: "Tuer"
MG Mud User88f12472016-06-24 23:31:02 +020096
Zesstra953f9972017-02-18 15:37:36 +010097 D_GENDER
98 Das Geschlecht der Tuer.
MG Mud User88f12472016-06-24 23:31:02 +020099
Zesstra953f9972017-02-18 15:37:36 +0100100 Default: FEMALE
MG Mud User88f12472016-06-24 23:31:02 +0200101
Zesstra953f9972017-02-18 15:37:36 +0100102 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.
MG Mud User88f12472016-06-24 23:31:02 +0200106
Zesstra953f9972017-02-18 15:37:36 +0100107 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"
MG Mud User88f12472016-06-24 23:31:02 +0200227 }) );
MG Mud User88f12472016-06-24 23:31:02 +0200228
Zesstra953f9972017-02-18 15:37:36 +0100229 Im Startraum:
MG Mud User88f12472016-06-24 23:31:02 +0200230
Zesstra953f9972017-02-18 15:37:36 +0100231 void view()
232 {
233 write("Der Angestellte wirft Dir einen missbilligenden Blick zu, "
234 "laesst Dich aber passieren.\n");
235 }
MG Mud User88f12472016-06-24 23:31:02 +0200236
Zesstra953f9972017-02-18 15:37:36 +0100237 Im Zielraum:
MG Mud User88f12472016-06-24 23:31:02 +0200238
Zesstra953f9972017-02-18 15:37:36 +0100239 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 }
MG Mud User88f12472016-06-24 23:31:02 +0200244
245
Zesstra953f9972017-02-18 15:37:36 +0100246SIEHE AUCH
247==========
MG Mud User88f12472016-06-24 23:31:02 +0200248
Zesstra953f9972017-02-18 15:37:36 +0100249 QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
250 /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
251
MG Mud User88f12472016-06-24 23:31:02 +020025208.02.2015, Arathorn