Dokumentation zu: benennung(WL)

HR Image


AUTOR	MG, den 22.08.92, Don Rumata
	This file is part of the Morgengrauen-Mudlib from Jof and Rumata

VERSION 1.1

AKTUALISIERT: MG, den 14.10.93, Chris

VERSION 1.2

AKTUALISIERT: WL, den 16.09.94, Troy

THEMA	BENNENUNG VON OBJEKTEN IM MorgenGrauen

INHALT:
	I.	Einleitung
	II.	Funktonen, die alle Objekte besitzen muessen
	III.	Unterstuetzung der Funktionen durch die MG_mudlib
	IV.	Benennung von Raeumen
        V.	Benennung von Monstern
	VI.	Adjektive

I.	EINLEITUNG

	Jedes Objekt in der Mudlib muss auf folgende Weisen identifiziert
	werden koennen:

	1.)	Es muss einen Namen haben, der innerhalb eines Satzes das
		Objekt bezeichnen kann (gilt nicht fuer Raeume).

	2.)	Es muss eine Kurzbeschreibung besitzen.

	3.)	Es muss eine ausfuehrliche Beschreibung besitzen.

	4.)	Es muss eine Menge von Synonymen ("ids") kennen, mit denen 
		ein Spieler das Objekt "ansprechen" kann (nicht Raeume).

II.	FUNKTIONEN, DIE DIE ALLE OBJEKTE BESITZEN MUESSEN

	Jedes Objekt in MorgenGrauen sollte folgende Funktionen 
	implementiert haben:

	1.)	name( fall, dem )

	Diese Funktion soll den Namen des Objektes im jeweiligen
	Fall mit Artikel (wenn es einen besitzt) zurueckgeben,
	sodass der Rueckgabewert in einen Satz eingearbeitet werden
	kann.

	"fall" dient zur Deklination des Objektnamens.
	Hierbei gelten fuer die Faelle folgende Werte:

	Fall		Wert	#define (mit #include <properties.h>)
	NOMINATIV	0	WER (kann auch weggelassen werden)
	GENITIV		1	WESSEN
	DATIV		2	WEM
	AKKUSATIV	3	WEN	

	"dem" bestimmt, welche Artikel benutzt werden sollen.
	Moegliche Werte fuer "dem":

	0	Benutze unbestimmte Artikel (Normalfall).
	
	1	Benutze bestimmte Artikel.
	
	2	Benutze bestimmte Artikel, wenn sich mit dem Objekt
		kein gleichartiges Objekt im selben Raum befindet,
		sonst benutze einen unbestimmten.

		Statt der 2 kann auch ein String uebergeben werden.
		In diesem Fall wird getestet, ob sich ein Objekt mit
		dem String als id im selben Raum befindet.

	2.)	short()

	Diese Funktion liefert eine Beschreibung, die ausgegeben
	wird, wenn der Raum, in dem das Objekt sich befindet,
	betrachtet wird.

	3.)	long()

	Diese Funktion liefert eine Beschreibung, die ausgegeben
	wird, wenn das Objekt angeschaut wird. Im Unterschied zur
	2.4.5 Mudlib wird die Beschreibung jedoch nicht ausgegeben,
	sondern als return-Wert zurueckgegeben.

	4.)	id( str )

	Diese Funktion soll 1 zurueckgeben, wenn str eine Zeichen-
	folge ist, die das Objekt bezeichnen koennte. Diese Zeichen-
	folge wird in kleinen Buchstaben uebergeben.

	5.)	_query_invis()

	Wenn ein Objekt unsichtbar ist, soll es beim Aufruf dieser
	Funktion 1 zurueckgeben. Sichtbare Objekte brauchen diese
	Funktion nicht zu implementieren.

