Beispieldateien

Ein einfaches Objekt

----------



// 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;
}