blob: 00bfc9102ac20928e79e76f25afd4048555cc27f [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
Arathorn41004de2020-10-18 22:03:28 +020064 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
65 und bei Angriffen durch Geister geschwaecht wird:
Zesstra953f9972017-02-18 15:37:36 +010066
Arathorn41004de2020-10-18 22:03:28 +020067 protected void create()
68 {
69 ::create();
Zesstra953f9972017-02-18 15:37:36 +010070
Arathorn41004de2020-10-18 22:03:28 +020071 SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
72 SetProp(P_AC, 20);
73 ...
74 // Die DefendFunc() ist in der Ruestung selbst definiert
75 SetProp(P_DEFEND_FUNC, this_object());
Zesstra953f9972017-02-18 15:37:36 +010076 }
77
Arathorn41004de2020-10-18 22:03:28 +020078 public int DefendFunc(string* dtyp, mapping spell, object enemy)
79 {
80 int prot;
Zesstra953f9972017-02-18 15:37:36 +010081
Arathorn41004de2020-10-18 22:03:28 +020082 // Zuerst fragen wir den Angriff durch Feuer ab:
83 if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
84 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
85 // kommt man also maximal auf 14+20 = 34,
86 // liegt also unter der fuer AT_ARMOUR
87 // geltenden Obergrenze
Zesstra953f9972017-02-18 15:37:36 +010088
Arathorn41004de2020-10-18 22:03:28 +020089 // Und jetzt der Geistertest
90 if (enemy->QueryProp(P_RACE) == "Geist" ||
91 enemy->is_class_member(CL_GHOST))
92 prot -= random(10);
Zesstra953f9972017-02-18 15:37:36 +010093
Arathorn41004de2020-10-18 22:03:28 +020094 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert
95 // draufgeschlagen
96 return prot;
Zesstra953f9972017-02-18 15:37:36 +010097 }
98
99
100SIEHE AUCH
101==========
102
Arathorn41004de2020-10-18 22:03:28 +0200103 P_DEFEND_FUNC, QueryDefend() /std/armour/combat.c