Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/store.c b/std/store.c
new file mode 100644
index 0000000..3511105
--- /dev/null
+++ b/std/store.c
@@ -0,0 +1,166 @@
+// MorgenGrauen MUDlib
+//
+// store.c -- Das Lager eines Ladens
+//
+// $Id: store.c 7100 2009-02-01 09:24:43Z Zesstra $
+#pragma strong_types
+#pragma save_types
+#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#define ANZ 3
+#include <properties.h>
+#include <bank.h>
+#include <defines.h>
+
+inherit "/std/thing/properties";
+inherit "/std/room/items";
+
+private nosave object *all;
+private nosave mapping all2;
+private nosave object shop;
+private nosave int sum;
+private nosave int store_percent_left;
+
+static int _set_store_percent_left()
+{
+ return store_percent_left=ZENTRALBANK->_query_store_percent_left();
+}
+
+public void _register_shop(object ob)
+{
+ shop=ob;
+}
+
+protected void create()
+{
+ seteuid(getuid());
+ properties::create();
+ items::create();
+ _set_store_percent_left();
+ SetProp(P_MIN_STOCK, 20); // immer eine Reserve fuer unsere Anfaenger...
+}
+
+protected void create_super() {
+ set_next_reset(-1);
+}
+
+public int MayAddObject(object ob)
+{ return 1; }
+
+protected varargs void remove_multiple(int limit, mixed fun) {}
+
+static int _query_store_consume()
+// da 0 = 20 ist, ist kein default initialisieren im create noetig!!!
+{
+ int consum;
+ consum=100-Query(P_STORE_CONSUME);
+ if (consum<0 || consum >=100) // consum = 100, wenn P_STORE_CONSUM = 0
+ return 70;
+ return consum;
+}
+
+static int _set_store_consume(int consum) /* 1 <= consum <= 100 */
+{
+ if (consum<1 || consum>100) return -1;
+ return (100-(int)Set(P_STORE_CONSUME, consum));
+}
+
+static int _query_min_stock()
+{
+ int stock;
+ stock=Query(P_MIN_STOCK);
+ if (stock<0) return 0;
+ return stock;
+}
+
+private void update_money() {
+ if (sum) {
+ if (!shop)
+ ZENTRALBANK->PayIn(sum);
+ else
+ shop->_add_money(sum);
+ }
+ sum=0;
+}
+
+protected void RemoveObjectFromStore(object ob) {
+ // Alle Funktionen die ausserhalb aufgerufen werden, werden "gecatcht"
+ catch(sum+=ob->QueryProp(P_VALUE)*store_percent_left/100; publish);
+ catch(ob->remove(); publish);
+ if (ob) destruct(ob); // Objekt auf jeden Fall zerstoeren
+}
+
+protected void aufraeumen() {
+ int i, size;
+ object ob;
+ string element;
+
+ if (!pointerp(all)) return;
+ if (!mappingp(all2)) all2=([]);
+ size=sizeof(all);
+ for (i=(size<=50 ? 0 : size-50); i<size; i++) {
+ if (!objectp(ob=all[i])) continue;
+ if (object_name(ob)[0..2]=="/d/" || object_name(ob)[0..8]=="/players/")
+ element=BLUE_NAME(ob);
+ else
+ catch(element=ob->short()+BLUE_NAME(ob); publish);
+ if (all2[element]++>ANZ)
+ RemoveObjectFromStore(ob);
+ }
+ if (size<=50) {
+ all=0; // Speicher freigeben...
+ all2=0;
+ update_money();
+ } else {
+ all=all[0..size-51];
+ call_out(#'aufraeumen,2);
+ }
+}
+
+void reset() {
+ int i, to, stock;
+ mixed *itemlist;
+
+ items::reset();
+ _set_store_percent_left();
+
+ if (!(all=all_inventory()) || !sizeof(all)) {
+ all=0; // Speicher freigeben
+ return;
+ }
+ if (sizeof(itemlist=QueryProp(P_ITEMS))) {
+ itemlist=filter(itemlist, #'[, 0);
+ all-=itemlist;
+ if (!sizeof(all)) {
+ all=0; // Speicher freigeben
+ return;
+ }
+ }
+
+ i=sizeof(all)-1;
+ to=i*QueryProp(P_STORE_CONSUME)/100;
+ if ( to < (stock=QueryProp(P_MIN_STOCK)) )
+ to=stock;
+ else
+ stock=0;
+
+ // Hinterer Teil des Inventories wird zerstoert, also alle aelteren
+ // und somit vermutlich selten gekaufte Objekte
+ for (;i>=to;i--)
+ RemoveObjectFromStore(all[i]);
+ all2=([]);
+ call_out(#'aufraeumen,random(10));
+ update_money();
+}
+
+//dieser Raum wird sich nie per clean_up() zerstoeren, daher geben wir
+//0 zurueck, damit der Driver clean_up() nicht mehr ruft.
+int clean_up(int refcount) { return 0; }
+
+static int _query_current_money()
+{
+ return sum;
+}
+