Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc/lfun/normalize_defend_argsnormalize_defend_args()
***********************
FUNKTION
========
protected nomask void normalize_defend_args(int dam,
string|string* dam_types, int|mapping si_spell, object enemy)
DEFINIERT IN
============
/std/living/combat.c
ARGUMENTE
=========
Die Argumente sind die Argumente, welche Defend() uebergeben
bekommt (siehe dort!)
BESCHREIBUNG
============
Defend bekommt aus historischem Code haeufig Argumente uebergeben,
die nicht der aktuellen Konvention entsprechen (z.B. si_spell als 0
oder 1 statt eines Mappings). Damit nun nicht jedes Objekt seine
eigene Anpassung vornehmen muss und dabei evtl. noch etwas
vergessen wird, kann man mit dieser Funktion die Argumente genauso
"normieren", wie es in der Standardlib in Defend() auch gemacht
wuerde.
Dieses wird ganz dringend empfohlen statt diese Normierung selber
vorzunehmen. Und sollte es hier Aenderungen geben, bekommt man
diese automatisch mit.
Nach dem Aufruf dieser Funktion (Argumente als Referenz
uebergeben!) liegen die Argumente dann wie folgt vor:
dam
ein Integer (unveraendert)
dam_types
ein Array von Schadenstypen
si_spell
ein Mapping - wenn es neu angelegt wurde, enthaelt es die
Eintraege SP_PHYSICAL_ATTACK, SP_SHOW_DAMAGE, SP_REDUCE_ARMOUR
und EINFO_DEFEND. SP_PHYSICAL_ATTACK und SP_SHOW_DAMAGE sind 1,
wenn si_spell 0 war, sonst 1.
enemy
ist das Objekt des Gegners oder this_player()
Alternativ zum Ueberschreiben von Defend() und Nutzung dieser
Funktion ist haeufig auch InternalModifyDefend() gut geeignet. Dort
muss *keine* eigene Normierung der uebergebenen Argumente mehr
vorgenommen werden!
BEISPIELE
=========
// Ein eigenes Defend soll Dinge tun, bevor das geerbte Defend() gerufen
// wird. Um den Code zu vereinfachen, sollen die Typen der Argumente aber
// schon sicher in einem "normierten Zustand" sein.
public int Defend(int dam, string|string* dam_types, int|mapping spell,
object enemy)
{
// Uebergabe per Referenz noetig!
normalize_defend_args(&dam, &dam_type, &spell, &enemy);
if (member(dam_types, DT_FIRE) > -1
&& si_spell[SP_NAME] == "Drachenfeuer")
dam *= 2; // Schaden verdoppeln
return ::Defend(dam, dam_types, si_spell, enemy);
}
SIEHE AUCH
==========
Verwandt:
InternalModifyDefend(), Defend(), DefendInfo()
16.01.2019 Zesstra
zurück zur Übersicht