FUNKTION:
public int SetDoorStatus(string cmd, int state)
DEFINIERT IN:
/std/room/doors.c
/sys/doors.h
ARGUMENTE:
cmd: Kommando fuer das Durchschreiten der Tuer
state: Status-Flag(s), das/die gesetzt werden soll(en)
RÜCKGABEWERT:
0 (fehlerhafte argumente) oder 1 (ok, status geaendert)
BESCHREIBUNG:
Damit kann auch nachtraeglich der Status fuer eine Tuer
gesetzt bzw. veraendert werden.
Moegliche Flags sind:
- DS_OPEN 1
- DS_LOCKED 2
- DS_BROKEN 4
- DS_DESTRUCTED 8
Achtung, nicht alle Wert-Zusammenstellungen sind sinnvoll :-)
BEISPIEL:
Um den Status einer Tuer nach Sueden auf 'geknackt' (DS_BROKEN) zu
setzen, muss man das Flag mit dem bisherigen Status binaer
verknuepfen:
// alten Status ermitteln
int tuerstatus = raum->QueryDoorStatus("sueden");
// binaeres OR des alten status mit DS_BROKEN
tuerstatus |= DS_BROKEN;
// neuen Status setzen
raum->SetDoorStatus("sueden", tuerstatus);
BEACHTE:
Auf der sicheren Seite ist man immer, wenn man OpenDoor(L),
CloseDoor(L), LockDoor(L), UnlockDoor(L) oder direkt die Events
(ET_DOOR_OPEN, ET_DOOR_CLOSE, ET_DOOR_LOCK und ET_DOOR_UNLOCK)
verwendet, um den Tuer-Status zu veraendern. Dabei gibt man auch
anderen die Chance, darauf zu reagieren.
Bei Verwendung von SetDoorStatus: Immer den alten Status mit ver-
wenden beim Setzen eines neuen Status (wie im Beispiel), sonst kann
es sein, dass eine vorher offene Tuer hinterher ploetzlich
geschlossen ist.
Beim direkten Setzen bestimmter Flags (also ohne Events), sollte man
das im 'anderen Raum' zu dem die Tuer fuehrt, auch setzen. Bei
DS_OPEN ist es zum Beispiel wenig sinnvoll, wenn sie auf der einen
Seite offen und auf der anderen Seite geschlossen ist.
SIEHE AUCH:
AddDoor(L), OpenDoor(L), CloseDoor(L), LockDoor(L), UnlockDoor(L),
QueryPathDoor(L), QueryDoorLong(L), QueryAllDoorLong(L),
SetDoorStatus(L), QueryDoorFlags(L), SetDoorFlags(L), QueryDoorProp(L),
SetDoorProp(L), SetDoorEventMsgs(L), QueryDoorEventMsgs(L),
QueryDoorName(L), doors
|