blob: b623c35d6ff7d9ef7bb3b7f0eea36d03a0be5815 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001
2 PROGRAMMIERUNG VON RAEUMEN - TEIL 1
3 von Don Rumata, MudAdm des MorgenGrauens
4 =============================================================
5
6 Ein Raum ist sehr einfach zu programmieren. Man fuellt
7 ihn mit den Informationen, die man in ihm haben will.
8
9 Am besten erklaert sich alles an einem Beispiel. Zu den
10 Funktionen sind in /doc/efuns und /doc/lfuns weitere
11 Informationen erhaeltlich.
12
13 Nachfolgend kannst Du einen (zugegebeneermassen ueber-
14 ausfuehrlich) dokumentierten Beispielraum finden.
15 In /doc/beispiele/raum1.c kannst Du den selben Raum
16 noch einmal (ohne Kommentare) finden. Den Raum
17 kannst Du uebrigens auch betreten.
18
19/* beispielraum.c von Rumata */
20
21inherit "std/room";
22 // Alle Raeume muessen diese Zeile enthalten, da in dem
23 // Standardraum wichtige Funktionen definiert werden, die
24 // innerhalb des Spieles benoetigt werden.
25
26#include <properties.h>
27 // In diesem File sind die Namen der Properties definiert.
28 // Fuer naehre Informationen kannst Du in
29 // /doc/concepts/properties und in /doc/properties.h
30 // nachschauen, da es sehr viele verschiedene Properties
31 // gibt.
32
33#include <language.h>
34 // Diese Module enthalten alle Definitionen im Zusammenhang
35 // mit Sprache. Siehe /doc/language.h
36
37create()
38// Diese Funktion wird automatisch aufgerufen, wenn der Raum geladen
39// wird. Das passiert beim Kommando "load /doc/beispiel/bspraum1" oder
40// wenn ein Spieler den Raum als erster betritt.
41{
42 ::create();
43 // Diese Funktion darf NIEMALS fehlen! Sie sorgt dafuer, dass
44 // der Raum auch die allgemeine Initialisierung durchfuehrt,
45 // da diese hier die der "Mutter-Klasse" std/room ueberlaedt.
46
47 SetProp( P_INT_SHORT, "Ein kleines Schreibzimmer" );
48 SetProp( P_INT_LONG,
49 "Du stehst in einem kleinen Schreibzimmer.\n"
50 + "Es gehoerte wohl irgendwann einmal einem Magier, aber nun\n"
51 + "ist dieser Raum verwaist und rottet vor sich hin.\n"
52 + "Ein grosser Schreibtisch in der Mitte des Raumes scheint\n"
53 + "noch einigermassen gut erhalten zu sein. Durch die Tuer\n"
54 + "im Norden faellt etwas Licht hinein.\n"
55 );
56 SetProp( P_LIGHT, 1 );
57 SetProp( P_INDOORS, 1 );
58 // Diese Properties MUESSEN in JEDEM Raum gesetzt werden.
59 // P_INT_SHORT = Beschreibung fuer Spieler im "kurz"-Modus.
60 // P_INT_LONG = Beschreibung fuer Spieler im "lang"-Modus.
61 // P_LIGHT = 1 fuer Hell, 0 fuer Dunkel
62 // P_INDOORS = 1, wenn man den Himmel nicht sehen kann.
63
64 AddDetail( ({ "schreibtisch", "tisch" }),
65 "Auf dem Tisch liegt eine dicke Staubschicht.\n"
66 + "Eine Schublade findest Du ebenfalls.\n"
67 );
68 AddDetail( ({ "staub", "staubschicht", "schicht" }),
69 "Du malst gelangweilt einige Kreise in den Staub.\n"
70 );
71 AddDetail( "schublade",
72 "So sehr Du Dich anstrengst; Du kannst sie nicht bewegen.\n"
73 );
74 AddDetail( "tuer" ,
75 "Sie steht seit Jahren offen und ist in dieser Lage\n"
76 + "hoffnungslos festgerostet.\n"
77 );
78 // Details sind Dinge, die man sich in einem Raum anschauen
79 // aber nicht nehmen kann. Je mehr Details ein Raum hat, destso
80 // schoener ist er. Schaut sich ein Spieler ein Detail an,
81 // so bekommt der die angegebene Beschreibung.
82
83 AddRoomCmd( ({ "schliesse", "oeffne", "bewege",
84 "schliess", "beweg" }), "beweg_etwas" );
85 // RoomCommands sind Befehle, die man in diesem ausfuehren kann.
86 // Es wird die angegebene Funktion ausgefuehrt.
87 // WICHTIG: Als Verben sollten immer die IMPERATIVE benutzt
88 // werden! Also nicht "lese", sondern "lies".
89
90 AddExit( "norden", "players/rumata/workroom" );
91 // Definition eines Ausgangs. Das zeite Argument bestimmt den
92 // Raum, den ein Spieler erreicht, wenn er in die angegebene
93 // Richtung geht.
94
95}
96
97beweg_etwas( str )
98// Wenn ein Spieler ein Kommando ausfuehrt, so wird alles, was hinter
99// dem Verb steht als String uebergeben, es landet also hier in "str".
100// WICHTIG: Wenn der Befehl abgearbeitet wird, MUSS er eine 1 zurueck-
101// geben. Wenn der Befehl nichts Sinnvolles tuen konnte, eine 0.
102{
103 notify_fail( "Was willst Du denn bewegen ?" );
104 // Meldung, die der Spieler bekommt, wenn ausser dem Raum auch
105 // kein anderes Objekt den Befehl verarbeiten konnte.
106 if( str == "tuer" )
107 {
108 write( "Die Tuer ist hoffnungslos festgerostet.\n" );
109 // Write gibt eine Meldung an den Spieler (und nur an ihn)
110 // aus.
111 return 1;
112 // Das Kommando bewirkt zwar aus Sicht des Spielers
113 // nichts, aber es konnte abgearbeitet werden.
114 // Also gib eine 1 zurueck.
115 }
116 if ( str == "lade" || str == "schublade" )
117 {
118 write( "Die Schublade klemmt einfach nur.\n" );
119 return 1;
120 }
121 if ( query_verb() == "bewege" &&
122 ( str == "tisch" || str == "schreibtisch" ) )
123 {
124 write(
125 "Der Tisch scheint am Boden festgeschraubt zu sein.\n"
126 );
127 say(
128 this_player()->name(WER,2)+" zerrt am Schreibtisch.\n"
129 );
130 // say gibt eine Meldung an alle Spieler im selben
131 // Raum wie der Spieler (aber nicht an ihn selbst) aus.
132 return 1;
133 }
134 return 0;
135 // Der Raum konnte nichts mit dem Kommando anfangen, also gib
136 // eine 0 zurueck.
137}