FUNKTION:
public varargs void AddDoor(string cmd, string dest,
int state, int flags, mixed props, string dir,
mixed msgs)
DEFINIERT IN:
/std/room/doors.c
/sys/doors.h
ARGUMENTE:
cmd: Kommando fuer das Durchschreiten der Tuer
dest: Pfad des Zielraumes
state: Status der Tuer
flags: Tuer-Flags
props: Tuer-Properties
dir: Richtungs-String fuer die move-Messages (optional)
msgs: 3-teiliges Array fuer das Durchschreiten der Tuer (optional)
RÜCKGABEWERT:
keiner
BESCHREIBUNG:
AddDoor() ersetzt die alten NewDoor-Tueren.
Der Tuerstatus kann sein:
- DS_OPEN 1 // die Tuer ist offen
- DS_LOCKED 2 // die Tuer ist verschlossen
- DS_BROKEN 4 // die Tuer ist zerbrochen
- DS_DESTRUCTED 8 // die Tuer ist zerstoert
Wird kein Tuerstatus angegeben (also 0), ist die Tuer geschlossen.
Wenn die Tuer offen ist, wird ein entsprechender
Ausgang mittels AddExit(cmd, dest, dir, msgs) angelegt.
Die Tuer-Flags koennen sein
(fuer beide Seiten der Tuer einzeln setzbar!):
- DF_AUTO_CLOSE 1 // Schliessen in jedem Reset
- DF_AUTO_OPEN 2 // Oeffnen in jedem Reset
- DF_AUTO_LOCK 4 // Abschliessen in jedem Reset
- DF_AUTO_REPAIR 8 // Aufgebrochenes Schloss reparieren im Reset
- DF_AUTO_RENEW 16 // Demolierte Tuer erneuern in jedem Reset
- DF_CLOSE_PASS 32 // Schliessen nach Durchschreiten
- DF_CLOSE_PASS2 64 // Schliesse kurze Zeit nach Durchschreiten
// (noch nicht implementiert)
- DF_LOCKABLE 128 // Abschliessbar
- DF_LOCK_ALWAYS 256 // Abschliessen bei jedem Schliessen
- DF_UNBREAKABLE 512 // Schloss kann man nicht knacken (UNBENUTZT!)
- DF_DESTRUCTABLE 1024 // Tuer ist zerstoerbar (UNBENUTZT!)
- DF_KEY_NEEDED 2048 // Schluessel zum Oeffnen benoetigt (Knauf)
- DF_NO_ROOMDESC 4096 // Tuer hat keine Langbeschreibung im Raum
- DF_HIDDEN 8192 // Tuer ist versteckt
Bitte beachten:
Die Tuer wird automatisch DF_LOCKABLE, wenn sie DF_AUTO_LOCK
oder DF_LOCK_ALWAYS zusaetzlich gesetzt hat.
Die Flags DF_AUTO_REPAIR, DF_AUTO_RENEW und DF_CLOSE_PASS2 sind
noch nicht implementiert.
DF_CLOSE_PASS2 kann leicht mit Events geloest werden.
Die resetgesteuerten Flags (zB DF_AUTO_CLOSE) sollte man nur auf
einer Seite der Tuer setzen, da sie sonst 'doppelt so oft' wie
geplant geschlossen wird (naemlich beim reset() von beiden Raeumen
jeweils).
Tuer-Properties koennen sein:
- P_DESCR // per default auf 0
- P_NAME_ADJ // per default auf 0
- P_NAME // per default auf "Tuer"
- P_GENDER // per default auf FEMALE
- P_ARTICLE // per default auf ART_AUTO
- P_IDS // per default auf ({"tuer"})
- P_LONG // per default auf "Eine @@e "
// "Tuer ohne jegliche Beschreibung."
Fuer P_LONG darf auch eine closure angegeben werden.
dir und msgs sind optional anzugeben wie bei move().
BEMERKUNG:
Schluessel benoetigen eine Funktion mixed QueryDoorKey(). Der Rueck-
gabestring gibt die durch die Tuer verbundenen Raeume getrennt durch
zwei Doppelpunkte an.
Beispiel
mixed QueryDoorKey() {
return "/doc/beispiele/doors/raum_b::/doc/beispiele/doors/raum_c";
}
BEISPIELE:
Allgemeines:
Unter /doc/beispiele/doors sind Beispielraeume und ein
Beispielschluessel zu finden.
1. Beispiel:
// AddDoor ist varargs. Man muss nur das setzen, was man anders
// haben will
AddDoor( //Damit erzeugen wir die Tuer
"osten", // Die Tuerrichtung als
// Bewegungsrichtung
"/doc/beispiele/doors/raum_b", // Der Zielraum als Pfad (auch
// relativ moeglich z.Bsp: "./raum_b")
0, // Tuerstatus nicht setzen (bzw. 0)
// -> geschlossen
DF_AUTO_CLOSE); // Die Tuer wird in jedem Reset
// automatisch geschlossen
2. Beispiel:
// Ein Gartentor nach Sueden. Es steht offen und oeffnet sich bei
// jedem Reset. Es sind alle Properties individuell gesetzt.
AddDoor("sueden", "/doc/beispiele/doors/raum_c", DS_OPEN, DF_AUTO_OPEN,
([ P_NAME : "Gartentor",
P_NAME_ADJ : "knarrend",
P_DESCR : "nach Sueden",
P_LONG : "Eine @@es Gartentor welches in Raum C fuehrt.",
P_GENDER : NEUTER,
P_ARTICLE : ART_AUTO,
P_IDS : ({"tor","gartentor"})]),
"nach Sueden",
({ "Du schlenderst durch das Gartentor",
"&Name schlendert nach Sueden.",
"Durch das Gartentor kommt &name auf Dich zugeschlendert."}));
3. Beispiel:
Das Gartentor ist wieder AUTO_OPEN und abschliessbar und knackbar.
Wir setzen wieder eigne Messages beim Oeffnen und Schliessen.
AddDoor("norden", "/doc/beispiele/doors/raum_b", DS_OPEN,
DF_AUTO_OPEN|DF_LOCKABLE|DF_UNBREAKABLE|DF_LOCK_ALWAYS,
([ P_NAME : "Gartentor",
P_NAME_ADJ : "knarrend",
P_DESCR : "nach Norden",
P_LONG : "Eine @@es Gartentor welches nach Norden fuehrt.",
P_GENDER : NEUTER,
P_ARTICLE : ART_AUTO,
P_IDS : ({"tor","gartentor"})]));
SetDoorEventMsgs("norden", ET_DOOR_OPEN,
({"Du oeffnest das Gartentor. Es quietscht und knarrt.",
({"Das Gartentor quietscht, als &name es oeffnet.",
"Ein Windstoss erfasst das Gartentor. Quietschend oeffnet es "
"sich."}),
({"Das Gartentor wird von der anderen Seite geoeffnet.",
"Quietschend oeffnet sich das Gartentor."})}));
// Das gleiche noch fuer den Schliess-Event
SetDoorEventMsgs("norden", ET_DOOR_CLOSE,
({"Du schliesst das Gartentor. Es quietscht und knarrt.",
({"Das Gartentor quietscht, als &name es schliesst.",0}),
({"Das Gartentor wird von der anderen Seite "
"geschlossen.",0})}));
SIEHE AUCH:
RemoveDoor(L), OpenDoor(L), CloseDoor(L), LockDoor(L), UnlockDoor(L),
HideDoor(L), QueryDoorDest(L), QueryPathDoor(L), QueryDoorLong(L),
QueryAllDoorLong(L), QueryDoorStatus(L), SetDoorStatus(L),
QueryDoorFlags(L), SetDoorFlags(L), QueryDoorProp(L), SetDoorProp(L),
SetDoorEventMsgs(L), QueryDoorEventMsgs(L), QueryDoorName(L), doors(WL)
|