Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/haus.c b/d/seher/haeuser/haus.c
new file mode 100644
index 0000000..d61471c
--- /dev/null
+++ b/d/seher/haeuser/haus.c
@@ -0,0 +1,361 @@
+//
+// haus.c -- Das Rohgeruest eines Seherhauses.
+//
+// Grundobjekt (c) 1994 Boing@MorgenGrauen
+// Abschliessen und Rauswerfen von Jof
+// Fuer Aenderungen ab dem 06.10.94 verantwortlich: Wargon
+//
+// $Date: 1996/02/21 18:09:55 $
+// $Revision: 2.8 $
+/* $Log: haus.c,v $
+ * Revision 2.8 1996/02/21 18:09:55 Wargon
+ * SmartLog() fuer Rueckmeldungen eingebaut.
+ *
+ * Revision 2.7 1995/07/06 11:18:07 Wargon
+ * Langbeschreibung aenderbar.
+ *
+ * Revision 2.6 1995/04/21 10:48:20 Wargon
+ * Bugfix in "beschreibe tuerstatus".
+ *
+ * Revision 2.5 1995/04/21 08:56:55 Wargon
+ * Haustuer ausgelagert.
+ * 'beschreibe tuerzustand' ist dazugekommen.
+ *
+ * Revision 2.4 1995/02/27 20:47:32 Wargon
+ * Diverse Bugs gefixed...
+ *
+ * Revision 2.2 1995/02/15 11:19:17 Wargon
+ * Die Haustuer kann jetzt auch beschrieben werden (H_DOOR).
+ *
+ * Revision 2.1 1995/02/04 14:51:14 Wargon
+ * Statt "Haus" wird weitestgehend name() verwendet.
+ *
+ * Revision 2.0 1995/02/01 20:40:26 Wargon
+ * Das Haus ist jetzt nur noch ein Objekt in einem Raum, nicht
+ * mehr ein Raum im Raum.
+ *
+ */
+#include "haus.h"
+#include <properties.h>
+#include <moving.h>
+#include <wizlevels.h>
+
+inherit "/std/thing";
+inherit HAUSTUER;
+
+private nosave string text;
+private nosave string owner;
+
+void create()
+{
+ if (!clonep(this_object())) return;
+
+ thing::create();
+ haustuer::create();
+
+ SetProp(P_NAME, ({ "Haus", "Hauses", "Haus", "Haus" }));
+ SetProp(P_IDS, ({"haus","sehe\rhaus"}));
+ SetProp(P_GENDER, NEUTER);
+ SetProp(P_NOGET,1);
+
+ Set(P_LONG, SAVE, F_MODE);
+ Set(P_SHORT, SAVE, F_MODE);
+ Set(P_IDS, SAVE, F_MODE);
+ Set(P_GENDER, SAVE, F_MODE);
+ Set(P_NAME, SAVE, F_MODE);
+
+ text = 0;
+
+ AddCmd( ({"betritt", "betrete"}), "betritt" );
+ AddCmd( ({"beschreib", "beschreibe"}), "beschreiben");
+ AddCmd( ({"aender", "aendere"}), "aendern");
+ AddCmd( ({"klopf","klopfe"}), "klopfen");
+ AddCmd("erlaube", "erlauben");
+ AddCmd("verbiete", "verbieten");
+ AddCmd("notiz", "merktext");
+}
+
+varargs void Save(int crunched)
+{
+ save_object(HAUSSAVEPATH+owner);
+}
+
+void Load()
+{
+ restore_object(HAUSSAVEPATH+owner);
+}
+
+void init()
+{
+ // statt im Haus landet man im Hauptraum Raum 0, sollte ansich nicht passieren
+ // da man nomalerweise nicht ins Haus sondern direkt in den Hauptraum gemoved wird
+ if (environment(this_player()) == this_object()) {
+ this_player()->move(RAUMNAME(owner,0), M_GO | M_NO_SHOW | M_SILENT);
+ return;
+ }
+ ::init();
+}
+
+// Extra fuer Boing! ;)
+// Setzt man P_SHORT des Hauses auf 0, so verschwindet es zwar aus
+// der Beschreibung des Raumes, ist aber immer noch ansprechbar!
+string short()
+{
+ string ret;
+
+ ret = ::short();
+ if (previous_object() != environment() && !ret)
+ ret ="";
+
+ return ret;
+}
+
+// Zustand der Haustuer und evtl. Notiz mit einbauen.
+varargs string long(int mode)
+{
+ string ret, door;
+
+ door = haustuer::long(mode);
+
+ ret = QueryProp(P_LONG)+door;
+ if (text) {
+ ret += break_string( "An "+name(WEM,1)+" befindet sich eine Notiz: '"+text+"'.", 75);
+ }
+ return break_string(ret, 75);
+}
+
+// Setze neuen Besitzer fuer dieses Haus
+// setzt Default-Short, -Long und Id fuer neuen Besitzer,
+// leitet Besitzer an Haustuer weiter und laedt den Hauptraum
+varargs string SetOwner(string o)
+{
+ SetProp(P_SHORT, "Das Haus von "+capitalize(o));
+ SetProp(P_LONG, "Das Haus von "+capitalize(o)+", es sieht sehr nach einem Rohbau aus.\n");
+ AddId( ({ "\n"+o+"haus", "haus von "+o }) );
+ haustuer::SetTuerOwner(o);
+ load_object(RAUMNAME(o,0));
+ return owner = o;
+}
+
+// liefert den Name des Haus-Besitzers
+string QueryOwner() { return owner; }
+
+private int tp_ownercheck()
+{
+ if(getuid(this_player()) != owner)
+ {
+ notify_fail( "Das ist nicht Dein Haus!\n" );
+ return 0;
+ }
+ return 1;
+}
+
+// Aktion zum Betreten
+static int betritt(string str)
+{
+ notify_fail("Was moechtest Du betreten?\n");
+
+ // Haus war nicht angesprochen
+ if (!str || !id(str))
+ return 0;
+
+ // Haustuer ist zu
+ if (Query(H_DOORSTAT) & D_CLOSED) {
+ printf("%s von %s ist zu.\n", capitalize(name(WER,1)), capitalize(owner));
+ return 1;
+ }
+ // bewege Spieler in Hauptraum
+ this_player()->move(RAUMNAME(owner,0), M_GO, 0, "betritt "+name(WEN,1), "kommt herein");
+ return 1;
+}
+
+// Aktion zum Setzen/Loeschen von Notizen am Haus
+static int
+merktext(string str)
+{
+ // darf der Spieler das, d.h. ist das sein Haus?
+ if(!tp_ownercheck())
+ {
+ notify_fail( "Du kannst keine Notiz an "+capitalize(name(WEM,1))+" von "+capitalize(owner)+" anbringen!\n" );
+ return 0;
+ }
+
+ str = this_player()->_unparsed_args();
+
+ // kein Text => Notiz loeschen, ansonsten => Text als Notiz setzen
+ if (!str || str == "") {
+ write( "OK, Notiz ist geloescht.\n" );
+ text = 0;
+ }
+ else {
+ write( "OK, Notiz lautet '"+str+"'\n");
+ text = str;
+ }
+
+ return 1;
+}
+
+// Aktion Anklopfen am Haus
+static int
+klopfen(string str)
+{
+ int i;
+ object room;
+
+ notify_fail( "Syntax: klopfe an <haus> an\n" );
+ // parsen von klopfe an <haus> an
+ if (!str || sscanf(str, "an %s an", str) != 1)
+ return 0;
+
+ if (str == "tuer" || str == "haustuer" || id(str)) {
+ // Meldungen an Spieler und Raum
+ printf( "Du klopfst an "+name(WEM,1)+" von "+capitalize(owner)+" an.\n");
+ say( capitalize(this_player()->name(WER))+" klopft an "+name(WEM,1)+" von "+capitalize(owner)+" an.\n" );
+ // in allen geladenen Raeumen Klopfen melden
+ for (i=VERWALTER->HausProp(owner,HP_ROOMS); i>=0; i--) {
+ if (room = find_object(RAUMNAME(owner,i)))
+ tell_room(room, "Du hoerst, wie jemand an der Haustuer anklopft.\n" );
+ }
+ return 1;
+ }
+ return 0;
+}
+
+// Aktion Tuer/Haus beschreiben
+static int
+beschreiben(string str)
+{
+ string *p, *ds;
+
+ // darf der Spieler das, d.h. ist das sein Haus?
+ if (!tp_ownercheck())
+ return 0;
+
+ notify_fail( "Hier draussen funktioniert nur 'beschreibe <haus> lang',\n"
+ +"'beschreibe haustuer' oder 'beschreibe tuerzustand'!\n");
+
+ // zu wenig Eingabe zum Parsen
+ if (!str || str == "")
+ return 0;
+
+ p = old_explode(str," ");
+
+ if (p[0] == "tuer" || p[0] == "haustuer") {
+ // beschreibe (haus)tuer
+ write( "Beschreibung der Haustuer angeben. Es ist nur eine Zeile moeglich.\n"
+ +"Als Platzhalter fuer den Zustand der Tuer dient %s. Falls die Tuer\n"
+ +"nicht in der Langebschreibung des Hauses auftauchen soll, bitte ein-\n"
+ +"fach nur <RETURN> druecken.\n]" );
+ input_to("doorDesc");
+ return 1;
+ }
+ else if (p[0] == "tuerzustand") {
+ // beschreibe tuerzustand
+ ds = Query(H_DOORLSTAT);
+ write( "Beschreibung des Tuerzustandes angeben. Es ist nur eine Zeile moeg-\n"
+ +"lich. Die Zustaende muessen durch Kommata getrennt in der Reihen-\n"
+ +"folge 'offen', 'geschlossen', 'abgeschlossen' angegeben werden.\n"
+ +"Momentaner Zustand:\n");
+ printf("'%s', '%s', '%s'.\n", ds[0], ds[1], ds[3]);
+ write( "(Abbruch: Einfach <RETURN> druecken!)\n]");
+ input_to("doorLDesc");
+ return 1;
+ }
+ else if (p[<1] == "lang" && id(implode(p[0..<2]," "))) {
+ object home = load_object(RAUMNAME(owner,0));
+ // beschreibe <haus> lang
+ home->beschreiben("haus lang", AUSSEN);
+ return 1;
+ }
+ // Eingabe Syntax nicht passend => notify_fail von oben
+ return 0;
+}
+
+// Aktion Haus Aendern
+static int
+aendern(string str)
+{
+ string *p, *ds;
+
+ // Darf der Spieler das, d.h. ist das sein Haus?
+ if (!tp_ownercheck())
+ return 0;
+
+ notify_fail( "Hier draussen funktioniert nur 'aendere <haus> lang'!\n");
+ // zu wenig Eingabe zum Parsen
+ if (!str || str == "")
+ return 0;
+
+ p = old_explode(str," ");
+
+ if (p[<1] == "lang" && id(implode(p[0..<2]," "))) {
+ object home = load_object(RAUMNAME(owner,0));
+ // aendere <haus> lang
+ home->aendern("haus lang", AUSSEN);
+ return 1;
+ }
+ // Eingabe Syntax nicht passend => notify_fail von oben
+ return 0;
+}
+
+// input_to zu beschreibe (haus)tuer
+static void doorDesc(string str)
+{
+ if (!str)
+ str = "";
+ if (sizeof(str))
+ str += "\n";
+
+ Set(H_DOOR, str);
+ Save();
+
+ if (str == "")
+ write("OK, Haustuer wurde geloescht.\n");
+ else
+ write("OK, Beschreibung der Haustuer wurde gesetzt.\n");
+}
+
+// input_to zu beschreibe tuerzustand
+static void doorLDesc(string str)
+{
+ string *s;
+
+ if (!str || sizeof(s=old_explode(str, ","))!=3) {
+ write("ABBRUCH!\nNichts geaendert!\n");
+ return;
+ }
+ Set(H_DOORLSTAT, ({ s[0], s[1], 0, s[2] }));
+ printf("OK, Tuerzustaende sehen wie folgt aus:\n'%s', '%s', '%s'.\n",
+ s[0], s[1], s[2]);
+ Save();
+}
+
+int SmartLog(string ofile, string typ, string msg, string date)
+{
+ object home;
+ string foo, bar;
+
+ string hn=RAUMNAME(owner,0);
+
+ write_file(REPFILE(owner), sprintf("%s von %s vor dem Haus (%s):\n%s\n",
+ typ,
+ capitalize(getuid(this_player())),
+ date,
+ break_string(msg,78)));
+
+ if (IS_LEARNER(owner)) {
+ log_file("report/"+owner+".rep",
+ sprintf("MELDUNG von %s im Seherhaus, vor dem Haus (%s):\n"
+ +"Bitte zur Kenntnis nehmen! (Mit dem Befehl 'meldungen') -Wargon\n",
+ capitalize(getuid(this_player())),
+ date));
+ }
+
+ home = load_object(hn);
+ home->Set(H_REPORT, home->Query(H_REPORT)+1);
+ home->Save();
+
+ return 1;
+}
+
+