Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/zauberwald/obj/feenleiche.c b/doc/beispiele/zauberwald/obj/feenleiche.c
new file mode 100644
index 0000000..0e7e034
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/feenleiche.c
@@ -0,0 +1,24 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+#include "../files.h"
+#include <moving.h>
+
+inherit "std/corpse";
+
+int mampf( string str )
+{
+   object ob;
+   if (QueryDecay()<3) return (int)::mampf(str);
+   notify_fail("Was moechtest Du essen?\n");
+   if (!str || !id(str)) return 0;
+   if (!PL->eat_food(8)) return 1; // fehlermeldung gibt eat_food aus
+   if (!objectp(ob=present(WALDID("leichenmp"), PL))) {
+      ob=clone_object(OBJ("leichenmp"));
+      ob->move(PL, M_NOCHECK|M_GET);
+   }
+   ob->new_corpse();
+   PL->restore_spell_points(50+random(100));
+   write("Du merkst wie die noch im Koerper verbliebene Energie in Dich ueberfliesst.\n");
+   remove();
+   return 1;
+}
diff --git a/doc/beispiele/zauberwald/obj/hahnenfuss.c b/doc/beispiele/zauberwald/obj/hahnenfuss.c
new file mode 100644
index 0000000..8992e46
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/hahnenfuss.c
@@ -0,0 +1,32 @@
+#include <items/kraeuter/kraeuterliste.h>
+#include <items/kraeuter/kraeuter.h>
+#include "../files.h"
+
+inherit STDPLANT;
+
+void create()
+{
+   ::create();
+   customizeMe(WASSER_HAHNENFUSS_WEISS);
+}
+
+/*varargs int move(mixed dest, int method)
+{
+   // die Einwohner des Zauberwalds sehen es nicht gerne, wenn jemand ihre
+   // magischen Pflanzen pflueckt...
+   int res;
+   res=(int)::move(dest, method);
+   if (res!=1) return res;
+   if (environment()) 
+     environment()->SetProp(ZAUBERWALD, time()+AGGRESSIVE_TIME);
+   return 1;
+}*/
+
+protected void NotifyMove(object dest, object oldenv, int method) {
+  if ( !oldenv && objectp(dest) && query_once_interactive(dest) &&
+       strstr(object_name(environment(dest)),"zauberwald")>-1) {
+    dest->SetProp(ZAUBERWALD, time()+AGGRESSIVE_TIME);
+  }
+  return ::NotifyMove(dest, oldenv, method);
+}
+
diff --git a/doc/beispiele/zauberwald/obj/kamm.c b/doc/beispiele/zauberwald/obj/kamm.c
new file mode 100644
index 0000000..b26d6f8
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/kamm.c
@@ -0,0 +1,39 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+inherit "std/weapon";
+
+#include "../files.h"
+#include <combat.h>
+
+void create()
+{
+   ::create();
+   SetProp(P_SHORT, "Ein langer Kamm");
+   SetProp(P_NAME, "Kamm");
+   SetProp(P_GENDER, MALE);
+   SetProp(P_LONG,
+     "Dieser schoene Kamm gehoerte einmal einer Waldfee die damit immer ihr schoenes\n"
+    +"langes Haar kaemmte...\n");
+   AddAdjective("kamm");
+   AddId("kamm");
+   SetProp(P_WEAPON_TYPE, WT_CLUB);
+   SetProp(P_DAM_TYPE, DT_PIERCE);
+   SetProp(P_NR_HANDS, 1);
+   SetProp(P_WC, 100);
+   SetProp(P_VALUE, 100);
+   SetProp(P_NOBUY, 1);
+   SetProp(P_MATERIAL, ({ MAT_MISC_MAGIC, MAT_HORN }) );
+   AddCmd("kaemme", "cmd_kaemmen");
+}
+
+static int cmd_kaemmen(string str)
+{
+   notify_fail("Was moechtest Du denn kaemmen?\n");
+   if (str!="haare") return 0;
+   write("Eitel wie Du bist, versuchst Du Dir mit dem Kamm die Haare zu kaemmen, doch\n"
+        +"irgendwie ist er ein bisschen zu gross fuer Deine Haare.\n");
+   say(BS("Eitel wie "+PL->QueryPronoun()+" ist, kaemmt sich "+PL->name(WER)
+         +" die Haare. Doch irgendwie ist der Kamm ein bisschen zu gross fuer "
+         +PL->QueryPossPronoun(NEUTER, WEN, 1)+" kurzen Haare."));
+   return 1;
+}
diff --git a/doc/beispiele/zauberwald/obj/kleid.c b/doc/beispiele/zauberwald/obj/kleid.c
new file mode 100644
index 0000000..f52e157
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/kleid.c
@@ -0,0 +1,38 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+inherit "std/armour";
+
+#include "../files.h"
+#include <combat.h>
+
+void create()
+{
+   ::create();
+   SetProp(P_NAME, "Blaetterkleid");
+   SetProp(P_SHORT, "Ein Blaetterkleid");
+   SetProp(P_GENDER, NEUTER);
+   SetProp(P_LONG,
+     "Das Blaetterkleid stammt von einer Waldfee und war genau auf ihre Rundungen\n"
+    +"und ihre Groesse abgepasst. Du hast leider nicht die geringste Chance, dieses\n"
+    +"Kleid jemals tragen zu koennen.\n");
+   AddId(({"kleid", "blaetterkleid"}));
+   SetProp(P_MATERIAL, MAT_MISC_WOOD);
+   SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
+   SetProp(P_VALUE, 500);
+   SetProp(P_NOBUY, 1);
+   SetProp(P_AC, 10);
+   SetProp(P_WEAR_FUNC, ME);
+}
+
+int WearFunc(object me, int silent)
+{
+   if (!PL || query_once_interactive(PL) || getuid(PL)!=getuid() ||
+       PL->QueryProp(P_RACE)!="Fee") {
+      if (!silent)
+        write("Dieses Kleid war genau auf die Rundungen und die Groesse der Waldfee\n"
+             +"angepasst von der es stammt. Du hast leider nicht die geringste Chance,\n"
+             +"dieses Kleid jemals tragen zu koennen.\n");
+      return 0;
+   }
+   return 1;
+}
diff --git a/doc/beispiele/zauberwald/obj/leichenmp.c b/doc/beispiele/zauberwald/obj/leichenmp.c
new file mode 100644
index 0000000..aea7c10
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/leichenmp.c
@@ -0,0 +1,81 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+/* Changelog:
+   * 09.11.06 Zesstra
+     object_info()[11] durch query_next_reset() ersetzt.
+     */
+#include "../files.h"
+
+inherit "/std/thing";
+
+static int leichen;
+
+void create()
+{
+    leichen=0;
+    if (!clonep(ME))
+       set_next_reset(-1);
+    else {
+       ::create();
+       SetProp(P_INVIS, 1);
+       SetProp(P_NODROP, 1);
+       SetProp(P_NEVERDROP, 1);
+       AddId(WALDID("leichenmp"));
+       set_next_reset(3600*3); // erster reset nach 3h
+    }
+}
+
+int remove()
+{
+    closure clo;
+    if (environment()) {
+      clo=environment()->Query(P_MAX_SP, F_QUERY_METHOD);
+      if (clo && to_object(clo)==ME)
+          environment()->Set(P_MAX_SP, 0, F_QUERY_METHOD);
+    }
+    destruct(ME);
+    return 1;
+}
+
+int calculate_mp()
+{
+    int mp;
+    switch(leichen) {
+       case 1:  mp = 5;  break;
+       case 2:  mp = 9;  break;
+       case 3:  mp = 12; break;
+       case 4:  mp = 14; break;
+       case 5:  mp = 15; break;
+       default: mp = 0;
+    }
+    SetProp(P_X_HEALTH_MOD, ([P_SP:mp]) );
+}
+
+void new_corpse()
+{
+    closure clo;
+    clo=PL->Query(P_MAX_SP, F_QUERY_METHOD);
+    if (clo && to_object(clo)!=ME) {
+       call_out("remove", 0);
+       return;
+    }
+    if (leichen<5) {
+       leichen++;
+       set_next_reset(3600+3);
+    }
+    else set_next_reset( (query_next_reset(ME)-time())+3600 );
+    calculate_mp();
+}
+
+void reset()
+{
+   leichen--;
+   if (environment()) {
+      tell_object(environment(), "Du spuerst wie Deine mentalen Kraefte schwaecher werden...\n");
+      if (environment()->QueryProp(P_SP) > environment()->QueryProp(P_MAX_SP))
+          environment()->SetProp(P_SP, environment()->QueryProp(P_MAX_SP));
+   }
+   calculate_mp();
+   if (leichen<=0)
+      remove();
+   else set_next_reset(3600);
+}
diff --git a/doc/beispiele/zauberwald/obj/stock.c b/doc/beispiele/zauberwald/obj/stock.c
new file mode 100644
index 0000000..f79d5e4
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/stock.c
@@ -0,0 +1,26 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+inherit "std/weapon";
+
+#include "../files.h"
+#include <combat.h>
+
+void create()
+{
+   ::create();
+   SetProp(P_SHORT, "Ein kleiner Zeigestock");
+   SetProp(P_NAME, "Zeigestock");
+   SetProp(P_GENDER, MALE);
+   SetProp(P_LONG,
+     "Ein kleiner Stock, mit dem man gut Dinge zeigen oder in den Sand malen kann.\n");
+   AddAdjective("klein");
+   AddId(({"stock", "zeigestock"}));
+   SetProp(P_WEAPON_TYPE, WT_STAFF);
+   SetProp(P_SIZE, 120);
+   SetProp(P_DAM_TYPE, DT_BLUDGEON);
+   SetProp(P_NR_HANDS, 1);
+   SetProp(P_WC, 120);
+   SetProp(P_VALUE, 300);
+   SetProp(P_NOBUY, 1);
+   SetProp(P_MATERIAL, MAT_MISC_WOOD);
+}
diff --git a/doc/beispiele/zauberwald/obj/tarnzauber.c b/doc/beispiele/zauberwald/obj/tarnzauber.c
new file mode 100644
index 0000000..c226494
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/tarnzauber.c
@@ -0,0 +1,78 @@
+// (c) 2003 by Padreic (Padreic@mg.mud.de)
+// Das Objekt realisiert einen Tarnzauber, aehnlich
+// dem Tarnhelm. Jedoch ohne Shadow und nur auf die
+// Rasse beschraenkt.
+
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+#include <defines.h>
+
+inherit "/std/thing";
+
+static string race;
+
+create()
+{
+  if (!clonep(this_object())) return;
+  ::create();
+  SetProp(P_SHORT, 0);
+  SetProp(P_LONG, "Tarnzauber");
+  SetProp(P_NAME, "Tarnzauber");
+  SetProp(P_INVIS, 1);
+  SetProp(P_GENDER, MALE);
+  SetProp(P_VALUE,  0);
+  SetProp(P_NOGET, 1);
+  SetProp(P_WEIGHT, 0);
+  Set(P_DEFEND_FUNC, ME);
+  AddId("\ntarnzauber");
+}
+
+// die NPCs im Zauberwald durchschauen den Zauber... :o)
+string _query_race()
+{
+   if (previous_object(1) && getuid(previous_object(1))==getuid())
+      return previous_object()->_query_race()||race;
+   return "Dunkelelf";
+}
+
+void Initialize(object pl)
+{
+   object *armours;
+   pl->Set(P_RACE, #'_query_race, F_QUERY_METHOD);
+   armours=(pl->QueryProp(P_ARMOURS));
+   if (member(armours, ME)>=0) return 0;
+   pl->SetProp(P_ARMOURS, armours+({ ME }));
+   race=pl->Query(P_RACE);
+}
+
+int QueryDefend(string *dtyp, mixed spell, object enemy)
+{
+  mixed am;
+  // noch ein paar paranoide Sicherheitsabfragen... :o)
+  if (!previous_object() ||
+      !pointerp(am=previous_object()->QueryProp(P_ARMOURS)) ||
+      member(am, ME)==-1) return 0;
+  tell_object(previous_object(), "Dein Tarnzauber loest sich auf.\n");
+  remove();
+}
+
+int DefendFunc(string *dtyp, mixed spell, object enemy)
+{
+   return QueryDefend(dtyp, spell, enemy);
+}
+
+varargs int move(mixed dest, int method)
+// beim Tod soll sich der Zauber entfernen und auch nirgends rumfliegen
+{
+   int res;
+   res=(int)::move(dest, method);
+   if (!living(environment())) remove();
+   return res;
+}
+
+varargs int remove(int silent)
+{
+  if (living(environment())) environment()->Set(P_RACE,0,F_QUERY_METHOD);
+  return (int)::remove(silent);
+}
diff --git a/doc/beispiele/zauberwald/obj/zauberstab.c b/doc/beispiele/zauberwald/obj/zauberstab.c
new file mode 100644
index 0000000..1e01fa6
--- /dev/null
+++ b/doc/beispiele/zauberwald/obj/zauberstab.c
@@ -0,0 +1,36 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+inherit "std/weapon";
+
+#include "../files.h"
+#include <combat.h>
+
+void create()
+{
+   ::create();
+   SetProp(P_SHORT, "Ein Zauberstab");
+   SetProp(P_NAME, "Zauberstab");
+   SetProp(P_GENDER, MALE);
+   SetProp(P_LONG,
+     "Dies war einmal der Zauberstab einer Waldfee aus dem Zauberwald. In dem Stab\n"
+    +"liegt sicherlich noch eine grosse Magie verborgen, doch nutzen kannst Du sie\n"
+    +"nicht.\n");
+   AddId(({"stab", "zauberstab"}));
+   SetProp(P_WEAPON_TYPE, WT_CLUB);
+   SetProp(P_DAM_TYPE, ({ DT_MAGIC, DT_BLUDGEON }) );
+   SetProp(P_NR_HANDS, 1);
+   SetProp(P_WC, 140);
+   SetProp(P_VALUE, 800);
+   SetProp(P_NOBUY, 1);
+   SetProp(P_HIT_FUNC, ME);
+   SetProp(P_MATERIAL, ({ MAT_MISC_MAGIC, MAT_MISC_WOOD }) );
+}
+
+int HitFunc(object enemy)
+{
+    object ob;
+    ob=QueryProp(P_WIELDED);
+    if (ob && !query_once_interactive(ob) && getuid(ob)==getuid() &&
+        ob->QueryProp(P_RACE)=="Fee") return 100+random(300);
+    return 0;
+}