Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/beispiele/testobjekte/attack_busy_sensitive_testobj.c b/doc/beispiele/testobjekte/attack_busy_sensitive_testobj.c
new file mode 100644
index 0000000..4225d88
--- /dev/null
+++ b/doc/beispiele/testobjekte/attack_busy_sensitive_testobj.c
@@ -0,0 +1,105 @@
+inherit "/std/thing";

+#include <properties.h>

+#include <new_skills.h>

+#include <sensitive.h>

+

+private action_puste(string str);

+private int counter;

+

+void create() {

+  if (!clonep(this_object())) return;

+  ::create();

+  counter = 2+random(4);

+  

+  SetProp(P_NAME, "Pusteblume");

+  SetProp(P_SHORT, "Eine kleine Pustblume");

+  SetProp(P_LONG, break_string(

+    "Eine abgebluehte Pflanze, die jetzt wie ein kleiner, weisser Ball "

+	"aussieht. Die fiedrigen Samen fliegen bestimmt prima.", 78));

+  AddDetail("samen", "Er sieht sehr fein und leicht aus.\n");

+  SetProp(P_GENDER,FEMALE);

+  SetProp(P_MATERIAL, MAT_MISC_PLANT);

+  SetProp(P_NOBUY, 1);

+  SetProp(P_VALUE, random(10));

+

+  SetProp(P_INFO, "Starker Wind taete ihr nicht gut.\n");

+

+  AddId(({"blume", "pusteblume", "loewenzahn"}));

+  SetProp(P_COMBATCMDS,(["puste loewenzahn":

+                         ([C_HEAL: 5])]));

+

+  SetProp(P_SENSITIVE,({({SENSITIVE_ATTACK, DT_AIR, 20}),

+                        ({SENSITIVE_INVENTORY, DT_AIR, 20})}));

+ 

+  AddCmd("puste&@ID", #'action_puste, "Puste wen oder was (an)?");

+}

+

+private action_puste(string str) {

+  if(environment()!=this_player()) {

+    notify_fail("Dazu solltest du "+name(WEN,1)+" haben.\n");

+	return 0;

+  }

+  if (this_player()->QueryProp(P_ATTACK_BUSY)) {

+    write("Du hast dafuer momentan einfach nicht mehr die Puste.\n");

+    return 1;

+  }

+  this_player()->SetProp(P_ATTACK_BUSY, 1);

+

+  if(counter<0) {

+    write(break_string("Du pustest sinnlos auf "+name(WEN, 2)+".", 78));

+	say(break_string(this_player()->Name(WER)+

+	  " pustet wie daemlich gegen "+name(WEN, 0)+".", 78));

+	return 1;

+  } else {

+    write(break_string(

+      "Du pustest "+name(WEN, 2)+" vorsichtig an, einige Samen "

+      "loesen sich und fliegen taumelnd in deinem Atem davon."+

+	  (counter<0?" Es bleibt nur noch ein nutzloser Strunk.":""), 78));

+    say(break_string(

+      this_player()->Name(WER)+" pustet sachte gegen "+name(WEN, 0)+" und "

+	  "du schaust verzueckt den davonfliegenden Samen nach.", 78));

+  }

+	

+  object who = this_player()->QueryEnemy();

+  

+  if(objectp(who)) {

+    if(!interactive(this_player())) {

+      who->ModifySkillAttribute(SA_SPEED, 80+random(10), 6);

+	  this_player()->heal_self(5);

+	} else

+	  who->ModifySkillAttribute(SA_SPEED, 90+random(10), 4);

+  }

+

+  counter--;

+  if(counter<0) {

+    call_out(#'remove, 10+random(60));

+	AddId("strunk");

+	SetProp(P_NAME, "Strunk");

+	SetProp(P_SHORT, "Der Strunk einer Pusteblume");

+	SetProp(P_LONG, "Ein haesslicher, leerer Strunk.\n");

+	SetProp(P_GENDER, MALE);

+  }

+  return 1;

+}

+

+private void notify_env_destroy() {

+  object ob = environment();

+  while(ob && !living(ob)) ob = environment(ob);

+  if(objectp(ob))

+    tell_object(ob, "Der Wind zerblaest "+name(WEN, 2)+".\n");

+  remove(1);

+}

+

+varargs void trigger_sensitive_attack() {

+  notify_env_destroy();

+}

+

+varargs void trigger_sensitive_inv() {

+  notify_env_destroy();

+}

+

+varargs int remove(int silent) {

+  if(!silent && living(environment()))

+    tell_object(environment(), "Du wirfst "+name(WEN, 2)+" weg.\n");

+  return ::remove(silent);

+}
\ No newline at end of file