Beispieldateien

Ein komplexer Beispielraum

----------


// Ein komplexer Beispielraum (nach dem Original-Vorwagen in Kogida)
//
// ******************************* ACHTUNG ****************************
// * Bitte unbedingt erst raum1.c bis raum4.c ansehen und durchlesen, *
// * sonst koennte es hier Verstaendnisprobleme geben :-) Hier ist    *
// * nichts kommentiert.                              Holger          *
// ********************************************************************
//
// 05.08.99 Holger@Wunderland
//

inherit "std/room";

#include <properties.h>

private mapping apples;

void create() {
  ::create();

  SetProp(P_INDOORS, 0);
  SetProp(P_LIGHT, 2);
  SetProp(P_INT_SHORT, "Vor dem Wohnwagen");
  SetProp(P_INT_LONG,
    "Du stehst auf einer schoenen grossen Wiese. Ueberall wachsen "
    "wunderbare bunte Blumen. Insekten fliegen von Bluete zu Bluete "
    "und laben sich an dem Nektar. Hier und da stehen gepflegte kleine "
    "Obstbaeume, auf denen saftige Fruechte wachsen. Ein kleiner Huegel "
    "verdeckt im Sueden die Sicht auf die Berge. Im Norden stehen mehrere "
    "kleine gepflegte Haeuser. Eine kleine Treppe fuehrt in den Wohnwagen "
    "im Westen. Im Osten kannst Du das Beispielgebiet betreten.\n"
    "Ein Obstbaum.");
  SetProp(P_INT_LONG_NIGHT,
    "Der Mond und das von den Haeusern herueberscheinende Licht "
    "erhellen die Wiese. Schemenhaft erkennst Du im Westen einen Wohnwagen "
    "und im Sueden einen Huegel. Im Osten scheint ein breiterer Weg zu "
    "liegen, der ins Beispielgebiet fuehrt.\n"
    "Ein Obstbaum.");
  SetProp(P_SMELL, "Hmmm. Es duftet nach verschiedensten Blumen hier!");

  AddDetail(({"baeume","obstbaeume"}),
    "Du siehst in der Naehe einige kleine Obstbaeume. Ein kleiner Apfelbaum faellt "
    "Dir besonders auf.");
  AddDetail(({"baum","obstbaum","silhouette","apfelbaum"}),
    "Das ist ein Apfelbaum. Er hat einen kurzen dicken Stamm und eine "
    "gut verschnittene runde Krone. Auf ihm wachsen grosse gelbe saftige "
    "Aepfel.",
    "In der Nacht wirkt die Silhouette des Baumes unheimlich.");
  AddDetail(({"krone"}),
    "Die Krone ist kreisrund. Du erkennst, dass der Baum sehr gut gepflegt "
    "wird. Die duennen Aeste bewegen sich leicht im Wind. Immer, wenn ein "
    "etwas staerkerer Windzug kommt, geht ein leichtes Rauschen durch die "
    "Blaetter.",
    "Unheimlich wirkt die Krone des Baumes bei Nacht. Wie Die dicken Aeste "
    "scheinen sich wie riesige Arme im Wind zu bewegen.");
  AddDetail(({"staemme","obstbaumstaemme","baumstaemme"}),
    "Die Baeume haben kurze gerade Baumstaemme.");
  AddDetail(({"stamm","obstbaumstamm","baumstamm"}),
    "Ein gesunder, gerade gewachsener, kurzer Obstbaumstamm.",
    "Ein kurzer Stamm. Viel kannst Du nicht erkennen.");
  AddDetail(({"aepfel","fruechte","obst","frucht"}),
    "Die Aepfel sehen einfach lecker aus. Ein besonders schoener faellt "
    "Dir besonders auf.",
    "In der Dunkelheit kannst Du nur einen einzigen Apfel entdecken.");
  AddDetail(({"apfel"}),
    "Der grosse leckere Apfel haengt ein ganzes Stueck ueber Dir. "
    "Vielleicht faellt er herunter, wenn Du den Baum schuettelst.");
  AddDetail(({"blatt","blaetter"}),
    "Die gruenen Blaetter rauschen hin und wieder.",
    "Das Rauschen der Blaetter durchbricht hin und wieder die Stille "
    "der Nacht.");
  AddDetail(({"ast","aeste","zweig","zweige","gabel","astgabel","arme","arm"}),
    "Die dickeren Aeste gabeln sich in kleinere Zweige.",
    "Der Baum wirkt gespenstig bei Nacht.");
  AddDetail(({"rauschen"}),
    "Lausche ihm doch mal...");
  AddDetail(({"wind","windzug","boehe","boeh","windboehen","windboehe"}),
    "Sanfte Windboehen bringen die Blaetter der Baeume zum rauschen. "
    "Das Gras der Wiese neigt sich leicht.");
  AddDetail(({"boden","wiese","naturwiese","pflanzen","pflanze"}),
    "Saftige gruene Graeser bedecken den Boden. Ueberall stehen wunderbare "
    "Blumen und seltene Kraeuter.",
    "Ohne Licht wirst Du nicht viel erkennen koennen.");
  AddDetail(({"blumen","blume"}),
    "Du erkennst auf Anhieb Glockenblumen, Margeriten, Loewenzahn, Veilchen "
    "Vergissmeinicht und wilde Orchideen sowie viele andere, deren Namen "
    "Du nicht kennst.",
    "Es ist viel zu dunkel, um die Blumen unterscheiden zu koennen.");
  AddDetail(({"kraeuter","kraut"}),
    "Du findest hier Sauerampfer, Rosmarin, Bassilikum, Kerbel, Pimpinelle "
    "und viele andere...",
    "Es ist viel zu dunkel, um die Kraeuter unterscheiden zu koennen.");
  AddDetail(({"graeser","gras"}),
    "Alle moeglichen Arten von Graesern wachsen auf der Wiese. Da stehen zum "
    "Beispiel Simse, Wollgras, Zypergras und Canabis...",
    "Es ist viel zu dunkel, um die Graeser unterscheiden zu koennen.");
  AddDetail(({"namen","anhieb","arten","art"}),
    "Mehr fallen Dir einfach nicht ein.");
  AddDetail(({"glockenblumen","margeriten","loewenzahn","veilchen","vergissmeinicht",
    "orchideen","glockenblume","margerite","orchidee"}),
    "Auch diese Blume waechst hier auf der Wiese.",
    "Die Blumen haben ihre Blueten alle geschlossen.");
  AddDetail(({"sauerampfer","rosmarin","bassilikum","kerbel","pimpinelle","menge"}),
    "Jede Menge Kraeuter kannst Du hier finden.",
    "In der Nacht sieht ein Kraut aus, wie das andere.");
  AddDetail(({"simse","wollgras","zypergras","canabis"}),
    "Eine richtige Naturwiese besteht aus vielen Graesern...",
    "Es ist zu dunkel, um etwas zu erkennen.");
  AddDetail(({"blueten","bluetenvielfalt","vielfalt","bluete"}),
    "Die bunten Blueten der Pflanzen sind reich an Nektar, der zahlreichen "
    "Insekten als Nahrung dient.",
    "Man kann die Bluetenvielfalt bei der Dunkelheit nur erahnen.");
  AddDetail(({"nektar","nahrung","festmahl"}),
    "Suesser gelber Nektar. Ein Festmahl fuer Insekten.",
    "Die Blueten sind nachts alle geschlossen.");
  AddDetail(({"insekten","insekt"}),
    "Du siehst Schmetterlinge, Fliegen, Bienen, Wespen, Libellen usw...",
    "Nur ein paar Muecken und Nachtfalter erkennst Du im Lichtschein des Mondes.");
  AddDetail(({"schmetterlinge","schmetterling","fliegen","fliege","bienen","biene",
    "wespen","wespe","libelle","libellen"}),
    "Viele verschiedene Arten, die Du nicht kennst...",
    "Nachts schlafen auch die meisten Insekten...");
  AddDetail(({"muecken","muecke","nachtfalter","falter"}),
    "Solche Insekten gibts hier wohl nur nachts...",
    "Nur wenige schwirren durch die laue Nacht.");
  AddDetail(({"wohnwagen","wagen","westen"}),
    "Der Wohnwagen sieht aus, als haette er schon bessere Zeiten gesehen. An einigen "
    "Stellen blaettert die Farbe ab. Die Reifen haben keine Luft mehr. Die Fenster "
    "sind stark verstaubt. Die Tuer sieht nicht so aus, als sei sie noch zu "
    "schliessen. Ueber eine kleine Holztreppe im Westen kannst Du ihn betreten. "
    "Schau ihn Dir doch mal von innen an.",
    "Der Wohnwagen wirkt gespenstisch in der Nacht. Du kannst ihn ueber eine "
    "Holztreppe im Westen betreten.");
  AddDetail(({"reifen","gummireifen","raeder","rad"}),
    "Die alten Gummireifen auf den Raedern sind ueber die Jahre warscheinlich "
    "poroes geworden und konnten die Luft nicht mehr halten.");
  AddDetail(({"farbe","stellen"}),
    "Die braune Farbe ist an etlichen Stellen abgeblaettert.");
  AddDetail(({"fenster","staubschicht","staub","schicht"}),
    "Die Fenster sind so verstaubt, dass man nicht mehr nach drinnen schauen "
    "kann.",
    "Ein schwacher Lichtschimmer dringt durch die verstaubten Scheiben von drinnen "
    "heraus. Geh doch mal hinein.");
  AddDetail(({"tuer"}),
    "Die Tuer scheint ziemlich gelitten zu haben. Du kannst Dir nicht vorstellen, "
    "dass man sie noch benutzen kann.",
    "Die offne Tuer scheint nicht zu schliessen zu sein. Ein Lichtschimmer ist "
    "drinnen zu sehen.");
  AddDetail(({"treppe","holztreppe","stufen"}),
    "Eine kleine dreistufige Treppe. Du kannst nichts besonderes daran entdecken.");
  AddDetail(({"sueden","huegel","schemen"}),
    "Ein kleiner gruener Huegel erhebt sich suedlich von Dir.",
    "Nur schemenhaft erkennst Du im Sueden einen Huegel.");
  AddDetail(({"haeuser","norden","haus","siedlung","ortschaft"}),
    "Kleine blaue Haeuser kannst Du im Norden sehen. Da scheint eine kleine "
    "Siedlung zu sein.",
    "Schwaches Licht dringt von den Haeusern herueber. Mehr kannst Du bei der "
    "Dunkelheit nicht erkennen.");
  AddDetail(({"beispielgebiet", "weg","osten"}),
    "Im Osten kannst Du das Beispielgebiet betreten. Dort findest Du Raeume, "
    "Waffen, Ruestungen und andere Sachen, die Du Dir ansehen solltest, wenn "
    "Du selbst soetwas erschaffen moechtest.");
  AddDetail(({"beispiel", "beispiele", "waffen", "ruestungen", "raeume"}),
    "Das Beispielgebiet liegt im Osten!");
  AddDetail(({"sicht","Berge","aussicht"}),
    "Der Huegel im Sueden versperrt die Aussicht auf die Berge.");
  AddDetail(({"holz"}),
    "Hier ist vieles aus Holz, was meinst Du?");
  AddDetail(({"sonnenstrahlen","strahlen","sonnenstrahl","strahl"}),
    "Die Sonnenstrahlen kitzeln Dich auf der Nase...");
  AddDetail(({"lichtschimmer","schimmer"}),
    "Es ist taghell, was meinst Du?",
    "Schwaches Licht ist im Innern des Wohnwagens zu sehen.");
  AddDetail(({"licht"}),
    "Es ist taghell. Die Sonne scheint.",
    "Es ist Nacht. Ein schwacher Lichtschimmer dringt aus dem Wohnwagen und von "
    "den Haeusern herueber.");
  AddDetail(({"nacht","stille","dunkelheit"}),
    "Was meinst Du?",
    "Es ist Nacht. Dunkelheit und Stille haben sich ueber die Wiese "
    "gelegt. Nur das Rauschen des Obstbaumes durchbricht die Stille "
    "hin und wieder.");

  AddSoundDetail(({"baum","rauschen","blaetter","wind"}),
    "Du bleibst mucksmaeuschenstill stehen und lauschst angestrengt dem "
    "leisen Rauschen der Baeume. Doch so sehr Du Dich auch anstrengst, "
    "Du kannst nichts besonderes hoeren.");  

  AddSmellDetail(({"blueten","bluete","blumen","blume"}),
    "Hmmmmm. Wunderbare Sommerfrische. 8-)");  

  AddItem("/obj/zeitungsautomat", REFRESH_REMOVE);

  AddExit("osten", "/doc/beispiele/raum1");
  AddExit("westen", "/room/wohnwagen", "in den Wohnwagen");

  AddCmd("schuettel|schuettle&apfelbaum|baum|obstbaum", "schuettel",
    "Was willst Du denn schuetteln?");

  AddCmd("kletter|klettre&apfelbaum|baum|obstbaum", "klettern",
    "Wohin willst Du klettern?");

  AddCmd("pfluecke|pflueck|ernte", "pflueck");

  apples = ([ ]); // ein Mapping

}

