Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/moebel/schrankmaster.c b/d/seher/haeuser/moebel/schrankmaster.c
new file mode 100644
index 0000000..c602ddc
--- /dev/null
+++ b/d/seher/haeuser/moebel/schrankmaster.c
@@ -0,0 +1,233 @@
+//--------------------------------------------------------------------------------
+// Name des Objects: Schrankmaster
+// Letzte Aenderung: 19.03.2001
+// Magier: wurzel
+//--------------------------------------------------------------------------------
+/* Changelog:
+ * 21.06.2007, Zesstra
+ call_out ohne Verzoegerung beim Updaten durch eines mit 2s Verzoegerung ersetzt.
+*/
+#pragma strong_types,rtt_checks
+
+inherit "/std/room";
+
+#include <properties.h>
+#include <language.h>
+#include "schrankladen.h"
+
+mapping schraenke;
+string *cnts;
+int update_laeuft;
+int reset_laeuft;
+
+protected void create()
+{
+ ::create();
+ SP(P_INT_SHORT, "Irgendwo und Nirgends");
+ SP(P_INT_LONG,
+ "Dies ist der Master-Raum fuer den SCHRAENKER.\n"
+ +"Hier merkt sich August die Anzahl der verkauften Container.\n"
+ +"Davon sind momentan @@ANZAHL@@ registrierte im Umlauf!\n"
+ +"Folgende Befehle sind verfuegbar:\n"
+ +" schrankliste.........Listet registrierte, im Spiel befindliche Container.\n"
+ +" schrankupdate........Fuehrt ein Update aller registrierten Container durch.\n");
+
+ SP(P_LIGHT, 1);
+ SP(P_INDOORS, 1);
+ if( SCHRANKMASTER2->QueryProp("schraenke") ) // Der Sicherungsraum hat Daten?
+ schraenke=SCHRANKMASTER2->QueryProp("schraenke"); // Daten holen...
+ else
+ schraenke=([]);
+ SetProp("schraenke", schraenke );
+
+ update_laeuft=0;
+
+ // unnoetig, SCHRANKMASTER2 ist jetzt schon geladen, s.o.
+ //load_object(SCHRANKMASTER2);
+ set_next_reset(3600); // Reset 1 x pro Std.
+
+ AddCmd(({"schrankliste"}), "Schrankliste");
+ AddCmd(({"schrankupdate"}), "SchrankUpdate");
+}
+
+public int clean_up(int ref) {return 0;} // verhindert Ausswappen des Raumes
+
+public varargs string GetExits( object viewer )
+{
+ return "";
+}
+
+string ANZAHL()
+{
+ return to_string( sizeof(schraenke) );
+}
+
+
+// cnt = Object des Containers
+// ver = Version des Containers (VERSION_STD+VERSION_OBJ von std.cont. + objekt...)
+// seher=Der Besitzer/Kaeufer
+// standort=Raum in dem der Container steht
+void RegisterCnt(mixed cnt, mixed ver, mixed seher, mixed standort)
+{
+ if (objectp(standort)) standort=object_name(standort);
+ if( !objectp(cnt) || !stringp(ver) || !stringp(seher) || !stringp(standort) )
+ {
+ log_file("swift/schraenker/bugs.log", "schrankmaster (RegisterCnt) *"
+ +to_string(cnt)+"*"+to_string(ver)+"*"+to_string(seher)+"*"
+ +to_string(standort)+"*\n");
+ return;
+ }
+ m_delete(schraenke,object_name(cnt));
+ schraenke+=([object_name(cnt): ver; seher; to_string(standort)]);
+ SetProp("schraenke", schraenke );
+ SCHRANKMASTER2->SetProp("schraenke", schraenke );
+}
+
+void RemoveCnt(mixed cnt, mixed seher)
+{
+ if( !objectp(cnt) || !stringp(seher) )
+ {
+ log_file("swift/schraenker/bugs.log", "schrankmaster (RemoveCnt) *"
+ +to_string(cnt)+"*"+to_string(seher)+"*\n");
+ return;
+ }
+ schraenke-=([object_name(cnt)]);
+ SetProp("schraenke", schraenke );
+ SCHRANKMASTER2->SetProp("schraenke", schraenke );
+}
+
+string fn(string was)
+{
+ string str,*strs;
+ strs=old_explode( was, "/" );
+ str=strs[sizeof(strs)-1];
+ strs=old_explode( str, "#" );
+ str=strs[0];
+ return str;
+}
+
+int Schrankliste()
+{
+ int i;
+ string str, *strs;
+ object cnt;
+ if(update_laeuft && !reset_laeuft) // Nicht waehrend eines Updates der Schraenke!
+ {
+ write("Update wird durchgefuehrt. Bitte bis zum Ende warten!\n");
+ return 1;
+ }
+ str="----------------------------------------------------------------------\n";
+ strs=m_indices(schraenke);
+ for(i=0;i<sizeof(strs);i++)
+ {
+ if( cnt=find_object(strs[i]) )
+ {
+ str+=(fn(object_name(cnt))+"....................")[0..20]+" ";
+ str+=schraenke[strs[i], 0]+" ";
+ str+=(schraenke[strs[i], 1]+"....................")[0..20]+" ";
+ str+=fn(schraenke[strs[i], 2])+"\n";
+ }
+ else
+ {
+ str+="Nicht auffindbaren Container aus Liste geloescht!\n";
+ schraenke-=([strs[i]]);
+ SetProp("schraenke", schraenke );
+ SCHRANKMASTER2->SetProp("schraenke", schraenke );
+ }
+ }
+ str+="----------------------------------------------------------------------\n";
+ if( TP && present(TP) ) //wurzel 19.03.01
+ TP->More(str);
+ return 1;
+}
+
+void Update_naechster_Schrank()
+{
+ int i;
+ object cnt, cnt_neu, *inv;
+ if( sizeof(cnts) ) // Es gibt noch Schraenke zum abarbeiten...
+ {
+ cnt=find_object(cnts[0]); // Schrank auswaehlen + Objekt suchen
+ if(cnt)
+ {
+ // Autoloadertruhe ist etwas spezieller zu updaten... Daher alternativer
+ // Mechanismus: UpdateMe() im Moebelstueck aufrufen. Wenn die Funktion
+ // etwas != 0 liefert, wird angenommen, dass diese Funktion das Update
+ // gemacht hat oder sich in Kuerze darum kuemmert. Sonst wird das alte
+ // Update gemacht.
+ // Das neue Moebelobjekt ist dafuer verantwortlich, sich beim
+ // Schrankmaster zu (de-)registrieren!
+ object oldenv=environment(cnt);
+ if (cnt->UpdateMe())
+ {
+ tell_room(TO, "...Update "+CAP(fn(cnts[0]))
+ +" in " + object_name(oldenv) + "\n" );
+ }
+ else
+ {
+ tell_room(TO, CAP(fn(cnts[0]))
+ +" in " + object_name(oldenv)
+ + " hat kein UpdateMe()!\n" );
+ }
+ }
+ else
+ {
+ tell_room(TO, "Nicht auffindbaren Container aus Liste geloescht!\n");
+ schraenke-=([cnts[0]]);
+ }
+ cnts-=({cnts[0]}); // Schrank aus Liste nehmen
+ call_out("Update_naechster_Schrank", 2); // Nur 1 Schrank-Update pro heart_beat!
+ }
+ else // Alle Schraenke abgearbeitet:
+ {
+ tell_room(TO, "*** Update abgeschlossen.\n");
+ SetProp("schraenke", schraenke );
+ SCHRANKMASTER2->SetProp("schraenke", schraenke );
+ update_laeuft=0;
+ }
+}
+
+int SchrankUpdate()
+{
+ if(update_laeuft) // Nicht waehrend eines Updates der Schraenke!
+ {
+ write("Update wird durchgefuehrt. Bitte bis zum Ende warten!\n");
+ return 1;
+ }
+ update_laeuft=1; // Ab sofort laeuft Update!
+ cnts=m_indices(schraenke);
+ tell_room(TO, "*** Update wird gestartet...\n");
+ Update_naechster_Schrank();
+ return 1;
+}
+
+
+void reset()
+{
+ reset_laeuft=1;
+ set_next_reset(3600); // Reset 1 x pro Std.
+ ::reset();
+ // Wirft Schraenke aus der Liste, die aus welchem Grund auch immer nicht mehr existieren
+ Schrankliste();
+ if( !(schraenke==QueryProp("schraenke")==SCHRANKMASTER2->QueryProp("schraenke")) )
+ log_file("swift/schraenker/reset.log", "schrankmaster (reset) "
+ +sizeof(schraenke)+" "
+ +sizeof(QueryProp("schraenke"))+" "
+ +sizeof(SCHRANKMASTER2->QueryProp("schraenke"))+"\n");
+ if( present("Interactive") )
+ tell_room(TO, "*** RESET ***\n");
+ reset_laeuft=0;
+}
+
+/*
+// Veraltete Funktionen, um Fehler abzufangen. Kann nach dem naechsten Reboot
+// geloescht werden !!!
+void AddCnt(mixed cnt, mixed ver, mixed seher, mixed standort)
+{
+ log_file("swift/schraenker/verloren.log", to_string(cnt)+"\n");
+}
+void EditCnt(mixed cnt, mixed ver, mixed seher, mixed standort)
+{
+ log_file("swift/schraenker/verloren.log", to_string(cnt)+"\n");
+}
+*/