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");
+}
+