Dokumentation zu: AddDoor(L)

HR Image


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)


Start » Magierhandbuch » Docu » Lfun » AddDoor Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!