Eine auffüllbare Lichtquelle
![]()
// 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; } |
| Start » Magierhandbuch » Dokumentation » Programmierbeispiele » Öllampe | |
|
| |