Beispieldateien

Eine Weintraube

----------


// Eine Traube koestlicher Weintrauben
//
// - Sie enthaelt eine unterschiedliche Anzahl von Beeren, die man in der 
//   Langbeschreibung sehen kann
// - Beim Essen wird die Anzahl reduziert
// - Fuer die Funktionalitaet des Essens benutzen wir eat_and_drink

// Original von Sunrise@Wunderland 2000


inherit "thing";

#pragma strong_types

#include <properties.h>
#include <defines.h>

private static int num;                // die Anzahl der Beeren an der Traube

int esse_alle();                       // Funktionen fuers Essen
int essen();                           // dito

string long();                         // Langbeschreibung

void create()
{
  if (!clonep()) return;
  ::create();
  AddId(({"traube", "weintraube", "wein"}), ({"trauben", "weintrauben"}));
  SetProp(P_NAME, "Weintraube");
  SetProp(P_PLURAL, "Weintrauben");
  SetProp(P_GENDER, FEMALE);
  AddDetail(({"beere", "beeren", "weinbeere", "weinbeeren"}),
    "Lauter saftig suesse Weinbeeren haengen an der Traube.");

  AddCmd("iss|ess|esse&beere|weinbeere", "essen", "Was willst Du essen?");
  AddCmd("iss|ess|esse&beeren|traube|weintraube|trauben", "esse_alle", 
    "Was willst Du essen?");  

  num = (random(5)+5); 
  SetProp(P_WEIGHT, 10*num);
  SetProp(P_BULKINESS, 2*num);
}


// beschreibung
// die Funktion long() ist im std-thing enthalten. Wir ueberschreiben sie.
string long()
{
  if (num==1)
  return "An der Weintraube haengt nur noch eine Beere.";
  return sprintf("An der Weintraube haengen %i grosse %s.",
    num, num == 1 ? "Weinbeere":"Weinbeeren");
  // num == 1 ? "Weinbeere":"Weinbeeren" ist eine verkuerzte if-Abfrage. Ihre Syntax sieht so aus:
  // bedingung_erfuellt ? wenn_ja : wenn_nein
}


// einzelne beere essen
int essen()
{
  object ob;
  int zeit;
  string me, spec;

  if (environment(ME) != PL) 
    return notify_fail("Du musst die Weintraube erst nehmen.\n");

  if (num > 1)
  { 
    me = "Du isst eine leckere Weinbeere. Sie loescht Deinen "
      "Durst und Du fuehlst Dich ploetzlich voller Energie.";
    spec = PL->name(WER, NAME_AUTO|NAME_CAP)+
      " isst eine Weinbeere. Dir laeuft das "
      "Wasser im Mund zusammen. Du willst auch eine.";

    SetProp(P_WEIGHT, 10*num);
    SetProp(P_BULKINESS, 2*num);
  }
  else
  {
    me = "Du isst die letzte Weinbeere.\nDen leeren Stiel "
      "schnippst Du einfach weg.";
    spec = PL->name(WER, NAME_AUTO|NAME_CAP)+" isst die letzte "
      "Weinbeere. Schade.";
  }

  // eat_and_drink berechnet anhand von Fluessigkeits-, Feststoff- und Alkohol-
  // gehalt Saettigung und Heilung des Essens
  // Bitte die man zu eat_and_drink genau durchlesen :-)
  // Wenn der Rueckgabewert 0 ist, hat das Essen/Trinken nicht geklappt
  if (!PL->eat_and_drink(20, 7, 0, 1.0, 1.0, ({
    ({ "Die Weinbeere ist im Moment zu viel fuer Dich."}),
                               //misserfolg wegen DRINK
    ({ "Die Weinbeere ist im Moment zu viel fuer Dich."}),
                               //misserfolg wegen FOOD
    ({}),                      //misserfolg wegen ALK
    ({ me, spec }) }) ) )      //erfolg
    return 1;

  num--;

  if (!num) remove(1);
  return 1;   
}


//alle auf einmal essen
int esse_alle()
{
  object ob;
  int zeit;

  if (environment(ME)!=PL) 
    return notify_fail("Du musst die Weintraube erst nehmen.\n");

  // eat_and_drink berechnet anhand von Fluessigkeits-, Feststoff- und Alkohol-
  // gehalt Saettigung und Heilung des Essens
  // Bitte die man zu eat_and_drink genau durchlesen :-)
  // Wenn der Rueckgabewert 0 ist, hat das Essen/Trinken nicht geklappt
  if (!PL->eat_and_drink((20*num), (7*num), 0, 1.0, 1.0, ({
    ({ "Du solltest die Weintrauben vielleicht einzeln essen, alle zusammen "
       "schaffst Du nicht."}), //misserfolg wegen DRINK
    ({ "Du solltest die Weintrauben vielleicht einzeln essen, alle zusammen "
       "schaffst Du nicht."}), //misserfolg wegen FOOD
    ({}),                      //misserfolg wegen ALK
    ({ "Du stopfst Dir die ganzen Beeren auf einmal in den "
       "Mund. Sie sind unglaublich saftig, loeschen Deinen Durst und verlei"
       "hen Dir neue Energie.\nDen Stiel wirfst Du einfach weg.",
       PL->name(WER, NAME_AUTO|NAME_CAP)+
       " isst die ganze Weintraube auf einmal. Nur den Stiel laesst "+
       PL->QueryPronoun(WER)+" uebrig und wirft ihn achtlos weg. "+
       PL->name(WER, NAME_AUTO|NAME_CAP)+" hatte wohl Angst, "
       "dass "+ PL->QueryPronoun(WER)+" DIR etwas abgeben soll."}) 
    }))   )                     //erfolg
    return 1;
  
  remove();
  return 1;
}


Start » Magierhandbuch » Dokumentation » Programmierbeispiele » Weintraube
Valid HTML 4.01!