MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | inherit "std/transport"; |
| 2 | |
| 3 | /* wolke.c Ein Beispiel zur Programmierung eines Transporters */ |
| 4 | /* von Rumata (mit kleinen Bugfixes von Wargon ;) */ |
| 5 | |
| 6 | #include <properties.h> |
| 7 | #include <language.h> |
| 8 | |
| 9 | create() |
| 10 | { |
| 11 | ::create(); |
| 12 | SetProp( P_NAME, "Woelkchen" ); |
| 13 | AddId( ({ "wolke", "woelkchen" }) ); |
| 14 | SetProp( P_GENDER, NEUTER ); |
| 15 | SetProp( P_INT_SHORT, "Auf einer kleinen Wolke" ); |
| 16 | SetProp( P_INT_LONG, |
| 17 | "Du sitzt auf einer kleinen Wolke, die zwischen Jofs und Rumatas\n" |
| 18 | + "Arbeitszimmer hin- und herpendelt. Wenn sie niedrig fliegt, kannst\n" |
| 19 | + "Du bestimmt von ihr heruntersteigen.\n" |
| 20 | ); |
| 21 | SetProp( P_SHORT, "Eine kleine Wolke" ); |
| 22 | SetProp( P_LONG, |
| 23 | "Diese suesse kleine Cumuluswolke schwebt zwischen Jofs und Rumatas\n" |
| 24 | + "Arbeitszimmer hin und her. Vielleicht kannst Du auf sie draufsteigen.\n" |
| 25 | ); |
| 26 | SetProp(P_LIGHT, 1 ); |
| 27 | SetProp(P_TRANSPARENT,1); |
| 28 | // Man soll auf(in) die Wolke und von ihr herunter schauen koennen. |
| 29 | |
| 30 | /*** Meldungen, die Transporter geben koennen ***/ |
| 31 | |
| 32 | SetProp( P_DEPARTMSG, ({ |
| 33 | "Die Wolke steigt in die Luft.\n", |
| 34 | "Die Wolke fliegt davon.\n" |
| 35 | }) ); |
| 36 | // Die erste Meldung ist fuer Leute auf der Wolke. |
| 37 | // Die zweite fuer Leute in dem Raum, in dem die Wolke ankommt. |
| 38 | |
| 39 | SetProp( P_ARRIVEMSG, ({ |
| 40 | "Die Wolke naehert sich dem Boden von @@QueryArrived@@.\n", |
| 41 | "Eine kleine Wolke schwebt herab.\n" |
| 42 | }) ); |
| 43 | // Die erste Meldung ist fuer Leute auf der Wolke. |
| 44 | // Die zweite fuer Leute in dem Raum, aus dem die Wolke abreist. |
| 45 | |
| 46 | SetProp( P_ENTERMSG, ({ |
| 47 | "steigt auf die Wolke", |
| 48 | "kommt auf die Wolke" |
| 49 | }) ); |
| 50 | // Die erste Meldung ist fuer den Raum, aus dem der Spieler kommt. |
| 51 | // (=Raum). Die zweite Meldung ist fuer Spieler in dem Raum, in |
| 52 | // den der Spieler geht (=Transporter). |
| 53 | |
| 54 | SetProp( P_LEAVEMSG, ({ |
| 55 | "steigt von der Wolke", |
| 56 | "steigt von der Wolke" |
| 57 | }) ); |
| 58 | // Die erste Meldung ist fuer den Raum, aus dem der Spieler kommt. |
| 59 | // (=Transporter). Die zweite Meldung ist fuer Spieler in dem Raum, |
| 60 | // in den der Spieler geht (=Raum). |
| 61 | |
| 62 | SetProp( P_LEAVEFAIL, "Die Wolke schwebt viel zu hoch" ); |
| 63 | // Meldung, die kommt, wenn ein Spieler den Transporter verlassen |
| 64 | // will, aber dieser an keinem Raum angelegt hat. |
| 65 | // Ist der Parameter ein String (so wie hier), so bekommt nur |
| 66 | // der betreffende Spieler die Meldung, wenn sie ein Array aus |
| 67 | // 2 Elementen ist, bekommt der Spieler die erste und alle |
| 68 | // anderen Spieler im Transporter die zweite (mit dem Namen |
| 69 | // des Spielers davor). |
| 70 | // Moeglich waere also auch: |
| 71 | /* |
| 72 | SetProp( P_LEAVEFAIL, ({ |
| 73 | "Die Wolke schwebt viel zu hoch zum Herunterspringen", |
| 74 | "faellt fast von der Wolke" |
| 75 | }) ); |
| 76 | */ |
| 77 | |
| 78 | SetProp( P_ENTERFAIL, "Es passen nur 5 Passagiere auf die Wolke.\n" ); |
| 79 | // Diese Meldung bekommt der Spieler, wenn er versucht, einen |
| 80 | // vollen Transporter zu betreten. Hier ist nur eine Meldung |
| 81 | // (an den Spieler) vorgesehen. |
| 82 | |
| 83 | SetProp( P_MAX_PASSENGERS, 5 ); |
| 84 | // Maximale Anzahl der Spieler, die sich im Transporter befinden |
| 85 | // koennen. Fuer Gegenstaende gibt es keine Beschraenkung. |
| 86 | |
| 87 | /* Verben */ |
| 88 | AddCmd( ({ "steig", "steige", "spring", "springe" }), "steige" ); |
| 89 | |
| 90 | /* Kurs */ |
| 91 | AddRoute( "players/rumata/workroom", 30, 20, "Rumatas Arbeitszimmer" ); |
| 92 | // Hier wird der Raum /players/rumata/workroom als Anlegeplatz |
| 93 | // in den Kurs eingefuegt. Der Transporter verweilt 30sek in diesem |
| 94 | // Raum und faeht dann 20sek lang, bis er den naechten Punkt |
| 95 | // erreicht. Danach kann man noch den Code angeben, der bei |
| 96 | // QueryArrived zurueckgegeben wird, setzen. Wird kein Code |
| 97 | // gesetzt, wo wird dort ein Leerstring zurueckgegeben. 0 wird |
| 98 | // dann zurueckgegeben, wenn der Transporter an keinem Raum angelegt |
| 99 | // hat. |
| 100 | |
| 101 | AddMsg( "Die Wolke treibt nun im Wind Richtung Jofs Arbeitszimmer.\n", 30 ); |
| 102 | // Hier wird eine Meldung ausgegeben, und der Transporter reist 30sek lang |
| 103 | // weiter. |
| 104 | |
| 105 | AddMsg( "Die Wolke beginnt zu sinken.\n", 10 ); |
| 106 | AddRoute( "players/jof/workroom", 30, 20, "Jofs Arbeitszimmer" ); |
| 107 | AddMsg( "Die Wolke treibt nun im Wind Richtung Rumatas Arbietszimmer.\n", 30 ); |
| 108 | AddMsg( "Die Wolke beginnt zu sinken.\n", 10 ); |
| 109 | // Nach dem Letzten Haltepunkt wird der Kurs wieder von vorn |
| 110 | // befahren. |
| 111 | |
| 112 | Start(); |
| 113 | // Lasse den Transporter am ersten dieser Haltepunkte starten. |
| 114 | } |
| 115 | |
| 116 | steige(str) |
| 117 | { |
| 118 | string arg, arg2; |
| 119 | |
| 120 | if (sscanf( str, "auf %s", arg ) > 0 && id(old_explode(arg," ")[0])) |
| 121 | return Enter(); |
| 122 | // Wenn sicher ist, dass der Spieler die Wolke BEsteigen will, |
| 123 | // kann man mit return Enter() alle weiteren Tests durchfuehren. |
| 124 | |
| 125 | if (sscanf( str, "von %s", arg ) > 0 && id(old_explode(arg, " ")[0])) |
| 126 | return Leave(); |
| 127 | // Das selbe gilt fuer das ABsteigen und Leave(). |
| 128 | // Verben sollten nach Enter() oder Leave() keine weiteren Befehle |
| 129 | // enthalten. |
| 130 | } |
| 131 | |
| 132 | |