blob: 3000c97997f5228bf05abaa6f6c8126cdc00a336 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001> FUNKTIONSWEISE VON TRANSPORTERN <
2Version 1.0 (04.05.1993) von Rumata
3===================================
4
5
6INHALT:
7======
8
9 1. Allgemeines
10 2. Properties
11 3. Haltestellen
12 4. Steuerung
13 5. Betreten und verlassen
14 6. Extras
15 7. Kommandos in Trnasportern
16
17
181. ALLGEMEINES
19==============
20
21 Ein Transporter ist ein Raum mit besonderen Eigenschaften.
22 Waehrend normale Raume miteinnder starr verbunden sind,
23 kann dieser Raum seine Verbindung zu anderen Raeumen mit
24 der Zeit aendern.
25
26 Jeder Transporter besitzt einen 'Kurs' den er abfaehrt; nach der
27 letzten 'Haltestelle' beginnt der Kurs wieder von Vorne.
28 Will man einen Kurs setzen, der entlang einer Strecke hin-
29 und zurueck fuehrt, so muss man jede Haltestelle einmal fuer
30 den Hinweg und einmal fuer den Rueckweg einfuegen.
31
32 Ein Beispiel, wie man einen solchen Transporter programmiert,
33 ist in /doc/beispiele/wolke.c zu sehen (und zu laden :-).
34
352. PROPERTIES
36=============
37
38 P_ENTERMSG
39 Array mit zwei Meldungen in der Art von msgin und
40 msgout. Die erste Meldung ist fuer den Raum, den der
41 Spieler verlaesst, und die zweite fuer den Transporter,
42 in den er geht.
43
44 P_LEAVEMSG
45 Array mit zwei Meldungen, eine fuer den Transporter, den
46 er verlaesst, und eine fuer den Raum, in den er kommt.
47
48 P_ENTERFAIL
49 Meldung an ein Wesen, wenn den vollen Transporter
50 betreten will. Ist die Prop. ein Array, so wird das erste
51 Element als Meldung an das Wesen, das zweite als Meldung
52 an die Mitspieler im Raum geschickt. Ist die Property
53 eine Closure, wird diese ausgefuehrt, wenn ein Spieler
54 vergeblich versucht, den Transporter zu betreten.
55
56 P_LEAVEFAIL
57 Meldung an ein Wesen, wenn es ausserhalb der Anlegezeiten
58 den Transporter verlassen will. Ist die Prop. ein Array,
59 so wird das erste Element als Meldung an das Wesen, das
60 zweite als Meldung an die Mitspieler im Transporter
61 geschickt. Ist die Property eine Closure, wird diese
62 ausgefuehrt, wenn ein Spieler vergeblich versucht, den
63 Transporter zu verlassen.
64
65 P_ARRIVEMSG
66 Ein Array mit zwei Meldungen. Das erste Element ist die
67 Meldung, die die Wesen im Transporter bekommen. Die
68 zweite Meldung ist fuer die Wesen in dem Raum, an dem
69 der Transporter anlegt.
70
71 P_DEPARTMSG
72 Dito fuer das Ablegen.
73
74 P_MAX_PASSENGERS
75 Numerischer Wert fuer die maximale Anzahl von Wesen, die
76 sich in dem Transporter aufhalten duerfen.
77 0 bedeutet unbeschaenkte Spielerzahl.
78
79
803. HALTESTELLEN
81===============
82
83 Es gibt 3 Sorten von Haltestellen:
84
85 1.) Raeume als Haltestellen.
86
87 FUNKTION:
88
89 AddRoute( raum, verweil, next );
90 oder
91 AddRoute( raum, verweil, next, code );
92
93 PARAMETER:
94
95 raum - Raum, an dem der Transporter halten soll.
96 verweil - Zeit in Sekunden, die der Transporter in dem
97 Raum verbleibt, bis er weiterfaehrt.
98 next - Zeit in Sekunden bis zur naechsten Halte-
99 stelle.
100
101 code - Text, der von der Funktion QueryArrived
102 zurueckgegeben wird, wenn der Transporter
103 an dieser Haltestelle angelegt hat.
104 Wird dieser Parameter nicht angegeben, wird
105 ein leerer String als code gesetzt.
106
107 2.) Meldungen als Haltestellen.
108
109 FUNKTION:
110
111 AddMsg( text, next );
112
113 PARAMETER:
114
115 text - Text, der Meldung, die in dem Transporter
116 ausgegeben wird.
117 next - Zeit in Sekunden bis zur naechsten Halte-
118 stelle.
119
120 3.) Funktionsaufrufe als Haltestellen.
121
122 FUNKTION:
123
124 AddFun( fun, next );
125
126 PARAMETER:
127
128 fun - Name einer Funktion, die im Transporter
129 aufgerufen wird.
130 next - Zeit in Sekunden bis zur naechsten Halte-
131 stelle.
132
1334. STEUERUNG
134============
135
136 FUNKTION
137
138 Start();
139 oder
140 Start(nummer);
141
142 BESCHREIBUNG:
143
144 Der Transporter soll sofort an der Haltestelle mit
145 der angegebenen Nummer (keine Nummer heisst an der ersten)
146 anlegen und von da ab seinen Kurs fahren.
147
148 FUNKTION:
149
150 Halt();
151
152 BESCHREIBUNG:
153
154 Halte die Fahrt an. Der Transporter bleibt stehen, wo
155 er ist.
156
157
1585. BETRETEN UND VERLASSEN
159=========================
160
161 Der Transporter hat keine Verben programmiert, mit denen man
162 den Transporter betreten oder verlassen kann.
163 Dafuer muessen mit AddCmd() Verben eingefuehrt werden, die
164 auf selbstgeschriebene Funktionen zugreifen.
165
166 FUNKTION:
167
168 Enter();
169
170 BESCHREIBUNG:
171
172 Teste, ob fuer dun aktuellen Spieler (this_player())
173 noch Platz im Transporter ist und ob er sich ausserhalb
174 des Transporters befindet. Wenn ja, bewege ihn in den
175 Transporter. Wenn der Transporter eine Reaktion (Bewegen des
176 Spielers oder Ueberlauf), so gib eine 1 zurueck sonst eine 0.
177
178 Wenn der Transporter nicht da (also unsichtbar) ist, tue fuer
179 die Spieler ausserhalb des Transporters so,
180 als ob das Verb nicht definiert wurde.
181
182 Dieser Wert kann im allgemeinen direkt als returnwert benutzt
183 werden.
184
185 FUNKTION:
186
187 Leave();
188
189 BESCHREIBUNG:
190
191 Wenn der Momentane Spieler nicht im Transporter ist, so gib
192 eine Fehlermeldung aus. Anderenfalls teste, ob der
193 Transporter an einen Raum angelegt hat. Wenn nein, gebe
194 die LEAVEFAIL Meldung aus; und wenn alles ok ist, so
195 bewege den Spieler aus dem Transporter.
196
1976. EXTRAS
198=========
199
200 FUNKTION:
201
202 QueryArrived();
203
204 BESCHREIBUNG:
205
206 Gebe den Code des Raumes zurueck, an dem der Transporter
207 gerade anliegt. Hat der Raum keinen Code, gebe einen
208 Leerstring zurueck. Liegt der Transporter an keinem Raum
209 an, so gebe 0 zurueck.
210
211 Diese Funktion bietet sich an um mittels process_string
212 die Ankunfts- und Abfahrtsmeldungen abwechslungsreich
213 zu gestalten.
214
215 FUNKTION:
216
217 QueryPassengers(),
218
219 BESCHREIBUNG:
220
221 Gebe eine Liste mit allen Lebewesen, die sich auf/in dem
222 Transporter befinden, zurueck.
223
224 FUNKTION:
225
226 RemoveRoute();
227
228 BESCHREIBUNG:
229
230 Halte den Transporter an und loesche dessen Kurs.
231
2327. KOMMANDOS IN TRANSPORTERN
233============================
234
235 Da sich der Transporter in dem Raum befindet, in dem er angelegt
236 hat, sind alle Kommandos des Transporters auch dort verfuegbar.
237 Selbst wenn der Transporter abgelegt hat, steht er noch immer
238 unsichtbar dort herum.
239
240 Deshabl muss in den Kommandos vorsorge grtroffen werden, dass nur
241 die richtigen Spieler (die drinnen und die draussen) die richtigen
242 Kommandos ausfuehren koennen.
243
244 KOMMANDOS FUER SPIELER AUSSERHALB:
245
246 Es muss abgetestet werden, ob der Spieler nicht im
247 Transporter ist, und ob der Transporter angelegt hat.
248
249 if( environment(this_player())==this_object()
250 || !QueryArrived() ) return 0;
251
252 KOMMANDOS FUER SPIELER INNERHALB:
253
254 Abtesten, ob der Spieler wirklich im Transport ist.
255
256 if( environment(this_player())!=this_object() )
257 return 0;
258
259 Vorsicht auch bei AddExits innerhalb des Transporters,
260 aber daran arbiete ich noch... :-)
261
262 Die Funktionen Enter() und Leave() haben diese Funktionalitaet
263 eingebaut.
264