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;
+}