blob: d3c5475265d9a2de1f03dd72c286226ce59776b4 [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.
Arathorn41004de2020-10-18 22:03:28 +020029
MG Mud User88f12472016-06-24 23:31:02 +020030 /*** Meldungen, die Transporter geben koennen ***/
Arathorn41004de2020-10-18 22:03:28 +020031
MG Mud User88f12472016-06-24 23:31:02 +020032 SetProp( P_DEPARTMSG, ({
Arathorn41004de2020-10-18 22:03:28 +020033 "Die Wolke steigt in die Luft.\n",
MG Mud User88f12472016-06-24 23:31:02 +020034 "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.
Arathorn41004de2020-10-18 22:03:28 +020038
39 Set( P_ARRIVEMSG, function string* () {
40 return ({
41 sprintf("Die Wolke naehert sich dem Boden von %s.\n",QueryArrived()),
42 "Eine kleine Wolke schwebt herab.\n"});
43 }, F_QUERY_METHOD);
MG Mud User88f12472016-06-24 23:31:02 +020044 // Die erste Meldung ist fuer Leute auf der Wolke.
45 // Die zweite fuer Leute in dem Raum, aus dem die Wolke abreist.
Arathorn41004de2020-10-18 22:03:28 +020046
MG Mud User88f12472016-06-24 23:31:02 +020047 SetProp( P_ENTERMSG, ({
48 "steigt auf die Wolke",
49 "kommt auf die Wolke"
50 }) );
51 // Die erste Meldung ist fuer den Raum, aus dem der Spieler kommt.
52 // (=Raum). Die zweite Meldung ist fuer Spieler in dem Raum, in
53 // den der Spieler geht (=Transporter).
Arathorn41004de2020-10-18 22:03:28 +020054
MG Mud User88f12472016-06-24 23:31:02 +020055 SetProp( P_LEAVEMSG, ({
56 "steigt von der Wolke",
57 "steigt von der Wolke"
58 }) );
59 // Die erste Meldung ist fuer den Raum, aus dem der Spieler kommt.
60 // (=Transporter). Die zweite Meldung ist fuer Spieler in dem Raum,
61 // in den der Spieler geht (=Raum).
Arathorn41004de2020-10-18 22:03:28 +020062
MG Mud User88f12472016-06-24 23:31:02 +020063 SetProp( P_LEAVEFAIL, "Die Wolke schwebt viel zu hoch" );
64 // Meldung, die kommt, wenn ein Spieler den Transporter verlassen
65 // will, aber dieser an keinem Raum angelegt hat.
66 // Ist der Parameter ein String (so wie hier), so bekommt nur
67 // der betreffende Spieler die Meldung, wenn sie ein Array aus
68 // 2 Elementen ist, bekommt der Spieler die erste und alle
69 // anderen Spieler im Transporter die zweite (mit dem Namen
70 // des Spielers davor).
71 // Moeglich waere also auch:
72 /*
73 SetProp( P_LEAVEFAIL, ({
74 "Die Wolke schwebt viel zu hoch zum Herunterspringen",
75 "faellt fast von der Wolke"
76 }) );
77 */
78
79 SetProp( P_ENTERFAIL, "Es passen nur 5 Passagiere auf die Wolke.\n" );
80 // Diese Meldung bekommt der Spieler, wenn er versucht, einen
81 // vollen Transporter zu betreten. Hier ist nur eine Meldung
82 // (an den Spieler) vorgesehen.
83
84 SetProp( P_MAX_PASSENGERS, 5 );
85 // Maximale Anzahl der Spieler, die sich im Transporter befinden
86 // koennen. Fuer Gegenstaende gibt es keine Beschraenkung.
87
88 /* Verben */
89 AddCmd( ({ "steig", "steige", "spring", "springe" }), "steige" );
90
91 /* Kurs */
92 AddRoute( "players/rumata/workroom", 30, 20, "Rumatas Arbeitszimmer" );
93 // Hier wird der Raum /players/rumata/workroom als Anlegeplatz
94 // in den Kurs eingefuegt. Der Transporter verweilt 30sek in diesem
95 // Raum und faeht dann 20sek lang, bis er den naechten Punkt
96 // erreicht. Danach kann man noch den Code angeben, der bei
97 // QueryArrived zurueckgegeben wird, setzen. Wird kein Code
98 // gesetzt, wo wird dort ein Leerstring zurueckgegeben. 0 wird
99 // dann zurueckgegeben, wenn der Transporter an keinem Raum angelegt
100 // hat.
101
102 AddMsg( "Die Wolke treibt nun im Wind Richtung Jofs Arbeitszimmer.\n", 30 );
103 // Hier wird eine Meldung ausgegeben, und der Transporter reist 30sek lang
104 // weiter.
105
106 AddMsg( "Die Wolke beginnt zu sinken.\n", 10 );
107 AddRoute( "players/jof/workroom", 30, 20, "Jofs Arbeitszimmer" );
108 AddMsg( "Die Wolke treibt nun im Wind Richtung Rumatas Arbietszimmer.\n", 30 );
109 AddMsg( "Die Wolke beginnt zu sinken.\n", 10 );
110 // Nach dem Letzten Haltepunkt wird der Kurs wieder von vorn
111 // befahren.
Arathorn41004de2020-10-18 22:03:28 +0200112
MG Mud User88f12472016-06-24 23:31:02 +0200113 Start();
114 // Lasse den Transporter am ersten dieser Haltepunkte starten.
115}
116
117steige(str)
118{
119 string arg, arg2;
Arathorn41004de2020-10-18 22:03:28 +0200120
MG Mud User88f12472016-06-24 23:31:02 +0200121 if (sscanf( str, "auf %s", arg ) > 0 && id(old_explode(arg," ")[0]))
122 return Enter();
123 // Wenn sicher ist, dass der Spieler die Wolke BEsteigen will,
124 // kann man mit return Enter() alle weiteren Tests durchfuehren.
125
126 if (sscanf( str, "von %s", arg ) > 0 && id(old_explode(arg, " ")[0]))
127 return Leave();
128 // Das selbe gilt fuer das ABsteigen und Leave().
129 // Verben sollten nach Enter() oder Leave() keine weiteren Befehle
130 // enthalten.
131}