CONCEPT:
uhr.change
BESCHREIBUNG:
Dies ist eine Detailseite zu uhr(WL). Fuer allgemeine Informationen
siehe erstmal dort.
Wenn die Sonne auf- oder untergeht sowie bei der jeweils etwa
fuenf Minuten vorher anfangenden Daemmerung bekommen die
Spieler einen entsprechenden Text ausgegeben, solange sie nicht
in einem geschlossenen Raum sind. Das heisst, es darf nicht
P_INDOORS gesetzt sein, oder wenn es gesetzt ist, muss gleichzeitig
auch P_SEE_LIGHT wahr sein.
Es gibt also eigentlich vier verschiedene Texte, die mudweit erstmal
wie folgt sind:
MORN: "Der Tag bricht an."
DUSK: "Der Abend daemmert..."
EVEN: "Die Nacht bricht herein."
DAWN: "Dem Morgen graut..."
Da das recht langweilig ist, wenn man diese nicht an die Situation
des Raums anpassen kann, gibt es dazu verschiedene Mechanismen zur
Aenderung der Texte. Diese sind unterschiedlich speziell, haben
dabei auch unterschiedliche Prioritaet. Von niedrieger nach hoher
Prioritaet sortiert sind dies:
- Standardmeldung (s.o.)
- Zeitzonenspezifische Meldung
- Verzeichnisstruktur-spezifische Meldung
- Raumspezifische Meldung
Im Folgenden wird auf jede der Moeglichkeiten in dieser Reihenfolge
eingegangen. Wichtig ist es zu wissen, dass wenn eine Moeglichkeit
mit hoeherer Prioritaet einen aktuellen Ausgabetext bestimmt, alle
anderen nicht zum Zuge kommen. Liefert eine Moeglichkeit allerdings
nur Meldungen fuer zB MORN und EVEN, so wird weiter nach anderen
Quellen gesucht, wenn gerade DAWN ausgegeben werden soll.
Daran anschliessend sind noch einige Hinweise zur Erzeugung der
Texte zu finden.
Zeitzonenspezifische Meldung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jede der Zeitzonen kann eigene Meldungen definieren, die den
mudweiten Standard ueberdecken. Dies ist besonders deswegen
sinnvoll, da die Raeume in einer Zeitzone normalerweise ein
raeumlich zusammenhaengendes Gebiet sind, auch wenn sie ueber
verschiedene Verzeichnisse verstreut abgelegt wurden.
Hier kann also ein Regionsmagier mit sehr wenig Aufwand ein
komplettes Gebiet gestalten, und dies vor allem an einem
zentralen Punkt - wenn eine Aenderung noetig ist, so muss nur
eine Stelle bearbeitet werden, nicht duzende oder hunderte von
Dateien.
Die Meldungen sind in /sys/uhr.h abgelegt und koennen nur von
entsprechend berechtigten Personen geaendert werden, also in
der Regel Erzmagier und hoeher. Der Aenderungswunsch sollte
vom verantwortlichen Regionsmagier kommen, dem die Zeitzone
gehoert.
Verzeichnisstruktur-spezifische Meldung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Legt man in ein Verzeichnis die Datei light_change.init,
so gilt fuer alle Raeume in dieser Datei, sowie fuer alle
Raeume in dessen Unterverzeichnissen die dort angegebene Info.
Eine solche Datei in /d/wunderland beeinflusst also alle Raeume
in der Region, eine weitere in /d/wunderland/kogida hebt die
Aenderungen fuer alle Raeume in Kogida wieder auf oder besser
gesagt ueberschreibt die Aenderungen durch neue Aenderungen
(ein echtes Aufheben ist nicht moeglich).
Hierbei wird jedoch immer verzeichnisbasiert vorgegangen. Liegt
also eine Wiese, die sich in Kogida befindet, im Verzeichnis
/d/wunderland/bluelight/room, so wird deren Text selbstverstaendlich
nur von /d/wunderland/light_change.init beeinflusst, nicht aber
von /d/wunderland/kogida/light_change.init !
Der Aufbau der Datei ist recht einfach. Es werden immer nur die
ersten vier Zeilen der Datei beachtet (weiter unten koennte man
Kommentare unterbringen). Jede Zeile steht fuer einen Lichtwechsel-
Zustand: die erste Zeile fuer MORN, die zweite fuer DUSK usw.
Leerzeilen gelten dabei als 'hier soll keine Aenderung erfolgen',
es bestimmen also naeher zur Verzeichniswurzel liegende light_change
Dateien, die zeitzonenbestimmte Meldung oder der mudweite Standard
die Texte. Ebenso verhaelt es sich, wenn die Zeile gar nicht
existiert (die Datei hat nur drei Zeilen: DAWN ist unbeeinflusst
durch diese Datei. Leerzeile heisst uebrigens in diesem Zusammenhang,
dass auch keinerlei 'whitespaces' (Leerzeichen, Tabulator) enthalten
sein duerfen.
Moechte man einen Umbruch in einem der Texte einbauen, so ist dies
durch ein \n im Text moeglich. Dies ist nicht mit "\n" in LPC
zu verwechseln, sondern entspricht in LPC "\\n". Wem das jetzt
nichts sagt: Macht nichts, einfach '\' und 'n' im Editor eintippen.
Es gibt zZ allerdings keine Moeglichkeit ein \n im Text unterzu-
bringen, ohne dass es so interpretiert wird (kein Escape vorhanden);
jedoch sollte es kaum Texte geben wo das erforderlich waere.
Siehe hierzu auch das Beispiel unten.
Fuer etwas kompliziertere Faelle kann eine erweiterte Syntax
benutzt werden. Diese ist der Uebersichtlichkeit wegen in der
eigenen Seite uhr.changefile(WL) erlaeutert.
Weiterhin ist es sehr wichtig die Datei im 'Unix-Format' zu
speichern, also nicht mit ^M von M$DOS o.ae. Ggf sollte man die
Dateien nach dem Heraufladen mit einem Tool umwandeln (zb 'dos2unix'
des Ztools).
Raumspezifische Meldung
~~~~~~~~~~~~~~~~~~~~~~~
Die spezifischste Moeglichkeit, die auch die hoechste Prioritaet
hat, erfolgt durch im Raum abgelegte Informationen - in der Eigenschaft
P_LIGHT_CHANGE. Dort abgelegte Meldungen gelten nur fuer diesen
einen Raum. Damit kann man sehr genau vorgehen, andererseits
hat man auch sehr viel Arbeit. Wie die Daten aussehen muessen, ist
in der Hilfe zu der Eigenschaft beschrieben, so dass hier nicht
naeher darauf eingegangen werden soll.
HINWEISE:
Die Texte werden von der Uhr selbst umgebrochen und an die Spieler
ausgegeben. Es sollten in der Regel Texte ohne interne Umbrueche
sein, ausserdem duerfen sie keine Sonderzeichen wie Farbattribute
enthalten.
Die raumspezifische Meldung koennte einen Magier dazu verleiten,
die Eigenschaft zu missbrauchen. Es sind nur (!) Texte abzulegen,
diese duerfen sich insbesondere nicht von Abfrage der Eigenschaft
zu Abfrage aendern. Die Abfrage darf keine Nebeneffekte ausloesen,
da einerseits nicht garantiert wird, dass ein Spieler im Raum ist
und andererseits nicht garantiert wird, dass sie immer aufgerufen
wird, da die Texte in der Uhr gepuffert werden! Es ist durchaus
moeglich (und realistisch), dass die Eigenschaft in der Zukunft
Nebeneffekte aktiv verhindert.
Moechte man soetwas umsetzen, so sollte man doch die speziell
dafuer bereitgestellten Methoden benutzen, die in uhr(WL) be-
schrieben werden.
BEISPIEL:
Hier mal ein Beispiel fuer eine light_change.init Datei. Sie ist
eingerueckt, damit sie zum Format der Hilfeseite passt. Jeder
Zeilenanfang ist durch ^ markiert. Dies ist nur fuer die Hilfeseite
so, die Zeichen muss man weglassen!
---
^Du raekelst Dich schlaefrig.
^
^Es wird immer dunkler.\nDu wirst muede.
---
Die Datei hat nur 3 Zeilen, also wird DAWN nicht beeinflusst.
Weiterhin ist die 2. Zeile leer, also wird auch DUSK nicht
veraendert. Beim Tagesanbruch wird "Du raekelst Dich schlaefrig."
ausgegeben; beim Nachtanbruch zwei Zeilen, einmal
"Es wird immer dunkler." und "Du wist muede.".
SIEHE AUCH:
uhr(WL), P_TIMEZONE, P_LIGHT_CHANGE, uhr.changefile(WL)
|