Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/moebel/verkaeufer.c b/d/seher/haeuser/moebel/verkaeufer.c
new file mode 100644
index 0000000..5143ab2
--- /dev/null
+++ b/d/seher/haeuser/moebel/verkaeufer.c
@@ -0,0 +1,311 @@
+//--------------------------------------------------------------------------------
+// Name des Objects:    Verkaeufer (August vom SCHRAENKER)
+// Letzte Aenderung:    24.08.2006
+// Magier:              Seleven
+//--------------------------------------------------------------------------------
+#pragma strong_types,rtt_checks
+
+#include <properties.h>
+#include <language.h>
+#include <moving.h>
+#include <wizlevels.h>
+#include <bank.h>
+
+#include "schrankladen.h"
+inherit "/std/npc";
+
+// Wenn im Laden bzw. im Environment von August die Prop "test" auf 1 gesetzt
+// wird, kostet der Kauf nichts. Jeder der ein Seherhaus besitzt, kann kaufen.
+
+// Fuer Prop im Spieler = individuellere Begruessung
+#define LASTVISIT "schrankladen_lastvisit"
+// 10% Rabatt fuer Leute, die intensiv testeten, Ideen fuer den Laden beisteuerten,
+// oder halfen, groessere Bugs zu beheben!
+#define RABATT ({"geordi","foobar","blood","lurchi", "eldaron"})
+
+// kaufe... andere im raum sollten vor der antwort sehen wer august nach was fragt
+
+protected void create()
+{
+  if(!clonep(TO)) return;
+  ::create();
+  SetProp(P_LOG_FILE,"seleven/schraenker"); // Seleven 06.04.2006
+  SP(P_SHORT, "August");
+  SP(P_LONG, BS(
+     "Das ist August, ein kleiner Zwerg und seines Zeichens Seher-Berater. "
+    +"Er versorgt Seher mit Eigenheim mit dem Mobiliar, das man braucht, "
+    +"will man sein Haus uebersichtlich halten und etwas Ordnung in die "
+    +"Sammlungen bringen, die sich in so einem Seherhaus zwangslaeufig "
+    +"anhaeufen. Im Gegensatz zu den meisten Zwergen sieht August nicht nur "
+    +"aus wie frisch geduscht, er steckt auch in einem feinen Anzug. So "
+    +"einen gepflegten Bart wie den von August hast Du vorher noch nie "
+    +"gesehen. Und dann duftet er auch noch nach irgendeinem exotischen "
+    +"Waesserchen. Waere nicht der gierige Blick in seinen Augen, koenntest "
+    +"Du wirklich zweifeln, dass es sich hier wirklich um einen Zwerg "
+    +"handelt.",78,0,1));
+  SP(P_NAME, "August");
+  SP(P_GENDER, MALE);
+  SP(P_ARTICLE, 0);
+  SP(P_RACE, "Zwerg");
+  // Arathorn, 2015-Okt-13, Zeile vor P_XP gezogen, damit auch sicher kein
+  // EK angezeigt wird.
+  create_default_npc(20);
+  SP(P_XP, 0);
+  AddId(({"august", "inhaber", "ladeninhaber", "besitzer",
+          "firmenbesitzer", "verkaeufer", "zwerg", "seher-berater"}));
+
+  SP(P_SIZE, 130);
+  SP(P_NO_ATTACK, BS("Die beruhigende Melodie scheint nicht nur zum "
+    +"Vergnuegen der Kunden zu erklingen. Du bringst es einfach "
+    +"nicht fertig, Deine Hand gegen August zu erheben!"));
+
+  AD(({"anzug"}), BS(Name(WER)+" steckt in einem feinen rotbraunen Anzug, "
+    +"in dem vermutlich auch ein Bettler koeniglich auf Dich wirken wuerde. "
+    +"Offensichtlich ist er nicht der Aermsten einer."));
+  AD(({"bettler"}), BS("Wie ein Bettler wirkt August nicht auf Dich."));
+  AD(({"waesserchen"}), BS("Es riecht koestlich. Schnupper doch mal!"));
+  AD(({"bart"}), BS("Der vermutlich weisse Bart wurde von Kuenstlerhand "
+    +"roetlich eingefaerbt und passt farblich vorzueglich zum Anzug."));
+  AD(({"kuenstlerhand"}), BS("Bestimmt hat August das nicht selbst gemacht."));
+  AD(({"mobiliar"}), BS("Das verkauft er hier."));
+  AD(({"augen"}), BS("Obwohl "+Name(WER)+" perfekte Manieren an den Tag "
+    +"legt, seine Augen verraten ihn. Die Dollarzeichen in seinem Blick "
+    +"sind nicht zu uebersehen."));
+  AD(({"dollarzeichen"}), BS("Eine Redensart. Keine Ahnung was das sein soll."));
+  AD(({"redensart"}), BS("Irgend ein Spruch, den Du irgendwo aufgeschnappt hast."));
+  AD(({"spruch"}), BS("Im Spruecheklopfen bist Du gut, oder?"));
+  AD(({"spruecheklopfen"}), BS("OK, ich geb auf. :)"));
+  AD(({"manieren"}), "Und das bei einem Zwerg!!!\n");
+
+  AddInfo(({"laden", "schraenker"}), "Der Schraenker ist mein Laden, "
+    +"und ich denke es ist ein guter Laden. Das Geschaeft laeuft, seit "
+    +"jeder Ordnung in seinem Seherhaus haben moechte. Und Seherhaeuser "
+    +"gibt es ja mehr als genug! :)", "sagt: ");
+  AddInfo(({"haeuser", "seherhaeuser"}), "Bei mir koennen Seher "
+    +"Mobiliar fuer ihr Seherhaus kaufen. Unsere Qualitaet ist weithin "
+    +"beruehmt. Ausserdem sind wir die einzigen auf dem Markt.", "grinst: ");
+  AddInfo(({"melodie"}), "lauscht vertraeumt.\n");
+  AddInfo(({"geld"}), "Sie haben doch welches?\n", "fragt besorgt: ");
+  // Seleven 01.04.2006: frage nach (schluessel)brett eingefuegt
+  AddInfo(({"mobiliar", "schrank", "schraenke", "truhe", "truhen", "kommode",
+     "kuehlschrank", "waffenschrank", "waffentruhe", "spind", "kleiderschrank","brett","schluesselbrett",
+     "muellcontainer", "zauberkiste", "tresor", "holztruhe","vitrine","pult","lesepult"}),
+     "Lesen Sie doch bitte die Preisliste an der Wand.", "sagt: ");
+  AddInfo(({"liefern", "lieferung"}), "Wir liefern sofort.", "sagt: ");
+  AddInfo(({"bart"}), "Es ist ein schoener Bart, nicht? :)", "fragt: ");
+  AddInfo(({"augen"}), "Was haben Sie an denen auszusetzen?", "fragt: ");
+  AddInfo(({"dusche"}), "Jeden Morgen. Das ist leider Pflicht. Und 364 mal "
+    +"zu oft :(", "sagt: ");
+  AddInfo(({"pflicht", "pflichten"}), "Als Ladeninhaber hat man deren "
+    +"viele!", "sagt: ");
+  AddInfo(({"anzug"}), "Ein echter Armgani!", "verkuendet stolz: ");
+  AddInfo(({"armgani"}), "Du kennst Armgani nicht?", "fragt naseruempfend: ");
+  AddInfo(({"geordi"}), "Von ihm stammt die urspruengliche Geschaeftsidee "
+    +"fuer den SCHRAENKER. Dafuer bekommt er bei uns auch Rabatt!", "erzaehlt: ");
+  AddInfo(({"august"}), "Wollen Sie sich ueber mich lustig machen?", "fragt drohend: ");
+  AddInfo(({"rabatt"}), "Nur Stammkunden, die uns schon brauchbare Ideen "
+    +"geliefert haben, oder die uns beim Aufbau des Geschaefts geholfen haben, "
+    +"gewaehren wir Rabatt.", "sagt: ");
+  AddInfo(({"ideen"}), "Es muessen brauchbare Ideen sein.", "sagt: ");
+  AddInfo(({"stammkunde", "stammkunden"}), "Einige kommen oefter vorbei.", "sagt: ");
+  AddInfo(({"aufbau"}), "Es kommt mir noch so vor, als waers gestern gewesen.", "sagt: ");
+  AddInfo(({"kunde", "kunden"}), "Ich hoffe mal, dass SIE der Kunde sind!?", "sagt: ");
+
+  AddCmd(({"kauf", "kaufe", "bestell", "bestelle"}), "container_kaufen");
+  AddCmd(({"schnupper", "schnuppere"}), "schnuppern");
+}
+
+int schnuppern()
+{
+  write(BS("Ein betoerender Duft umgibt August, und verdeckt jeglichen Geruch, "
+    +"den Du von sonstigen Zwergen gewohnt bist."));
+  return 1;
+}
+
+static string anrede()
+{
+  switch( TP->QueryProp(P_GENDER) )
+  {
+    case MALE   : return "mein Herr"; break;
+    case FEMALE : return "meine Dame"; break;
+  }
+  return "mein H... D... Wasauchimmer";
+}
+
+void begruessung(object pl, string txt)
+{
+  if( objectp(pl) && present(pl) )
+    tell_room(ETO, "\n"+txt);
+}
+
+void init()
+{
+  ::init();
+  if (!interactive(TP) || TP->QueryProp(P_INVIS))
+      return 0; // Keine Meldungen wenn invis oder kein Spieler!
+  if(TP->QueryProp(LASTVISIT) < time()-3600)  // laenger als 1 Std. nicht da gewesen
+  {
+    if( member(RABATT, geteuid(TP)) != -1 )
+      call_out("begruessung", 0, TP, BS("Herzlichst Willkommen in meinem "
+        +"bescheidenen Laden, "+TP->name(WER)+". Es ist jedesmal eine Freude, "
+        +"Sie zu sehen!",78, Name(WER)+" sagt: "));
+    else
+      call_out("begruessung", 0, TP, BS("Willkommen in meinem bescheidenen Laden, "
+        +anrede()+".",78, Name(WER)+" sagt: "));
+  }
+  else  // schonmal innerhalb 1 Std. da gewesen?
+  {
+    if( member(RABATT, geteuid(TP)) != -1 )
+      call_out("begruessung", 0, TP, BS("Hallo, "+TP->name(WER)+". "
+        +"Sie konnten es ja nicht lange ohne mich aushalten, aber Stammkunden "
+        +"sind mir die liebsten Kunden. Womit kann ich Ihnen diesmal "
+        +"dienen?",78, Name(WER)+" sagt: "));
+    else
+      call_out("begruessung", 0, TP, BS("Guten Tag, "+anrede()+". "
+        +"Ich freue mich, dass Sie meinen Laden so bald wieder besuchen kommen! "
+        +"Womit kann ich Ihnen diesmal dienen?",78, Name(WER)+" sagt: "));
+  }
+
+  TP->SetProp(LASTVISIT, time() );
+}
+
+int container_kaufen(string str)
+{
+  string cnt_file;
+  int preis;
+  object zielraum,cnt,ob;
+  tell_room(ETO, TP->Name(WER)+" wendet sich wegen eines Kaufs an "
+    +Name(WEN)+".\n", ({TP}) );
+  if( (query_wiz_level(TP) >= SEER_LVL && query_wiz_level(TP) < LEARNER_LVL) ||
+      ETO->QueryProp("test") ) // TP ist Seher, oder Testmodus.
+  {
+    catch(call_other("/d/seher/haeuser/"+geteuid(TP)+"raum0", "???", 0));
+    if( !zielraum=find_object("/d/seher/haeuser/"+geteuid(TP)+"raum0") )
+    {
+      tell_room(ETO, BS("Tut mir leid, "+anrede()+". Voraussetzung fuer eine "
+        +"Lieferung unserer Artikel ist ein begehbares "
+        +"Seherhaus.",78, Name(WER)+" sagt: "));
+      return 1;
+    }
+    notify_fail( BS("Tut mir leid, "+anrede()+". So einen Artikel fuehren wir nicht. "
+      +"Bitte lesen Sie die Preisliste an der Wand. Dort koennen Sie sich genau "
+      +"darueber informieren, ueber welche Artikel wir zur Zeit "
+      +"verfuegen.",78, Name(WER)+" sagt: "));
+    if(!str) return 0;
+    switch(str)
+    {
+      case "1" :
+      case "kommode" :       cnt_file="kommode";
+                             preis=3799;
+                             break;
+      case "2" :
+      case "kleiderschrank": cnt_file="kleiderschrank";
+                             preis=5899;
+                             break;
+      case "3" :
+      case "spind" :         cnt_file="spind";
+                             preis=5299;
+                             break;
+      case "4" :
+      case "kuehlschrank" :  cnt_file="kuehlschrank";
+                             preis=3499;
+                             break;
+      case "5" :
+      case "waffenschrank" : cnt_file="waffenschrank";
+                             preis=5899;
+                             break;
+      case "6" :
+      case "waffentruhe" :   cnt_file="waffentruhe";
+                             preis=5399;
+                             break;
+      case "7" :
+      case "tresor" :        cnt_file="tresor";
+                             preis=4499;
+                             break;
+      case "8" :
+      case "zauberkiste" :   cnt_file="zauberkiste";
+                             preis=7999;
+                             break;
+      case "9" :
+      case "muellcontainer": cnt_file="muellcontainer";
+                             preis=999;
+                             break;
+      // Seleven 01.04.2006
+      case "10" :
+      case "schluesselbrett": cnt_file="schluesselbrett";
+                             preis=499;
+                             break;
+      case "11" :
+      case "duschkabine": cnt_file="wasch";
+                             preis=3499;
+                             break;
+      case "12":
+      case "holztruhe":
+                             cnt_file="autoloadertruhe";
+                             preis=74999;
+                             break;
+      case "13":
+      case "vitrine":
+                             cnt_file="vitrine";
+                             preis=49999;
+                             break;
+      case "14":
+      case "lesepult":
+                            cnt_file="lesepult";
+                            preis=60000;
+                             break;
+      default:               return 0; break;
+    }
+    if( member(RABATT, geteuid(TP)) != -1 )  // 10% Rabatt fuer bestimmte Leute,
+      preis=preis/100*90;                    // die Ideen fuer den Laden beisteuerten.
+    if( !ETO->QueryProp("test") )
+    {
+      if( !TP->QueryMoney() )
+      {
+        tell_room(ETO, BS("Ohne Geld bekommen Sie bei uns nichts, "+anrede()
+          +". Wir sind kein Wohlfahrtsinstitut!",78, Name(WER)+" sagt: "));
+        return 1;
+      }
+      if( TP->QueryMoney() < preis )
+      {
+        tell_room(ETO, BS( CAP(anrede())+", Sie haben zuwenig Geld dabei. "
+          +"Der Preis fuer dieses Objekt ist "+preis
+          +" Muenzen.",78, Name(WER)+" sagt: "));
+        return 1;
+      }
+      TP->AddMoney(-preis);      // Spieler Geld abziehen
+      ZENTRALBANK->PayIn(preis); // Geld auf die Bank.
+    }
+    cnt=clone_object( LADEN(cnt_file) );
+    cnt->move(zielraum, M_PUT|M_SILENT);
+    tell_room(ETO, TP->Name(WER)+" kauft "+cnt->name(WEN)+".\n", ({TP}) );
+    tell_room(ETO, BS("Es ist ein Vergnuegen, mit Ihnen Geschaefte zu machen, "
+      +anrede()+"! Wenn Sie in Ihr Haus zurueckkehren, werden Sie die Ware bereits "
+      +"vorfinden, so schnell arbeiten wir.",78, Name(WER)+" sagt: "));
+    tell_room(zielraum, BS("Mit Knall und Schwefelduft erscheint ein kleines, "
+      +"verhutzeltes Maennchen. Es traegt einen gruenen Anzug und eine gruene "
+      +"Kappe, auf der in gelbem Schriftzug \"SCHRAENKER\" steht. Das Maennchen "
+      +"stellt "+cnt->name(WEN)+" ab und verschwindet auf dem gleichen Wege, wie "
+      +"es hereingekommen ist."));
+    if( present("Interactive", SCHRANKMASTER) )
+      tell_room(SCHRANKMASTER, TP->Name(WER)+" kauft "+name(WEN)+".\n");
+    SCHRANKMASTER->RegisterCnt(cnt, cnt->QueryProp("cnt_version_std")
+      +cnt->QueryProp("cnt_version_obj"), geteuid(TP),
+       "/d/seher/haeuser/"+geteuid(TP)+"raum0");
+    return 1;
+  }
+  else if(query_wiz_level(TP) >= LEARNER_LVL )  // TP ist Magier.
+  {
+    tell_room(ETO, BS("Tut mir leid, "+anrede()+". An Magier liefern wir nichts. "
+      +"Das ist ein Prinzip des Hauses, und Prinzipien sind dazu da, dass "
+      +"sie eingehalten werden. ",78, Name(WER)+" sagt: "));
+    return 1;
+  }
+  else  // TP ist Spieler, kein Seher oder Magier.
+  {
+    tell_room(ETO, BS("Tut mir leid, "+anrede()+". Wir liefern nur an Seher. "
+      +"Aber da ich Sie als strebsame und erfolgreiche Person ansehe, "
+      +"bin ich sicher, dass wir uns bald wiedersehen!",78, Name(WER)+" sagt: "));
+    return 1;
+  }
+}