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