blob: 603a226a7feacdb43d368c31dae0ad2d049f0f01 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001NewDoor()
2*********
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
9 mapping|<int|string|string*>* props);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/room/doors.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 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.).
MG Mud User88f12472016-06-24 23:31:02 +020033
MG Mud User88f12472016-06-24 23:31:02 +020034
Zesstra953f9972017-02-18 15:37:36 +010035BESCHREIBUNG
36============
MG Mud User88f12472016-06-24 23:31:02 +020037
Zesstra953f9972017-02-18 15:37:36 +010038 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>.
MG Mud User88f12472016-06-24 23:31:02 +020041
Zesstra953f9972017-02-18 15:37:36 +010042 Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
43 Ausgaenge eingefuegt.
MG Mud User88f12472016-06-24 23:31:02 +020044
Zesstra953f9972017-02-18 15:37:36 +010045 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.
MG Mud User88f12472016-06-24 23:31:02 +020051
Zesstra953f9972017-02-18 15:37:36 +010052 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.
MG Mud User88f12472016-06-24 23:31:02 +020066
Zesstra953f9972017-02-18 15:37:36 +010067 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" ])
MG Mud User88f12472016-06-24 23:31:02 +020073
Zesstra953f9972017-02-18 15:37:36 +010074 Default: "Eine Tuer.\n"
MG Mud User88f12472016-06-24 23:31:02 +020075
Zesstra953f9972017-02-18 15:37:36 +010076 D_SHORT
77 Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
78 bzw. "geschlossen" ersetzt.
MG Mud User88f12472016-06-24 23:31:02 +020079
Zesstra953f9972017-02-18 15:37:36 +010080 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.
MG Mud User88f12472016-06-24 23:31:02 +020084
Zesstra953f9972017-02-18 15:37:36 +010085 Default: "Eine %se Tuer."
MG Mud User88f12472016-06-24 23:31:02 +020086
Zesstra953f9972017-02-18 15:37:36 +010087 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.
MG Mud User88f12472016-06-24 23:31:02 +020091
Zesstra953f9972017-02-18 15:37:36 +010092 Default: "Tuer"
MG Mud User88f12472016-06-24 23:31:02 +020093
Zesstra953f9972017-02-18 15:37:36 +010094 D_GENDER
95 Das Geschlecht der Tuer.
MG Mud User88f12472016-06-24 23:31:02 +020096
Zesstra953f9972017-02-18 15:37:36 +010097 Default: FEMALE
MG Mud User88f12472016-06-24 23:31:02 +020098
Zesstra953f9972017-02-18 15:37:36 +010099 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.
MG Mud User88f12472016-06-24 23:31:02 +0200103
Zesstra953f9972017-02-18 15:37:36 +0100104 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
126RUECKGABEWERT
127=============
128
129 1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
130
131
132BEMERKUNGEN
133===========
134
135 Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
136 Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
137 wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
138 geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
139 und beim Reset.
140
141 Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
142 auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
143 einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
144 jedoch kein Schluessel noetig ist.
145
146 Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
147 veraendern will, kann dafuer in /obj/doormaster die Funktionen
148 QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
149
150 *** ACHTUNG ***
151 Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
152 Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
153 per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
154 oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
155 dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
156 erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
157
158
159BEISPIELE
160=========
161
162 ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
163 Extra-Beschreibung:
164
165 NewDoor("sueden","/players/rochus/room/test1");
166
167 ** Ein Portal:
168
169 NewDoor("norden","/players/rochus/room/test2",
170 "portal",
171 ([ D_NAME: "Portal",
172 D_GENDER: NEUTER,
173 D_SHORT: "Im Norden siehst Du ein %ses Portal.",
174 D_LONG: "Das Portal ist einfach nur gigantisch.\n",
175 ]) );
176
177 Alternativ mit props in alter Arraynotation:
178 NewDoor("norden","/players/rochus/room/test2",
179 "portal",
180 ({ D_NAME, "Portal",
181 D_GENDER, NEUTER,
182 D_SHORT, "Im Norden siehst Du ein %ses Portal.",
183 D_LONG, "Das Portal ist einfach nur gigantisch.\n"
184 }) );
185
186
187
188 ** Tueren mit Bewegungsmeldung:
189
190 NewDoor("norden","/room/see2",
Arathorn78eab1b2019-11-26 19:24:18 +0100191 ({"gitter","eisengitter"}),
Zesstra953f9972017-02-18 15:37:36 +0100192 ({ D_MSGS, ({"nach Norden","schwimmt",
Arathorn78eab1b2019-11-26 19:24:18 +0100193 "schwimmt von Sueden herein"}),
194 D_GENDER, NEUTER}) );
Zesstra953f9972017-02-18 15:37:36 +0100195
196 ** Eine Tuer mit Testfunktion:
197
198 NewDoor("osten","/mein/zielraum",
Arathorn78eab1b2019-11-26 19:24:18 +0100199 ({"tuer"}),
Zesstra953f9972017-02-18 15:37:36 +0100200 ({ 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()) )
Arathorn78eab1b2019-11-26 19:24:18 +0100207 {
208 tell_object(this_player(),
209 "Ein fieses Monster stellt sich Dir in den Weg.\n");
Zesstra953f9972017-02-18 15:37:36 +0100210 return 1;
Arathorn78eab1b2019-11-26 19:24:18 +0100211 }
212 return 0;
Zesstra953f9972017-02-18 15:37:36 +0100213 }
214
215 ** Nun noch eine Tuer mit einigen Extras:
216
217 NewDoor("nordwesten","/rooms/kammer",
218 ({"tuer","holztuer"}),
219 ({
Arathorn78eab1b2019-11-26 19:24:18 +0100220 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"
MG Mud User88f12472016-06-24 23:31:02 +0200228 }) );
MG Mud User88f12472016-06-24 23:31:02 +0200229
Zesstra953f9972017-02-18 15:37:36 +0100230 Im Startraum:
MG Mud User88f12472016-06-24 23:31:02 +0200231
Zesstra953f9972017-02-18 15:37:36 +0100232 void view()
233 {
Arathorn78eab1b2019-11-26 19:24:18 +0100234 tell_object(this_player(), break_string("Der Angestellte wirft Dir "
235 "einen missbilligenden Blick zu, laesst Dich aber passieren.",78));
Zesstra953f9972017-02-18 15:37:36 +0100236 }
MG Mud User88f12472016-06-24 23:31:02 +0200237
Zesstra953f9972017-02-18 15:37:36 +0100238 Im Zielraum:
MG Mud User88f12472016-06-24 23:31:02 +0200239
Zesstra953f9972017-02-18 15:37:36 +0100240 void look_up()
241 {
Arathorn78eab1b2019-11-26 19:24:18 +0100242 tell_object(this_player(), break_string("Ein alter Mann schaut kurz "
243 "zu Dir auf und vertieft sich dann wieder in seine Akten.",78));
Zesstra953f9972017-02-18 15:37:36 +0100244 }
MG Mud User88f12472016-06-24 23:31:02 +0200245
246
Zesstra953f9972017-02-18 15:37:36 +0100247SIEHE AUCH
248==========
MG Mud User88f12472016-06-24 23:31:02 +0200249
Zesstra953f9972017-02-18 15:37:36 +0100250 QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
251 /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
252
MG Mud User88f12472016-06-24 23:31:02 +020025308.02.2015, Arathorn