int schuettel(string str) {
  object f;
  if( ( time() - apples[ this_player() ] ) < 600 ) {
    write(break_string("Da Du erst vor kurzem einen Apfel gepflueckt hast, "
      "beschliesst Du doch noch eine Weile zu warten. Du willst ja den "
      "anderen auch noch was lassen, oder?"));
    return 1;
  }
  if(deep_present("apfel", this_player())) {
    write("Na, Du hast doch noch einen Apfel...\n");
    return 1;
  }
  write(break_string(
    "Du schuettelst kraeftig an dem Baum und der leckere Apfel loest sich. "
    "Geschickt springst Du zurueck und faengst den Apfel auf, damit er "
    "nicht zu Boden faellt und Flecke bekommt. Du steckst den Apfel erstmal "
    "ein."));
  say(break_string(
    this_player()->name(WER, NAME_DEF|NAME_CAP)+" schuettelt den armen "
    "kleinen Apfelbaum bis ein grosser gelber Apfel herunterfaellt."), 
    this_player());
  if((f = clone_object("/doc/beispiele/apfel"))->move(this_player())<1) {
    write(break_string(
      "Du kannst den Apfel nicht mehr tragen. Er rutscht Dir aus der "
      "Hand, rollt ins tiefe Gras und ist nicht mehr zu sehen."));
    say(break_string(
      this_player()->name(WER, NAME_DEF|NAME_CAP)+" versucht den Apfel "
      "aufzufangen, doch der Apfel rollt ins tiefe Gras und ist "
      "verschwunden."), this_player());
    return f->remove(1);
  }
  apples = apples + ([ this_player() : time() ]);
  return 1;
}

