blob: b623c35d6ff7d9ef7bb3b7f0eea36d03a0be5815 [file] [log] [blame]
PROGRAMMIERUNG VON RAEUMEN - TEIL 1
von Don Rumata, MudAdm des MorgenGrauens
=============================================================
Ein Raum ist sehr einfach zu programmieren. Man fuellt
ihn mit den Informationen, die man in ihm haben will.
Am besten erklaert sich alles an einem Beispiel. Zu den
Funktionen sind in /doc/efuns und /doc/lfuns weitere
Informationen erhaeltlich.
Nachfolgend kannst Du einen (zugegebeneermassen ueber-
ausfuehrlich) dokumentierten Beispielraum finden.
In /doc/beispiele/raum1.c kannst Du den selben Raum
noch einmal (ohne Kommentare) finden. Den Raum
kannst Du uebrigens auch betreten.
/* beispielraum.c von Rumata */
inherit "std/room";
// Alle Raeume muessen diese Zeile enthalten, da in dem
// Standardraum wichtige Funktionen definiert werden, die
// innerhalb des Spieles benoetigt werden.
#include <properties.h>
// In diesem File sind die Namen der Properties definiert.
// Fuer naehre Informationen kannst Du in
// /doc/concepts/properties und in /doc/properties.h
// nachschauen, da es sehr viele verschiedene Properties
// gibt.
#include <language.h>
// Diese Module enthalten alle Definitionen im Zusammenhang
// mit Sprache. Siehe /doc/language.h
create()
// Diese Funktion wird automatisch aufgerufen, wenn der Raum geladen
// wird. Das passiert beim Kommando "load /doc/beispiel/bspraum1" oder
// wenn ein Spieler den Raum als erster betritt.
{
::create();
// Diese Funktion darf NIEMALS fehlen! Sie sorgt dafuer, dass
// der Raum auch die allgemeine Initialisierung durchfuehrt,
// da diese hier die der "Mutter-Klasse" std/room ueberlaedt.
SetProp( P_INT_SHORT, "Ein kleines Schreibzimmer" );
SetProp( P_INT_LONG,
"Du stehst in einem kleinen Schreibzimmer.\n"
+ "Es gehoerte wohl irgendwann einmal einem Magier, aber nun\n"
+ "ist dieser Raum verwaist und rottet vor sich hin.\n"
+ "Ein grosser Schreibtisch in der Mitte des Raumes scheint\n"
+ "noch einigermassen gut erhalten zu sein. Durch die Tuer\n"
+ "im Norden faellt etwas Licht hinein.\n"
);
SetProp( P_LIGHT, 1 );
SetProp( P_INDOORS, 1 );
// Diese Properties MUESSEN in JEDEM Raum gesetzt werden.
// P_INT_SHORT = Beschreibung fuer Spieler im "kurz"-Modus.
// P_INT_LONG = Beschreibung fuer Spieler im "lang"-Modus.
// P_LIGHT = 1 fuer Hell, 0 fuer Dunkel
// P_INDOORS = 1, wenn man den Himmel nicht sehen kann.
AddDetail( ({ "schreibtisch", "tisch" }),
"Auf dem Tisch liegt eine dicke Staubschicht.\n"
+ "Eine Schublade findest Du ebenfalls.\n"
);
AddDetail( ({ "staub", "staubschicht", "schicht" }),
"Du malst gelangweilt einige Kreise in den Staub.\n"
);
AddDetail( "schublade",
"So sehr Du Dich anstrengst; Du kannst sie nicht bewegen.\n"
);
AddDetail( "tuer" ,
"Sie steht seit Jahren offen und ist in dieser Lage\n"
+ "hoffnungslos festgerostet.\n"
);
// Details sind Dinge, die man sich in einem Raum anschauen
// aber nicht nehmen kann. Je mehr Details ein Raum hat, destso
// schoener ist er. Schaut sich ein Spieler ein Detail an,
// so bekommt der die angegebene Beschreibung.
AddRoomCmd( ({ "schliesse", "oeffne", "bewege",
"schliess", "beweg" }), "beweg_etwas" );
// RoomCommands sind Befehle, die man in diesem ausfuehren kann.
// Es wird die angegebene Funktion ausgefuehrt.
// WICHTIG: Als Verben sollten immer die IMPERATIVE benutzt
// werden! Also nicht "lese", sondern "lies".
AddExit( "norden", "players/rumata/workroom" );
// Definition eines Ausgangs. Das zeite Argument bestimmt den
// Raum, den ein Spieler erreicht, wenn er in die angegebene
// Richtung geht.
}
beweg_etwas( str )
// Wenn ein Spieler ein Kommando ausfuehrt, so wird alles, was hinter
// dem Verb steht als String uebergeben, es landet also hier in "str".
// WICHTIG: Wenn der Befehl abgearbeitet wird, MUSS er eine 1 zurueck-
// geben. Wenn der Befehl nichts Sinnvolles tuen konnte, eine 0.
{
notify_fail( "Was willst Du denn bewegen ?" );
// Meldung, die der Spieler bekommt, wenn ausser dem Raum auch
// kein anderes Objekt den Befehl verarbeiten konnte.
if( str == "tuer" )
{
write( "Die Tuer ist hoffnungslos festgerostet.\n" );
// Write gibt eine Meldung an den Spieler (und nur an ihn)
// aus.
return 1;
// Das Kommando bewirkt zwar aus Sicht des Spielers
// nichts, aber es konnte abgearbeitet werden.
// Also gib eine 1 zurueck.
}
if ( str == "lade" || str == "schublade" )
{
write( "Die Schublade klemmt einfach nur.\n" );
return 1;
}
if ( query_verb() == "bewege" &&
( str == "tisch" || str == "schreibtisch" ) )
{
write(
"Der Tisch scheint am Boden festgeschraubt zu sein.\n"
);
say(
this_player()->name(WER,2)+" zerrt am Schreibtisch.\n"
);
// say gibt eine Meldung an alle Spieler im selben
// Raum wie der Spieler (aber nicht an ihn selbst) aus.
return 1;
}
return 0;
// Der Raum konnte nichts mit dem Kommando anfangen, also gib
// eine 0 zurueck.
}