Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/block.c b/d/seher/haeuser/block.c
new file mode 100644
index 0000000..8f011ed
--- /dev/null
+++ b/d/seher/haeuser/block.c
@@ -0,0 +1,324 @@
+// block.c -- Hier sammeln sich die Raten fuer das Seherhaus
+//
+// (c) 1994 Wargon@MorgenGrauen
+//
+// $Id: block.c,v 1.2 2003/11/15 13:56:01 mud Exp $
+//
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+#include <combat.h>
+#include "haus.h"
+
+inherit "std/clothing";
+
+private nosave int shadowing;
+
+create()
+{
+ if (!clonep(this_object())) return;
+
+ ::create();
+
+ SetProp( P_SHORT, "Der MG MASTER-BLOCK" );
+ SetProp( P_NAME, "MASTERBLOCK" );
+ SetProp( P_WEIGHT, 100 );
+ SetProp( P_GENDER, MALE );
+ SetProp( P_NODROP, 1 );
+ SetProp( P_NEVERDROP, 1 );
+ // wenn es keinen TP gibt, muss das Ding per SetProp(P_AUTOLOADOBJ)
+ // konfiguriert werden, nicht hier. Zesstra, 20.10.2007
+ if (objectp(this_player()))
+ Set( P_AUTOLOADOBJ, ({ 0, this_player()->QueryProp(P_AGE) + MAX_TIME,
+ MAX_TIME/2, B_EP }) );
+ Set( P_AUTOLOADOBJ, SECURED, F_MODE );
+ SetProp( P_NOBUY, 1 );
+ SetProp(P_MATERIAL, MAT_MARBLE);
+
+ SetProp(P_WEAR_FUNC, this_object());
+ SetProp(P_REMOVE_FUNC, this_object());
+
+ AddId( ({ "block", "masterblock", "master-block", "MG MASTER-BLOCK", "mg master-block", "\n block" }) );
+
+ AddCmd( "", "remindMe", 1);
+}
+
+int query_prevent_shadow(object ob)
+{
+ HLOG("SHADOW", sprintf("%s, von %O im Block.\n",dtime(time())[5..], ob));
+ return 1;
+}
+
+int
+WearFunc(object me)
+{
+ if (!shadowing && (Query(P_AUTOLOADOBJ)[V_FLAGS] & B_ACTIVE) ) {
+ clone_object("/std/player/shadows/block_shadow");
+ shadowing = 1;
+ }
+ return 1;
+}
+
+int
+RemoveFunc(object me)
+{
+ // manchmal gibts keinen TP und machmal ist TP nicht der Spieler, der den
+ // Block traegt.
+ if (this_player() && this_player() == environment()) {
+ shadowing = 0;
+ this_player()->SeherHatGenug();
+ return 1;
+ }
+ return 0;
+}
+
+static int
+_query_value()
+{
+ return( Query(P_AUTOLOADOBJ)[0] );
+}
+
+static int
+_query_cursed()
+{
+ return 0;
+}
+
+static int
+_set_schwer(int schwer)
+{
+ int *al;
+
+ al = Query(P_AUTOLOADOBJ);
+ if (schwer && !(al[V_FLAGS] & B_FAST)) {
+ al[V_DLINE] -= MAX_TIME/2;
+ al[V_WTIME] /= 2;
+ al[V_FLAGS] |= B_FAST;
+ }
+ else if (!schwer && (al[V_FLAGS] & B_FAST)) {
+ al[V_DLINE] += MAX_TIME/2;
+ al[V_WTIME] *= 2;
+ al[V_FLAGS] &= ~B_FAST;
+ }
+ Set( P_AUTOLOADOBJ, al[0..]);
+ return al[V_FLAGS] & B_FAST;
+}
+
+static int
+_query_schwer()
+{
+ return (Query(P_AUTOLOADOBJ)[V_FLAGS] & B_FAST);
+}
+
+static mixed
+_set_autoloadobj(mixed al)
+{
+ object ti;
+
+ if ((ti = this_interactive()) && old_explode(object_name(ti),"#")[0] != "/secure/login")
+ HLOG("SET_AL",sprintf("Block: TI = %O, ENV = %O\n",this_interactive(), environment()));
+
+ /* Kompatibilitaet... */
+ if (pointerp(al) && !(al[V_FLAGS] & B_EP)) {
+ al[V_MONEY] *= 4;
+ al[V_FLAGS] |= B_EP;
+ }
+ return Set(P_AUTOLOADOBJ, al);
+}
+
+static string
+_query_long()
+{
+ int *al;
+ int laufzeit, einzahlung;
+ int ratenhoehe;
+ string ret;
+
+ al = Query(P_AUTOLOADOBJ);
+ ret = "Dies ist der MG MASTER-BLOCK. Er besteht aus massivem Marmor, um die Sicher-\n"
+ +"heit der eingezahlten Rate zu gewaehrleisten. Mit einem Goldkettchen versehen,\n"
+ +"kann man ihn tragen wie ein Amulett. Dies ist auch noetig, wenn auf den Block\n"
+ +"eingezahlt werden soll.\n";
+
+ ratenhoehe = RATENHOEHE;
+ if (al[V_FLAGS] & B_EXTEND)
+ ratenhoehe += (RATENHOEHE*6)/10;
+ laufzeit = 2*(al[V_DLINE]-this_player()->QueryProp(P_AGE));
+ einzahlung = al[V_MONEY];
+
+ if (laufzeit < 0)
+ ret += "Leider hast Du die Zahlung dieser Rate verpasst!\n";
+ else {
+ if (einzahlung >= ratenhoehe)
+ ret += "Er ist vollstaendig mit der Rate gefuellt.\n";
+ else
+ ret += sprintf( "Du hast bis jetzt %d (von %d) Punkten eingezahlt.\n", einzahlung, ratenhoehe );
+
+ ret += time2string("Diese Rate muss bis in %h %H, %m %M und %s %S abbezahlt sein!\n", laufzeit);
+ }
+ return ret;
+}
+
+static int
+remindMe()
+{
+ int noch, next, *al, ratenhoehe;
+ object vertrag;
+
+ al = Query(P_AUTOLOADOBJ);
+ next = al[V_WTIME];
+ ratenhoehe = RATENHOEHE;
+ if (al[V_FLAGS] & B_EXTEND)
+ ratenhoehe += (RATENHOEHE*6)/10;
+
+ if (al[V_MONEY] < ratenhoehe) {
+ noch = al[V_DLINE]-this_player()->QueryProp(P_AGE);
+ if (noch >= 0) {
+ if (next > noch) {
+ call_out("doRemind", 0, this_player(), time2string( "Die naechste Rate wird in %h %H, %m %M und %s %S faellig!\n", 2*noch));
+ do next -= WARN_TIME; while (next>0 && next>noch);
+ if (next < 0)
+ next = 0;
+ al[V_WTIME] = next;
+ Set(P_AUTOLOADOBJ, al[0..]);
+ }
+ }
+ else {
+ if (al[V_FLAGS] & B_EXTEND) {
+ string s;
+
+ write( "Du hast die Strafrate nicht bezahlt!\n" );
+ if (vertrag = present( "sehe\rvertrag", this_player())) {
+ write( "Damit verfaellt auch Dein Bausparvertrag! Und das im wahrsten Sinne des\nWortes...\n" );
+ vertrag->remove();
+ }
+ s = "Block: "+getuid(this_player())+" hat ueberzogen... ;)\n";
+ HLOG(getuid(this_player()), s);
+ HLOG("BANK.LOG", s);
+ remove(1);
+ }
+ else {
+ write( "Du hast die letzte Ratenzahlung verpasst!\n"
+ +"Die Ratenhoehe erhoeht sich um die Strafgebuehr.\n" );
+ al[V_FLAGS] |= B_EXTEND;
+ if (al[V_FLAGS] & B_FAST) {
+ al[V_DLINE] += MAX_TIME/4;
+ al[V_WTIME] = MAX_TIME/8;
+ }
+ else {
+ al[V_DLINE] += MAX_TIME/2;
+ al[V_WTIME] = MAX_TIME/4;
+ }
+ Set( P_AUTOLOADOBJ, al[0..]);
+ }
+ }
+ }
+
+ return 0;
+}
+
+int
+Gutschreiben(int money)
+{
+ int back, ratenhoehe;
+ mixed al;
+
+ if (!QueryProp(P_WORN)) // Zum Gutschreiben muss der Block getragen werden!
+ return money;
+
+ al = Query(P_AUTOLOADOBJ);
+ back = 0;
+
+ ratenhoehe = RATENHOEHE;
+ if (al[V_FLAGS] & B_EXTEND)
+ ratenhoehe += (RATENHOEHE*6)/10;
+
+ if (old_explode(object_name(previous_object()),"#")[0] != "/std/player/shadows/block_shadow") {
+ mixed env;
+
+ env = environment();
+ if (env)
+ env = getuid(env);
+ else
+ env = "BANK.LOG";
+ HLOG(env, sprintf("Block: Gutschrift von aussen (%d EP), TI = %O)!\n", money, this_interactive()));
+ }
+ al[V_MONEY] += money;
+ if (al[V_MONEY] >= ratenhoehe) { // genug eingezahlt...
+ back = al[V_MONEY]-ratenhoehe;
+ al[V_MONEY] = ratenhoehe;
+ al[V_FLAGS] &= ~B_ACTIVE;
+ money -= back;
+ call_out("blockVoll",0,environment());
+ }
+
+ Set(P_AUTOLOADOBJ, al[0..]);
+
+ return back;
+}
+
+void
+blockVoll(object pl)
+{
+ tell_object(pl, "Der Block fuer diese Rate ist jetzt voll!\n");
+ pl->SeherHatGenug(); // shadow entfernen
+}
+
+void
+doRemind(object pl, string str)
+{
+ tell_object(pl, str);
+}
+
+protected int PreventMove(object dest, object oldenv, int method) {
+ if (previous_object() && previous_object()->QueryBuyFact()) // Im Laden...
+ return ME_CANT_BE_DROPPED;
+ return ::PreventMove(dest, oldenv, method);
+}
+
+protected void NotifyMove(object dest, object oldenv, int method) {
+
+ if (oldenv || (object_name(previous_object()) != PATH+"sb_antrag" &&
+ object_name(previous_object()) != PATH+"sb_einzahlung" &&
+ object_name(previous_object()) != object_name(dest)))
+ HLOG("MOVING", sprintf("Block: von %O -> %O mit %O (%O)\n",
+ environment(), dest,
+ previous_object(), getuid(previous_object())));
+
+ return ::NotifyMove(dest, oldenv, method);
+}
+
+int
+remove(int silent)
+{
+ if (clonep(this_object()) && environment())
+ environment()->SeherHatGenug();
+
+ return ::remove(silent);
+}
+
+// $Log: block.c,v $
+// Revision 1.2 2003/11/15 13:56:01 mud
+// MAT_MARBLE
+//
+// Revision 1.1.1.1 2000/08/20 20:22:42 mud
+// Ins CVS eingecheckt
+//
+// Revision 1.4 1994/12/17 15:56:58 Wargon
+// Etwas mehr Sicherheit gegen Zugriffe von aussen.
+//
+// Revision 1.3 1994/10/21 09:50:20 Wargon
+// long()->_query_long()
+// Shadow wird nur aktiv, wenn der Block gezueckt ist.
+//
+// Revision 1.2 1994/10/09 21:04:27 Wargon
+// Man kann jetzt einstellen, ob der Block zu einem leichten, aber
+// teureren oder zu einem schweren, aber billigeren Vertrag gehoert.
+// Falls man eine Rate verpasst hat, verfaellt damit auch der Ver-
+// trag.
+// Gutgeschrieben wird nur, wenn der Block gezueckt ist.
+// Gutschreiben() liefert ueberzaehliges Geld zurueck.
+//
+// Revision 1.1 1994/10/07 14:35:34 Wargon
+// Initial revision
+//