FUNKTION:
varargs void AddExit(mixed cmd, mixed room, mixed dest, mixed msgs)
ARGUMENTE:
cmd: Kommando oder Liste vom Kommandos, die durch den Ausgang
fuehren sollen (string oder string*)
room: Pfadname des Raumes, zu dem der Ausgang fuehrt (vergl. Bemerk.)
oder Closure.
dest: (optional) String der die Richtung des Ausgangs beim Durch-
schreiten darstellt (wenn 0 wird Richtung aus 'cmd' erstellt)
msgs: (optional) Meldungen die beim Durchschreiten des Exits ausge-
geben werden (string, string* oder closure)
BESCHREIBUNG:
Erzeugt in einem Raum einen neuen sichtbaren Ausgang, d.h. er wird
als 'sichtbarer Ausgang' mit der Langbeschreibung angezeigt. Gibt ein
Spieler das Kommando 'cmd' ein, wird er in den Raum 'room' bewegt.
Ist 'room' eine Closure wird diese mit dem eingegbenen Verb als
Argument aufgerufen. Das Moven und die Ausgabe der Meldungen an den
Raum oder Spieler muss diese Closure selbst uebernehmen. Die anderen
Argumente von AddExit() werden ignoriert. Die Closure muss bei Erfolg
als Returnwert 1 liefern.
Die Closure kann auch einen String zurueckliefern. Dieser wird dann
als Zielraum benutzt, als haette man ihn direkt in AddExit()
angegeben.
Sowohl der direkt angegebene Raumstring als auch der evt. von der
Closure zurueckgelieferte sollte immer mit '/' beginnen und niemals
mit ".c" enden. '..' sowie '.' wird korrekt ausgewertet. '~' oder
'~name' fuehrt in das Homedir des entsprechenden Magier in der
Domain oder in /players. '+domain' in eine andere Region etc...
Ist kein 'dest' angegeben oder dest==0 dann wird beim Durchschreiten
aus 'cmd' die Richtung erstellt. Wenn 'cmd' "norden" ist, kommt bei
sichtbaren Spielern: "<Name> geht nach Norden." Dies funktioniert je-
doch nur solange 'cmd' eine Himmelsrichtung oder "oben" bzw. "unten"
ist.
Ist 'dest' angegeben, muss es 0 oder ein String sein, der eine Rich-
tung darstellt. Bsp: "in das Void". Beim Durchschreiten des Exits
steht dann da: "<Name> geht in das Void."
Das Argument 'dest' ersetzt damit die _alte_ Form des 'room' Argu-
ments: "in das Void#/room/void". Die alte Form funktioniert vorerst
trotzdem noch.
Ist 'msgs' nicht angegeben, werden die standardmaessigen Movemel-
dungen wie eben geschildert ausgegeben. 'msgs' ist ein dreielemen-
tiges Array aus Strings:
({ Meldung an Spieler, Meldung an alten Raum, Meldung an Zielraum })
Ungebrauchte Elemente sind auf 0 zu setzen; das Array wird auto-
matisch mit 0-Elementen aufgefuellt, wenn es nicht 3 Elemente gross
ist.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ACHTUNG! Das Format von *msgs hat sich geaendert. Frueher setzt man:
({ "Du watest ins Void.", "watet ins Void" , "watet herein"})
Der Name des Spielers und Satzzeichen wurde dann automatisch ange-
fuegt. JETZT muss/kann man das selbst tun. Man erreicht das Beispiel
von eben so: ({ "Du watest ins Void.", "&Name watet ins Void." ,
"&Name watet herein."})
Ist '&Name' im String enthalten, wird der capitalized'te Name an
diese Stelle gesetzt. '&name' wird durch den Name ohne capitalize()
ersetzt.
Files, die vor Son, 18. Jul 1999, 00:00:00 Uhr geschrieben wurden
(file_date), werden momentan noch aufs neue Format gepatcht. Aendert
man etwas an dem File, MUSS(!!!) man die Messages korrigieren, da
sonst die Move-Messages etwas seltsam aussehen. gleiches gilt, wenn
die Meldungen von einer Closure erzeugt werden! Der Patch wird aber
nur uebergangsweise laufen, um nicht alle Exits auf einmal aendern
zu muessen.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Wird nur ein String anstelle eines Arrays angegeben, wird dieser als
'Meldung an Spieler' gewertet.
Wird eine Closure angegeben, muss diese einen String oder ein Array
fuer msgs zurueckgeben.
BEMERKUNG:
Normalerweise sollten verschiedene Kommandos auch in verschiedene Raeume
fuehren, also kein Array fuer cmd benutzt werden.
Standardrichtungen (norden nordwesten westen suedwesten sueden suedosten
osten nordosten oben unten) reagieren automatisch auch auf die ent-
sprechenden Kuerzel (n nw w ...)
Fuer Treppen die sehr langgezogen sind, also nach oben als auch nach
norden (zB) fuehren, bitte nicht zwei Exits benutzen (norden und oben)
- das verwirrt nur - sondern nur einen von beiden. Auch Konstrukte wie
"nordoben" sollten vermieden werden, da diese bei den Spielern nicht
auf Gegenliebe stossen.
MNPC MOVING:
Wenn P_MSG_FORCE gesetzt ist, werden die Meldungen in 'msgs' _NICHT_
ausgegeben und das P_MSGOUT des Livings wird _IMMER_ benutzt. Bei
Spielern ist das sinnlos. Bei MNPCs kann das sinnvoll sein, wenn die
Ausgaenge anders benutzen sollen, als Spieler. Zum Beispiel wuerde
AddExit("norden","/room/void","ins Void",
({ 0, "&Name watet ins Void." , "&Name watet herein."}) );
dazu fuehren, dass ein MNPC 'Fliege' nicht mehr ins Void fliegt,
sondern ins Void watet. :-) Will man das verhindern, muss man:
- Bei 'dest' die Richtung "ins Void" setzen.
- in der Fliege P_MSGOUT auf "fliegt" setzen.
- in der Fliege P_MSG_FORCE auf 1 setzen.
Dann kommt bei diesem Exit immer: "Die Fliege fliegt ins Void."
BEISPIELE:
AddExit("norden", "/room/void");
an den Raum: <Name> geht nach Norden.
AddExit("norden", "/room/void", "in das Void");
an den Raum: <Name> geht in das Void.
OBSOLET:
AddExit("norden", "in das Void#/room/void");
Alte Methode, gleiche Funktion wie letztes Beispiel.
AddExit("norden", "/room/void", 0, "Du stolperst nach Norden.");
an den Spieler: Du stolperst nach Norden.
an den Raum: <Name> geht nach Norden.
AddExit("norden", "/room/void", 0, ({"Du betrittst das Void.",
"&Name betritt ehrfuerchtig das Void.",
"&Name kommt ins Void."}));
an den Spieler: Du betrittst das Void.
an den Raum: <Name> betritt ehrfuerchtig das Void.
an das Ziel: <Name> kommt ins Void.
OBSOLET:
AddExit("norden", "/room/void", 0, ({"Du betrittst das Void.",
"betritt ehrfuerchtig das Void", "kommt ins Void"}));
Gleiches Beispiel wie eben, funktioniert aber nurnoch in Files,
die vor Son, 18. Jul 1999, 00:00:00 Uhr geschrieben wurden!
AddExit("norden", "/room/void", 0, ({"Du verschwindest ins Void.",
"Es knallt laut und &name fliegt ins Void.",
"&Name kommt ins Void."}));
an den Spieler: Du verschwindest ins Void.
an den Raum: Es knallt laut und <Name> fliegt ins Void.
an das Ziel: <Name> kommt ins Void.
AddExit("norden", #'myfun);
Die Closure myfun wird mit dem eingegebenen Verb als Argument aus-
gefuehrt. Ersetzt AddSpecialExit().
SIEHE AUCH:
P_EXITS, P_SPECIAL_EXITS, P_WIZ_EXITS, P_MSGIN, P_MSGOUT,
P_MSG_FORCE, RemoveExit(L), AddSpecialExit(L), RemoveSpecialExit(L),
AddWizExit(L), RemoveWizExit(L)
|