III.	UNTERSTUETZUNG DER FUNKTIONEN DURCH DIE MG_MUDLIB

	Wenn ein eigenes Objekt aus den Standartobjekten abgeleitet
	wird, sind alle diese Funktionen bereits fertig definiert.
	Es muessen beim Erzeugen der Objekte nur noch die entspechenden
	Werte mitgeteilt werden. Dieses geschieht mit folgenden Funk-
	tionen, die am besten in create() aufgerufen werden.

	1.)	SetProp( P_NAME, string );

	In name() wird der uebergebene String dekliniert und automatisch
	mit Artikeln versehen. Diese Funktion bedenkt auch Faelle, an 
	die ihr wahrscheinlich nie gedacht habt. Der Genitiv von der 
	Lahme ist zB des Lahmen! Auch fuer andere Faelle bietet diese 
	Funktion maechtige Unterstuetzung.

	Wenn der String nicht mit Artikeln versehen werden soll, so kann
	man das mittels des Aufrufs "SetProp( P_ARTICLE, 0 )" tun.

	Damit die Funktion name() ueberhaupt den richtigen Artikel 
	auswaehlen kann, muss man mit "SetProp( P_GENDER, gender)" das
	Gechlecht des Objektes bekannt machen. Als gender kann man 
	MALE (Wert 1), FEMALE (Wert 2) und NEUTER (Wert 0, Normalfall)
	verwenden.

	Ist das Objekt unsichtbar, so darf string trotzdem nicht 0 sein;
	stattdessen ist "SetProp( P_INVIS, 1 )" aufzurufen. (Die Zeile
	"#include <properties.h>" nicht vergessen. :-)

	Da dieses Verfahren sehr fehleranfaellig ist, ist fuer den Namen
	ein Array von Namen zulassen, sodass fuer jeden Fall ein Wort
	uebergeben werden kann. Beispiel.:
	SetProp( P_NAME, ({ "Mensch", "Menschen", "Menschen", "Menschen" }) );

	2.)	SetProp( P_SHORT, string )
	
	In short() wird der uebergebene String ausgegeben. Mittels des
	process_string-Mechanismus (siehe /doc/efun/process_string)
	koennen auch variable Teile in dem String vorkommen.
	string braucht fuer unsichtbare Objekte nicht auf 0 gesetzt
	werden. Ist das Objekt jedoch staendig unsichtbar (z.B. ein
	Fluch, etc.), dann setzt man am besten P_SHORT auf 0. Man
	braucht sich dann nicht um P_INVIS zu kuemmern.

	3.) 	SetProp( P_LONG, string )

	Dito.

	4.)	AddId( string ); oder
		AddId( ({ string1, string2, ..., stringn }) );

	Nehme den/die String/s in die Menge der Zeichenketten auf, auf die 
	die eingebaute id-Funktion mit 1 antworten soll, bzw. fuege die 
	Menge von Strings den P_IDS hinzu. Bitte nicht SetProp(P_IDS,...) 
	verwenden.

	5.)  *** obsolete: funktioniert NUR bei Spielern; von hier ***
		Es reicht, SetProp( P_INVIS, 1 ) aufzurufen, wenn das
	Objekt unsichtbar wird, und SetProp( P_INVIS, 0 ), wenn es wieder
	sichtbar wird (sofern es diesen Zustand aendert, siehe P_SHORT).
	     *** bis hier ***
	Fuer alle anderen Objekte (ausser Spielern) muss man P_SHORT auf 0
	(die Zahl Null) setzen (der Leerstring "" erzeugt ein "Nichts
	besonderes".

IV.	BENENNUNG VON RAEUMEN

	Bei Raeumen wird die long() bzw. short()-Beschreibung nur dann
	benutzt, wenn der Raum *von aussen* angeschaut wird. Fuer eine
	Beschreibung des Raumen von Innen sind folgende Funktionen
	bereitgestellt:

	1.)	SetProp( P_INT_SHORT, string );

	Gebe eine Beschreibung des Raumes fuer den "kurz"-Modus aus.

	2.)	SetProp( P_INT_LONG, string );

	Gebe eine ausfuehrliche Beschreibung des Raumes zurueck.

	Wenn man in dem Raum spezielle Vorrichtungen *einfach* einbauen
	moechte, dann hilft oft auch in Raeumen:
	
	1.) 	SetProp( P_NAME, string ); und
	2.)	Setprop( P_GENDER, int );

	Als Beispiel nehme man folgendes an: Der Raum sei das obere Ende
	eines Schachtes. Innerhalb der Beschreibung oder der Details
	taucht ein Haken auf, an dem der Spieler ein Seil (/obj/seil)
	befestigen koennen soll. Um dies relativ *billig* zu modellieren,
	genuegt es, dem Raum den P_NAME "Haken" und das P_GENDER MALE zu
	geben (sowie die laut Seil noetigen Funktionen einzubauen). Da
	Namen von Raeumen selten bis gar nicht verwendet werden, stoert
	dieses Property nicht im Geringsten. Im angesprochenen Fall kann
	es nuetzlich sein dem Raum mittels AddId die Id "haken" zu geben.
	Dann kann der Spieler wirklich "binde seil an haken" eingeben.

