Richtlinien - Rüstungen
Richtlinien zur Programmierung von Ruestungen
=============================================
1. Was sind Ruestungen?
-----------------------
Ruestungen sind verschiedene Arten von Kleidungsstuecken, die
/std/armour inheriten. Ruestungen koennen geclont werden, es
existiert also immer eine Bluprint und mehere Clones. Die
Blueprint befindet sich aber nur zur Erzeugung von Clones im
Speicher, deshalb sollte man in der Funktion create() immer
zuerst auf is_clone() abfragen, denn die Blueprint braucht z.B.
keine Properties gesetzt zu bekommen. (Die einzige Ausnahme ist,
dass eine Ruestung nur einmal im Spiel existieren soll. )
create()
{
if( !is_clone(this_object()) ) return;
::create();
...
Die wichtigste Eigenschaft von Ruestungen ist, dass man sie
anziehen kann (und zwar immer nur eine von dem jeweiligen Typ)
und dass sie den Spieler vor Schaden sowie vor extremen Tem-
peraturen wie sengende Hitze und klirrende Kaelte schuetzen
(AC- bzw. TEMPERATURE_PROTECTION Wert).
2. Welche Eigenschaften sollte eine Ruestung unbedingt definieren?
------------------------------------------------------------------
Folgende Properties sollten in create() unbedingt gesetzt werden:
P_SHORT Kurzbeschreibung (ohne Punkt und \n !!),
Dieser Text wird angezeigt, wenn eine Ruestung
in einem Raum liegt oder im Inventar.
P_LONG Langbeschreibung (sollte auf 78 Zeichen pro
Zeile umgebrochen werden, am besten mit
break_string()). Dieser Text beschreibt die
Ruestung genau und wird ausgegeben, wenn man
die Ruestung untersucht.
Dieser Text wird beim Setzen automatisch
auf 78 Zeichen pro Zeile umgebrochen, hierbei
bleiben vorhandene \n erhalten. Man kann das
automatische Umbrechen mit einem \t (Tabulator)
als allererstes Zeichen unterdruecken, sollte
dies unbedingt notwendig sein.
P_INFO Hier kann man Besonderheiten angeben, die man
mittels Zauberspruch 'identifiziere' bekommt.
Hier sollte man anmerken, wenn die Ruestung
spezielle Eigenschaften hat.
P_NAME Dieser Text wird ausgegeben, wenn man z.B. die
Ruestung nimmt.
P_GENDER Das Geschlecht der Ruestung (DIE Ruestung, DER
Helm). Wird durch die Konstanten MALE, FEMALE
und NEUTER bestimmt. (/sys/thing/language.h)
P_ARMOUR_TYPE Der Typ der Ruestung. Moegliche Werte sind:
(definiert in /sys/combat.h)
AT_ARMOUR : Ruestung, die den Koerper schuetzt
AT_HELMET : Helm oder Kappe
AT_AMULET : Amulett oder Brosche
AT_RING : Ring oder Armreifen
AT_GLOVE : Handschuh
AT_CLOAK : Umhang
AT_BOOT : Schuhe oder Stiefel
AT_SHIELD : Schild
AT_TROUSERS : Hosen
AT_BELT : Guertel
AT_BRACERS : Armschienen, Ellbogenschuetzer
AT_MISC : alles andere, zB Halsband, Guertel
P_AC Die Staerke der Ruestung (definiert in /sys/combat.h),
die Maximalwerte sind hierbei:
AT_ARMOUR : 40
AT_HELMET : 15
AT_AMULET : 5
AT_RING : 5
AT_GLOVE : 10
AT_CLOAK : 10
AT_BOOT : 10
AT_SHIELD : 30
AT_TROUSERS : 10
AT_BELT : 5
AT_BRACERS : 10
AT_MISC : 0
Ruestungen, die mehr als die Haelfte des Maximalwertes
haben, muessen vom Erzmagier fuer Waffen und Ruestungen
genehmigt werden. (derzeit ist das Feyaria)
P_MATERIAL Das Material, aus dem die Ruestung besteht.
(definiert in /sys/thing/material.h)
Standardmaessig werden folgende Werte gesetzt:
(/std/armour/combat.c)
AT_ARMOUR : MAT_METAL (Metall)
AT_HELMET : MAT_METAL (Metall)
AT_AMULET : MAT_MAGIC (mag. Material)
AT_RING : MAT_METAL (Metall)
AT_GLOVE : MAT_LEATHER (Leder)
AT_CLOAK, : MAT_CLOTH (Stoff)
AT_BOOT : MAT_LEATHER (Leder)
AT_SHIELD : MAT_WOOD (Holz)
AT_TROUSERS : MAT_CLOTH (Stoff)
AT_BELT : MAT_LEATHER (Leder)
AT_BRACRES : MAT_METAL (Metal)
AT_MISC : MAT_MISC (unspezifiert)
Man kann auch mehrer Materialien setzen, z.B. ein
eisenbeschlagener Holzschild aus Eichenholz:
([MAT_IRON:25, MAT_OAK:75])
P_WEIGHT Das Gewicht der Ruestung in Gramm. Dabei sollte man
in etwa abschaetzen, wieviel so eine Ruestung wiegen
kann und sie mit anderen Ruestungen des gleichen
Typs vergleichen.
P_VALUE Der Wert der Ruestung in Muenzen. Ein Spieler bekommt
derzeit maximal 1500 Muenzen fuer eine Ruestung
ausbezahlt. Beim Einkauf im Laden muss man
normalerweise das dreifache von P_VALUE bezahlen.
(siehe /std/laden.c)
P_QUALITY_DECAY Dieser Wert bestimmt, wie schnell sich eine
Ruestung abnuetzt. Defaultmaessig ist er auf 100
gesetzt. Je hoeher der Wert, umso weniger nuetzt
sich die Ruestung ab. Grobe Aenderungen an diesem
Wert muessen vom Erzmagier fuer Balance genehmigt
werden.
P_NOBUY Sollte gestzt sein, wenn die Ruestung im Laden
nicht gekauft werden soll. Diese Property sollte
man setzen, wenn die Ruestung sehr gut ist, sehr
schwer zu bekommen ist oder eine wichtige Rolle
in einer Quest spielt.
3. Weitere moegliche Eigenschaften
----------------------------------
P_DAM_PROT Angabe, gegen welche Schadenstypen die Ruestung
schuetzen soll. Defaultmaessig sind das die
physikalischen Schadenstypen.
P_WORN_TEXT Text, der statt "angezogen" ausgegeben werden soll.
P_WEAR_TEXT Text, der beim Anziehen ausgegeben wird, ein
Array mit dem Text fuer den Spieler bzw. den Raum:
z.B. ({"Du steckst Dir den Ring auf den Finger.\n",
" steckt sich einen Ring auf den Finger.\n"})
P_UNWEAR_TEXT Text, der beim Ausziehen augegeben wird.
P_WEAR_FUNC Objekt, in dem die Funktion definiert ist, die
beim Anziehen aufgerufen werden soll, z.B. zum
Ueberpruefen, wenn die Ruestung nur fuer eine
Rasse erlaubt ist. (wird meist auf this_object()
gesetzt.)
P_WEAR_RESTRICTIONS Hier kann man ein Mapping mit den Restriktionen
angeben, die man erfuellen muss, um die Ruestung zu
tragen. Eine Abfrage hier ist einer WEAR_FUNC in
jedem Fall vorzuziehen.
P_REMOVE_FUNC Objekt, in dem die Funktion definiert ist, die
beim Ausziehen aufgerufen werden soll.
(wird meist auf this_object() gesetzt.)
P_DEFEND_FUNC Objekt, in dem die Funktion definiert ist, die
beim Verteidigen aufgerufen werden soll.
(wird meist auf this_object() gesetzt.)
Hier kann man z.B. eine besondere Resistenz gegen
verschieden damage types festelegen.
P_ARTICLE Gibt an, ob in der Beschreibung ein Artikel ausgegeben
werden soll oder nicht.
P_NAME_ADJ Adjektiv, z.B. "bunt" fuer ein bunter Umhang
Hier sollte man auch zusaetzlich AddAdjective()
verwenden, denn dann werden die IDs automatisch
angepasst.
P_TEMPERATURE_PROTECTION Gibt den Temperaturschutz an.
Positive Werte bedeuten Schutz, negative
Werte eine Erschwerniss. Man kann sowohl Werte
Fuer Hitze- also auch fuer Kaelte-Schutz setzen.
Fuer einzelne Ruestungsarten werden folgende
Default-Werte gesetzt:
AT_ARMOUR: ([ T_COLD_PROT:4,T_HEAT_PROT:-3 ])
AT_CLOAK: ([ T_COLD_PROT:4,T_HEAT_PROT:-1 ])
AT_HELMET: ([ T_COLD_PROT:2,T_HEAT_PROT:1 ])
AT_TROUSERS: ([ T_COLD_PROT:3,T_HEAT_PROT:-1 ])
AT_GLOVE: ([ T_COLD_PROT:2,T_HEAT_PROT:-1 ])
AT_BOOT: ([ T_COLD_PROT:2,T_HEAT_PROT:0 ])
AT_BRACERS: ([ T_COLD_PROT:1,T_HEAT_PROT:0 ])
AT_SHIELD: ([ T_COLD_PROT:0,T_HEAT_PROT:2 ])
Aenderungen an diesen Defaultwerten beduerfen einer
Genehmigung des Erzmagires fuer Balance.
P_CURSED Verfluchte Ruestungen koennen nicht mehr ausgezogen
werden.
P_NODROP Ruestung kann nicht weggeworfen werden. Wichtig
fuer Questrelevante Sachen.
P_NEVERDROP Objekte mit dieser Property werden beim Tod des
Spielers nicht in den Leichnam gelegt.
P_NOSELL Diese Property enthaelt eine Meldung, die ausgegeben
wird, wenn jemand versucht, dieses Objekt zu
verkaufen. Wird die Prop. auf einen nicht-String-Wert
gesetzt, so wird eine Defaultmeldung ausgegeben.
P_DAMAGED Gibt an, wie stark die Ruestung beschaedigt ist.
P_QUALITY_DECAY Gibt an, beim wievielten Schlag die Ruestung beschaedigt
wird.
4. Details
----------
Genau wie in Raeumen kann man in Ruestungen auch Details angeben.
Sounds und Smells kann man mittels P_SMELL und P_SOUND angeben.
Autor: Feyaria
Letzte Aenderung: 5. Februar 1998, Woody