// Eine nachfüllbare Öllampe
// Für detailiertere Erklärungen schau bitte die
// Beispielfackel an.
// Mohammed (09/96) : nachfuellbare Lampe
// 18.08.2002 Sunrise: komplett ueberarbeitet
inherit "lightsource";
#include <properties.h>
#include <lightsource.h>
// Dies ist ein Beispiel zum Generieren von Lichtquellen. Die Lampe kann
// nachgefüllt werden. Dazu muß das Propertie P_DO_DESTRUCT auf 0 gesetzt
// werden. Die Funktion lampe_fuellen realisiert das Auffüllen der Lampe.
// Dabei ist zu beachten, daß GetInhalt() eine Funktion in der Ölflasche
// ist, die lediglich eine Variable ausliest und zurückgibt. Die Funktion
// SetInhalt() setzt die Variable in der Ölflasche, falls beim Auffüllen
// nicht alles reingepaßt hat. Der Wert kann dann beim nächsten Füllen
// benutzt werden. Falls alles Oel in die Lampe paßte, wird die Ölflasche
// removed. Beim Ändern des Inhaltes (P_FUEL) SOLLTE NUR AddFuel() benutzt
// werden, um ein ordnungsgemässes Auffüllen zu gewährleisten.
// Deklaration der Funktionen:
int lampe_fuellen(string str);
void create()
{
// Wenn wir kein Clone sind, abbrechen!
if (!clonep()) return;
::create();
SetProp(P_LONG,
"Eine rostige Oellampe. Sie ist trotz Rost von guter "
"Qualitaet und funktionstuechtig. Du kannst sie anzuenden "
"und loeschen, und natuerlich auch nachfuellen.");
SetProp(P_NAME, "Oellampe");
SetProp(P_PLURAL, "Oellampen");
SetProp(P_GENDER, FEMALE);
SetProp(P_MAX_FUEL, 4000); // Die Oellampe brennt max. 4000 sec.
SetProp(P_FUEL, 2000); // Die Oellampe ist zu Beginn halb gefüllt
SetProp(P_DO_DESTRUCT, 0); // wird nach dem Abbrennen nicht removed
SetProp(P_WEIGHT, 1125);
SetProp(P_VALUE, 280);
AddId(({"lampe","oellampe"}), ({"lampen","oellampen"}));
AddCmd("fuelle|fuell", #'lampe_füllen);
}
int lampe_fuellen(string str)
{
string was;
int wieviel, rest;
object oel;
// Unsere Fehlermeldung, die im Falle des Mißerfolgs ausgegeben wird, d.h.
// wenn wir nicht zweifelsfrei das angesprochene Objekt waren
// (Es könnten ja noch andere Objekte auf "fuelle" reagieren.)
notify_fail("Was willst Du auffuellen?\n");
// Der Spieler hat nur "fuelle" getippt
if (!str || !stringp(str) || !strlen(str)) return 0;
// Der Spieler hat eine falsche Syntax benutzt
if (sscanf(str,"%s auf", was) != 1) return 0;
// wir sind nicht gemeint
if (!id(was)) return 0;
// Hat der Spieler eine Oelflasche im Inventar?
oel = present("oelflasche", this_player());
// nein, er hat keine
if (!oel)
{
// Wir geben eine Fehlermeldung aus und beenden die Funktion mit
// return 1 - zwar war die Handlung für den Spieler nicht erfolgreich
// aber sie wurde von uns richtig erkannt und abgearbeitet.
write("Du hast keine Oelflasche zum auffuellen der Oellampe.\n");
return 1;
}
// Wieviel ist in der Oelflasche?
wieviel = oel->GetInhalt();
// Fülle alles in die Flasche; der Rückgabewert gibt uns an, ob alles
// reingepaßt hat oder nicht; AddFuel ist eine Funktion der Std-Lichtquelle
rest = AddFuel(wieviel);
// Wenn kein rest besteht, hat alles reingepaßt
if (!rest)
{
// Wir geben eine Erfolgsmeldung an den Spieler aus
write(break_string(
"Du fuellst alles Oel aus der Flasche in die Lampe. "
"Die leere Oelflasche zerfaellt zu Staub."));
// Die Oelflasche ist leer und kann zerstört werden
oel->remove();
// Ende
return 1;
}
// Wenn rest nicht null ist, kommen wir hier an
// Wir geben eine differenzierte Erfolgsmeldung aus
write(break_string(
"Du fuellst etwas Oel aus der Flasche in die Lampe. "
"Da nicht alles in die Oellampe passt, bleibt ein Rest "
"in der Flasche."));
// Der rest ist nun der neue Inhalt der Oelflasche
oel->SetInhalt(rest);
// Ende
return 1;
}
|