Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/items/seil.c b/items/seil.c
new file mode 100644
index 0000000..c5cf079
--- /dev/null
+++ b/items/seil.c
@@ -0,0 +1,286 @@
+#include <properties.h>
+#include <language.h>
+#include <seil.h>
+inherit "/std/thing";
+
+#pragma strict_types,rtt_checks
+
+object tied_to_ob;
+string tied_name;
+
+void create(){
+  ::create();
+
+  AddId( ({"seil", "\nseil"}) );
+  SetProp(P_NAME, "Seil");
+
+  SetProp(P_GENDER, NEUTER);
+  SetProp(P_LONG,break_string("Du siehst ein ganz normales Seil. Du kannst es an "+
+                  "Gegenstaenden festbinden und wieder loesen. Das Seil besteht "+
+                  "aus solider fester Steinbeisserwolle.",78));
+  AddDetail(({"wolle","steinbeisserwolle"}),"Diese Wolle ist eine besonders feste und stabile Wolle.\n");
+  SetProp(P_VALUE, 15);
+  SetProp(P_TIE_AUTO,1);
+  SetProp(P_WEIGHT, 300);
+
+  SetProp(P_MATERIAL,({MAT_MISC_STONE,MAT_WOOL}));
+  AddCmd( ({"binde","bind","knote","befestige","mach","mache"}), "tie" );
+
+  // der Befehle loesen wird auf die anderen Befehle umgebogen und dient nur
+  // der besseren benutzbarkeit des seiles.
+  AddCmd( ({"loese" }), "loesen" );
+
+}
+
+// dieses Ding wird u.a. geerbt. Damit die BP beim Erben auch initialisiert
+// wird (fuer die Laeden), muss create_super() das create() rufen.
+protected void create_super() {
+  create();
+}
+
+string _query_short()
+{
+ string artikel;
+ switch( QueryProp(P_GENDER) )
+ {
+  case NEUTER : artikel="das";break;
+  case MALE   : artikel="der";break;
+  case FEMALE :	artikel="die";break;
+  default     : artikel="das";
+ }
+
+ if (tied_to_ob)
+  return this_object()->Name(WER)+", "+artikel+" an "
+     + (tied_name?tied_name:(string)(tied_to_ob->name(WEM)))
+     + " festgebunden ist";
+ return (string)this_object()->Name(WER);
+
+}
+
+mixed _query_noget()
+{
+ if (tied_to_ob)
+  return "Das geht nicht, solange "+name(WER)+" festgebunden ist.\n";
+ return 0;
+}
+
+int tie(string str)
+{
+  string t1, t2;
+  object ob;
+  string verb;
+  mapping tied_map;
+
+  _notify_fail("Binde was?\n");
+
+  // zunaechst den User notieren, damit spaeter immer drauf 
+  // zugegriffen werden kann.
+  // Wegen kompatibilitaet wird das nicht direkt an tie()/untie()
+  // uebergeben.
+  SetProp(P_TIE_USER,this_player());
+
+  if (!str||!stringp(str)) return 0;
+
+  verb = query_verb();
+  
+  //automatischer aus objecten/raeumen generierter aufruf
+  if(QueryProp(P_TIE_VERB)) verb=QueryProp(P_TIE_VERB); 
+  	
+  if (sscanf(str, "%s an %s", t1, t2) != 2 && 
+      sscanf(str,"%s los",t1) != 1 &&
+      sscanf(str,"%s fest",t1) != 1 )
+   return 0;
+
+  if(id(t1) && str==(t1+" fest")) str="seil an raum";
+
+  if(sscanf(str,"%s an %s",t1,t2)==2)
+  {
+   if(tied_to_ob)
+   {
+    write("Es ist bereits irgendwo festgebunden.\n");
+    return 1;
+   }
+
+   if (!id(t1)) return 0;
+
+   if (t2 == "mich")
+   {
+    _notify_fail("Warum willst Du das denn machen?\n");
+    return 0;
+   }
+
+   ob = present(t2, this_player());		
+
+   if (!ob) ob = present(t2, environment(this_player()));
+
+   if (!ob)
+   {
+    if (call_other(environment(this_player()), "id", t2))
+    ob = environment(this_player());
+   }
+		
+   if(!ob && str == "seil an raum")
+   {
+    ob=environment(this_player());
+   }
+
+   _notify_fail( "Soetwas findest Du hier nicht.\n" );
+   if (!ob) return 0;
+
+   if (!(tied_name=(string)call_other(ob, "tie", t2)))
+   {
+    if(ob->QueryProp(P_INVIS)) return 0;
+    
+    if (ob != environment(this_player()))
+    {
+     _notify_fail("Du kannst "+name(WER)+" nicht an "+ob->name(WEM)+
+                 " festbinden.\n");
+     return 0;
+    }
+    else
+    {
+     _notify_fail("Du kannst "+name(WER)+" nicht daran festbinden.\n");
+     return 0;
+    }
+
+   }
+		
+  /* Is he carrying the rope ? */
+  if (environment() == this_player()) 
+  {
+   this_object()->move(environment(this_player()));
+  }
+
+  tied_to_ob = ob;
+
+  if (tied_to_ob != environment(this_player()) || 
+      environment(this_player())->name()!=0 )
+   {
+    tied_name = (string)(tied_to_ob->name(WEM));
+   }
+  else
+   {
+    if( !stringp(tied_name) ) tied_name="etwas";
+   }
+
+  if(QueryProp(P_TIE_VERB))
+  {
+    // das seil wird gesteuert
+    tell_room(environment(),QueryProp(P_TIE_MESSAGE));
+
+    // seil wieder in roh-zustand versetzen.
+    SetProp(P_UNTIE_MESSAGE,0);
+    SetProp(P_TIE_VERB,0);
+  }
+  else
+  {
+   write("Du bindest "+name(WER)+" an " + tied_name + " fest.\n");
+   say(this_player()->name(WER) + " bindet "+name(WER)+" an "
+   + tied_name + " fest.\n");
+  }
+
+  // den object mitteilen, an wen es gebunden ist.
+  if(tied_to_ob->QueryProp(P_TIED)==0) tied_to_ob->SetProp(P_TIED,([]) );
+  tied_to_ob->SetProp(P_TIED,tied_to_ob->QueryProp(P_TIED)+([this_object(): 
+     ([
+       "player":this_player(),
+       "time"  :time()
+     ]) ]));
+
+  return 1;
+ }
+
+ if( (member( ({
+         "binde",
+         "bind",
+         "knote",
+         "mach",
+         "mache",
+         "loese" 
+         }),verb                 
+    )!=-1) && 
+    sscanf(str,"%s los",t1)==1)
+  {
+   if (!tied_to_ob)
+   {
+    write(Name(WER)+" ist nirgendwo festgebunden.\n");
+    return 1;
+   }
+
+   if (!call_other(tied_to_ob, "untie"))
+   {
+    write("Das klappt leider nicht.\n");
+    return 1;
+   }
+
+   if(QueryProp(P_TIE_VERB))
+   {
+    // das seil wird gesteuert
+    tell_room(environment(),QueryProp(P_UNTIE_MESSAGE));
+
+    // wieder in roh-zustand versetzen.
+    SetProp(P_UNTIE_MESSAGE,0);
+    SetProp(P_TIE_VERB,0);
+   }
+   else
+   {
+    write("Du bindest "+name(WER)+" los.\n");
+    say(this_player()->name()+" bindet "+name(WER)+" los.\n");
+   }
+
+  tied_map=([])+tied_to_ob->QueryProp(P_TIED);
+  tied_map=m_copy_delete(tied_map,this_object());
+
+  tied_to_ob->SetProp(P_TIED,tied_map);
+
+  tied_to_ob = (object) 0;
+ 
+  return 1;
+ }
+ return 0;
+}
+
+int loesen(string str)
+{
+ if(str == "seil"  ||
+    str == lower_case(QueryProp(P_NAME)) ||
+    id(str)
+ )
+ {
+  return tie("seil los");
+ }
+ _notify_fail("Was moechtest Du loesen?\n");
+ return 0;
+}
+
+
+object query_tied_to_ob()
+{
+  return tied_to_ob;
+}
+
+varargs int binde_seil(string ziel,string msg)
+{
+ if(!QueryProp(P_TIE_AUTO)) return 0;
+
+ // diese funktion bindet ein Seil und kann von einem object aus 
+ // aufgerufen werden.
+ SetProp(P_TIE_VERB,"binde");
+
+ if(!msg) msg = Name(WER)+" wird auf magische Art und Weise festgebunden.\n";
+
+ SetProp(P_TIE_MESSAGE,msg);
+ return tie("seil an "+ziel); 
+}
+
+varargs int loese_seil(string msg)
+{
+ if(!QueryProp(P_TIE_AUTO)) return 0;
+
+ if(!msg) msg = Name(WER)+" loest sich.\n";
+ 
+ SetProp(P_TIE_VERB,"binde");
+ SetProp(P_UNTIE_MESSAGE,msg);
+ return tie("seil los");
+}
+