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
mud.tamedhon.de:4711 ON
mud.tamedhon.de:4712 (TLS) ON
mud.tamedhon.de:4713 (Webclient) ON