AddExit()¶
FUNKTION¶
void AddExit(string|string* cmd, closure|string dest);
DEFINIERT IN¶
/std/room/exits
ARGUMENTE¶
string/string* cmd
die Richtung(en), in die der Ausgang fuehrt
string/closure dest
das Ziel des Ausgangs mit Text/Closure
BESCHREIBUNG¶
Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Die Art des
Ausgangs haengt ab von dest:
- ein String:
- mit einem Dateinamen:
Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet.
- der Form "<msg>#dateiname"
Der Ausgang fuehrt in den Raum, den der Dateiname bezeichnet,
bei der Benutzung wird jedoch statt "<name> geht nach <richtung>"
"<name> geht nach <msg>" ausgegeben.
- eine Closure:
Die Closure wird bei Nutzung des Ausgangs aufgerufen. Das entspricht
eine SpecialExit - in der gerufenen Funktion muss man den Spieler
selbst in den Zielraum bewegen.
Gegebenenfalls kann das durch AddCmd() ersetzt werden.
BEMERKUNGEN¶
Man kann fuer den Dateinamen des Zielraumes auch einen relativen Pfad
angeben. Die Auswertung erfolgt nach folgendem Schema:
- "./<dateiname>"
Es wird ein Zielraum relativ zum gleichen Verzeichnis wie dieser
Raum angesprochen.
- "../<dateiname>"
Es wird ein Zielraum relativ zur Verzeichnisebene ueber der
dieses Raumes angesprochen (analog mit mehrerern "../..")
Mittels P_HIDE_EXITS kann man Ausgaenge verstecken.
Bei der Benutzung eines Ausgangs wird der Hook H_HOOK_EXIT_USE
ausgeloest.
BEISPIELE¶
### normale Ausgaenge ###
// Beim Kommando "sueden" kommt: "<name> geht nach Sueden."
AddExit("sueden", "/gilden/abenteurer");
// Beim Kommando "sueden" kommt: "<name> geht in die Gilde."
AddExit("sueden", "in die Gilde#/gilden/abenteurer");
### Ausgaenge mit relativen Pfaden ###
// Der Name des Raumes sei "/d/inseln/wargon/hafen1"
// Dieser Ausgang geht nach "/d/inseln/wargon/kneipe":
AddExit("norden", "./kneipe" );
// Und dieser nach "/d/inseln/anthea/anlege":
AddExit("sueden", "../anthea/anlege" );
### dynamische Ausgaenge ###
// ein Ausgang soll nur von Froeschen benutzbar sein:
static int lochfkt(string dir); // Prototyp
...
AddExit("loch", #'lochfkt);
// auch identisch zu:
// AddSpecialExit("loch", #'lochfkt); [eine Closure] oder
// AddSpecialExit("loch", "lochfkt"); [ein Funktionsname]
static int lochfkt(string dir) {
if (!(this_player()->QueryProp(P_FROG))) {
// Kein Frosch => passt nicht!
notify_fail("Du bist zu gross!\n");
return 0;
}
// Meldungen werden im move() gleich mitgegeben
return this_player()->move("/room/loch", M_GO, 0,
"huepft ins Loch", "huepft herein");
}
SIEHE AUCH¶
AddSpecialExit(), GetExits(),
RemoveExit(), RemoveSpecialExit(),
GuardExit(),
H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
ausgaenge
Letzte Aenderung: 22.12.2016, Bugfix