blob: 1683b3f35ebd5ccc2d4925a3c3d480e1ae3ac7e5 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2DefendFunc()
3************
4
5
MG Mud User88f12472016-06-24 23:31:02 +02006DefendFunc(L)
Zesstra953f9972017-02-18 15:37:36 +01007=============
MG Mud User88f12472016-06-24 23:31:02 +02008
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstra953f9972017-02-18 15:37:36 +010010FUNKTION
11========
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstra953f9972017-02-18 15:37:36 +010013 int DefendFunc(string|string *dtyp, int|mappingspell, object enemy);
MG Mud User88f12472016-06-24 23:31:02 +020014
MG Mud User88f12472016-06-24 23:31:02 +020015
Zesstra953f9972017-02-18 15:37:36 +010016DEFINIERT IN
17============
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019 eigenen Objekten; fuer /std/armour/combat.c
MG Mud User88f12472016-06-24 23:31:02 +020020
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022ARGUMENTE
23=========
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025 dtyp
26 Schadenstypen der Angriffsart.
27 Sollte heute ein string* sein.
28 spell
29 0 bei veralteten konventionellen Angriffen im Regelfall jedoch
30 ein Mapping mit weiteren Infos.
31 Bei einem konventionellen Angriff ist spell[SP_PHYSICAL_ATTACK] gleich
32 1.
33 enemy
34 Der angreifende Gegner
MG Mud User88f12472016-06-24 23:31:02 +020035
MG Mud User88f12472016-06-24 23:31:02 +020036
Zesstra953f9972017-02-18 15:37:36 +010037BESCHREIBUNG
38============
MG Mud User88f12472016-06-24 23:31:02 +020039
Zesstra953f9972017-02-18 15:37:36 +010040 Anhand der uebergebenen Parameter kann hier ein Ruestungsbonus (oder
41 auch ein Ruestungsmalus) errechnet werden, der zu dem normalen
42 Ruestungswert (abhaengig von der Angriffsart) hinzuaddiert wird.
MG Mud User88f12472016-06-24 23:31:02 +020043
MG Mud User88f12472016-06-24 23:31:02 +020044
Zesstra953f9972017-02-18 15:37:36 +010045RUeCKGABEWERT
46=============
MG Mud User88f12472016-06-24 23:31:02 +020047
Zesstra953f9972017-02-18 15:37:36 +010048 Der Ruestungsbonus, der zur Ruestungsklasse addiert werden soll.
MG Mud User88f12472016-06-24 23:31:02 +020049
Zesstra953f9972017-02-18 15:37:36 +010050
51BEMERKUNGEN
52===========
53
54 Auch wenn man eine DefendFunc() benutzt, darf der Rueckgabewert
55 zusammen mit der P_AC insgesamt nur in sehr seltenen, wohldurch-
56 dachten Ausnahmefaellen die maximal zulaessige P_AC fuer diesen
57 Ruestungstyp ueberschreiten. In solchen Ausnahmefaellen duerfen
58 die DefendFuncs nicht konstant wirken.
59
60 Bei aktivem Zurueckschlagen IMMER auf Flags wie SP_RECURSIVE und
61 SP_NO_ACTIVE_DEFENSE pruefen und ggf. abbrechen.
62
63
64BEISPIELE
65=========
66
67 Eine Ruestung, die bei Angriffen mit Feuer ihre volle Staerke entfaltet
68 und bei Angriffen durch Geister geschwaecht wird:
69
70 void create()
71 {
72 ::create();
73
74 SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
75 SetProp(P_AC, 20);
76 ...
77 // Die DefendFunc() ist in der Ruestung selbst definiert
78 SetProp(P_DEFEND_FUNC, this_object());
79 }
80
81 int DefendFunc(string *dtyp, mixed spell, object enemy)
82 {
83 int prot;
84
85 // Zuerst fragen wir den Angriff durch Feuer ab:
86 if (member(dtyp, DT_FIRE) >= 0) // Feuer gehoert zu den Schadenstypen
87 prot = 5 + random(10); // Das ergibt maximal 14. Zusammen mit P_AC
88 // kommt man also maximal auf 14+20 = 34,
89 // liegt also unter der fuer AT_ARMOUR
90 // geltenden Obergrenze
91
92 // Und jetzt der Geistertest
93 if (enemy->QueryProp(P_RACE) == "Geist" ||
94 enemy->is_class_member(CL_GHOST))
95 prot -= random(10);
96
97 // Der Rueckgabewert wird auf den aus P_AC errechneten Wert draufgeschlagen
98 return prot;
99 }
100
101
102SIEHE AUCH
103==========
104
105 P_DEFEND_FUNC, QueryDefend(), /std/armour/combat.c
106
MG Mud User88f12472016-06-24 23:31:02 +0200107Last modified: 18.Jul 2006 Muadib