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