Neues Beispiel.
diff --git a/README b/README
index 947ea31..747d85b 100644
--- a/README
+++ b/README
@@ -82,6 +82,8 @@
einen Behaelter. Gleichzeitig ein Beispiel fuer filter() mit Inline-Closure
und fuer bewegen eines Arrays Gegenstaende.
room/huette16.c, obj/kiste.c
+17. Ein Beispiel fuer eine Tanke mit Timed Keys.
+ room/huette17.c
B. Unser erster eigener NPC
diff --git a/room/huette17.c b/room/huette17.c
new file mode 100644
index 0000000..d3057d2
--- /dev/null
+++ b/room/huette17.c
@@ -0,0 +1,96 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+int cmd_obst();
+
+
+protected void create() {
+ ::create();
+
+ SetProp(P_INT_SHORT, "Eine Huette mit Obst");
+ SetProp(P_INT_LONG, BSLF(
+ "Die Huette ist irgendwie beleuchtet, aber das ist es nicht, was "
+ "Deine Aufmerksamkeit fesselt. Auf dem Tisch, der in der Mitte des "
+ "Raumes steht, befindet sich eine Schale voller Obst. Das sieht "
+ "wirklich appetitlich aus, Du moechtest es direkt essen."));
+
+ SetProp(P_LIGHT, 1);
+ SetProp(P_INDOORS, 1);
+ SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+ AddCmd("iss|ess|esse&obst", #'cmd_obst,
+ "Wen oder was willst Du essen?^");
+}
+
+
+/*
+ Sollverhalten der Tanke:
+ Alle 40 min pro Spieler je 100+random(60) Food und Drink tanken, dabei
+ Ticks von 12 LP/KP. Saettigung nur 5 Food.
+*/
+
+/*
+ Anmerkung:
+ Es ist guter Stil, in einem Kommentar vor dem Code der Tanke zu
+ dokumentieren, welche Werte Du mit dem Erzmagier der Heilungsbalance
+ ausgehandelt hast.
+
+ Dies sind exakt die Werte, die die Tanke am Bergpfad oberhalb von
+ Kobayashis Seilbahnstation verwendet. Sprich Deine Tanken auf jeden
+ Fall mit dem Erzmagier, der fuer die Heilungsbalance zustaendig ist, ab.
+ (Das ist momentan Humni, falls sich das aendert, weiss Dein Sponsor das
+ aber.)
+
+ Generell solltest Du fuer Heilungsangelegenheiten die Manpage wiz/heilung
+ lesen.
+*/
+int cmd_obst() {
+ /*
+ Allgemeiner Hinweis zum Arbeiten mit Timed Keys und Heilstellen:
+
+ Als erstes solltest Du bitte die Manpages zu check_timed_key() und
+ check_and_update_timed_key() nachlesen.
+ Wir haben hier einen Sonderfall: Wir wollen nur Heilung alle 40
+ Minuten erlauben, UND wir wollen nicht, dass der Spieler erst wieder
+ 40 Minuten warten muss, wenn er dieses Mal nichts essen kann, weil
+ er gerade ueberfressen ist. Deshalb pruefen wir erst den Key, bevor
+ wir "wie ueblich" mit check_and_timed_key() arbeiten.
+
+ Wenn der Spieler auch die Wartezeit aufgebrummt bekommen soll, falls
+ er gerade ueberfressen ist, dann sollte man so vorgehen wie in dem
+ Beispiel der Manpage.
+ */
+
+ /*
+ Da der Timed Key ueber das ganze Mud eindeutig sein muss, empfiehlt
+ es sich, den eigenen Magiernamen darin zu verwenden. Gute Praxis ist
+ es, wenn Du etwas wie "Magiername_Gebiet_Stelle" verwendest, dann
+ kommst Du auch mit Deinen eigenen Timed Keys nicht durcheinander.
+ */
+
+ // Beim Ueberpruefen nicht Key setzen, TP koennte ja vollgefuttert sein:
+ if (TP->check_timed_key("notstrom_tutorial2018_obst")==0) {
+ if (TP->eat_food(5, 0,
+ "Du bist schon so vollgefuttert, dass nichtmal mehr etwas "
+ "Obst geht.")) {
+ // Returnwert wurde bereits oben geprueft:
+ TP->check_and_update_timed_key(2400, "notstrom_tutorial2018_obst");
+ TP->buffer_hp(100+random(60), 12);
+ TP->buffer_sp(100+random(60), 12);
+
+ tell_object(TP, BSLF(
+ "'Esst Obst, und Ihr bleibt gesund', sagten sie. Jetzt hast Du "
+ "schon so viel Obst gegessen, und Dir wird immer schlechter ..."));
+ tell_room(TO, BSLF(
+ TPN+" etwas mampft Obst aus der Schale."),
+ ({TP}));
+ }
+ } else {
+ tell_object(TP, BSLF(
+ "Du bist bereits absolut gemaestet, Du bringst keinen Bissen mehr "
+ "herunter. Vielleicht ein andermal ..."));
+ }
+ return 1;
+}
+