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