MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | > FUNKTIONSWEISE VON TRANSPORTERN < |
| 2 | Version 1.0 (04.05.1993) von Rumata |
| 3 | =================================== |
| 4 | |
| 5 | |
| 6 | INHALT: |
| 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 | |
| 18 | 1. 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 | |
| 35 | 2. 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 | |
| 80 | 3. 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 | |
| 133 | 4. 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 | |
| 158 | 5. 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 | |
| 197 | 6. 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 | |
| 232 | 7. 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 | |