Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/sc_schalter.c b/d/seher/haeuser/sc_schalter.c
new file mode 100644
index 0000000..9f29340
--- /dev/null
+++ b/d/seher/haeuser/sc_schalter.c
@@ -0,0 +1,332 @@
+#include <properties.h>
+#include <wizlevels.h>
+#include <defines.h>
+#include <moving.h>
+#include <bank.h>
+#include "haus.h"
+#include <money.h>
+
+inherit "std/room";
+
+#define KONTO "seercard_kontostand"
+
+// Prototypes
+public void BecomesNetDead( object pl );
+static int _guthaben();
+static int _einzahlen( string str );
+static int _aufladen( string str );
+static int _kaufen( string str );
+
+
+protected void create()
+{
+    ::create();
+
+    SetProp( P_INDOORS, 1 );
+    SetProp( P_LIGHT, 1 );
+    SetProp( P_LOG_FILE, "report/tiamak.rep" );
+    SetProp( P_INT_SHORT, "Am Geldkartenschalter" );
+    SetProp( P_INT_LONG,
+             break_string( "Das ist also der Geldkartenschalter. Hinter einer "
+                           "kaum durchsichtigen Rauchglasscheibe scheint ein "
+                           "Beamter (oder zumindest irgendein Lebewesen) "
+                           "geduldig zu warten. Neben dem Schalter haengt "
+                           "eine Tafel.", 78 ) );
+
+    AddDetail( ({ "boden" }),
+               "Der tiefschwarze Boden gibt Dir das Gefuehl, im absoluten "
+               "Nichts zu stehen.\n" );
+    AddDetail( "gefuehl", "Kein schoenes Gefuehl.\n" );
+    AddDetail( ({ "schwarz", "schwaerze" }), "Tiefschwarz.\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\nwollen.\n" );
+    AddDetail( "umgebung", "Schau Dich doch um.\n" );
+    AddDetail( ({ "kopf" }), "Das ist der Gegenstand auf Deinem Hals.\n" );
+    AddDetail( "gegenstand", "Ich meine Deinen Kopf.\n" );
+    AddDetail( "hals", "Wenn Du Nachhilfe in Anatomie brauchst, such Dir "
+               "jemand anderen.\n" );
+    AddDetail( ({ "jemand" }), "Keiner da.\n" );
+    AddDetail( "nachhilfe", "Dazu musst Du wohl woanders suchen.\n" );
+    AddDetail( "anatomie", "Schlag es in einem Lexikon nach.\n" );
+    AddDetail( "lexikon", "Soetwas hast Du anscheinend noch nie gesehen.\n" );
+    AddDetail( ({ "nichts" }),
+               "Du bist blind!\n" );
+    AddDetail( ({ "schatten" }),
+               "Die Schatten sind nur dazu da, um Dich zu irritieren. "
+               "Und das machen sie gut.\n" );
+    AddDetail( ({ "beamte", "beamter", "beamten", "schalterbeamte",
+                      "schalterbeamten", "schalterbeamter" }),
+               "Du kannst ihn nur schemenhaft hinter der Rauchglasscheibe "
+               "des Schalters er-\nkennen. Die Umrisse scheinen allerdings "
+               "zu keiner Lebensform zu gehoeren,\nderer Du Dich erinnern "
+               "koenntest.\n" );
+    AddDetail( ({ "scheibe", "glasscheibe", "rauchglas", "rauchglasscheibe" }),
+               "Ein schemenhafter Beamter sitzt dahinter.\n" );
+    AddDetail( ({ "umrisse" }),
+               "Sie sind aeusserst beunruhigend.\n" );
+    AddDetail( ({ "lebensform", "schemen", "lebewesen" }),
+               "Du moechtest gar nicht wissen, um was es sich dabei "
+               "handelt.\n" );
+    AddDetail( ({ "schalter", "geldkartenschalter" }),
+               "An diesem Schalter kannst Du die beruehmte"
+               " Seer-Card (TM) erwerben sowie\nDein Konto aufladen.\n" );
+    AddDetail( ({ "konto", "karte", "geldkarte", "card", "seercard",
+                      "seer-card" }), "Wie das geht, steht auf der Tafel.\n" );
+    AddDetail( "tafel", "Du kannst sie lesen.\n" );
+
+    AddSmells( SENSE_DEFAULT, "Es riecht nach altem Staub.\n" );
+    AddSmells( "staub", "Hier lagern sicher viele alte Akten.\n" );
+    AddSmells( "akten", "Die riechen dann irgendwann nach Staub.\n" );
+
+    AddSounds( SENSE_DEFAULT, "Direkt vor dem Schalter ist es erstaunlich "
+               "ruhig.\nGeradezu ehrfurchtsvoll ruhig.\n" );
+    AddSounds( ({ "schalter", "ruhe", "ehrfurcht" }),
+               "Ob das am Schalterbeamten liegt?\n" );
+    AddSounds( ({ "beamter", "beamten", "schalterbeamter", "schalterbeamten" }),
+               "Ist er ueberhaupt noch da?\n" );
+
+    AddReadDetail( ({ "tafel", "preisliste" }),
+                   "Preisliste:\n"
+                   "================================================="
+                   "=====================\n\n"
+                   "Neue Geldkarte .................................."
+                   "...... 10000 Muenzen\n"
+                   "Syntax: kaufe geldkarte\n\n"
+                   "Einzahlungen auf das Geldkarten-Konto ..........."
+                   "...... 10% Gebuehren\n"
+                   "Syntax: zahle <n> muenzen ein\n"
+                   "oder    lade karte auf\n\n" );
+
+    AddCmd( ({ "zahl", "zahle" }), "_einzahlen" );
+    AddCmd( ({ "lad", "lade" }), "_aufladen" );
+    AddCmd( ({ "kaufe", "kauf" }), "_kaufen" );
+    
+    AddExit( "raus", PATH+"seherbank" );
+}
+
+
+public void BecomesNetDead( object pl )
+{
+    pl->move( PATH+"seherbank", M_GO|M_NOCHECK, 0, "wird rausgeworfen",
+              "schlafwandelt herein" );
+}
+
+
+static int _guthaben()
+{
+    mixed wert;
+
+    if ( !(this_player()->Query(KONTO, F_MODE) & SAVE) )
+        this_player()->Set( KONTO, SAVE, F_MODE_AS );
+    
+    wert = this_player()->Query( KONTO, F_VALUE );
+
+    if ( !intp(wert) || wert < 0 || wert > 100000 )
+        return this_player()->Set( KONTO, 0, F_VALUE );
+
+    return wert;
+}
+
+
+static int _einzahlen( string str )
+{
+    int n, guthaben, gebuehr;
+    string dummy;
+    object ob;
+
+    if ( !this_player() || this_player() != this_interactive() )
+        return 0;
+    
+    if ( !str || !stringp(str) || sscanf( str, "%d %s", n, dummy ) != 2 ||
+         dummy != "muenzen ein" )
+        return notify_fail( "Syntax: zahle <n> muenzen ein\n" ), 0;
+
+    if ( !IS_SEER(this_player()) )
+        return notify_fail( break_string("Werd doch erstmal Seher.", 78, "Der "
+                                         "Schalterbeamte grinst ueberheblich: "
+                                         ) ), 0;
+
+    if ( n < 1000 )
+        return notify_fail( break_string("Mit so kleinen Betraegen fangen "
+                                         "wir erst gar nicht an. Du musst "
+                                         "schon mindestens 1000 "
+                                         "Muenzen einzahlen.", 78,
+                                         "Der Schalterbeamte grummelt: ") ), 0;
+
+    guthaben = this_player()->QueryMoney();
+
+    // Man kann sein Konto natuerlich nicht mit dem Geld vom Konto aufladen ;-)
+    if ( ob = present( "\ngeldkarte", this_player() ) )
+        guthaben -= ob->QueryProp( P_AMOUNT );
+
+    if ( guthaben < n )
+        return notify_fail( break_string("Du hast ja gar nicht soviel Geld!",
+                                         78, "Der Schalterbeamte faucht "
+                                         "Dich an: ") ), 0;
+
+    if ( (guthaben = _guthaben()) == 100000 )
+        return notify_fail( break_string( "Deine Seer-Card (TM) ist bereits "
+                                          "maximal aufgeladen. Mehr als "
+                                          "100.000 Muenzen koennen damit aus "
+                                          "technischen Gruenden nicht "
+                                          "verwaltet werden.", 78,
+                                          "Der Schalterbeamte sagt: " ) ), 0;
+
+    gebuehr = to_int(n / 11.0 + 0.5);
+    n -= gebuehr;
+
+    if ( guthaben + n > 100000 )
+        return notify_fail( break_string("Tut mir leid, aber so hohe Betraege "
+                                         "kann die Geldkarte nicht verwalten.\n"
+                                         "Du kannst die Seer-Card (TM) mit "
+                                         "maximal 100.000 Muenzen aufladen. "
+                                         "Ausgehend von Deinem momentanen "
+                                         "Guthaben von " +
+                                         to_string(guthaben) + " Muenzen "
+                                         "wuerde Dich das (inkl. unserer "
+                                         "Verwaltungsgebuehren) " +
+                                         to_string(to_int((100000-guthaben) *
+                                                          1.1 + 0.5)) +
+                                         " Muenzen kosten.\n"
+                                         "Um Dir die Rechnerei zu ersparen, "
+                                         "kannst Du auch einfach \"lade karte "
+                                         "auf\" benutzen, um Deine Geldkarte "
+                                         "maximal aufzuladen.", 78,
+                                         "Der Schalterbeamte sagt: ",
+                                         BS_LEAVE_MY_LFS) ), 0;
+
+    if ( objectp(ob) ){
+        write( "Du zeigst Deine Geldkarte kurz vor.\n" );
+        // notwendig, da sonst das Geld evtl. von der Karte selber abgebucht
+        // wird, falls sie als oberstes im Inv steht
+        this_player()->Set( KONTO, 0, F_VALUE );
+    }
+
+    this_player()->AddMoney( -(n + gebuehr) );
+    ZENTRALBANK->PayIn( gebuehr );
+    this_player()->Set( KONTO, guthaben + n, F_VALUE );
+
+    write( break_string( "Okay, Deine Geldkarte hat nun ein Guthaben von "
+                         "insgesamt " + to_string(_guthaben()) + " Muenzen.",
+                         78, "Der Schalterbeamte sagt: " ) );
+
+    return 1;
+}
+
+
+static int _aufladen( string str )
+{
+    int n, guthaben, gebuehr;
+    string dummy;
+    object ob;
+
+    if ( !this_player() || this_player() != this_interactive() )
+        return 0;
+
+    if ( !stringp(str) || sscanf( str, "%s auf", dummy ) != 1 ||
+         dummy != "karte" && dummy != "geldkarte" && dummy != "card" &&
+         dummy != "seercard" && dummy != "seer-card" )
+        return notify_fail( "Syntax: lade geldkarte auf\n" ), 0;
+
+    if ( !IS_SEER(this_player()) )
+        return notify_fail( break_string("Werd doch erstmal Seher.", 78, "Der "
+                                         "Schalterbeamte grinst ueberheblich: "
+                                         ) ), 0;
+
+    if ( (guthaben = _guthaben()) == 100000 )
+        return notify_fail( break_string( "Deine Seer-Card (TM) ist bereits "
+                                          "maximal aufgeladen. Mehr als "
+                                          "100.000 Muenzen koennen damit aus "
+                                          "technischen Gruenden nicht "
+                                          "verwaltet werden.", 78,
+                                          "Der Schalterbeamte sagt: " ) ), 0;
+
+    n = this_player()->QueryMoney();
+
+    // Man kann sein Konto natuerlich nicht mit dem Geld vom Konto aufladen ;-)
+    if ( ob = present_clone( SEHERKARTE, this_player() ) )
+        n -= ob->QueryProp( P_AMOUNT );
+
+    if ( (gebuehr = to_int( (100000 - guthaben) * 1.1 + 0.5 )) < n )
+        n = gebuehr;
+
+    gebuehr = to_int( n / 11.0 + 0.5 );
+    n -= gebuehr;
+
+    if ( n + gebuehr < 1000 )
+        return notify_fail( break_string("Mit so kleinen Betraegen fangen "
+                                         "wir erst gar nicht an. Du musst "
+                                         "schon mindestens 1000 "
+                                         "Muenzen einzahlen.", 78,
+                                         "Der Schalterbeamte grummelt: ") ), 0;
+
+    if ( objectp(ob) ){
+        write( "Du zeigst Deine Geldkarte kurz vor.\n" );
+        // notwendig, da sonst das Geld evtl. von der Karte selber abgebucht
+        // wird, falls sie als oberstes im Inv steht
+        this_player()->Set( KONTO, 0, F_VALUE );
+    }
+
+    this_player()->AddMoney( -(n + gebuehr) );
+    ZENTRALBANK->PayIn( gebuehr );
+    this_player()->Set( KONTO, guthaben + n, F_VALUE );
+
+    write( break_string( "Du zahlst " + to_string(n+gebuehr) + " Muenzen ein "
+                         "und erhoehst Dein Guthaben damit auf " +
+                         to_string(_guthaben()) + " Muenzen insgesamt.", 78,
+                         "Der Schalterbeamte sagt: " ) );
+    
+    return 1;
+}
+
+
+static int _kaufen( string str )
+{
+    if ( !this_interactive() || this_player() != this_interactive() )
+        return 0;
+
+    if ( str != "geldkarte" && str != "karte" && str != "card" &&
+         str != "seercard" && str != "seer-card" )
+        return notify_fail( "Syntax: kaufe geldkarte\n" ), 0;
+
+    if ( !IS_SEER(this_player()) )
+        return notify_fail( break_string("Werd doch erstmal Seher.", 78, "Der "
+                                         "Schalterbeamte grinst ueberheblich: "
+                                         ) ), 0;
+
+    if ( this_player()->QueryMoney() < 10000 )
+        return notify_fail( break_string("Du hast nicht genug Geld bei!",
+                                         78, "Der Schalterbeamte faucht "
+                                         "Dich an: ") ), 0;
+
+    object ob = clone_object( SEHERKARTE ); 
+    this_player()->AddMoney(-10000);
+    ZENTRALBANK->PayIn(10000);
+    
+    if ( ob->move( this_player(), M_GIVE ) != 1 ){
+        write( "Der Schalterbeamte grummelt: Du kannst die Geldkarte nicht "
+               "mehr tragen.\nDer Schalterbeamte wirft Dir Deine Seer-Card "
+               "(TM) veraechtlich vor die Fuesse.\n" );
+        // trotzdem einmal in's Inv des Spielers bewegen, damit die Karte
+        // auf seinen Namen registriert wird
+        ob->move( this_player(), M_GIVE|M_NOCHECK );
+        // dann auf den Boden legen
+        ob->move( this_object(), M_PUT );
+    }
+    else
+        write( "Der Beamte haendigt Dir eine Seer-Card (TM) aus.\n" );
+
+    write( break_string( "Der Schalterbeamte macht Dich noch darauf "
+      "aufmerksam, dass Deine Seer-Card (TM) immer erst dann als "
+      "Zahlungsmittel in Anspruch genommen wird, wenn Deine in Boersen oder "
+      "in klingender Muenze mitgefuehrte Barschaft aufgebraucht sein "
+      "sollte - egal, was davon sich oben im Inventar befindet.\n"
+      "Was immer das auch heissen soll.", 78, 0, BS_LEAVE_MY_LFS ) );
+
+    this_player()->Set( KONTO, SAVE, F_MODE_AS );
+
+    return 1;
+}