Neues Beispiel.

Change-Id: I7446342fb4a460a31b0adb9dccfbde155360dda0
diff --git a/README b/README
index b476014..baf40e3 100644
--- a/README
+++ b/README
@@ -70,6 +70,9 @@
 12. Ein Raum, wo man etwas anfassen kann. Ausserdem enthaelt er Geruch und
    Geraeusch.
   room/huette12.c
+13. Ein weiteres Beispiel fuer eine dynamische Langbeschreibung, dynamisches
+    Detail. Ausserdem ein NPC, der eine selbstdefinierte Prop benutzt.
+  room/huette13.c
 
 
 B. Unser erster eigener NPC
@@ -87,6 +90,8 @@
   npc/zwerg5.c
 6. Ein Zwerg mit einer speziellen Waffe.
   npc/zwerg6.c
+7. Ein Zwerg, der eine selbstdefinierte Prop verwendet.
+  npc/zwerg7.c
 
 
 C. Unsere ersten eigenen Gegenstaende
diff --git a/npc/zwerg7.c b/npc/zwerg7.c
new file mode 100644
index 0000000..4290a3b
--- /dev/null
+++ b/npc/zwerg7.c
@@ -0,0 +1,80 @@
+inherit "/std/npc";
+
+#include <new_skills.h>
+#include __PATH__(1)"defs.h"
+
+#define MYPROP notstrom_tutorial2018_beispiel1
+
+private string look();
+private int hauen();
+
+private mapping hauer = ([]);
+
+protected void create() {
+  if (!clonep()) {
+    set_next_reset(-1);
+    return;
+  }
+  ::create();
+
+  create_default_npc(20, 600);
+
+  SetProp(P_SHORT, "Ein Zwerg");
+  Set(P_LONG, #'look, F_QUERY_METHOD);
+  SetProp(P_NAME, "Kawumm");
+  SetProp(P_ARTICLE, 0);
+  SetProp(P_GENDER, MALE);
+
+  AddId(({"zwerg", "kawumm"}));
+  SetProp(P_ALIGN, 100);
+  SetProp(P_RACE, "Zwerg");
+  SetProp(P_SIZE, 102);
+
+  AddCmd("hau|haue&@ID", #'hauen,
+    "Wen willst Du hauen?");
+}
+
+void reset() {
+  ::reset();
+
+  if (sizeof(hauer)) {
+    tell_room(ENV(), BSLF(
+      "Krawumm vergisst, von wem er schon alles gehauen wurde. Seine "
+      "Blessuren verschwinden wie von Magierhand."));
+    hauer = ([]);
+  }
+}
+
+private string look() {
+  string msg = "Dies ist Krawumm, der Zwerg. ";
+  if (!sizeof(hauer)) {
+    msg += "Niemand hat ihm bisher eins auf die Omme gehauen, obwohl er so "
+      "verfuehrerisch herumsteht.\n";
+  } else {
+    msg += "Er hat schon durchaus was auf die Omme bekommen, und zwar von "+
+      CountUp(hauer)+"\n";
+  }
+  msg += "Wenn Du ihm was draufsemmeln willst, dann versuche einfach:\n"
+    "  haue krawumm";
+  return BSLF(msg);
+}
+
+private int hauen() {
+  if (TP->QueryProp(MYPROP)) {
+    tell_object(TP, BSLF(
+      "Aber nicht doch. Du hast Krawumm bereits gehauen."));
+  } else {
+    tell_object(TP, BSLF(
+      "Gut, Du haust also Krawumm welche auf die Omme. Krawumm zuckt kurz, "
+      "steht dann aber unbewegt weiter rum. Er hat sich das aber bestimmt "
+      "gemerkt ..."));
+    tell_room(ENV(), BSLF(
+      TPN+" haut Krawumm eins auf die Omme. Dem scheint das aber nicht viel "
+      "auszumachen. Typisch Zwerg, solange er Alk kriegt, ist er zufrieden."),
+      ({TP}));
+    TP->SetProp(MYPROP, 1);
+    m_add(hauer, getuuid(TP), 1);
+  }
+  return 1;
+}
+
diff --git a/room/huette13.c b/room/huette13.c
new file mode 100644
index 0000000..fde36e4
--- /dev/null
+++ b/room/huette13.c
@@ -0,0 +1,40 @@
+inherit "/std/room";
+
+#include __PATH__(1)"defs.h"
+
+private string look();
+
+
+protected void create() {
+  ::create();
+
+  SetProp(P_INT_SHORT, "Eine schummrige Huette");
+  Set(P_INT_LONG, #'look, F_QUERY_METHOD);
+
+  SetProp(P_LIGHT, 1);
+  SetProp(P_INDOORS, 1);
+  SetProp(P_LIGHT_TYPE, LT_GLOWING);
+
+  AddDetail("spieler", function string() {
+    return TP->long();
+  });
+
+  AddItem(__PATH__(1)"npc/zwerg7", REFRESH_DESTRUCT);
+}
+
+string look() {
+  string msg = "Dies scheint eine Kampfarena zu sein. "
+  object o = present_clone(__PATH__(1)"npc/zwerg7");
+  if (objectp(o)) {
+    string s = o->get_gehauen();
+    if (stringp(s) && s!="")
+      return BSLF(
+        msg + "Der Zwerg, der hier rumsteht, hat von " + s +
+        " auch schon was auf die Omme bekommen.");
+    return BSLF(
+      msg + "Du kannst dem Zwerg, der hier steht, sicher was auf die Omme "
+      "geben.");
+  } else
+    return BSLF(
+      msg + "Es ist aber gerade niemand da.");
+}