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
