SetDoorStatus()
===============

FUNKTION
--------
::

     void SetDoorStatus(string dest, int status);

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

     /obj/doormaster.c

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

     <dest>   = Zielraum der Tuer.
     <status> = Der neue Zustand der Tuer.

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

     Der Zustand der Tuer, die von diesem Raum nach <dest> fuehrt, wird auf
     <status> geaendert. Hierbei muss <status> einer der drei folgenden Werte
     aus <doorroom.h> sein:

       D_STATUS_LOCKED - Tuer abgeschlossen
       D_STATUS_CLOSED - Tuer geschlossen
       D_STATUS_OPEN   - Tuer geoeffnet

RUECKGABEWERT
-------------
::

     keiner

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

    NewDoor(), QueryDoorKey(), QueryDoorStatus(), P_DOOR_INFOS,
    /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()


Letzte Aenderung: Don, 08.05.2014, Gabylon

