Added public files
Roughly added all public files. Probably missed some, though.
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);
+}