Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/std/thing/moving.c b/std/thing/moving.c
new file mode 100644
index 0000000..780ac41
--- /dev/null
+++ b/std/thing/moving.c
@@ -0,0 +1,201 @@
+// MorgenGrauen MUDlib
+//
+// thing/moving.c -- object moving
+//
+// $Id: moving.c 8892 2014-08-04 19:48:28Z Zesstra $
+
+#pragma strict_types
+#pragma save_types
+#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#include <defines.h>
+#include <moving.h>
+#include <properties.h>
+#define NEED_PROTOTYPES
+#include <thing/properties.h>
+
+// Das Objekt bewegen.
+// Rueckgabe 1 ist Erfolg, <=0 ist Fehler
+
+// a) P_NODROP/P_NOGET-Behandlung.
+// b) zum Ueberschreiben
+protected int PreventMove(object dest, object oldenv, int method) {
+  int tmp;
+  
+  // M_NOCHECK? -> Bewegung eh erlaubt (und Rueckgabewert wuerde ignoriert)
+  if ((method&M_NOCHECK)) {
+    // Bei M_NOCHECK zwar Prevent* aufrufen, aber das Resultat ignorieren
+    if (oldenv) oldenv->PreventLeave(this_object(),dest);
+    dest->PreventInsert(this_object());
+
+    return 0; // das wars, rest ist egal.
+  }
+
+  // P_NODROP verhindert weggeben
+  if ((method & (M_PUT|M_GIVE)) && QueryProp(P_NODROP))
+      return ME_CANT_BE_DROPPED;
+
+  // P_NOGET verhindert nehmen
+  if ((method & (M_GET|M_GIVE)) && QueryProp(P_NOGET))
+      return ME_CANT_BE_TAKEN;
+
+  // Gewicht ermitteln
+  if ( !(tmp = (int)QueryProp(P_TOTAL_WEIGHT)) )
+      tmp = (int)QueryProp(P_WEIGHT);
+        
+  // Ist das Objekt nicht zu schwer?
+  if ( (tmp = (int)dest->MayAddWeight(tmp)) < 0) {
+      if ( tmp == -2 ) return ME_TOO_HEAVY_FOR_ENV;
+      return ME_TOO_HEAVY;
+  }
+
+  // Ist das Zielobjekt schon voll?
+  if ( !dest->MayAddObject(this_object()) )
+      return TOO_MANY_OBJECTS;
+
+  // Darf hinausbewegt werden?
+  if ( oldenv && oldenv->PreventLeave(this_object(), dest) )
+      return ME_CANT_LEAVE_ENV;
+
+  // Darf hineinbewegt werden?
+  if ( dest->PreventInsert(this_object()) )
+      return ME_CANT_BE_INSERTED;
+
+  return(0);
+}
+
+// zum Ueberschreiben...
+protected void NotifyMove(object dest, object oldenv, int method) {
+}
+
+varargs int move( object|string dest, int method )
+{
+  object oldenv;
+  int tmp;
+  string fn,vc;
+  mixed sens;
+
+  if (!objectp(dest) && !stringp(dest))
+      raise_error(sprintf("Wrong argument 1 to move(). 'dest' must be a "
+            "string or object! Argument was: %.100O\n",
+            dest));
+
+  // Jetzige Umgebung merken
+  oldenv = environment();
+
+  // Bewegung in Para-Welt-Raeume?
+  // tmp ist die Ziel-Parallelweltnummer
+  if (!environment()||!living(environment())||
+      !intp(tmp =(int)environment()->Query(P_PARA)))
+    tmp=0;
+    
+  // Wenn das Objekt von einem in der Parawelt befindlichen Spieler
+  // oder NPC bewegt wird, sollte es auch wieder in der Parawelt landen.
+  // Um Rechenzeit zu sparen, wird angenommen, dass bei Bewegungen in
+  // das Inv oder Env des Spielers 'dest' als Objekt uebergeben wird,
+  // wohingegen bei Bewegungen in Nachbarraeume (die eigentlich nur
+  // interessant sind) 'dest' als Filename angegeben wird.
+  if (tmp&&!objectp(dest)&&!environment(dest)) {
+      // Falls der Zielraum nicht schon explizit in der Parallelwelt ist,
+      // neuen Zielraum suchen. Aber nur, wenn das Ziel kein Clone ist. Sonst
+      // buggt, wenn man versucht, nach raum#42^para zu bewegen.
+      if (!IS_PARA(dest) && strrstr(dest,"#")==-1) {
+        fn=dest+"^"+tmp;
+
+        // Der Parawelt-Raum wird nur zum Ziel, wenn er a) existiert
+        // und b) auch von Spielern betreten werden darf. Letzteres
+        // Kriterium kann nur mit im Objekt gesetzter Property
+        // P_TESTPLAYER umgangen werden.
+          if ( (find_object(fn) || ((file_size(fn+".c")>0||
+                  (file_size(vc=implode(explode(fn,"/")[0..<2],"/")+
+                  "/virtual_compiler.c")>0 &&
+                  !catch(tmp=(int)call_other(vc,"QueryValidObject",fn);
+                    publish) && tmp>0)) &&
+                  !catch(load_object( fn );publish))) &&
+              (!fn->QueryProp(P_NO_PLAYERS) || QueryProp(P_TESTPLAYER)) )
+           dest = fn;
+      }
+  }
+    
+  // dest auf Objekt normieren.
+  if (stringp(dest))
+      dest = load_object(dest);
+    
+  // testen, ob das Objekt bewegt werden will
+  if (tmp=PreventMove(dest, oldenv, method)) {
+      // auf gueltigen Fehler pruefen, wer weiss, was Magier da evtl.
+      // versehentliche zurueckgeben.
+      if (VALID_MOVE_ERROR(tmp))
+        return(tmp);
+      else
+        return(ME_DONT_WANT_TO_BE_MOVED);
+  }
+
+  // Sensitive Objekte muessen entfernt werden
+  sens = QueryProp(P_SENSITIVE);
+
+  if (sens && environment())
+  {
+    environment()->RemoveSensitiveObject( this_object() );
+    if (!objectp(ME))
+      return ME_WAS_DESTRUCTED;
+  }
+  // Bewegen
+  move_object(ME, dest);
+
+  //falls (sich) das objekt im init() zerstoert (wurde). (Die u. stehenden
+  //Funktionsaufrufe werden dann vom Driver eh groesstenteils ignoriert.)
+  if (!objectp(this_object())) return(ME_WAS_DESTRUCTED);
+
+  // Objekt informieren. ;-)
+  NotifyMove(environment(), oldenv, method);
+
+  // Alte Umgebung informieren
+  if (oldenv) oldenv->NotifyLeave(this_object(), dest);
+
+  // Wenn das Objekt eine Umgebung hat, selbige informieren
+  if (environment()) {
+    if (sens)
+    {
+      environment()->InsertSensitiveObject(this_object(),sens);
+      if (!objectp(ME)) return ME_WAS_DESTRUCTED;
+    }
+    environment()->NotifyInsert(this_object(), oldenv);
+  }
+  //wurde das Objekt vielleicht noch zerstoert?
+  if (!objectp(ME)) return(ME_WAS_DESTRUCTED);
+  
+  //scheint wohl alles ok zu sein.
+  return MOVE_OK;
+}
+
+// Das Objekt zerstoeren
+varargs int remove(int silent)
+{ 
+    if (environment() ) {
+        if(QueryProp(P_SENSITIVE))
+                environment()->RemoveSensitiveObject(this_object());
+        environment()->NotifyRemove(this_object());
+    }
+    if (objectp(this_object()))
+        destruct(this_object());
+    return 1;
+}
+
+public string NotifyDestruct(object caller) {
+  // Lichtsystem mit der aenderung versorgen. :-/
+  foreach(object env : all_environment() || ({})) {
+      // Ja. Man ruft die _set_xxx()-Funktionen eigentlich nicht direkt auf.
+      // Aber das Lichtsystem ist schon *so* rechenintensiv und gerade der
+      // P_LAST_CONTENT_CHANGE-Cache wird *so* oft benoetigt, dass es mir
+      // da um jedes bisschen Rechenzeit geht.
+      // Der Zweck heiligt ja bekanntlich die Mittel. ;-)
+      //
+      // Tiamak
+      env->_set_last_content_change();
+  }
+  return 0;
+}
+