blob: ce651b9d8e20e854acf7aa2b3f8681b751c52c7f [file] [log] [blame]
Zesstra5bf48ac2019-02-04 20:33:36 +01001normalize_defend_args()
2***********************
3
4
5FUNKTION
6========
7
8 protected nomask void normalize_defend_args(int dam,
9 string|string* dam_types, int|mapping si_spell, object enemy)
10
11
12DEFINIERT IN
13============
14
15 /std/living/combat.c
16
17
18ARGUMENTE
19=========
20
21 Die Argumente sind die Argumente, welche Defend() uebergeben
22 bekommt (siehe dort!)
23
24
25BESCHREIBUNG
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,
Zesstra69142402019-08-19 20:14:40 +020053 wenn si_spell 0 war, sonst 1.
Zesstra5bf48ac2019-02-04 20:33:36 +010054
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
64BEISPIELE
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
82SIEHE AUCH
83==========
84
85 Verwandt:
86 InternalModifyDefend(), Defend(), DefendInfo()
87
8816.01.2019 Zesstra