V.	BENENNUNG VON MONSTERN

	Es ist wichtig, das Monster nicht denselben Namen wie Spieler
	haben. Deshalb gibt es eine Liste von reservierten Namen fuer
	Monster. Die Liste kann man unter /secure/BANISH anschauen.
	Hierbei ist zu beachten, dass die Regelung NUR fuer den Aufruf
	der Funktion set_living_name("name") notwendig ist. Diese
	Funktion setzt einen "lebenden" Namen, so dass das Monster z.B.
	getranst werden kann.

	Um einen neuen Namen in die Liste einzutragen, muss man seinen 
	Regionsmagier bescheid sagen, wie das Monster heissen soll und
	eine Begruendung fuer den Namen. Dieser wird dann den Namen 
	reservieren, oder bescheid geben, wenn das nicht geht.

	Dazu fuehrt der Regionsmagier den Befehl "banish name begruendung"
	in der Abenteurergilde aus.

VI.	ADJEKTIVE

	Um den Namen evtl. noch etwas farbiger zu gestalten oder eine
	Unterscheidungsmoeglichkeit grundsaetzlich gleichartiger Objekte
	zu bieten, gibt es noch die Adjektive. Hierzu stehen zwei
	Funktionen zur Verfuegung:

	1.)	SetProp(P_NAME_ADJ,"grundform") oder
		SetProp(P_NAME_ADJ,
			({"grundform1","grundform2",...,"grundformn"}) )

	Mit dieser Funktion setzt man ein oder mehrere sogenannte
	Namensadjektive, die bei jeder Ausgabe des Namens mittels name()
	mitdekliniert und mit ausgegeben werden. Beispiel:

	...
	SetProp(P_NAME,"Ork");
	SetProp(P_GENDER,MALE);
	SetProp(P_NAME_ADJ,"fies");
	...

	Bei Aufruf von name(WESSEN,1) fuer den Ork wird z.B. "des fiesen 
	Orks" zurueckgegeben. Mehrere im Array angegebene Adjektive werden
	als Aufzaehlung vorangestellt.

	Hiermit kann man das Objekt aber NICHT mit z.B. "toete fiesen ork"
	ansprechen. Dazu dient die naechste Funktion:

	2.)	AddAdjective("adj") oder
		AddAdjective( ({ "adj1","adj2",...,"adjn" }) );

	Dieser Funktion muessen die DEKLINIERTEN Adjektive uebergeben
	werden. Im obigen Fall also:

	AddAdjective( ({ "fieser","fiesen","fiesem","fiese"}) );

	Man beachte, dass alle moeglichen Faelle einzeln uebergeben
	werden. Sonst wuerden Konstrukte wie "toete fieser ork"
	auftreten.

	Mit Hilfe dieser beiden Funktionen kann man nun z.B. mehrere
	Orks in einen Raum stellen, die unterschiedliche Adjektive
	haben und dadurch eindeutig identifizierbar sind. Trotzdem
	funktioniert natuerlich die "alte" Methode mit z.B.
	"unt ork 2".

	MERKE: Adjektive werden NICHT ausgegeben, wenn das Property
	P_ARTICLE auf 0 (die Zahl Null) gesetzt wurde. In diesem Fall
	werden SOWOHL Artikel ALS AUCH Adjektive weggelassen.


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