
AddSpecialExit()
****************


FUNKTION
========

   void AddSpecialExit(string|string* cmd, string|closure func);


DEFINIERT IN
============

   /std/room/exits


ARGUMENTE
=========

   string/string* cmd
        die Richtung(en), in die der Ausgang fuehrt
   string/closure func
        der Name der aufzurufenden Funktion/Closure


BESCHREIBUNG
============

   Es wird ein Ausgang in die Richtung(en) cmd eingefuegt. Wird der
   Ausgang benutzt, so wird die Closure bzw. Funktion func ausgefuehrt.

   AddSpecialExit(cmd, "func") entspricht:
   - AddExit(keys, #'func)


BEMERKUNGEN
===========

   In func muss man den Spieler selbst in den Zielraum bewegen. Im
   Erfolgsfall sollte man einen Wert >0 zurueckgeben, im Fehlerfall einen
   Wert <=0.

   func bekommt als Parameter einen String mit der gewaehlten
   Bewegungsrichtung uebergeben.


BEISPIELE
=========

   // ein Ausgang soll nur von Froeschen benutzbar sein:

   AddSpecialExit("loch", "lochfkt");
   // der gleiche Aufruf, nur anders:
   // static int lochfkt(string dir);         // Prototyp
   // ...
   // AddSpecialExit("loch", #'lochfkt);
   // auch identisch zu:
   // AddExit("loch", #'lochfkt);

   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
==========

   AddExit(), GetExits(),
   RemoveExit(), RemoveSpecialExit(),
   GuardExit(),
   H_HOOK_EXIT_USE, P_EXITS, P_HIDE_EXITS, /std/room/exits.c
   ausgaenge

Letzte Aenderung: 22.12.2016, Bugfix
