blob: 6b86f13670ffecc4528fa46ddc354584662002dc [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001DefendFunc()
2============
3
Zesstra18626972017-01-31 10:38:27 +01004FUNKTION
5--------
Zesstra18626972017-01-31 10:38:27 +01006
heull0014041d7a2017-08-23 21:50:30 +02007 public int DefendFunc(string* dtyp, mapping spell, object enemy);
Zesstra18626972017-01-31 10:38:27 +01008
9DEFINIERT IN
10------------
Zesstra18626972017-01-31 10:38:27 +010011
heull0014041d7a2017-08-23 21:50:30 +020012 Eigenen Objekten; fuer /std/armour/combat.c
Zesstra18626972017-01-31 10:38:27 +010013
14ARGUMENTE
15---------
Zesstra18626972017-01-31 10:38:27 +010016
17 dtyp
18 Schadenstypen der Angriffsart.
Zesstra18626972017-01-31 10:38:27 +010019 spell
heull0014041d7a2017-08-23 21:50:30 +020020 Ein Mapping mit weiteren Infos.
Zesstra18626972017-01-31 10:38:27 +010021 Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
22 1.
23 enemy
24 Der angreifende Gegner
25
26BESCHREIBUNG
27------------
Zesstra18626972017-01-31 10:38:27 +010028
29 Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
30 auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
31 Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
32
33RUeCKGABEWERT
34-------------
Zesstra18626972017-01-31 10:38:27 +010035
36 Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
37
38BEMERKUNGEN
39-----------
Zesstra18626972017-01-31 10:38:27 +010040
41 Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
42 zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
43 dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
44 Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
45 die DefendFuncs nicht konstant wirken.
heull0014041d7a2017-08-23 21:50:30 +020046 Ausserdem sind solche Ruestungen immer genehmigungspflichtig.
Zesstra18626972017-01-31 10:38:27 +010047
48 Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
49 SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
50
51BEISPIELE
52---------
Zesstra18626972017-01-31 10:38:27 +010053
54 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
55 und bei Angriffen durch Geister geschwaecht wird:
56
heull0014041d7a2017-08-23 21:50:30 +020057 protected void create()
Zesstra18626972017-01-31 10:38:27 +010058 {
59 ::create();
60
61 SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
62 SetProp(P_AC, 20);
63 ...
64 // Die DefendFunc() ist in der Ruestung selbst definiert
65 SetProp(P_DEFEND_FUNC, this_object());
66 }
67
heull0014041d7a2017-08-23 21:50:30 +020068 public int DefendFunc(string* dtyp, mapping spell, object enemy)
Zesstra18626972017-01-31 10:38:27 +010069 {
70 int prot;
71
72 // Zuerst fragen wir den Angriff durch Feuer ab:
73 if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
74 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
75 // kommt man also maximal auf 14+20 = 34,
76 // liegt also unter der fuer AT_ARMOUR
77 // geltenden Obergrenze
78
79 // Und jetzt der Geistertest
80 if (enemy->QueryProp(P_RACE) == "Geist" ||
81 enemy->is_class_member(CL_GHOST))
82 prot -= random(10);
83
84 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
85 return prot;
86 }
87
88SIEHE AUCH
89----------
Zesstra18626972017-01-31 10:38:27 +010090
heull0014041d7a2017-08-23 21:50:30 +020091 :doc:`../props/P_DEFEND_FUNC`, :doc:`QueryDefendd`
92 /std/armour/combat.c