int pflueck(string str) {
  string *blumen,*kraeuter,*graeser,*aepfel;

  // Was kann man alles pfluecken?
  // Welche Blumen
  blumen   = ({"blume","blumen","glockenblumen","margeriten","loewenzahn",
              "veilchen","vergissmeinicht","orchideen","glockenblume",
              "margerite","orchidee"});
  // Welche Graeser
  graeser  = ({"gras","graeser","simse","wollgras","zypergras","canabis"});
  // Aepfel
  aepfel   = ({"apfel","aepfel"});
  // und Kraeuter
  kraeuter = ({"kraut","kraeuter","sauerampfer","rosmarin","bassilikum",
              "kerbel","pimpinelle"});
        
  notify_fail("Was willst Du denn pfluecken?\n");

  if (!str) return 0;

  str = lower_case(str);
  if (member(blumen, str) + member(graeser, str) +
    member(aepfel, str) + member(kraeuter, str) < -3) return 0; 

  if (member(aepfel, str) > - 1) {
    write(break_string("Du reckst Dich und streckst Dich, doch Du bist viel zu "
      "klein, um den Apfel einfach so pfluecken zu koennen."));
    say(break_string(this_player()->name(WER, NAME_CAP)+
      " reckt sich und streckt sich, doch "+this_player()->QueryPronoun()+
      " ist viel zu klein, um den Apfel einfach so pfluecken zu koennen."));
    return 1;
  }
  if (member(blumen, str) > - 1) {
    write(break_string("Du solltest die schoenen Blumen lieber in Ruhe wachsen lassen. "
      "Stell Dir mal vor, jeder wuerde hier ein paar Blumen pfluecken..."));
    return 1;
  }
  if (member(krauter, str) > - 1) {
    write(break_string("Was willst DU denn mit Kraeutern???"));
    return 1;
  }        	
  if (member(graeser, str) > - 1) {  
    write(break_string("Dir nutzen die Graeser ja gar nichts!"));
    return 1;
  }        	
  return 0;
}

int klettern() {
  write("Nein nein. Du wuerdest nur Zweige abbrechen!\n");
  return 1;
}

int PreventInsert(object ob) {
  if (ob && !living(ob) && ob->id("apfel")) {
    tell_room(this_object(),
      "Der Apfel rollt ins tiefe Gras und ist nicht mehr zu sehen.\n");
    ob->remove(1);
    return 1;
  }
  return 0;
}