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

SIEHE AUCH

16.01.2019 Zesstra