
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
