blob: 6048d5366da5641fac3991489d001ed01f79ad96 [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
Zesstra953f9972017-02-18 15:37:36 +010075 Default: "Eine Tuer.\n"
MG Mud User88f12472016-06-24 23:31:02 +020076
Zesstra953f9972017-02-18 15:37:36 +010077 D_SHORT
78 Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
79 bzw. "geschlossen" ersetzt.
MG Mud User88f12472016-06-24 23:31:02 +020080
Zesstra953f9972017-02-18 15:37:36 +010081 Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
82 aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
83 das Ganze mit break_string() umgebrochen und an P_INT_LONG
84 angehaengt.
MG Mud User88f12472016-06-24 23:31:02 +020085
Zesstra953f9972017-02-18 15:37:36 +010086 Default: "Eine %se Tuer."
MG Mud User88f12472016-06-24 23:31:02 +020087
Zesstra953f9972017-02-18 15:37:36 +010088 D_NAME
89 Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
90 der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
91 P_NAME einen String oder ein Array von Strings angeben.
MG Mud User88f12472016-06-24 23:31:02 +020092
Zesstra953f9972017-02-18 15:37:36 +010093 Default: "Tuer"
MG Mud User88f12472016-06-24 23:31:02 +020094
Zesstra953f9972017-02-18 15:37:36 +010095 D_GENDER
96 Das Geschlecht der Tuer.
MG Mud User88f12472016-06-24 23:31:02 +020097
Zesstra953f9972017-02-18 15:37:36 +010098 Default: FEMALE
MG Mud User88f12472016-06-24 23:31:02 +020099
Zesstra953f9972017-02-18 15:37:36 +0100100 D_MSGS
101 String oder Array von drei Strings. Diese Strings werden beim
102 Durchschreiten der Tuer an move() als dir bzw. dir, textout und
103 textin uebergeben.
MG Mud User88f12472016-06-24 23:31:02 +0200104
Zesstra953f9972017-02-18 15:37:36 +0100105 D_FUNC
106 String mit dem Namen einer Funktion, die im Startraum vor dem
107 Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
108 kann das Durchschreiten jedoch nicht verhindern!
109
110 D_FUNC2
111 String mit dem Namen einer Funktion, die im Zielraum nach dem
112 Durchschreiten der Tuer aufgerufen werden soll.
113
114 D_TESTFUNC
115 Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
116 vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
117 Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten.
118
119 D_RESET_MSG
120 Meldung, die beim Reset der Tuer ausgegeben wird.
121
122 D_OPEN_WITH_MOVE
123 Tuer oeffnet automatisch bei Eingabe des Befehls zum
124 Hindurchgehen.
125
126
127RUECKGABEWERT
128=============
129
130 1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.
131
132
133BEMERKUNGEN
134===========
135
136 Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
137 Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
138 wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
139 geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
140 und beim Reset.
141
142 Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
143 auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
144 einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
145 jedoch kein Schluessel noetig ist.
146
147 Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
148 veraendern will, kann dafuer in /obj/doormaster die Funktionen
149 QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.
150
151 *** ACHTUNG ***
152 Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
153 Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
154 per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
155 oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
156 dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
157 erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().
158
159
160BEISPIELE
161=========
162
163 ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
164 Extra-Beschreibung:
165
166 NewDoor("sueden","/players/rochus/room/test1");
167
168 ** Ein Portal:
169
170 NewDoor("norden","/players/rochus/room/test2",
171 "portal",
172 ([ D_NAME: "Portal",
173 D_GENDER: NEUTER,
174 D_SHORT: "Im Norden siehst Du ein %ses Portal.",
175 D_LONG: "Das Portal ist einfach nur gigantisch.\n",
176 ]) );
177
178 Alternativ mit props in alter Arraynotation:
179 NewDoor("norden","/players/rochus/room/test2",
180 "portal",
181 ({ D_NAME, "Portal",
182 D_GENDER, NEUTER,
183 D_SHORT, "Im Norden siehst Du ein %ses Portal.",
184 D_LONG, "Das Portal ist einfach nur gigantisch.\n"
185 }) );
186
187
188
189 ** Tueren mit Bewegungsmeldung:
190
191 NewDoor("norden","/room/see2",
Arathorn78eab1b2019-11-26 19:24:18 +0100192 ({"gitter","eisengitter"}),
Zesstra953f9972017-02-18 15:37:36 +0100193 ({ D_MSGS, ({"nach Norden","schwimmt",
Arathorn78eab1b2019-11-26 19:24:18 +0100194 "schwimmt von Sueden herein"}),
195 D_GENDER, NEUTER}) );
Zesstra953f9972017-02-18 15:37:36 +0100196
197 ** Eine Tuer mit Testfunktion:
198
199 NewDoor("osten","/mein/zielraum",
Arathorn78eab1b2019-11-26 19:24:18 +0100200 ({"tuer"}),
Zesstra953f9972017-02-18 15:37:36 +0100201 ({ 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()) )
Arathorn78eab1b2019-11-26 19:24:18 +0100208 {
209 tell_object(this_player(),
210 "Ein fieses Monster stellt sich Dir in den Weg.\n");
Zesstra953f9972017-02-18 15:37:36 +0100211 return 1;
Arathorn78eab1b2019-11-26 19:24:18 +0100212 }
213 return 0;
Zesstra953f9972017-02-18 15:37:36 +0100214 }
215
216 ** Nun noch eine Tuer mit einigen Extras:
217
218 NewDoor("nordwesten","/rooms/kammer",
219 ({"tuer","holztuer"}),
220 ({
Arathorn78eab1b2019-11-26 19:24:18 +0100221 D_FLAGS, (DOOR_CLOSED|DOOR_RESET_CL),
222 D_MSGS, ({"nach Nordwesten","geht",
223 "kommt durch eine Tuer herein"}),
224 D_SHORT, "Im Nordwesten siehst Du eine %se Holztuer.",
225 D_LONG, "Sie trennt den Laden vom dahinterliegenden Raum.\n",
226 D_NAME, "Holztuer",
227 D_FUNC, "view",
228 D_FUNC2, "look_up"
MG Mud User88f12472016-06-24 23:31:02 +0200229 }) );
MG Mud User88f12472016-06-24 23:31:02 +0200230
Zesstra953f9972017-02-18 15:37:36 +0100231 Im Startraum:
MG Mud User88f12472016-06-24 23:31:02 +0200232
Zesstra953f9972017-02-18 15:37:36 +0100233 void view()
234 {
Arathorn78eab1b2019-11-26 19:24:18 +0100235 tell_object(this_player(), break_string("Der Angestellte wirft Dir "
236 "einen missbilligenden Blick zu, laesst Dich aber passieren.",78));
Zesstra953f9972017-02-18 15:37:36 +0100237 }
MG Mud User88f12472016-06-24 23:31:02 +0200238
Zesstra953f9972017-02-18 15:37:36 +0100239 Im Zielraum:
MG Mud User88f12472016-06-24 23:31:02 +0200240
Zesstra953f9972017-02-18 15:37:36 +0100241 void look_up()
242 {
Arathorn78eab1b2019-11-26 19:24:18 +0100243 tell_object(this_player(), break_string("Ein alter Mann schaut kurz "
244 "zu Dir auf und vertieft sich dann wieder in seine Akten.",78));
Zesstra953f9972017-02-18 15:37:36 +0100245 }
MG Mud User88f12472016-06-24 23:31:02 +0200246
247
Zesstra953f9972017-02-18 15:37:36 +0100248SIEHE AUCH
249==========
MG Mud User88f12472016-06-24 23:31:02 +0200250
Zesstra953f9972017-02-18 15:37:36 +0100251 QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(),
252 /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()
253
MG Mud User88f12472016-06-24 23:31:02 +020025408.02.2015, Arathorn