Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/items/pfeifchen.c b/items/pfeifchen.c
new file mode 100644
index 0000000..c0d8976
--- /dev/null
+++ b/items/pfeifchen.c
@@ -0,0 +1,149 @@
+inherit "/std/thing";
+
+#include <properties.h>
+#include <language.h>
+
+int tm;
+int gestopft = 0;
+int rauchen  = 0;
+
+string des;
+
+string _query_long(){
+  string s;
+  s="Ein einfaches Holzpfeifchen: Ohne Verzierungen oder besondere "
+    "Extras, sondern schlicht und stabil genug fuer ein Abenteurerleben. "
+    "Es eignet sich hervorragend dazu, einmal zu entspannen und guten "
+    "Tabak zu geniessen";
+  if(gestopft) s+=". Das Pfeifchen ist gestopft";
+  if(rauchen)  s+=" und angezuendet.";
+  else         s+=".";
+  return(break_string(s,78));
+}
+
+string _query_short(){
+  if(rauchen)  return "Ein Pfeifchen (angezuendet)";
+  if(gestopft) return "Ein Pfeifchen (gestopft)";
+  else         return "Ein Pfeifchen";
+}
+
+protected void create(){
+  if(!clonep(this_object()))return ;
+  thing::create();
+  tm=0;
+  SetProp(P_GENDER,NEUTER);
+  SetProp(P_NAME,"Pfeifchen");
+  SetProp(P_WEIGHT,10);
+  SetProp(P_VALUE,0);
+  AddId(({"pfeifchen","holzpfeifchen"}));
+  SetProp(P_NODROP,1);
+  SetProp(P_NEVERDROP,1);
+  SetProp(P_MATERIAL,MAT_IRON_WOOD);
+  AddCmd(({"rauch","rauche"}),"cm_smoke");
+  AddCmd(({"stopf","stopfe"}),"cm_stopf");
+}
+
+static int cm_stopf(string str){
+  string s1,s2;
+  object ob;
+  _notify_fail("Syntax: stopfe pfeifchen mit <was>\n");
+  if(!str) return 0;
+  if(sscanf(str,"%s mit %s",s1,s2)==2){
+    if(id(s1)){
+      if(!ob=present(s2,this_player())){
+        write("So etwas hast Du doch gar nicht bei Dir.\n");
+        return 1;
+       }
+      if((ob->id("tabak")) || (ob->QueryMaterial(MAT_CANNABIS)>50)){
+        if(rauchen){
+          write(break_string("Du rauchst Dein Pfeifchen doch gerade. Damit "
+           "musst Du schon warten, bis Du fertig bist.",78));
+          return 1;
+         }
+        if(gestopft){
+          write(break_string("Du hast Dein Pfeifchen bereits gestopft. Es "
+           "liesse sich nun vortrefflich rauchen.",78));
+          return 1;
+         }
+        else{
+          write(break_string("Du stopfst Dein Pfeifchen mit "+
+           ob->name(WEM,1)+
+           " und freust Dich schon darauf, es zu rauchen.",78));
+          tell_room(environment(this_player()),this_player()->Name()+
+           " stopft ein Pfeifchen.\n",({this_player()}));
+          if(!ob->GetSmokeDescription()) des="Es scheint sich um keinen "
+           "besonders guten Tabak zu handeln. Nun, ja. Besser als nichts "
+           "immerhin.";
+          else des=ob->GetSmokeDescription();
+          if(!ob->QueryProp(P_AMOUNT))
+            ob->remove();
+          else
+            ob->AddAmount(-1);
+          gestopft = 1;
+          return 1;
+         }
+       }
+      write(break_string("Das laesst sich aber schlecht rauchen, such "
+       "Dir lieber einen ordentlichen Tabak.",78));
+      return 1;
+     }
+   }
+  return(0); //non-void Funktion, Zesstra
+}
+
+static int cm_smoke(string str){
+  object ob;
+
+  _notify_fail("Was moechtest Du rauchen?\n");
+  if(!str) return 0;
+  if(!id(str)) return 0;
+  if(rauchen){
+    write("Das machst Du doch bereits, nicht so hektisch.\n");
+    return 1;
+   }
+  if(!gestopft){
+    write("Vielleicht solltest Du Dein Pfeifchen erst mal stopfen?\n");
+    return 1;
+   }
+  if(tm > time()){
+    write("Nana, ein Pfeifchen geniesst man. Sei mal nicht so hektisch.\n");
+    return 1;
+   }
+  tm = time()+20;
+  rauchen = 1;
+  tell_room(environment(this_player()),this_player()->Name()+" raucht in "
+   +"Ruhe ein Pfeifchen.\n",({this_player()}));
+  write("Du rauchst in Ruhe Dein Pfeifchen.\n");
+  write(break_string(des,78));
+  if(find_call_out("smoke2")==-1)
+    call_out("smoke2",20,getuid(this_player()));
+  return 1;
+}
+
+int smoke2(object pl){
+  object ob;
+  if(!rauchen) return 0;
+  if(!ob=find_player(pl)) return 0;
+  if(environment()!=ob) return 0;
+  tell_object(ob,"Genuesslich pustest Du ein paar Rauchkringel in die Luft.\n");
+  tell_room(environment(ob),ob->Name()+" pustet genuesslich ein paar "
+   +"Rauchkringel in die Luft.\n",({ob}));
+  if(find_call_out("smoke3")==-1)
+    call_out("smoke3",20,getuid(environment()));
+  return 1;
+}
+
+int smoke3(object pl){
+  object ob;
+  if(!rauchen) return 0;
+  if(!ob=find_player(pl)) return 0;
+  if(environment()!=ob) return 0;
+  tell_object(ob,break_string("Genuesslich pustest Du ein paar Rauchkringel "
+   "in die Luft, rauchst Dein Pfeifchen auf und klopfst es aus.",78));
+  tell_room(environment(ob),break_string(ob->Name()+" pustet genuesslich ein "
+   "paar Rauchkringel in die Luft, beendet das Rauchpaeuschen und klopft "
+   +(ob->QueryProp(P_GENDER)==1?"sein":"ihr")+" Pfeifchen aus.",78),({ob}));
+  rauchen = 0;
+  gestopft = 0;
+  return 1;
+}