RemoveExit()
============

FUNKTION
--------
::

     void RemoveExit(string|string* cmd);

DEFINIERT IN
------------
::

     /std/room/exits

ARGUMENTE
---------
::

     string/string* cmd
          Richtung(en), die entfernt werden sollen.

BESCHREIBUNG
------------
::

     Die in cmd angegebenen Ausgaenge werden wieder entfernt.

     Ist cmd = 0, so werden alle Ausgaenge entfernt.

BEMERKUNGEN
-----------
::

     Ausgaenge werden an der gleichen Stelle gespeichert:
     - RemoveExit() greift auf die gleichen Daten wie RemoveSpecialExit()
       zu, entfernt also auch spezielle Ausgaenge!

SIEHE AUCH
----------
::

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

31.01.2015, Zesstra

