Lpc Manpages

STANDARDOBJEKT FUER RAEUME:

BENUTZUNG:
	inherit "std/room";
	
	#include <room.h>
	#include <properties.h>		// Fuer P_SHORT und P_LONG

BESCHREIBUNG:
	Ein Raum ist ein Objekt, das von Spielern oder anderen Lebewesen
	betreten werden kann. Er hat Lang- und Kurzbeschreibungen von
	innen und aussen (zum Beispiel bei Schiffen oder aehnliche Raeumen
        in Raeumen), die sich der Spieler je nach seinen Beduerfnissen
	anzeigen lassen kann (kurz/lang-Modus).

   Properties:

	P_INT_SHORT
		Kurzbeschreibung innerhalb des Raumes
	P_INT_LONG
		Langbeschreibung innerhalb des Raumes
	P_SHORT
		Kurzbeschriebung von aussen (nur noetig, wenn man den Raum
		auch wirklich von aussen sehen kann)
	P_LONG
		Langbeschreibung von aussen (siehe P_SHORT)
	Um Situationsbezogene Beschreibungen zu bekommen, kann man 
	int_short(), int_long(), short(), long() ueberschreiben, oder
	den process_string-Mechanismus verwenden (siehe entsprechende
	Dokumentation)

	P_LIGHT
		Lichtlevel des Raums (0 dunkel, 1 hell)
	P_INDOORS
		1 Wenn der Raum nicht im Freien ist
	P_TRANSPARENT
		Ist ungleich 0, wenn man in den Raum von aussen reinschauen
		kann, oder von innen nach aussen
	P_NO_TPORT
		Zum verhindern von Teleportversuchen in oder aus dem Raum
		(siehe auch /doc/properties.h)
	P_NOMAGIC
		Im Raum kann nicht gezaubert werden.
        P_TERRAIN
                Legt die Terrainart fest, die ein Raum besitzt. Die moeglichen
                Arten sind in /sys/room/terrain.h definiert.

   Funktionen:
        AddExit(mixed kmnd, mixed info)
		<kmnd> kann ein String sein oder eine Liste von Strings
		sein, mit denen als Kommandos der Spieler im Zielraum landen
                soll.
                <info> kann ein String oder ein Mapping sein. Ist es ein
                String, gibt dieser den Zielraum an. Ist es ein Mapping,
                kann man mit diesem zahlreiche weitere Informationen ueber
                den Ausgang festlegen, z.B. ob er bewacht (Guarded Exit) oder
                unsichtbar sein soll.
	RemoveExit(string|string* kmnd)
		<kmnd> ist ein String oder eine Liste von Strings, deren
		Ausgaenge entfernt werden sollen. Dabei muss man etwas vor-
		sichtig sein, da ein Spieler, der zum Zeitpunkt des Aufrufs
		im Raum ist, die Aktion fuer sich noch definiert hat.
		Also: Nur benutzen, wenn man weiss, was man tut!
	AddSpecialExit(string|string* kmnd, string funktion)
	RemoveSpecialExit(string|string* kmnd)
	AddGuardedExit(string|string* kmnd, string zielraum,
	RemoveGuardedExit(string|string* kmnd)
                Diese vier Funktionen sind veraltet und sollten nicht mehr
                verwendet werden.
	NewDoor(mixed cmds, string dest, mixed ids, mixed props)
		<cmds> ist ein String oder ein Array mit Befehlen, um durch
		die Tuer in den Raum <dest> zu gelangen. <ids> enthaelt einen
		String oder ein Stringarray mit den IDs der Tuer, Default ist
		"tuer". <props> ist ein Array mit zusaetzlichen Eigenschaften
		der Tuer, je als Paar Eigenschaftsnummer-Eigenschaft ausgelegt.
		Namen fuer die Nummern sind in <room/doors.h> definiert.
	GetExits()
		Gibt einen String mit den Ausgaengen des Raumes zurueck (z.B.
		'Es gibt zwei sichtbare Ausgaenge: sueden und norden.').
		GetExits kann man ueberschreiben, wenn man Ausgaenge 'unsichtbar'
		machen will. Dies ist gegenueber Ausgaengen per 'AddCmd' zu
		empfehlen, da Spieler durch 'AddCmd'-Ausgaenge nicht automatisch
		fliehen (Seher mittels 'fluchtrichtung' schon).
	
	Um Raeume interessanter zu machen, kann man ihnen Details, die 
	vom Spieler angeschaut werden koennen, einbauen:

	AddDetail(string|string* keys, mixed descr)
		Dem Raum wird eine Beschreibung von Details gegeben, die vom
                Spieler angeschaut werden koennen. <keys> kann ein
		String sein oder eine Liste von Strings. <descr> ist
		die Beschreibung, die der Spieler erhaelt. Ist <descr>
		ein String, so wird er direkt und formatiert ausgegeben,
		ist es ein Stringarray der Laenge > 0, so wird das erste
		Element unformatiert ausgegeben, ist es eine Closure, so
		wird deren Rueckgabewert (ein String!) ausgegeben.
		Schliesslich kann man rassenabhaengige Details programmieren,
		indem fuer <descr> ein Mapping der Form ([0:DefaultString,
		Rasse1:String,Rasse2:String,...]) uebergeben wird. Gehoert
		der untersuchende Spieler einer der Rassen 'Rasse1, Rasse2'
		usw. an, so erhaelt er den entsprechenden Detailtext; gehoert
		er keiner der Rassen an, so wird der DefaultString ausgegeben.
	RemoveDetail(string|string* keys)
		Entfernt ein Detail aus einem Raum. <keys> kann ein String
		sein oder eine Liste von Strings. Wenn RemoveDetail ohne
		Parameter aufgerufen wird, werden alle Details entfernt.
	AddSpecialDetail(string|string* keys, string function)
		Im Prinzip wie AddDetail(), nur wird als zweites Argument
		kein fester String angegeben, sonder eine Funktion, die
		einen String zurueckgeben muss. Damit kann man variable
		Details programmieren.
	RemoveSpecialDetail(string|string* keys)
		siehe RemoveDetail()
	AddReadDetail(string|string* keys, mixed desc)
		<desc> wird ausgegeben, wenn ein Spieler den <key> liest.
		Fuer <keys> und <desc> gelten die gleichen Regeln wie bei
		AddDetail, insbesondere gibt es auch rassenabhaengige Texte.
		Fuer <desc> ist auch ein "@@func@@"-Ausdruck erlaubt, sogar
		in den einzelnen Feldern des Rassen-Mappings.
	RemoveReadDetail(string|string* keys)
		siehe RemoveDetail()
	AddRoomMessage(string* msg, int prob, string|string *func)
		Alle <prob> Sekunden wird aus einer Liste von Meldungen
		(<msg>) zufaellig eine ausgesucht, die dann im Raum er-
		scheint. Wenn das Argument <func> angegeben ist, wird
		eine Funktion diesen Namens aufgerufen, der der Index
		der ausgegebenen Meldung als Argument uebergeben wird.
		func darf auch einen Array von Funktionen enthalten. Es wird
		dann zufaellig eine ausgewaehlt.
	
	Ausserdem ist es moeglich, Geraeuschen zu lauschen und Gerueche zu
	erschnuppern:
	
	AddSound(string|string* keys, mixed descr)
		Aufruf wie 'AddDetail'. Wenn in einem Raum kein Geraeusch
		definiert ist, bekommt der Spieler eine Defaultmeldung.
		Diese kann auch gesetzt werden, wenn man fuer <keys>
		DEFAULT_SOUND angibt. Spielerkommando ist 'lausch(e)' oder
		'horch(e)'.
	RemoveSound(string|string* keys)
		Entfernt ein Geraeusch aus einem Raum. <keys> kann ein String
		sein oder eine Liste von Strings. Wenn RemoveSound ohne
		Parameter aufgerufen wird, werden alle Geraeusche entfernt.
	AddSmell(string|string* keys, mixed descr)
		Aufruf wie 'AddDetail'. Wenn in einem Raum kein Geruch
		definiert ist, bekommt der Spieler eine Defaultmeldung.
		Diese kann auch gesetzt werden, wenn man fuer <keys>
		DEFAULT_SMELL angibt. Spielerkommando ist 'riech(e) [an]'
		oder 'schnupper(e) [an]'.
	RemoveSmell(string|string* keys)
		siehe RemoveSound
		
	Der Raum kann zusaetzliche Kommandos definieren:

	AddCmd(string|string* cmd, string func, int flag)
		Im Raum wird beim Kommando <cmd> (oder einem der Kommandos)
		die Funktion <func> aufgerufen. <func> muss 1 zurueck-
		geben, wenn die Funktion die Kombination aus Kommando
		und Argumenten akzeptiert, ansonsten 0. Alles was ein
		Spieler hinter <cmd> noch angibt, wird der Funktion als
		Argument uebergeben. Wenn <flag> gesetzt ist, wird jedes
		Kommando, das mit <cmd> beginnt akzeptiert.
	RemoveCmd(string|string* cmd)
		Entfernt ein Kommando aus dem Raum.
		ACHTUNG: Bei Spielern, die zum Zeitpunkt des Funktions-
		aufrufs noch im Raum sind, ist das Kommando noch definiert.
		Also: Nur benutzen, wenn man genau weiss, was man tut.
		
	Es koennen Objekte im Raum erzeugt werden:

	AddItem(mixed filename, int refresh, mixed props)
		Ein Objekt mit Pfad <filename> wird erzeugt und in den
		Raum bewegt, dabei gibt es vier verschiedene Modi, die
		ueber das Argument <refresh> angegeben werden:
		REFRESH_NONE: Das Objekt wird nur beim allerersten mal
			erzeugt, und dann nie wieder (erst beim reboot)
		REFRESH_DESTRUCT: Ein neues Objekt wird erst erzeugt, 
			wenn das alte zerstoert ist. So kann man sicher
			gehen, dass nur ein Exemplar im Spiel ist.
		REFRESH_REMOVE: Beim reset wird ein neues Objekt erzeugt,
			wenn sich das alte nicht mehr im Raum befindet.
		REFRESH_ALWAYS: Bei jedem reset wird ein neues Objekt 
			erzeugt. VORSICHT: Kann zu riesigen Mengen von
			Objekten fuehren, wenn ein Raum lange nicht be-
			sucht wird.
		Die Konstanten REFRESH_* sind in <room/items.h> definiert.
		Es kann fuer <filename> auch eine Liste von Filenamen
		uebergeben werden, es wird dann zufaellig ein Objekt
		aus der Liste erzeugt.
		Mit <props> kann man in dem erzeugten Objekt Properties
		setzen. Es muss hierfuer ein Mapping der Form
		([Property:Parameter,Property:Parameter,...]) uebergeben
		werden. So kann man z.B. ein Monster beim 'Aufstellen'
		aggressiv machen mit 'AddItem("monster", REFRESH_REMOVE,
		([P_AGGRESSIVE:1]))'.
		Wenn das erzeugte Objekt nur als Blueprint vorliegt,
		sollte es bei REFRESH_DESTRUCT nur geladen werden und nicht
		geclont. Das laesst sich erreichen, wenn der 3. Parameter
		von 'AddItem' auf 'UNIQUE_OBJECT' gesetzt wird.

	AddObj(mixed filename, int refresh, mixed props)
	AddArmour(mixed filename, int refresh, mixed props)
	AddWeapon(mixed filename, int refresh, mixed props)
	AddNpc(mixed filename, int refresh, mixed props)
               Diese Funktionen entsprechen der Funktion AddItem() mit dem
               Unterschied, dass man bei diesen keine Pfadangabe mehr
               benoetigt. Die Funktion sucht selbstaendig in den Standard-
               pfaden nach dem entsprechenden Gegenstand bzw, NPC. Ihnen
               ist gegenueber der Funktion AddItem() der Vorzug zu geben.

	Auf die Properties P_EXITS, P_SPECIAL_EXITS, P_DETAILS, 
	P_SPECIAL_DETAILS, P_READ_DETAILS, P_SOUNDS, P_SMELLS,
	P_COMMANDS, P_ITEMS und P_TERRAIN sollte NICHT direkt zugegriffen
        werden.

DOKUMENTATION
        Datum und Autor des urspruenlichen Texts nicht bekannt
        11.08.1999  Tyron  P_TERRAIN, neue Version AddExit()