blob: a544cc28381bb7b97a50cf7f316907319f3e8666 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2DefendFunc()
3************
4
5
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra0c1a85a2018-02-07 23:46:50 +01009 public int DefendFunc(string* dtyp, mapping spell, object enemy);
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra0c1a85a2018-02-07 23:46:50 +010015 Eigenen Objekten; fuer /std/armour/combat.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 dtyp
Zesstra0c1a85a2018-02-07 23:46:50 +010022 Schadenstypen der Angriffsart.
23
Zesstra953f9972017-02-18 15:37:36 +010024 spell
Zesstra0c1a85a2018-02-07 23:46:50 +010025 Ein Mapping mit weiteren Infos. Bei einem konventionellen
26 Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.
27
Zesstra953f9972017-02-18 15:37:36 +010028 enemy
Zesstra0c1a85a2018-02-07 23:46:50 +010029 Der angreifende Gegner
MG Mud User88f12472016-06-24 23:31:02 +020030
MG Mud User88f12472016-06-24 23:31:02 +020031
Zesstra953f9972017-02-18 15:37:36 +010032BESCHREIBUNG
33============
MG Mud User88f12472016-06-24 23:31:02 +020034
Zesstra0c1a85a2018-02-07 23:46:50 +010035 Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus
36 (oder auch ein Ruestungsmalus) errechnet werden, der zu dem
37 normalen Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert
38 wird.
MG Mud User88f12472016-06-24 23:31:02 +020039
MG Mud User88f12472016-06-24 23:31:02 +020040
Zesstra953f9972017-02-18 15:37:36 +010041RUeCKGABEWERT
42=============
MG Mud User88f12472016-06-24 23:31:02 +020043
Zesstra953f9972017-02-18 15:37:36 +010044 Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
MG Mud User88f12472016-06-24 23:31:02 +020045
Zesstra953f9972017-02-18 15:37:36 +010046
47BEMERKUNGEN
48===========
49
50 Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
51 zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
52 dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
Zesstra0c1a85a2018-02-07 23:46:50 +010053 Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
54 DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
55 immer genehmigungspflichtig.
Zesstra953f9972017-02-18 15:37:36 +010056
57 Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
58 SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
59
60
61BEISPIELE
62=========
63
Zesstra0c1a85a2018-02-07 23:46:50 +010064 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke
65 entfaltet und bei Angriffen durch Geister geschwaecht wird:
Zesstra953f9972017-02-18 15:37:36 +010066
Zesstra0c1a85a2018-02-07 23:46:50 +010067 protected void create() {
Zesstra953f9972017-02-18 15:37:36 +010068
Zesstra0c1a85a2018-02-07 23:46:50 +010069 ::create();
70
71 SetProp(P_ARMOUR_TYPE, AT_ARMOUR); SetProp(P_AC, 20); ... // Die
72 DefendFunc() ist in der Ruestung selbst definiert
73 SetProp(P_DEFEND_FUNC, this_object());
74
Zesstra953f9972017-02-18 15:37:36 +010075 }
76
Zesstra0c1a85a2018-02-07 23:46:50 +010077 public int DefendFunc(string* dtyp, mapping spell, object enemy) {
Zesstra953f9972017-02-18 15:37:36 +010078
Zesstra0c1a85a2018-02-07 23:46:50 +010079 int prot;
Zesstra953f9972017-02-18 15:37:36 +010080
Zesstra0c1a85a2018-02-07 23:46:50 +010081 // Zuerst fragen wir den Angriff durch Feuer ab: if
82 (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den
83 Schadenstypen
Zesstra953f9972017-02-18 15:37:36 +010084
Zesstra0c1a85a2018-02-07 23:46:50 +010085 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit
86 P_AC
87 // kommt man also maximal auf 14+20 = 34, // liegt also
88 unter der fuer AT_ARMOUR // geltenden Obergrenze
89
90 // Und jetzt der Geistertest if (enemy->QueryProp(P_RACE) ==
91 "Geist" ||
92
93 enemy->is_class_member(CL_GHOST))
94
95 prot -= random(10);
96
97 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
98 draufgeschlagen return prot;
99
Zesstra953f9972017-02-18 15:37:36 +0100100 }
101
102
103SIEHE AUCH
104==========
105
Zesstra0c1a85a2018-02-07 23:46:50 +0100106 *P_DEFEND_FUNC*, "QueryDefendd" /std/armour/combat.c