Zesstra | 5bf48ac | 2019-02-04 20:33:36 +0100 | [diff] [blame] | 1 | normalize_defend_args() |
| 2 | *********************** |
| 3 | |
| 4 | |
| 5 | FUNKTION |
| 6 | ======== |
| 7 | |
| 8 | protected nomask void normalize_defend_args(int dam, |
| 9 | string|string* dam_types, int|mapping si_spell, object enemy) |
| 10 | |
| 11 | |
| 12 | DEFINIERT IN |
| 13 | ============ |
| 14 | |
| 15 | /std/living/combat.c |
| 16 | |
| 17 | |
| 18 | ARGUMENTE |
| 19 | ========= |
| 20 | |
| 21 | Die Argumente sind die Argumente, welche Defend() uebergeben |
| 22 | bekommt (siehe dort!) |
| 23 | |
| 24 | |
| 25 | BESCHREIBUNG |
| 26 | ============ |
| 27 | |
| 28 | Defend bekommt aus historischem Code haeufig Argumente uebergeben, |
| 29 | die nicht der aktuellen Konvention entsprechen (z.B. si_spell als 0 |
| 30 | oder 1 statt eines Mappings). Damit nun nicht jedes Objekt seine |
| 31 | eigene Anpassung vornehmen muss und dabei evtl. noch etwas |
| 32 | vergessen wird, kann man mit dieser Funktion die Argumente genauso |
| 33 | "normieren", wie es in der Standardlib in Defend() auch gemacht |
| 34 | wuerde. |
| 35 | |
| 36 | Dieses wird ganz dringend empfohlen statt diese Normierung selber |
| 37 | vorzunehmen. Und sollte es hier Aenderungen geben, bekommt man |
| 38 | diese automatisch mit. |
| 39 | |
| 40 | Nach dem Aufruf dieser Funktion (Argumente als Referenz |
| 41 | uebergeben!) liegen die Argumente dann wie folgt vor: |
| 42 | |
| 43 | dam |
| 44 | ein Integer (unveraendert) |
| 45 | |
| 46 | dam_types |
| 47 | ein Array von Schadenstypen |
| 48 | |
| 49 | si_spell |
| 50 | ein Mapping - wenn es neu angelegt wurde, enthaelt es die |
| 51 | Eintraege SP_PHYSICAL_ATTACK, SP_SHOW_DAMAGE, SP_REDUCE_ARMOUR |
| 52 | und EINFO_DEFEND. SP_PHYSICAL_ATTACK und SP_SHOW_DAMAGE sind 1, |
Zesstra | 6914240 | 2019-08-19 20:14:40 +0200 | [diff] [blame] | 53 | wenn si_spell 0 war, sonst 1. |
Zesstra | 5bf48ac | 2019-02-04 20:33:36 +0100 | [diff] [blame] | 54 | |
| 55 | enemy |
| 56 | ist das Objekt des Gegners oder this_player() |
| 57 | |
| 58 | Alternativ zum Ueberschreiben von Defend() und Nutzung dieser |
| 59 | Funktion ist haeufig auch InternalModifyDefend() gut geeignet. Dort |
| 60 | muss *keine* eigene Normierung der uebergebenen Argumente mehr |
| 61 | vorgenommen werden! |
| 62 | |
| 63 | |
| 64 | BEISPIELE |
| 65 | ========= |
| 66 | |
| 67 | // Ein eigenes Defend soll Dinge tun, bevor das geerbte Defend() gerufen |
| 68 | // wird. Um den Code zu vereinfachen, sollen die Typen der Argumente aber |
| 69 | // schon sicher in einem "normierten Zustand" sein. |
| 70 | public int Defend(int dam, string|string* dam_types, int|mapping spell, |
| 71 | object enemy) |
| 72 | { |
| 73 | // Uebergabe per Referenz noetig! |
| 74 | normalize_defend_args(&dam, &dam_type, &spell, &enemy); |
| 75 | if (member(dam_types, DT_FIRE) > -1 |
| 76 | && si_spell[SP_NAME] == "Drachenfeuer") |
| 77 | dam *= 2; // Schaden verdoppeln |
| 78 | return ::Defend(dam, dam_types, si_spell, enemy); |
| 79 | } |
| 80 | |
| 81 | |
| 82 | SIEHE AUCH |
| 83 | ========== |
| 84 | |
| 85 | Verwandt: |
| 86 | InternalModifyDefend(), Defend(), DefendInfo() |
| 87 | |
| 88 | 16.01.2019 Zesstra |