// Ein Maiskolben (nach Original "maiskolben.c" in Kogida)
//
// 05.08.99 Holger@Wunderland
inherit "std/thing"; // Wir erben das Standard-Ding
#include <properties.h> // die wichtigen Properties
#include <defines.h> // ein paar nuetzliches Defines
void create()
{
// Bin ich kein Klon? -> Dann brich das create() gleich ab!
if (!clonep()) return;
// auch die Mutterklasse (Ding) braucht ihr create()
// NIEMALS VERGESSEN!
::create();
// Langbeschreibung setzen
SetProp(P_LONG,
"Ein praechtiger grosser gelber Maiskolben.");
// den Singular-Name setzen
SetProp(P_NAME, "Maiskolben");
// den Plural-Name setzen (ist zufaellig gleich den Singular)
SetProp(P_PLURAL,"Maiskolben");
// Wir fuegen dem Name ein Adjektiv hinzu. Die Grammatik wird
// automatisch richtig ermittelt, deshalb ungebeugt.
SetProp(P_NAME_ADJ, "gross");
// Das Geschlecht setzen (maennlich)
SetProp(P_GENDER, MALE);
// einen gewissen Wert setzen in Grundeinheiten (Bernsteine)
SetProp(P_VALUE, 10 );
// das Gewicht setzen in Gramm
SetProp(P_WEIGHT, 200 );
// die 'Sperrigkeit' bzw 'Unhandlichkeit' setzen
SetProp(P_BULKINESS, 70 );
// Singular und Plural Id setzen (damit spricht man das Objekt an)
AddId( ({ "maiskolben", "kolben", "mais" }),
({ "maiskolben", "kolben", "mais" }));
// Geruch des Maiskolbens setzen
SetProp(P_SMELL, "Der Maiskolben riecht nach garnichts.");
// Und noch ein paar Details zum untersuchen
AddDetail( "schale",
"Der Maiskolben ist bereits geschaelt.");
AddDetail( ({ "koerner", "korn" }),
"Der Maiskolben ist ganz reif. Die Koerner sind steinhart.");
// Jetzt fuegen wir ein Kommando 'essen' hinzu, um eine Meldung auszu-
// geben, wenn ein Spieler versucht den Kolben zu essen.
// Das erste Argument ist ein Kommandostring. Gruppen sind durch '&'
// getrennt. Innerhalb einer Gruppe sind die Alternativen durch '|'
// getrennt. Aus jeder Gruppe muss mindestens eine Alternative
// vorliegen, dann wird 'ess_func' aufgerufen. Liegt nur die erste
// Gruppe vor und keine Wort aus der zweiten Gruppe, wird die Fehler-
// meldung in Argument 3 ausgegeben. Moegliche Eingaben des Spielers
// koennten bei diesen AddCmd() zum Beispiel sein:
// 'iss maiskolben' , 'esse den kolben' oder auch 'iss den mais'
// Stimmt nur eine Alternative aus der ersten Gruppe, (Bsp:
// 'iss korn', wird "Was willst Du essen?" als Default-Fehlermeldung
// gesetzt. Gibt es keine weiteren Objekte, die die Syntax verwerten
// koennen, wird diese Meldung statt "Wie bitte?" ausgegeben. Gibt es
// ein Objekt in der Naehe des Spielers, das 'iss korn' verarbeitet
// (z.B. ein Maiskorn) bleibt die Fehlermeldung ohne Einfluss.
AddCmd( "iss|esse|beisse&maiskolben|kolben|mais", "ess_func",
"Was willst Du essen?");
}
// Diese Funktion wird durch das AddCmd() aufgerufen, wenn der Spieler
// die richtige Syntax eingegeben hat. Fuehrt sie zu einem Erfolg, muss
// sie 1 returnen. Ansonsten muss 0 zurueckgegeben werden, damit andere
// Objekte die Chance bekommen die Syntax zu verwerten. Da hier eine
// Meldung ausgegeben wird, geben wir 1 zurueck.
int ess_func() {
// write() gibt eine Meldung an den aktiven Spieler aus (der der versucht,
// den Kolben zu essen. break_string() bricht vorher den Ausgabetext auf
// die normale Terminalfensterbreite um.
write(break_string("Du beisst genuesslich in den Maiskolben, doch Du "
"musst feststellen, dass er viel zu hart ist, um ihn zu essen. Um Deine "
"Zaehne nicht zu ruinieren, gibst Du auf."));
// say() gibt eine Meldung an die anderen, umstehenden Lebwesen aus, ausser
// an den aktiven Spieler. Die anderen Lebwesen/Spieler sehen also, was der
// aktive Spieler gerade tut.
// this_player() ist der aktive Spieler.
// this_player()->name(WER, NAME_AUTO|NAME_CAP) liefert den Namen des aktiven
// Spielers im Nominativ und mit dem ersten Buchstaben gross geschrieben.
// Dahinter wird der restliche Text einfach angehangen. Das '\n' am
// Ende markiert einen Zeilenumbruch.
say(this_player()->name(WER, NAME_AUTO|NAME_CAP)+" beisst sich an einem Maiskolben "
"fast die Zaehne aus...\n");
// Wir geben 1 zurueck, weil die Verarbeitung des Kommandos erfolgreich war.
// Dass der Spieler den Maiskolben nicht essen kann, spielt dafuer keine
// Rolle, denn es geht nur darum, dass der Befehl an sich verstanden wurde.
return 1;
}
|