Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/sb_antrag.c b/d/seher/haeuser/sb_antrag.c
new file mode 100644
index 0000000..1e6dd20
--- /dev/null
+++ b/d/seher/haeuser/sb_antrag.c
@@ -0,0 +1,175 @@
+#include <properties.h>
+#include <wizlevels.h>
+#include <moving.h>
+#include "haus.h"
+
+inherit "std/room";
+
+create()
+{
+ ::create();
+
+ SetProp( P_INDOORS, 1 );
+ SetProp( P_LIGHT, 1 );
+ SetProp( P_INT_SHORT, "Am Antragsschalter" );
+ SetProp( P_INT_LONG,
+ "Du stehst am Antragsschalter der Bank. Hinter einer Rauchglasscheibe scheint\n"
+ +"sich ein Schalterbeamter zu befinden, Du kannst aber nichts genaueres er-\n"
+ +"kennen.\n"
+ +"Wenn Du Dich traust, kannst Du hier einen Bausparvertrag beantragen und einen\n"
+ +"beantragten Vertrag unterschreiben.\n"
+ +"Die Syntax dazu lautet:\n"
+ +"beantrage vertrag (fuer einen Bausparvertrag)\n"
+ +"beantrage ausbauvertrag (fuer den Ausbau des Hauses)\n"
+ +"unterschreibe vertrag (um den jeweiligen Vertrag zu unterschreiben)\n" );
+
+ AddDetail( ({ "boden" }),
+ "Der tiefschwarze Boden gibt Dir das Gefuehl, im absoluten Nichts zu stehen.\n" );
+ AddDetail( ({ "wand", "waende" }),
+ "Dunkle Schatten tanzen ueber die Waende.\n" );
+ AddDetail( ({ "decke" }),
+ "Sie scheint Dir in dieser unheimlichen Umgebung auf den Kopf fallen zu\n"
+ +"wollen.\n" );
+ AddDetail( ({ "nichts" }),
+ "Du siehst nichts.\n" );
+ AddDetail( ({ "schatten" }),
+ "Die Schatten irritieren Dich sehr.\n" );
+ AddDetail( ({ "schalter" }),
+ "An diesem Schalter kannst Du einen Bausparvertrag beantragen und unter-\n"
+ +"schreiben.\n" );
+ AddDetail( ({ "beamte", "beamter", "beamten", "schalterbeamte", "schalterbeamten", "schalterbeamter" }),
+ "Du kannst ihn nur schemenhaft hinter der Rauchglasscheibe des Schalters er-\n"
+ +"kennen. Die Umrisse scheinen allerdings zu keiner Lebensform zu gehoeren,\n"
+ +"derer Du Dich erinnern koenntest.\n" );
+ AddDetail( ({ "scheibe", "glasscheibe", "rauchglas", "rauchglasscheibe" }),
+ "Ein schemenhafter Beamter sitzt dahinter.\n" );
+ AddDetail( ({ "umrisse" }),
+ "Sie sind aeusserst beunruhigend.\n" );
+
+ AddCmd( ({ "beantrage" }), "beantragen" );
+ AddCmd( ({ "unterschreib", "unterschreibe" }), "unterschreiben" );
+ AddExit( "raus", PATH+"seherbank" );
+}
+
+void
+BecomesNetDead(object pl)
+{
+ pl->move(PATH+"seherbank", M_GO, 0, "wird rausgeworfen", "schlafwandelt herein");
+}
+
+int
+beantragen(string str)
+{
+ object tp, vertrag;
+ int haus;
+
+ tp = this_player();
+
+ if (!str || (haus = member( ({"ausbauvertrag", "vertrag", "bausparvertrag"}), str)) <0) {
+ notify_fail( "Versuch mal 'beantrage vertrag'!\n" );
+ return 0;
+ }
+
+ if (!IS_SEER(tp)) {
+ notify_fail( "Nur Seher koennen einen Bausparvertrag beantragen!\n" );
+ return 0;
+ }
+ if (tp->QueryProp(P_KILLS)) {
+ write("Verbrecher werden hier nicht bedient!\n");
+ return 1;
+ }
+ if (vertrag = present("sehe\rvertrag", tp))
+ write( "Der Beamte schnarrt: Aber Sie haben doch schon einen Vertrag!\n" );
+ else if (haus && (present("sehe\rhaus", tp) || VERWALTER->FindeHaus(getuid(tp)))) {
+ write( "Der Beamte schnarrt: Sie duerfen nur EIN Haus besitzen!\n" );
+ HLOG( "BANK.LOG", "Antrag: "+getuid(tp)+" stellte zweiten Antrag.\n" );
+ }
+ else if (!haus && !VERWALTER->FindeHaus(getuid(tp))) {
+ write( "Der Beamte faucht: Haben sie denn ueberhaupt schon ein Haus aufgestellt?\n"
+ +"Vorher koennen sie natuerlich keine Erweiterungen beantragen!\n" );
+ }
+ else {
+ if (!haus && VERWALTER->HausProp(getuid(tp),HP_ROOMS) == 9) {
+ write( "Der Beamte droehnt: Ihr Haus hat schon die hoechste Ausbaustufe erreicht!\n");
+ return 1;
+ }
+ (vertrag = clone_object(PATH+"bausparvertrag"))->move(tp, M_NOCHECK);
+
+ write( "Die Schatten verdichten sich zu einem Blatt Papier, welches in Deine Haende\n"
+ +"geweht wird. Mit droehnender Stimme erklaert der Schalterbeamte:\n"
+ +"Dies ist Ihr Bausparvertrag. Bitte lesen Sie ihn sich gruendlich durch, be-\n"
+ +"vor Sie ihn unterschreiben! Wenn Sie ihn erst einmal unterschrieben haben,\n"
+ +"koennen sie nicht wieder davon zuruecktreten (es sei denn, Sie zerreissen\n"
+ +"ihn oder ueberziehen die Ratenzahlungen)! Sie sind nicht gezwungen, den Ver-\n"
+ +"trag sofort zu unterschreiben. Im Hauptraum der Bank befindet sich ein In-\n"
+ +"formationsstand, an dem Sie Kommentare zu diesem Vertrag kaeuflich erwerben\n"
+ +"koennen. Wenn Ihnen einige Passagen des Vertrags unverstaendlich sind, wird\n"
+ +"Ihnen in den Kommentaren sicherlich geholfen.\n"
+ +"Das Leisten der Unterschrift ist jedoch nur hier an diesem Schalter\n"
+ +"moeglich!\n" );
+ if (!haus)
+ vertrag->Sign(V_RAUM);
+ HLOG( "BANK.LOG", "Antrag: "+getuid(tp)+" bekam einen "+(haus ? "Haus" : "Raum")+"vertrag.\n" );
+ }
+ return 1;
+}
+
+int
+unterschreiben(string str)
+{
+ object tp, vertrag;
+ int flag;
+
+ tp = this_player();
+
+ notify_fail( "Was willst Du denn unterschreiben?\n" );
+ if (!str || !(vertrag = present(str, tp)) || !vertrag->id("sehe\rvertrag"))
+ return 0;
+
+ if ((flag = vertrag->QueryProp(P_AUTOLOADOBJ)[1]) & V_SIGNED) {
+ write( "Der Schalterbeamte sagt: Aber der Vertrag ist doch schon unterschrieben!\n" );
+ return 1;
+ }
+
+ write( "Der Schalterbeamte sagt: Fuer welche Vertragsvariante haben sie sich\n"
+ +"entschieden? Tippen Sie 'sanft' fuer den sanften Weg zum eigenen Heim\n"
+ +"oder 'schnell' fuer den schnellen Weg.\n] " );
+ input_to("sign", 0, vertrag, flag|V_EP);
+ return 1;
+}
+
+void
+sign(string str, object vertrag, int flag)
+{
+ object block;
+ string s;
+ int *al;
+
+ if (str == "sanft" || str == "schnell") {
+ write( "Der Schalterbeamte gibt Dir einen Fuellfederhalter sowie ein Skalpell.\n"
+ +"Schwungvoll setzt Du Deine Unterschrift unter den Vertrag. Dann piekst\n"
+ +"Du Dir mit dem Skalpell in den Finger und bestaetigst die Unterschrift\n"
+ +"mit einem dunklen Tropfen Deines Blutes.\n"
+ +"Ploetzlich zucken Blitze um Dich herum auf, und der Schalterbeamte lacht\n"
+ +"droehnend auf. Du hast das Gefuehl, dass hier etwas nicht ganz mit rechten\n"
+ +"Dingen vor sich geht. Dann bestaetigt der Beamte die Unterschrift und\n"
+ +"uebergibt Dir den ersten Block, auf dem Deine Raten vermerkt werden.\n"
+ +"Der Beamte erklaert: Damit auf den Block auch eingezahlt wird, muss man\n"
+ +"ihn wie eine Ruestung anziehen!\n" );
+
+ this_player()->reduce_hit_points(50);
+ vertrag->Sign(flag | (str == "sanft" ? V_SIGNED : V_SIGNED | V_FAST));
+ (block = clone_object(PATH+"block"))->move(this_player(), M_NOCHECK);
+ block->SetProp("schwer", V_FAST & vertrag->QueryProp(P_AUTOLOADOBJ)[1]);
+ al = block->QueryProp(P_AUTOLOADOBJ);
+ al[V_FLAGS] |= B_ACTIVE;
+ block->SetProp(P_AUTOLOADOBJ, al);
+ s = "Antrag: "+getuid(this_player())+" unterschrieb den Vertrag ("+str+").\n";
+ HLOG( "BANK.LOG", s );
+ HLOG( getuid(this_player()), s );
+ }
+ else {
+ write( "Der Schalterbeamte sagt: Nur 'sanft' oder 'schnell', bitte!\n" );
+ input_to("sign", 0, vertrag, flag);
+ }
+}