blob: 40171abb2bc6e2e667113faf872c118272794834 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001DefendFunc()
2************
3
4
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra0c1a85a2018-02-07 23:46:50 +01008 public int DefendFunc(string* dtyp, mapping spell, object enemy);
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra0c1a85a2018-02-07 23:46:50 +010014 Eigenen Objekten; fuer /std/armour/combat.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra953f9972017-02-18 15:37:36 +010020 dtyp
Zesstra0c1a85a2018-02-07 23:46:50 +010021 Schadenstypen der Angriffsart.
22
Zesstra953f9972017-02-18 15:37:36 +010023 spell
Zesstra0c1a85a2018-02-07 23:46:50 +010024 Ein Mapping mit weiteren Infos. Bei einem konventionellen
25 Angriff ist spell[SP_PHYSICAL_ATTACK] gleich 1.
26
Zesstra953f9972017-02-18 15:37:36 +010027 enemy
Zesstra0c1a85a2018-02-07 23:46:50 +010028 Der angreifende Gegner
MG Mud User88f12472016-06-24 23:31:02 +020029
MG Mud User88f12472016-06-24 23:31:02 +020030
Zesstra953f9972017-02-18 15:37:36 +010031BESCHREIBUNG
32============
MG Mud User88f12472016-06-24 23:31:02 +020033
Zesstra0c1a85a2018-02-07 23:46:50 +010034 Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus
35 (oder auch ein Ruestungsmalus) errechnet werden, der zu dem
36 normalen Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert
37 wird.
MG Mud User88f12472016-06-24 23:31:02 +020038
MG Mud User88f12472016-06-24 23:31:02 +020039
Zesstra953f9972017-02-18 15:37:36 +010040RUeCKGABEWERT
41=============
MG Mud User88f12472016-06-24 23:31:02 +020042
Zesstra953f9972017-02-18 15:37:36 +010043 Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
MG Mud User88f12472016-06-24 23:31:02 +020044
Zesstra953f9972017-02-18 15:37:36 +010045
46BEMERKUNGEN
47===========
48
49 Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
50 zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
51 dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
Zesstra0c1a85a2018-02-07 23:46:50 +010052 Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen die
53 DefendFuncs nicht konstant wirken. Ausserdem sind solche Ruestungen
54 immer genehmigungspflichtig.
Zesstra953f9972017-02-18 15:37:36 +010055
56 Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
57 SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
58
59
60BEISPIELE
61=========
62
Arathorn41004de2020-10-18 22:03:28 +020063 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
64 und bei Angriffen durch Geister geschwaecht wird:
Zesstra953f9972017-02-18 15:37:36 +010065
Arathorn41004de2020-10-18 22:03:28 +020066 protected void create()
67 {
68 ::create();
Zesstra953f9972017-02-18 15:37:36 +010069
Arathorn41004de2020-10-18 22:03:28 +020070 SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
71 SetProp(P_AC, 20);
72 ...
73 // Die DefendFunc() ist in der Ruestung selbst definiert
74 SetProp(P_DEFEND_FUNC, this_object());
Zesstra953f9972017-02-18 15:37:36 +010075 }
76
Arathorn41004de2020-10-18 22:03:28 +020077 public int DefendFunc(string* dtyp, mapping spell, object enemy)
78 {
79 int prot;
Zesstra953f9972017-02-18 15:37:36 +010080
Arathorn41004de2020-10-18 22:03:28 +020081 // Zuerst fragen wir den Angriff durch Feuer ab:
82 if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
83 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
84 // kommt man also maximal auf 14+20 = 34,
85 // liegt also unter der fuer AT_ARMOUR
86 // geltenden Obergrenze
Zesstra953f9972017-02-18 15:37:36 +010087
Arathorn41004de2020-10-18 22:03:28 +020088 // Und jetzt der Geistertest
89 if (enemy->QueryProp(P_RACE) == "Geist" ||
90 enemy->is_class_member(CL_GHOST))
91 prot -= random(10);
Zesstra953f9972017-02-18 15:37:36 +010092
Arathorn41004de2020-10-18 22:03:28 +020093 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
94 // draufgeschlagen
95 return prot;
Zesstra953f9972017-02-18 15:37:36 +010096 }
97
98
99SIEHE AUCH
100==========
101
Arathorn41004de2020-10-18 22:03:28 +0200102 P_DEFEND_FUNC, QueryDefend() /std/armour/combat.c