blob: 194515741dbd655a6f1a5941741991f85026cc48 [file] [log] [blame]
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.