blob: e0a9c78f837c4f7ad9a8606a49b7de2347b0e785 [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---------
Arathorn41004de2020-10-18 22:03:28 +020053::
Zesstra18626972017-01-31 10:38:27 +010054
55 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
56 und bei Angriffen durch Geister geschwaecht wird:
57
heull0014041d7a2017-08-23 21:50:30 +020058 protected void create()
Zesstra18626972017-01-31 10:38:27 +010059 {
60 ::create();
61
62 SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
63 SetProp(P_AC, 20);
64 ...
65 // Die DefendFunc() ist in der Ruestung selbst definiert
66 SetProp(P_DEFEND_FUNC, this_object());
67 }
68
heull0014041d7a2017-08-23 21:50:30 +020069 public int DefendFunc(string* dtyp, mapping spell, object enemy)
Zesstra18626972017-01-31 10:38:27 +010070 {
71 int prot;
72
73 // Zuerst fragen wir den Angriff durch Feuer ab:
74 if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
75 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
76 // kommt man also maximal auf 14+20 = 34,
77 // liegt also unter der fuer AT_ARMOUR
78 // geltenden Obergrenze
79
80 // Und jetzt der Geistertest
81 if (enemy->QueryProp(P_RACE) == "Geist" ||
82 enemy->is_class_member(CL_GHOST))
83 prot -= random(10);
84
Arathorn41004de2020-10-18 22:03:28 +020085 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
86 // draufgeschlagen
Zesstra18626972017-01-31 10:38:27 +010087 return prot;
88 }
89
90SIEHE AUCH
91----------
Zesstra18626972017-01-31 10:38:27 +010092
Arathorn41004de2020-10-18 22:03:28 +020093 :doc:`../props/P_DEFEND_FUNC`, :doc:`QueryDefend`
heull0014041d7a2017-08-23 21:50:30 +020094 /std/armour/combat.c