Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/p/daemon/zentralbank.c b/p/daemon/zentralbank.c
new file mode 100644
index 0000000..53074d0
--- /dev/null
+++ b/p/daemon/zentralbank.c
@@ -0,0 +1,236 @@
+// MorgenGrauen MUDlib
+//
+// zentralbank.c -- Zentrale Geld-Verwaltung der Haendler im MG
+// $Id: zentralbank.c 9223 2015-05-27 21:46:58Z Zesstra $
+//
+/*
+ * $Log: zentralbank.c,v $
+ * Revision 1.5  2003/12/30 11:17:34  Vanion
+ * query_prevent_shadow fehlte. Danke fuer den Hinweis an Ogo.
+ *
+ * Revision 1.4  2003/12/30 11:12:02  Jof
+ * Ich hab Dir das File mal geklaut.
+ * Vanion
+ *
+ * Revision 1.3  1995/07/10  07:31:04  Jof
+ * typo fixed
+ *
+ * Revision 1.2  1995/07/10  07:27:59  Jof
+ * Use bank.h
+ * _query_current_money
+ *
+ * Revision 1.1  1995/07/05  16:29:26  Jof
+ * Initial revision
+ *
+ */
+#pragma no_shadow
+#pragma no_clone
+#pragma no_inherit
+#pragma strong_types,save_types
+
+#include <wizlevels.h>
+#include <properties.h>
+#include <money.h>
+
+#define NEED_PROTOTYPES
+#include <bank.h>
+
+#define TIME strftime("%H:%M",time())
+#define LS 1000000
+
+int allmoney,bank_default_percent,store_default_percent,shop_default_percent;
+int falling;
+// Geldmengen: in NPC, in Boersen, rumliegen, auf Seherkarten, Gesamtsumme,
+// Zeitpunkt der Berechnung.
+int *summen = ({0,0,0,0,0,0});
+
+nosave int last_save;
+nosave int counter;
+
+void save_me()
+{
+  save_object("/p/daemon/save/zentralbank");
+  last_save=time();
+}
+
+protected void create()
+{
+  seteuid(getuid());
+  allmoney=500000;
+  bank_default_percent=BANK_DEFAULT_PERCENT;
+  store_default_percent=STORE_PERCENT_LEFT;
+  shop_default_percent=SHOP_PERCENT_LEFT;
+  restore_object("/p/daemon/save/zentralbank");
+}
+
+private void adjust_percents()
+{
+  if (allmoney<50000   && falling>=0) falling=-1;
+  if (allmoney>1000000 && falling<=0) falling=1;
+  if (allmoney<200000 && falling>0 ) falling=0;
+  if (allmoney>80000  && falling<0 ) falling=0;
+  if (falling<0 && !((++counter)%5))
+  {
+    bank_default_percent=bank_default_percent+random(3)+1;
+    store_default_percent=store_default_percent+random(3)+1;
+    shop_default_percent=shop_default_percent+random(3)+1;
+    log_file("ZENTRALBANK",
+	sprintf("%s: PERCENTS SET TO BANK %d STORE %d SHOP %d\n",
+	  TIME,bank_default_percent,store_default_percent,
+	  shop_default_percent),LS);
+  }
+  if (falling>0)
+  {
+    bank_default_percent/=2;
+    store_default_percent/=2;
+    shop_default_percent/=2;
+    log_file("ZENTRALBANK",
+	sprintf("%s: PERCENTS SET TO BANK %d STORE %d SHOP %d\n",
+	  TIME,bank_default_percent,store_default_percent,
+	  shop_default_percent),LS);
+  }
+  if (bank_default_percent<1) bank_default_percent=1;
+  if (bank_default_percent>90) bank_default_percent=90;
+  if (store_default_percent<1) store_default_percent=1;
+  if (store_default_percent>90) store_default_percent=90;
+  if (shop_default_percent<1) shop_default_percent=1;
+  if (shop_default_percent>90) shop_default_percent=90;
+  save_me();
+}
+
+void reset()
+{
+  adjust_percents();
+}
+
+private void real_log()
+{
+  log_file("ZBANKSTATUS",sprintf("%s: %d\n",dtime(time()),allmoney),LS);
+}
+
+private void log_state()
+{
+  // nur alle 15min nen Status-Logeintrag. Reicht voellig.
+  if (find_call_out(#'real_log) == -1)
+    call_out(#'real_log,900);
+}
+
+public varargs void PayIn(int amount, int percent)
+{
+  if (amount<=0) return;
+  percent|=bank_default_percent;
+  allmoney+=amount*percent/100;
+  log_file("ZENTRALBANK",
+      sprintf("%s: Einzahlung: %d (%d brutto) von %O\n",
+	TIME,amount*percent/100,amount,previous_object()),LS);
+  log_state();
+}
+
+public int WithDraw(int amount)
+{
+  int got;
+
+  if (amount<=0) return 0;
+  if (allmoney<0) allmoney=0;
+  if (!allmoney)
+    got=0;
+  else
+  {
+    if (amount*3<allmoney)
+      got=amount;
+    else
+    {
+      got=allmoney/3;
+      if (!got) got=1;
+    }
+    allmoney-=got;
+  }
+  log_file("ZENTRALBANK",sprintf("%s: Abhebung: %6d/%6d von %O\n",
+	TIME,got, amount,previous_object()),LS);
+  log_state();
+  return got;
+}
+
+int _query_current_money()
+{
+  return allmoney;
+}
+
+int _query_bank_default_percent()
+{
+  return bank_default_percent;
+}
+
+int _query_shop_percent_left()
+{
+  return shop_default_percent;
+}
+
+int _query_store_percent_left()
+{
+  return store_default_percent;
+}
+
+// Geldmenge im Spiel
+public int *geldmenge() {
+  
+  if (summen[5] > time()-3600 || !IS_ELDER(this_player()))
+      return summen;
+
+  summen = allocate(6);
+  object *geld = clones(GELD,2);
+  foreach(object ob: geld) {
+    if (!environment(ob) || IS_LEARNER(environment(ob)))
+      continue;
+    if (environment(ob)->QueryProp(P_NPC))
+      // in NPC
+      summen[0]+=ob->QueryProp(P_AMOUNT);
+    else if (load_name(environment(ob)) == BOERSE)
+      // in boersen
+      summen[1]+=ob->QueryProp(P_AMOUNT);
+    else
+      // sonst rumliegend
+      summen[2]+=ob->QueryProp(P_AMOUNT);
+  }
+  // Seherkarten
+  geld = clones(SEHERKARTE,2);
+  mapping cards=m_allocate(sizeof(geld),1);
+  foreach(object ob: geld) {
+    cards[ob->query_owner()] = ob->QueryProp(P_AMOUNT);
+  }
+  foreach(string owner, int amount: cards)
+    summen[3]+=amount;
+  summen[4]=summen[0]+summen[1]+summen[2]+summen[3];
+  summen[5]=time();
+  return summen;
+}
+
+public void PrintGeldmenge() {
+  int *sum = geldmenge();
+  printf("NPC: %d\n"
+         "Boersen: %d\n"
+         "rumliegend: %d\n"
+         "Seherkarten: %d\n"
+         "Gesamt: %d\n"
+         "Zeit: %s\n",
+         sum[0],sum[1],sum[2],sum[3],sum[4],strftime(sum[5]));
+}
+
+void set_percents(int store,int shop,int bank)
+{
+  store_default_percent=store;
+  shop_default_percent=shop;
+  bank_default_percent=bank; 
+  log_file("ZENTRALBANK",
+      sprintf("%s: PERCENTS SET TO BANK %d STORE %d SHOP %d\n",
+	TIME,bank_default_percent,store_default_percent,
+	shop_default_percent),LS);
+}
+
+int remove()
+{
+  save_me();
+  destruct(this_object());
+  return 1;
+}
+