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