Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/normalize_defend_args

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
==========


Verwandt: InternalModifyDefend(), Defend(), DefendInfo()

16.01.2019 Zesstra


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.