Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/items/boerse.c b/items/boerse.c
new file mode 100644
index 0000000..4e1ecce
--- /dev/null
+++ b/items/boerse.c
@@ -0,0 +1,194 @@
+#pragma strong_types,rtt_checks
+
+inherit "/std/container";
+
+#define U_REQ      "u_req"
+
+#include <properties.h>
+#include <language.h>
+#include <defines.h>
+#include <moving.h>
+#include <money.h>
+
+// zum debuggen und extra public
+public string debugmode;
+public string __set_debug(string recv) {return debugmode=recv;}
+#include <living/comm.h>
+#define ZDEBUG(x) if (stringp(debugmode) && find_player(debugmode)) \
+  find_player(debugmode)->ReceiveMsg(x,MT_DEBUG,0,object_name()+": ",ME)
+//#define ZDEBUG(x)
+
+int dontacceptmoney;
+
+protected void create()
+{
+  ::create();
+  SetProp(P_NAME, "Geldboerse");
+  SetProp(P_SHORT, "Eine Geldboerse");
+  SetProp(P_LONG,  "Eine schoene aus Leder gefertigte Geldboerse.\n");
+  SetProp(P_MATERIAL, ([MAT_LEATHER:100]));
+  SetProp(P_GENDER, FEMALE);
+  SetProp(P_VALUE,  80);
+  SetProp(P_WEIGHT, 300);
+  SetProp(P_WEIGHT_PERCENT, 50);
+  SetProp(P_MAX_WEIGHT, 250000); // 1 mio. Muenzen.
+  AddId(({"geldboerse", "boerse", BOERSEID}));
+  SetProp(P_NOINSERT_MSG,
+      "Du kannst immer nur eine Geldboerse gleichzeitig benutzen.\n");
+}
+
+static string _query_keep_on_sell()
+{
+  if (first_inventory() && living(environment()))
+     return getuid(environment());
+  return Query(P_KEEP_ON_SELL);
+}
+
+static int _query_amount()
+{
+  object ob = first_inventory();
+  if (load_name(ob) == GELD)
+    return ob->QueryProp(P_AMOUNT);
+  return 0;
+}
+
+void AddAmount(int am)
+{
+  object ob = first_inventory();
+  if (load_name(ob) == GELD)
+    ob->AddAmount(am);
+}
+
+string short()
+{
+  int i;
+  switch (i=QueryProp(P_AMOUNT)) {
+    case 0:  return "Eine leere Geldboerse.\n";
+    case 1:  return "Eine Geldboerse mit einer Muenze.\n";
+    default: return "Eine Geldboerse mit "+i+" Muenzen.\n";
+  }
+  return 0;
+}
+
+// Geld darf nur rein, wenn diese Boerse schon Geld enthaelt
+// ODER es auch keine andere im lebenden (!) Inventar gibt, die Geld
+// enthaelt.
+private int accept_money()
+{
+  // wenn wir gerade zerstoert werden, ist das hier gesetzt, dann akzeptieren
+  // wir ein Geld. Sonst wurde Geld, was gerade in prepare_destruct()
+  // rausbewegt wurde, evtl. wieder reinbewegt...
+  if (dontacceptmoney)
+    return 0;
+  // Ausserhalb von Livings geht reinstecken von Geld immer.
+  if (!living(environment()))
+    return 1;
+  // wenn in uns Geld ist, auch.
+  object geld = first_inventory();
+  if (geld && load_name(geld) == GELD)
+    return 1; // erlaubt
+  // wir haben kein Geld... Wenn es eine mit Geld im gleichen inv gibt,
+  // nehmen wir keins.
+  object andereboerse = present(GELDBOERSE_MIT_GELD, environment());
+  if (objectp(andereboerse))
+    return 0;
+
+  return 1;
+}
+
+varargs int PreventInsert(object ob)
+{
+  if (ob && load_name(ob)==GELD
+      && accept_money())
+  {
+    return ::PreventInsert(ob);
+  }
+  return 1; // nur geld erlaubt
+}
+
+public void MergeMoney(object geld)
+{
+  if (geld && previous_object() == geld
+      && load_name(geld) == GELD
+      && accept_money())
+  {
+    int fremdamount = geld->QueryProp(P_AMOUNT);
+    // Da wir aus einen NotifyMove (d.h. move()) gerufen werden, darf hier
+    // keinesfalls ein move() gemacht werden.
+    // Wenn in uns Geld ist, prima, einfach P_AMOUNT veraendern.
+    // Wenn nicht, muessen wir ein neues Geldobjekt clonen, falls fremdamount
+    // > 0 ist.
+    object meingeld = first_inventory();
+    if (meingeld && load_name(meingeld) == GELD)
+    {
+      int meinamount = meingeld->QueryProp(P_AMOUNT);
+      ZDEBUG(sprintf("MergeMoney: meinamount: %d, fremdamount: %d\n",
+            meinamount,fremdamount));
+      // wenn fremdamount positiv ist, vereinigen wir uns natuerlich, auch
+      // wenn mein Geld negativ ist. Aber max. 1 Mio. Muenzen aufnehmen.
+      if (fremdamount > 0)
+      {
+        int zubuchen = min(1000000-meinamount, fremdamount);
+        ZDEBUG(sprintf("MergeMoney: zubuchen: %d\n", zubuchen));
+        meingeld->SetProp(P_AMOUNT, meinamount + zubuchen);
+        geld->SetProp(P_AMOUNT, fremdamount - zubuchen);
+        // environment verstaendigen ueber Inventaraenderung... Und uns. Wir
+        // machen nur die beiden, weil alle hoehren Envs nicht so wichtig
+        // sind, dass es sofort gemacht werden muss.
+        environment()->_set_last_content_change();
+        _set_last_content_change();
+      }
+      // ansonsten vereinigen wir uns, wenn meinamount > 0 und fremdamount < 0
+      // ist, aber nur soviel, dass hinterher in mir nix mehr verbleibt.
+      else if (meinamount > 0 && fremdamount < 0)
+      {
+        int amount_to_merge = min(meinamount, abs(fremdamount));
+        ZDEBUG(sprintf("MergeMoney: zubuchen: %d\n", amount_to_merge));
+        meingeld->SetProp(P_AMOUNT, meinamount - amount_to_merge);
+        geld->SetProp(P_AMOUNT, fremdamount + amount_to_merge);
+        // environment verstaendigen ueber Inventaraenderung... Und uns. Wir
+        // machen nur die beiden, weil alle hoehren Envs nicht so wichtig
+        // sind, dass es sofort gemacht werden muss.
+        environment()->_set_last_content_change();
+        _set_last_content_change();
+      }
+      // in anderen Faellen vereinigen wir einfach nicht (beide negativ)
+    }
+    // Ansonsten nehmen wir nur positives Geld und nur, soweit es noch
+    // reinpasst.
+    else if (fremdamount > 0)
+    {
+      ZDEBUG(sprintf("MergeMoney: leere Boerse, fremdamount: %d\n",
+             fremdamount));
+      meingeld = clone_object(GELD);
+      // nocheck, weil wir eigentlich <geld> bewegen wollen und schon
+      // festgestellt haben, dass diese Boerse Geld akzeptiert. Tragen kann
+      // der Spieler es auch (sogar ohne Gewichtsreduktion). Die Boerse soll
+      // max. 1Mio Muenzen aufnehmen.
+      int zubuchen = min(fremdamount,1000000);
+      ZDEBUG(sprintf("MergeMoney: zubuchen: %d\n", zubuchen));
+      meingeld->SetProp(P_AMOUNT, zubuchen);
+      geld->SetProp(P_AMOUNT, fremdamount-zubuchen);
+      meingeld->move(this_object(), M_NOCHECK);
+      // environment verstaendigen ueber Inventaraenderung durch geld->SetProp
+      environment()->_set_last_content_change();
+    }
+    ZDEBUG(sprintf("MergeMoney: Final: meinamount: %d, fremdamount: %d\n",
+          meingeld->QueryProp(P_AMOUNT),geld->QueryProp(P_AMOUNT)));
+  }
+}
+
+varargs int remove(int silent)
+{
+  dontacceptmoney=1;
+  return ::remove(silent);
+}
+
+varargs int id(string str, int lvl)
+{
+  if (str==GELDBOERSE_MIT_GELD
+      && load_name(first_inventory()) == GELD)
+      return 1;
+  return ::id(str, lvl);
+}
+