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