normalize_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);
}