Beispieldateien

Ein Testraum fuer die Lcontainer

----------




/* Dies ist ein kleiner Raum als Beispiel fuer Lcontainer
**
** Fiona 8/96
*/

inherit "std/room";

#include <properties.h>
#define MYDIR "/doc/beispiele/lcontainer/"

int inh_becken, inh_wanne;

string wanne();
string becken();
string saft();
string oel();

void create() 
{
  ::create();

  SetProp(P_INT_SHORT, "Im Panschraum");
  SetProp(P_INT_LONG, 
    "Du stehst in Fionas Panschraum. Hier kann man nach Herzenslust "
    "mit Fluessigkeiten umherpuetschern und neue Gefaesse ausprobieren. "
    "Ein roter Knopf grinst Dich an.\n"
    "Du siehst ein kleines Becken und einen Wasserhahn sowie eine "
    "Wanne.");
  SetProp(P_INDOORS, 1);
  SetProp(P_LIGHT, 2);

  AddDetail("becken", #'becken);
  AddDetail("wanne", #'wanne);
  AddDetail(({"saft","kirschsaft"}), #'saft);
  AddDetail("oel", #'oel);
  AddDetail(({"wasserhahn","hahn"}),
    "Hier bekommt man wohl Wasser.");
  AddDetail(({"knopf","resetknopf"}), "Er loest einen reset() aus.");

  AddItem(MYDIR+"glas", REFRESH_DESTRUCT);
  AddItem(MYDIR+"flasche", REFRESH_DESTRUCT);
  AddItem(MYDIR+"eimer", REFRESH_DESTRUCT);
  AddItem(MYDIR+"kanister", REFRESH_DESTRUCT);
  AddItem(MYDIR+"fass", REFRESH_DESTRUCT);
  AddExit("gilde","/room/gilde");

  AddCmd(({"druecke","drueck"}), "drueck");

  inh_becken=3000;
  inh_wanne=1500;
}

string becken() 
{
  return "In dem Becken ist "+to_string(inh_becken)+"ml Oel.";
}

string wanne() 
{
  if (inh_wanne)
    return "Sie ist mit "+to_string(inh_wanne)+"ml Kirschsaft gefuellt.";
  return "Sie ist leider schon leer...";
}

string saft() 
{
  if (inh_wanne) 
    return "Leckerster Kirschsaft sage ich nur!";
  return "Sowas kannst Du hier nicht finden.";
}

string oel() 
{
  if (inh_becken) return "Ekeliges Oel, untrinkbar.";
  return "Sowas kannst Du hier nicht finden.";
}

int GiveLiquid(string id, int am, object ob) 
{
  int given;
  given = 0;
  switch (id) 
  {
    case "wanne": case "saft": case "kirschsaft":
      if (!inh_wanne) 
      {
        write("Die Wanne ist schon leer.\n");
        return -2;
      }
      if (am > inh_wanne) am = inh_wanne;
      given = ob->AddLiquid(am, ({"kirschsaft","saft"}),
        "leckerem Kirschsaft", am/10, am/120, 0, am/200);
      if (given > 0)
      {
        inh_wanne -= given;
        write("Du schoepfst Dir Saft ab.\n");
        say(this_player()->name(WER, NAME_DEF|NAME_CAP)+" schoepft Saft ab.\n");
      }
      break;
    case "wasser": case "wasserhahn": case "hahn":
      given = ob->AddLiquid(am, "wasser", "Wasser", am/10, 0, 0, am/300);
      break;
    case "becken": case "oel":
      if (!inh_becken) 
      {
        write("Das Becken ist schon leer.\n");
        return -2;
      }
      if (am > inh_becken) am = inh_becken;
      given = ob->AddLiquid(am, "oel", "stinkendem Oel", am*2, 0, 0, 0, (int)(0.8*am), 1);
      if (given > 0) 
      {
        inh_becken -= given;
        write("Du schoepfst etwas Oel ab.\n");
        say(this_player()->name(WER, NAME_DEF|NAME_CAP)+" schoepft etwas Oel ab.\n");
      }
      break;
  }
  return given;
}

void reset() 
{
  object ob;
  if (inh_becken < 3000) 
  {
    inh_becken = 3000;
    tell_room(this_object(), "Das Becken fuellt sich auf...\n");
  }
  if (inh_wanne < 1500) {
    inh_wanne = 1500;
    tell_room(this_object(), "Die Wanne fuellt sich auf...\n");
  }
  if (ob = present("fass")) ob->reset();
  return ::reset();
}

int drueck(string str) 
{
  notify_fail("Was willst Du druecken?\n");
  if (str != "knopf" && str != "resetknopf") return 0;
  if (!random(2)) 
  {
    write("Hmm, der Knopf klemmt irgendwie.\n");
    return 1;
  }
  write("Es klickt...\n");
  reset();
  return 1;
}