blob: 3e26020d0bdfbac71ea3307f6e146a90ab4037d8 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001inherit "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
9create()
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
116steige(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