Richtlinien - Waffen

Richtlinien zur Programmierung von Waffen
========================================= 

1. Was sind Waffen?
-------------------

Waffen sind Gegenstaende, mit denen man einem Gegner Schaden
zufuegen kann und die /std/weapon inheriten. Waffen 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 Waffe nur 
einmal im Spiel existieren soll.)

create()
{
  if( !is_clone(this_object()) ) return;
  ::create(); 
...

Die wichtigste Eigenschaft von Waffen ist, dass man sie
zuecken kann (und zwar immer nur eine) .

Bevor man eine eigene Waffe programmiert, sollte man einmal in /p/weapon
schauen. Dort liegt eine grosse Auswahl an Standard-Waffen. Wenn moeglich,
sollte man diese auch verwenden, bzw als Vorbild nehmen.


2. Welche Eigenschaften sollte eine Waffe unbedingt definieren?
---------------------------------------------------------------

Folgende Properties sollten in create() unbedingt gesetzt werden:

P_SHORT            Kurzbeschreibung (ohne Punkt und \n !!),
                   Dieser Text wird angezeigt, wenn eine Waffe
                   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
                   Waffe genau und wird ausgegeben, wenn man
                   die Waffe 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 Waffe
                   spezielle Eigenschaften hat.

P_NAME             Dieser Text wird ausgegeben, wenn man z.B. die
                   Waffe nimmt.

P_GENDER           Das Geschlecht der Waffe (DAS Schwert, DER
                   Speer) . Wird durch die Konstanten MALE, FEMALE
                   und NEUTER bestimmt. (/sys/thing/language.h)

P_WEAPON_TYPE      Bestimmt die Art der Waffe
                   (definiert in /sys/combat.h)
                    WT_SWORD    : Schwerter, Rapier, Saebel
                    WT_AXE      : Aexte und Beile
                    WT_CLUB     : Keulen, Haemmeer, Kampfstaebe
                    WT_SPEAR    : Speere, Lanzen
                    WT_KNIFE    : Dolche und Messer
                    WT_WHIP     : Peitsche
                    WT_CHAIN    : Kettenwaffen, Morgenstern
                    WT_BOW      : Bogen
                    WT_AMMU     : Steine fuer ne Schleuder etc.
                    WT_HANDS    : blosse Haende
                    WT_MAGIC    : eine magische Waffe
                    WT_MISC     : unspezifiziert
                   Standardmaessig wird WT_CLUB gesetzt.

P_WC               Gibt die Staerke der Waffe an.
                   Die maximale Staerke liegt bei 300.
                   Einhaendige Waffen sollte hoechstens WC 200 haben.
                   Waffen, mit mehr als WC 150 muessen vom Erzmagier
                   fuer Waffen und Ruestungen genehmigt werden.
                   (derzeit ist das Feyaria)

P_WC_FIXFACTOR     Gibt an, wie gut die Waffe in der Hand liegt.
                   Standard ist 0.3. Je hoeher dieser Wert, umso
                   besser ist die Waffen. Aenderungen an diesem
                   Wert sind auf jedem Fall beim Erzmagier fuer 
                   Balance anzumelden (derzeit ist das Feyaria)

P_DAM_TYPE         Schadenstyp, den die Waffe macht.
                   (definiert in /sys/combat.h)
                   Defaultmaessig wird DT_BLUDGEON verwendet.
                   Normalerweise sollte man nur physische 
                   Schadenstypen verwenden, magische Schadenstypen
                   sollte man vom Erzmagier fuer Waffen und Ruestungen
                   genehmigen lassen (derzeit ist das Feyaria).

P_NR_HANDS         Anzahl der Haende, die man braucht, um die Waffe
                   zu zuecken. (defaultmaessig auf 2)

P_MATERIAL         Das Material, aus dem die Waffe besteht.
                   (definiert in /sys/thing/material.h)
                   Standardmaessig werden folgende Werte gesetzt:
                   (/std/weapon/combat.c)
                    WT_SWORD    : ([MAT_MISC_METAL:100])
                    WT_AXE      : ([MAT_MISC_METAL:50, MAT_MISC_WOOD:50])
                    WT_CLUB     : ([MAT_MISC_WOOD:100])
                    WT_SPEAR    : ([MAT_MISC_METAL:20, MAT_MISC_WOOD:80]) 
                    WT_KNIFE    : ([MAT_MISC_METAL:80, MAT_MISC_WOOD:20])
                    WT_WHIP     : ([MAT_LEATHER:100])
                    WT_CHAIN    : ([MAT_MISC_METAL:100])
                    WT_BOW      : ([MAT_MISC_WOOD:100])
                    WT_AMMU     : ([MAT_MAGIC:100])
                    WT_MAGIC    : ([MAT_MAGIC:100])
                    WT_MISC     : ([MAT_MISC:100])
                   Man kann auch mehrer Materialien setzen, z.B. ein
                   Axt mit Holzgriff : ([MAT_METAL:50, MAT_WOOD:50])

P_WEIGHT           Das Gewicht der Waffe in Gramm. Dabei sollte man
                   in etwa abschaetzen, wieviel so eine Waffe wiegen
                   kann und sie mit anderen Ruestungen des gleichen
                   Typs vergleichen. (siehe (doc/SL/waffentabelle )
                   Grundsaetzlich sollten bessere Waffen auch mehr 
                   wiegen.

P_VALUE            Der Wert der Waffe in Muenzen. Ein Spieler bekommt
                   derzeit maximal 1500 Muenzen fuer eine Waffe
                   ausbezahlt. Beim Einkauf im Laden muss man
                   normalerweise das dreifache von P_VALUE bezahlen.
                   (siehe /std/laden.c)
                   Fuer den Wert von Waffen gilt folgende Tabelle:
                    WC >= 250        etwa 20*WC Goldstuecke
                    WC >= 200        etwa 15*WC Goldstuecke
                    WC >= 130        etwa 10*WC Goldstuecke
                    101 < WC < 130   etwa  7*WC Goldstuecke
                    71 < WC < 100    etwa  5*WC Goldstuecke
                    50 < WC < 70     etwa  3*WC Goldstuecke
                    WC <= 50         etwa  2*WC Goldstuecke
                   Bei zusaetzlichen Eigenschaften (etwa einer vom
                   Standardwert abweichenden P_WC_FIXFACTOR) muss
                   der Preis natuerlich entsprechend angepasst werden.

P_QUALITY_DECAY    Dieser Wert bestimmt, wie schnell sich eine
                   Waffe abnuetzt. Defaultmaessig ist er auf 100
                   gesetzt. Je hoeher der Wert, umso weniger nuetzt
                   sich die Waffe ab. Grobe Aenderungen an diesem
                   Wert muessen vom Erzmagier fuer Balnce genehmigt
                   werden (derzeit ist das Feyaria).

P_NOBUY            Sollte gestzt sein, wenn die Waffe im Laden
                   nicht gekauft werden soll. Diese Property sollte
                   man setzen, wenn die Waffe sehr gut ist, sehr
                   schwer zu bekommen ist oder eine wichtige Rolle
                   in einer Quest spielt.
                   Waffen mit WC>150 werden automatisch im Laden
                   nicht mehr weiterverkauft.


3. Weitere moegliche Eigenschaften
----------------------------------

P_WIELDED_TEXT     Text, der statt "gezueckt" erscheinen soll.

P_WIELD_TEXT       Text, der beim Zuecken der Waffe ausgegeben wird,
                   als Array von 2 Strings mit dem Text fuer den
                   Spieler sowie dem fuer den Raum.
                   z.B. ({"Du ziehst Dein Schwert aus der Scheide.\n",
                          " zieht ein Schwert aus der Scheide.\n"})

P_UNWIELD_TEXT     Text, der beim Zurueckstecken augegeben wird.

P_WIELD_FUNC       Objekt, in dem die Funktion definiert ist, die 
                   beim Zuecken aufgerufen werden soll, z.B. zum 
                   Ueberpruefen, wenn die Waffe nur fuer eine
                   Rasse erlaubt ist. (wird meist auf this_object() 
                   gesetzt.) (siehe /doc/lfun/wieldfunc)

P_WIELD_RESTRICTIONS
                   Hier kann man ein Mapping mit den Restriktionen
                   angeben, die man erfuellen muss, um die Waffe zu
                   zuecken. Eine Abfrage hier ist einer WIELD_FUNC in
                   jedem Fall vorzuziehen.

P_UNWIELD_FUNC     Objekt, in dem die Funktion definiert ist, die 
                   beim Wegstecken aufgerufen werden soll.
                   (wird meist auf this_object() gesetzt.)
                   (siehe /doc/lfun/unwieldfunc)

P_HIT_FUNC         Objekt, in dem die Funktion definiert ist, die 
                   beim Angriff aufgerufen werden soll.
                   (wird meist auf this_object() gesetzt.)
                   Hier kann man z.B. den Schaden je nach Gegner
                   veraendern. (siehe /doc/lfun/hitfunc)

P_ARTICLE          Gibt an, ob in der Beschreibung ein Artikel ausgegeben
                   werden soll oder nicht.

P_NAME_ADJ         Adjektiv, z.B. "gruen" fuer ein gruener Speer
                   Hier sollte man auch zusaetzlich AddAdjective()
                   verwenden, denn dann werden die IDs automatisch
                   angepasst.

P_CURSED           Verfluchte Waffen koennen nicht mehr weggesteckt
                   werden.

P_NODROP           Die Waffe 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 Waffe beschaedigt ist.

P_QUALITY_DECAY    Gibt an, beim wievielten Schlag die Waffe beschaedigt
                   wird.

P_SPECIAL_WC       Ein Mapping, das angibt, welche WC die Waffe hat,
                   wenn ein NPC mit bestimmter ID sie zueckt.
                   
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