Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/zauberwald/npc/titina.c b/doc/beispiele/zauberwald/npc/titina.c
new file mode 100644
index 0000000..adce062
--- /dev/null
+++ b/doc/beispiele/zauberwald/npc/titina.c
@@ -0,0 +1,114 @@
+// (c) by Padreic (Padreic@mg.mud.de)
+
+#include "../files.h"
+#include <combat.h>
+#include <new_skills.h>
+#include "/p/zauberer/zauberer.h"
+
+inherit NPC("stdnpc");
+
+void create()
+{
+ ::create();
+ SetProp(P_SHORT, "Titina die Waldfee");
+ SetProp(P_LONG,
+ BS("Vor Dir steht Titina die Waldfee. Ihr langes goldenes Haar weht "
+ +"leicht im Wind und das einzige was sie bedeckt, ist ein leichtes Blaetterkleid "
+ +"das ihre weiblichen Rundungen ausserordentlich gut zur Geltung bringt. "
+ +"Ihre schoenen blauen Augen, tun ein uebriges um Dich ganz wahnsinnig zu machen."));
+ SetProp(P_NAME, "Titina");
+ SetProp(P_ARTICLE, 0);
+ SetProp(P_GENDER, FEMALE);
+ SetProp(P_LEVEL, 80);
+ SetProp(P_ATTRIBUTES, (["int":60,"con":40,"str":16,"dex":50]) );
+ SetProp(P_DISABLE_ATTACK, -10000); // is nich :)
+ SetProp(P_BODY, 80);
+ SetProp(P_MAX_SP, 2000);
+ SetProp(P_SP, 2000);
+ SetProp(P_MAX_HP, 600);
+ SetProp(P_HP, 600);
+ SetProp(P_ALIGN, 400);
+ SetProp(P_RACE, "Fee");
+ SetProp(P_SIZE, 160+random(16));
+ SetProp(P_ALCOHOL, 0);
+ SetProp(P_CORPSE, OBJ("feenleiche"));
+ SetProp(P_MAX_ALCOHOL, 0); // kein rauschen :)
+ AddAdjective("wunderschoen");
+ AddId(({"titina", "fee", "waldfee", WALDID("fee")}));
+ SetProp(P_HANDS, ({" mit ihren zarten Haenden", 150, DT_BLUDGEON}) );
+ SetProp(P_SKILL_ATTRIBUTE_OFFSETS, ([SA_SPELL_PENETRATION: 100]));
+ SetProp(P_XP, 800*200*5*2);
+ SetProp(P_GUILD, "zauberer");
+ SetProp(P_Z_NO_MATERIAL, 1);
+ SetProp(P_DEFAULT_INFO, "schweigt und laechelt Dich einfach nur freundlich an.\n");
+ ModifySkill("verletze",
+ ([SI_SKILLABILITY:8000, SI_SPELLCOST:0,
+ SI_SPELLFATIGUE:0, SI_NO_CONSEQUENCES:10000,
+ SI_SKILLRESTR_USE:([P_GUILD_LEVEL:0,SR_FREE_HANDS:0]),
+ SI_ARMOUR_RESTR:0]),0,"zauberer");
+ SetProp(P_GUILD, 0);
+ SetProp(P_RESISTANCE_STRENGTHS,
+ ([DT_UNHOLY: 0.25,
+ DT_AIR: 0.3,
+ DT_POISON: 0.15]) ); // sonst selten in benutzung :)
+
+ AddItem(OBJ("kamm"), CLONE_WIELD);
+ AddItem(OBJ("kleid"), CLONE_WEAR);
+ if (file_size(SAECKCHEN)>0) AddItem(SAECKCHEN, CLONE_NEW);
+}
+
+static string _query_long()
+{
+ if (!PL || PL->QueryProp(P_GENDER)==FEMALE)
+ return Query(P_LONG)
+ +"Ihr ueberhebliches laecheln bringt Dich jedoch total zur Weissglut, so eine\n"
+ +"Zicke hier den ganzen Tag rumzusitzen und sich nur die Haare zu kaemmen.\n";
+ return Query(P_LONG)
+ +"Mit ihrem charmanten laecheln, zieht sie Dich sofort in ihren Bann und Du\n"
+ +"wuerdest ihr jeden Wunsch erfuellen, so sie denn einen aeussern wuerde.\n";
+}
+
+void Attack(object enemy)
+{
+ int normal_speed;
+ normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100;
+ if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) {
+ write("Die Fee macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n"
+ +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n");
+ enemy->ModifySkillAttribute(SA_SPEED, -20, 180);
+ }
+ if (enemy) ::Attack(enemy);
+ SetProp(P_GUILD, "zauberer");
+ command("verletze mit "+({"feuer", "magie", "eis", "wasser", "gift",
+ "wind", "saeure", "laerm"})[random(8)] );
+ SetProp(P_GUILD, 0);
+}
+
+int Defend(int dam, mixed dts, mixed spell, object enemy)
+{
+ int normal_speed;
+ normal_speed=(enemy->QueryProp(P_SKILL_ATTRIBUTE_OFFSETS)||([]))[SA_SPEED]||100;
+ if (enemy && enemy->QuerySkillAttribute(SA_SPEED) > normal_speed) {
+ write(Name(WER)+" macht eine beruhigende Handbewegung und ploetzlich fuehlst Du Dich\n"
+ +"ruhig und Du merkst wie Du allmaehlich wieder langsamer wirst...\n");
+ enemy->ModifySkillAttribute(SA_SPEED, -20, 180);
+ }
+
+ if ((!spell || (mappingp(spell) && spell[SP_PHYSICAL_ATTACK])) && !random(4)) {
+ tell_room(environment(), Name(WER)+" weicht schnell einen Schritt zurueck und weicht Deinem Angriff aus.\n");
+ dam=0;
+ }
+ return (int)::Defend(dam, dts, spell, enemy);
+}
+
+void NotifyPlayerDeath(object who, object killer, object lost_exp)
+{
+ if (!who || killer!=ME) return; // uninteressant
+ log_file("padreic/kill", ctime(time())+" "+capitalize(getuid(who))+" getoetet von /zauberwald/titina\n");
+}
+
+void die()
+{
+ log_file("padreic/kill", ctime(time())+" Titina wurde von "+get_killer()+" getoetet.\n");
+ ::die();
+}