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