Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/d/seher/haeuser/haeuser.txt b/d/seher/haeuser/haeuser.txt
new file mode 100644
index 0000000..1945157
--- /dev/null
+++ b/d/seher/haeuser/haeuser.txt
@@ -0,0 +1,633 @@
+Inhaltsverzeichnis:
+
+1.. Kurzuebersicht der Files
+2.. Der Hausverwalter
+3.. Sonderrechte
+4.. Die Tools
+4a... Der Hausmeister
+4b... liste.c
+4c... haustool.c
+5.. Das Haus
+5a... Aussenansicht - haus.c
+5b... Die Raeume - raum.c
+5c... Der Eingangsraum - raum0.c
+5d... Die Truhe - truhe.c
+6.. Seherbank/Hauserwerb
+7.. Beschreibungen
+7a... Details/ReadDetails/Lang- und Kurzbeschreibung
+7b... Ausgaenge
+7c... Licht
+7d... Befehle
+8.. Rueckmeldungen
+9.. Hilfeseiten
+
+1. Kurzuebersicht der Files
+===========================
+
+/d/seher/haeuser/
+
+ /* Am allerwichtigsten: */
+ haus.h .................... Definitionen, die ueberall benutzt werden
+ access_rights.c ........... Die Leute mit Hauszugriff
+
+ /* Keine Haeuser ohne Verwaltung */
+ hausverwalter.c ........... Die Zentralstelle der Seherhaeuser
+ HAEUSER ................... Infos ueber Hausbesitzer (Wer, wo, wie gross)
+
+ save/
+ haeuser.o ................. Das Savefile des Hausverwalters
+
+ tools/ .................... Sammelplatz fuer Tools zu den Haeusern
+ hausmeister.c ............. Verlegen, Abreissen, .c-Files erstellen
+ haus.apx .................. Fuer .c-File eines Hauses
+ liste.c ................... Zeigt geloeschte und ge-Wiz-te Hausbesitzer
+ haustool.c ................ (obsolete)
+
+ /* Erwerb eines Hauses/Raumes */
+ seherbank.c ............... Das Bankgebaeude
+
+ queue.c ................... Die Schlangen vor den Schaltern
+ queue.h
+
+ sb_antrag.c ............... Schalter zum Beantragen eines Vertrages
+ sb_einzahlung.c ........... Schalter zum Einzahlen einer Rate
+ sb_ausgabe.c .............. Schalter zum Abholen eines Hauses
+
+ bausparvertrag.c .......... Auf dem Vertrag werden die Raten vermerkt
+ kommentar.c ............... Kommentare zum unklaren Vertragstext
+
+ txt/ ...................... Hier stehen die eigentlichen Vertragstexte
+ vertrag.txt ............... a) fuer einen Haus-Vertrag
+ vertrag_raum.txt .......... b) fuer einen Ausbauvertrag
+ kommentar.txt ............. c) erklaerende Bemerkungen zu den Texten
+
+ block.c ................... Der Block verwaltet die laufende Rate
+ /std/player/shadows/block_shadow.c
+
+ traghaus.c ................ Das bekommt man am Ausgabeschalter
+
+ log/ ...................... Logging der Bank, des Blocks, des Vertrages
+
+ /* Die Haeuser selbst */
+ virtual_compiler.c ........ Ordnet die Haeuser passend zu
+ haus.c .................... Die Aussenansicht des Hauses
+ raum.c .................... Allgemeine Funktionen der Raeume
+ raum0.c ................... Der Eingangsraum hat einige Zusatzfeatures
+ modules/ .................. Hilfsmodule:
+ haustuer.c ................ Beschreibung der Haustuer, Oeffnen/Schliessen
+ losa.c .................... Erweitertes Laden und Speichern der Raeume
+ usercmd.c ................. Alles fuer benutzerdefinierte Befehle
+ truhe.c ................... Die Truhe
+
+ save/
+ name.o .................... Savefile der Aussenansicht des Hauses
+ name0.o ................... Savefile von Raum 0
+ usw.
+ name9.o ................... Savefile von Raum 9
+ nametruhe.o ............... Savefile der Truhe
+
+ special/ .................. Besondere Objekte
+ rj.c ...................... "Romeo und Julia" von Etain
+ rom_jul/ .................. Hier liegen die Seiten der Geschichte
+ seherfaq.c ................ Die Seher-FAQ von Ryne
+ faq/ ...................... Die Seiten der FAQ
+
+ rep/ ...................... Hier landen die 'typo'-Meldungen der Haeuser
+
+ doc/ ...................... Hilfeseiten (nach /doc/scmd kopieren)
+ hausbau ................... Allgemeine Informationen
+ seherhaus ...........
+ instanthaus ........
+
+ aendere .......
+ ausgang ........
+ befehl ..........
+ beschreibe .......
+ erlaube ...........
+ kopiere ............
+ licht ...............
+ loesche ................... Seiten zu den einzelnen Befehlen
+ meldungen ...........
+ notiz ..............
+ schiebe ...........
+ sperre ...........
+ spion ...........
+ uebersicht .....
+ verbiete ......
+ werfe ........
+
+/sys/player/base.h .......... Hier ist "HAUSVERWALTER" definiert
+
+2. Der Hausverwalter
+====================
+
+Dies ist die Zentralstelle der Seherhaeuser. Hier werden wichtige Daten
+der Hausbesitzer verwaltet, naemlich:
+- der Ort, an dem das Haus steht
+- die Zahl der zusaetzlichen Raeume, ueber die das Haus verfuegt
+- die Leute, die im Haus Sonderrechte besitzen
+
+Die Funktionen des Hausverwalters werden von diversen Objekten aus auf-
+gerufen. Im Einzelnen waeren da:
+
+secure() - intern
+ Sicherheitsabfrage fuer einige Funktionen des Hausverwalters. Zugelassen
+ sind EMs und die Leute, die im access_rights.c stehen, ausserdem das
+ Instanthaus (fuer NeuesHaus()) und der Ausgabeschalter (fuer NeuerRaum()).
+
+dump() - intern
+ Bringt die Datei "HAEUSER" auf den neuesten Stand (nachdem ein neues Haus
+ oder ein neuer Raum dazugekommen ist oder ein Haus verlegt bzw. geloescht
+ wurde).
+
+check_exits() - intern
+ Beim Verlegen und Abreissen von Haeusern ist es noetig, dass Ausgaenge in
+ Nachbarhaeuser entfernt werden. Dafuer sorgt diese Funktion.
+
+NeuesHaus() - traghaus.c
+ Ein neues Seherhaus wird geschaffen: es wird im ObjectDaemon angemeldet,
+ die Truhe wird im Eingangsraum plaziert, und die "HAEUSER"-Datei wird auf
+ den neuesten Stand gebracht.
+ Wenn Du zu Testzwecken ein Haus haben willst, kannst Du die Funktion auch
+ von Hand aufrufen.
+
+NeuerRaum() - sb_ausgabe.c
+ Einem Haus wird ein neuer Raum hinzgefuegt.
+ Maximal sind 10 Raeume (raum0-raum9) erlaubt.
+
+_LadeHaus() - virtual_compiler.c
+ Wenn der potentielle Besitzer wirklich ein Haus hat und sich dessen
+ Environment laden laesst, wird das Haus erstellt und zuruekgegeben.
+
+_LadeRaum() - virtual_compiler.c
+ Aehnlich wie _LadeHaus(), nur fuer den Raum mit der gewuenschten Nummer.
+ Beim Eingangsraum wird noch der Ausgang nach draussen gesetzt.
+
+FindeHaus() - hausverwalter.c, sb_antrag.c, hausmeister.c, /std/player/base.c
+ Gibt das Hausobjekt zurueck oder 0, falls der Spieler kein Haus hat.
+ Das Haus wird ggf. geladen.
+
+LoescheHaus() - hausmeister.c
+ Ein Haus wird abgerissen: Es wird im ObjectDaemon abgemeldet, saemtliche
+ Savefiles werden geloescht, ebenso das .rep-File des Hausbesitzers.
+
+ Rueckgabewerte:
+ 1 - alles OK, das Haus ist weg
+ -1 - secure() schlug fehl.
+
+VerlegeHaus() - hausmeister.c
+ Ein Haus wird an einen neuen Ort verlegt: Es wird im ObjectDaemon ab- und
+ am neuen Ort wieder angemeldet, und der Ausgang nach draussen wird
+ angepasst.
+
+ Rueckgabewerte:
+ 1 - alles Ok, das Haus steht jetzt woanders
+ -111 - secure() schlug fehl.
+ -1 - der angebliche Besitzer hat gar kein Haus
+ -2 - das Haus steht gar nicht da, wo es sein sollte
+ -3 - der Zielraum existiert nicht
+ -4 - im Zielraum kann nicht gebaut werden
+ -5 - es gibt Ausgaenge in benachbarte Seherhaeuser (diese werden beim
+ Verlegen nicht automatisch geloescht; das muss der Hausbesitzer
+ selbst machen)
+
+Unbebaubar() - hausverwalter.c, traghaus.c
+ Diese Funktion ermittelt, ob in einem Raum ein Haus gebaut werden kann, und
+ wenn nein, warum nicht.
+
+ Rueckgabewerte:
+ 0 - OK, es darf gebaut werden
+ 1 - der Zielraum ist entweder ein geclontes Objekt (und damit zumindest
+ nach dem naechsten Reboot auf immer verloren) oder ein Objekt, dass
+ von einem virtual_compiler erzeugt wurde (der ObjectDaemon wird zu
+ einem Zeitpunkt abgefragt, an dem das VC-Objekt noch nicht seinen
+ endgueltigen Namen hat).
+ 2 - Im Zielraum ist P_INDOORS gesetzt (wenn in so einem Raum trotzdem
+ gebaut werden soll, weil es zum Beispiel eine grosse Hoehle o.ae.
+ ist, kann man P_INDORRS immer noch temporaer auf 0 setzen).
+ 3 - Im Zielraum ist P_HAUS_ERLAUBT nicht gesetzt.
+
+Erlaube() - raum0.c
+ Einem oder mehreren Spielern werden Sonderrechte im Haus eingeraeumt.
+ Zurueckgegeben wird die neue erlaube-Liste.
+
+Verbiete() - raum0.c
+ Einem oder mehreren Spielern werden die Rechte entzogen.
+ Zurueckgegeben wird die neue erlaube-Liste.
+
+HausProp() - haus.c, raum.c, raum0.c, sb_antrag.c, hausmeister.c
+ Mit dieser Funktion koennen die Informationen ueber einen Hausbesitzer
+ abgefragt werden. Moeglich sind:
+ HP_ENV - der Raum, in dem das Haus steht
+ HP_ROOMS - die Zahl der zusaetzlichen Raeume, ueber die das Haus verfuegt
+ HP_ALLOWED - Array mit den Leuten, die Sonderrechte geniessen
+
+PCrunch() - raum.c, losa.c, hausmeister.c
+ Um Platz beim Speichern zu sparen, werden Details, ReadDetails und Befehle,
+ die den gleichen Text ergeben, zusammengepackt. Beim Hausmeister hat das
+ den Effekt, dass im generierten Quelltext z.B.
+ AddDetail( ({ "foo", "bar" }), "blafasel\n");
+ steht anstelle von
+ AddDetail( "foo", "blafasel\n");
+ AddDetail( "bar", "blafasel\n");
+
+3. Sonderrechte
+===============
+
+Der Hausbesitzer kann von seinem Eingangsraum aus anderen Leuten Rechte in
+seinem Haus einraeumen. Dazu dient der Befehl "erlaube". Leute mit Sonder-
+rechten koennen:
+- das Haus auf- und abschliessen
+- die Truhe oeffnen (schliessen darf sie jeder)
+- netztot im Haus bleiben
+- Rueckmeldungen aus dem Reportfile ansehen (aber nicht aendern)
+
+Ausserdem muss man Sonderrechte in einem Nachbarhaus haben, wenn man von
+seinem Haus einen Ausgang dorthin legen will.
+
+Das Array mit den Namen der Berechtigten erhaelt man vom Hausverwalter per
+HausProp(<owner>, HP_ALLOWED). In dem Array stehen die User-IDs der Leute,
+allerdings mit grossem Anfangsbuchstaben.
+
+4. Die Tools
+============
+
+4a. Der Hausmeister
+-------------------
+
+Der Hausmeister erlaubt das einfache Abreissen und Verlegen von Haeusern
+sowie das Generieren von LPC-Quelltext aus den Savefiles. Dazu stellt er
+drei Kommandos zur Verfuegung:
+
+verlege <name> nach <ziel>
+ Das Haus des Spielers <name> wird in den Raum <ziel> verlegt. <ziel> ist
+ dabei entweder der Filename des Zielraumes oder "hier", wenn das Haus
+ zu Deinem aktuellen Standort verlegt werden soll.
+ Sollte das Verlegen fehlschlagen (siehe VerlegeHaus() im Hausverwalter)
+ meldet sich der Hausmeister entsprechend.
+
+reisse <name> ab
+ Das Haus des Spielers <name> wird abgerissen.
+ ACHTUNG! Es gibt keine Sicherheitsabfrage!
+
+generiere <name> [<nr>] [soft | ganz]
+ Generiert aus dem Savefile ein LPC-File.
+ Ohne Angabe einer Nummer wird die Aussenansicht generiert, ansonsten der
+ Raum mit der entsprechenden Nummer.
+ Ausser wenn "soft" angegeben wurde, werden die Dateien in das Verzeichnis
+ "rep/" geschrieben, und zwar als "<name>haus.c", "<name>raum0.c" etc.
+ Befindet sich die Truhe in dem generierten Raum, wird auch noch eine Datei
+ "<name>truhe.c" angelegt.
+ Die Dateien sind im wesentlichen fuer Magier gedacht, die ihre Haeuser als
+ LPC-Files unter Eigenregie weiterfuehren wollen/sollen. Ausgaenge sind
+ relativ zu "/players/<name>/seherhaus".
+ Mit dem Parameter "ganz" laesst sich das gesamte Haus auf einen Schlag
+ umwandeln.
+ "soft" stammt noch aus der Zeit, als ich die Typos der Seher selber fixen
+ musste. Das Haus oder der Raum wird dabei in die Datei PATH+"fixed.c"
+ geschrieben.
+
+4b. liste.c
+-----------
+
+Ab und zu sollte man mal nachsehen, welche Seher sich geloescht haben oder
+zu Magiern wurden. Die Haeuser von geloeschten Sehern sollten ebenfalls
+geloescht werden; Magier koennen ihre Haeuser als normale LPC-Objekte
+weiterfuehren (sobald die Level 21 oder 25 haben).
+
+Die Liste zeigt an, welche Leute betroffen sind. Dazu muss sie einfach nur
+geladen werden.
+
+Zwei Ausnahmen gibt es:
+- Krigi hat sich zwar geloescht, er hat aber darum gebeten, dass sein Haus
+ weiter bestehen kann (er ist jetzt Dauergast)
+- Fraggle ist zwar Magier, hat sein Haus aber mal zu Testzwecken bekommen
+
+4c. haustool.c
+--------------
+
+Dieses Teil ist mittlerweile ueberholt; es stammt noch aus der Zeit, als
+'typo'- und aehnliche Meldungen noch in meinem eigenen .rep-File landeten
+und ich den Kram auch abarbeiten musste. Mit dem Tool konnte ich die Mel-
+dungen aus meinem .rep-File ansehen und eine Benachrichtigung an den Haus-
+besitzer generieren.
+
+
+5. Das Haus
+===========
+
+Das Haus selbst zerfaellt, was die Beschreibungen angeht, in drei grosse
+Bereiche: den von aussen sichtbaren Teil, die Raeume im Inneren, und die
+Truhe. Bei den Raeumen hat der Eingangsraum noch ein paar Sonderfunktionen.
+
+5a. Aussenansicht
+-----------------
+
+Dies ist das Objekt, das im ObjectDaemon angemeldet wird ("<name>haus").
+Der Hausbesitzer kann folgende Eigenschaften beschreiben:
+- die Langbeschreibung (P_LONG)
+- eine Zeile, wie die Haustuer aussehen soll (H_DOOR)
+- die Zustaende der Haustuer (offen, geschlossen, abgeschlossen; H_DOORLSTAT)
+
+Ausserdem stehen folgende Kommandos zur Verfuegung:
+- betritt/betrete <haus>
+ Sollte klar sein. Geht nur, wenn das Haus offen ist.
+- klopfe an <haus> an
+ Das Klopfen hoert man im ganze Haus
+- notiz <text>
+ Der Hausbesitzer kann damit eine kurze Notiz an der Haustuer anbringen.
+
+modules/haustuer.c stellt die Befehle zum Oeffnen und Schliessen des Hauses
+zur Verfuegung. Aufgeschlossen werden kann das Haus nur von Leuten mit
+spezieller Genehmigung.
+
+Wenn die Kurzbeschreibung geaendert werden soll, muss das ein Magier machen.
+Offizieller Ansprechpartner dafuer ist der Hausmaintainer (also DU :-)
+Man sollte dabei darauf achten, dass die Beschreibung a) in die Umgebung und
+b) allgemein in eine Fantasywelt passt (das ist leider nicht bei allen
+Haeusern der Fall...)
+Wenn die Kurzbeschreibung geaendert wird, sollten ggf. auch noch die IDs, der
+Name und das Geschlecht angepasst werden.
+Um ein Haus unsichtbar zu machen, muss P_SHORT auf 0 gesetzt werden.
+Wenn noch andere Seherhaeuser im gleichen Raum stehen, und in der Beschrei-
+bung des geaenderten Hauses nichts mehr auf ein "haus" hinweist, kann und
+sollte die ID "haus" entfernt werden.
+Um die Aenderungen zu sichern, muss im Haus Save() aufgerufen werden.
+
+Zwei IDs sollten nie entfernt werden: "sehe\rhaus" und "\n<name>haus"
+
+
+5b. Die Raeume
+--------------
+
+Programmtechnisch befinden sich hier hauptsaechlich Funktionen zum Beschrei-
+ben des Raumes, Hinzufuegen und Entfernen des Lichtes, An- und Abschalten
+des Lichtes und Einsehen des .rep-Files.
+Ausserdem kann man Personen, Gegenstaende oder alles aus dem Haus werfen.
+
+Auch die Raeume haben die ID "sehe\rhaus".
+
+Erwaehnenswerte Funktionen:
+
+normstr()
+ Ersetzt @@ in den Beschreibungen durch ** (damit kein process_string()
+ ausgefuehrt werden kann)
+
+brk()
+ Erzeugt aus einer durch Kommata getrennten Liste ein Array von Strings
+
+befCheck()
+ Faengt verbotene Befehle ab (Kommandos, die Leerzeichen enthalten; nicht
+ gesetzte Ausgaenge; alle Kommandos, die der Raum definiert, ausser
+ "oeffne", "schliess", "schliesse")
+
+owner_check()
+ Darf der Spieler das? Falls ohne Argument aufgerufen, ist die Aktion nur
+ erlaubt, wenn this_player() der Hausbesitzer ist.
+ Mit Argument wird auch die erlaube-Liste geprueft.
+
+arr_out()
+ Gibt ein Array von Strings aus oder zurueck, je nach Anwendung
+
+clean_up()
+ Sorgt dafuer, dass nur leere Raeume weggeraeumt werden
+
+BecomesNetDead()
+ Netztote verlassen das Haus (soweit sie nicht auf der erlaube-Liste stehen)
+
+init()/int_long()
+ Meldungen ueber unsichtbare Magier
+
+lies()
+ ReadDetails werden mit More() ausgegeben
+
+Die Befehle zur Beschreibung darf nur der Hausbesitzer benutzen. Den Befehl
+"uebersicht" koennen auch die Magier, die im access_rights.c stehen, ver-
+wenden.
+Naeheres zu den moeglichen Beschreibungen folgen unten.
+
+
+5c. Der Eingangsraum
+--------------------
+
+Der Eingangsraum stellt zusaetzlich noch folgende Befehle und Moeglichkeiten
+zur Verfuegung:
+
+- Oeffnen, Schliessen und Abschliessen des Hauses von innen
+- Einraeumen und Entziehen von Sonderrechten mit "erlaube" und "verbiete"
+- Benutzen des Gucklochs in der Tuer mit dem Befehl "spion"
+- Mitteilung ueber angesammelte 'typo'-Meldungen seit dem letzten Betreten
+- "uebersicht" zeigt zusaetzlich die Leute auf der erlaube-Liste
+
+
+5d. Die Truhe
+-------------
+
+Die Truhe kann unendlich viele Gegenstaende aufnehmen.
+Aendern lassen sich Geschlecht, Name, Adjektive (aus diesen dreien wird die
+Kurzbeschreibung zusammengesetzt), IDs, Langbeschreibung und Material.
+Die ID "\t\ruhe" ist IMMER gesetzt.
+Die Truhe laesst sich innerhalb des Hauses frei verschieben. In dem Raum,
+in dem sie steht, ist die Property H_CHEST auf 1 gesetzt.
+Typomeldungen der Truhe gehen in das Reportfile des Hausbesitzers.
+
+Problem: Ab und zu geben einige Spezialisten bei der Beschreibung der IDs
+schon die Langbeschreibung ein. Danach koennen sie die Truhe nicht mehr
+ansprechen.
+Loesung: Von Hand eine ID setzen und die Truhe mit Save() speichern.
+
+Ideen: Zustand der Truhe (geoeffnet/geschlossen) beschreibbar machen und
+optional ganz weglassen. Machbar ueber H_DOORLSTAT. In short() sind schon
+die entsprechenden Vorkehrungen getroffen; "beschreibe truhe status" wird
+auch schon abgefragt, aber noch nicht ausgewertet. Ausserdem muesste die
+Kurzbeschreibung dann explizit angegeben werden.
+
+Oeffnen koennen die Truhe nur Leute mit Erlaubnis. Schliessen kann sie
+jeder. Verschieben kann sie nur der Hausbesitzer.
+
+Die Daten der Truhe werden in _set_owner() geladen. Dieser Funktion wiederum
+wird von dem Raum aufgerufen, in dem die Truhe steht (modules/losa::Load()).
+
+
+6. Seherbank/Hauserwerb
+=======================
+
+Die Bank steht in Drachenhort. Wesentliche Bestandteile sind drei Schalter
+mit entsprechenden Warteschlangen.
+
+Der Antragsschalter - sb_antrag.c
+ Hier erhaelt man die Vertraege fuer ein Haus oder einen neuen Raum. Einen
+ Ausbauvertrag bekommt man allerdings erst dann, wenn das Haus schon steht.
+ Vertraege werden nur an Seher ausgehaendigt, die keinen PK haben.
+
+Der Vertrag - bausparvertrag.c
+ Erhaeltlich am Antragsschalter.
+ Der Vertrag muss auch am Antragsschalter unterschrieben werden. Die Unter-
+ schrift wird mit Blut bestaetigt, wodurch ein reduce_hit_point(50) faellig
+ wird. ;)
+ Auf ihm wird jede eingezahlte Rate vermerkt.
+ Will man doch kein Haus, kann man den Vertrag jederzeit zerreissen. Die
+ eingezahlten EP sind dann allerdings weg.
+ Nach der Unterschrift bekommt man den Master-Block ueberreicht.
+
+Der Master-Block - block.c
+ Der Block nimmt die aktuellen Raten auf. Dazu dient der block_shadow
+ (in /std/player/shadows/), der immer dann aktiviert wird, wenn man den
+ Block anzieht (er ist eine AT_MISC-Ruestung, schuetzt also nicht).
+ Der Shadow leitet AddExp()-Aufrufe an dem Block um. Bei mindestens
+ 30-40 EP wird alles bis auf den Mindestanteil auf den Block eingezahlt,
+ und der Mindestanteil kommt dem Spieler zugute.
+
+Der Einzahlungsschalter - sb_einzahlung.c
+ Ist die Master-Block voll, kann man ihn hier vorlegen. Die Rate wird dann
+ auf den Vertrag gebucht, und man bekommt einen neuen Block fuer die
+ naechste Rate (soweit man noch nicht fertig ist).
+
+Der Ausgabeschalter - sb_ausgabe.c
+ Hat man alle Raten eingezahlt, kann man hier nach Vorlage des Vertrags die
+ Fruechte seiner Arbeit ernten.
+ Handelte es sich um einen Hausvertrag, bekommt man ein Instanthaus ausge-
+ haendigt.
+ Handelte es sich um einen Ausbauvertrag, wird die Raumzahl des Hauses um
+ eins erhoeht (man bekommt kein Objekt in die Hand; vielmehr kann man in
+ seinem Haus jetzt einen Ausgang in den neuen Raum legen).
+ ALLERDINGS: Um Haus oder Raum auszugeben, muessen in der Zentralbank
+ mindestens 30000 Muenzen vorhanden sein (damit deckt die Seherbank die
+ Materialkosten). Solange nicht genug Geld da ist, gibts auch kein Haus.
+ Der Seher hat zwei Alternativen: a) warten, bis genug Geld da ist, oder
+ b) zum Ende der Welt reisen und das Geld in den Geldspeicher der Zentral-
+ bank werfen.
+
+Eine Rate umfasst 80000 EP.
+Es gibt zwei Vertragsvarianten: sanft und schnell.
+Bei der sanften Variante hat man 4 Stunden Zeit, um die Rate zu sammeln, bei
+der schnellen Variante sind es 2 Stunden.
+Diese Zeiten werden nach Online-Zeit gemessen, nicht nach RL-Zeit. :)
+Fuer ein Haus benoetigt man bei den sanften Variante 30 Raten, bei der
+schnellen Variante 25 Raten.
+Fuer einen Raum sind es 12 Raten bei der sanften und 10 Raten bei der
+schnellen Variante.
+Ueberzieht man die Zeit, erhoeht sich die Ratenhoehe um 60% auf 128000 EP.
+Man hat bei beiden Varianten eine Stunde Zeit, die Rate noch zu erfuellen.
+Schafft man es nicht, verfaellt der Vertrag => alles ist weg.
+Das Zeitlimit gilt nur fuer das Fuellen des Blocks. Wenn er erst man voll
+ist, braucht man nicht innerhab des Limits zur Bank, um den naechsten
+Block zu holen.
+
+7. Beschreibungen
+=================
+
+Folgende Aspekte der Raumbeschreibung lassen sich veraendern:
+
+- Details "beschreibe detail <det>" P_DETAILS
+- ReadDetails "beschreibe lesbares detail <det>" P_READ_DETAILS
+- Langbeschr. "beschreibe haus/raum lang" (auch aussen) P_(INT_)LONG
+- Kurzbeschr. "beschreibe haus/raum kurz" P_INT_SHORT
+- Ausgaenge "ausgang <richtung> <nr>" / "sperre richtung" P_EXITS
+- Licht "licht an/aus" P_LIGHT
+- Befehle "beschreibe befehl <bef>" H_COMMANDS
+
+Details, ReadDetails und Befehle lassen sich auch kopieren, allerdings immer
+nur innerhalb der jeweiligen Propertygruppe (es laesst sich also kein Detail
+zu den ReadDetails kopieren).
+
+Ausserdem lassen sich Details, ReadDetails, Befehle und die Langbeschreibung
+aendern. Das laeuft aehnlich wie beim Beschreiben, allerdings wird der
+aktuell vorhandene Text als Vorgabe verwendet.
+
+
+7a. Details/ReadDetails/Lang- und Kurzbeschreibung
+--------------------------------------------------
+
+Hier passiert nicht viel mit dem eingegebenen Text. @@ werden durch **
+ersetzt, damit nicht aus Versehen oder beabsichtigt process_string()
+ausgeloest wird.
+
+Bei der Kurzbeschreibung wird noch geprueft, ob sie laenger als 75 Zeichen
+oder eine Zeile ist (falls ja, wird sie nicht uebernommen).
+
+Moegliche Erweiterungen: Rassenspezifische Details (das muss bisher ueber
+Bfehle gemacht werden), und da AddSmells()/AddSounds() jetzt "offiziell" in
+sind, vielleicht auch die Moeglichkeit, Gerueche und Geraeusche zu
+beschreiben.
+
+7b. Ausgaenge
+-------------
+
+Moegliche Ausgaenge sind die acht Himmelsrichtungen, "oben" und "unten".
+Legt man einen Ausgang an, wird automatisch im Zielraum ein Ausgang in die
+entsprechende Rueckrichtung angelegt.
+Das Anlegen klappt nur, wenn es noch keinen Ausgang in diese Richtung gibt,
+und im Zielraum noch keinen Ausgang in die Rueckrichtung.
+Soll ein Ausgang in ein benachbartes Seherhaus gelegt werden, muss man dort
+darueberhinaus auf der erlaube-Liste stehen.
+Beim Sperren eines Ausgangs wird der entsprechende Ausgang im Zielraum
+automatisch mit entfernt.
+
+Der Grund fuer dieses symmetrische Verhalten liegt darin, dass man auf diese
+Weise keine Spieler in seinem Haus einsperren kann (Ausgang in einen Raum,
+ohne dass es zurueck geht).
+Um die Ausgaenge einander einfach zuordnen zu koennen, sind auch keine selbst
+erfundenen Richtungen moeglich (koennte man allerdings implementieren, indem
+man explizit nach der Rueckrichtung fragt).
+
+
+7c. Licht
+---------
+
+P_LIGHT wird so gesetzt, dass es im Haus mit dem momentanen Lichtlevel gerade
+dunkel oder hell wird. Hat man also nen Gesamtlichtlevel von 20 (durch
+genuegend Lichtkugeln o.ae.) und macht "licht aus", wird P_LIGHT auf -20
+gesetzt.
+
+
+7d. Befehle
+-----------
+
+Um die Auswertung zu vereinfachen, werden die Platzhalter in den Befehls-
+texten in kuerzere Token umgewandelt (Funktion preparse()).
+Die Auswertung erfolgt von modules/usercmd.c aus.
+
+In preparse() werden im wesentlichen die Faelle fuer Namen, Personal- und
+Possessivpronomina in die Zahlen umgesetzt, die den entsprechenden
+Funktionen (name(), QueryPronoun(), QueryPossPronoun()) uebergeben werden.
+Ausgewertet werden sie von usercmd::ucFilter().
+
+Die Auswertung rassenspezifischer Texte muss angepasst werden, wenn neue
+Rassen ins MG kommen. Betroffen davon ist usercmd::ucText().
+Die rassenspezifischen Texte werden durch Platzhalter der Form @RX vonein-
+ander getrennt, wobei X ein Buchstabe fuer die Rasse ist.
+Bei einer neuen Rasse muesste dieser Buchstabe in der regexplode-Zeile am
+Anfang von ucText() in den eckigen Klammern eingefuegt werden, und eine
+entsprechende Abfrage in die switch()-Anweisung rein.
+Und natuerlich sollte die Hilfeseite ("befehl") geupdated werden :)
+
+Bisher sind reine Textausgabebefehle moeglich.
+Einige Seher haben sich weitere Moeglichkeiten gewuenscht, z.B. so etwas
+wie SpecialDetails oder SpecialExits. Dafuer muesste man Zustaende setzen
+und aendern koennen (Property H_VARS oder so?). Allerdings wird dadurch
+die Beschreibung an sich wieder komplizierter.
+
+
+8. Rueckmeldungen
+=================
+
+Die Raeume, die Aussenansicht des Hauses und die Truhe haben eine Funktion
+SmartLog(). Diese Funktion wird von /std/player/base::smart_log() aus auf-
+gerufen und uebernimmt das Loggen der Typo-, Idee- und Fehlermeldungen.
+Die Meldungen werden int "rep/<name>.rep" abgelegt.
+Der Hausbesitzer wird jeweils beim Betreten des Eingangsraumes informiert,
+wie viele Rueckmeldungen sich seit dem letzten Betreten angesammelt haben.
+Ansehen kann er sich die Meldungen mit dem Befehl "meldungen", und mit
+"aendere" oder "beschreibe" kann er die Typos beheben.
+Mit "aendere meldungen" kann er die abgearbeiteten Meldungen aus seinem
+.rep-File entfernen.
+
+
+9. Hilfeseiten
+==============
+
+Die "Arbeitsversionen" der Seiten liegen in doc/, die "offiziellen" Versionen
+in /doc/scmd.
+"beschreibe befehl" hat eine Extraseite ("hilfe befehl"), weil die Seite fuer
+"beschreibe" sonst zu gross waere.