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