blob: 2ae2207a78732aa42ffb2699fae4fbcb4ed84095 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001Defend_bsp()
2============
3
4Defend() - BEISPIELE
5--------------------
Zesstra18626972017-01-31 10:38:27 +01006
7FUNKTION
8--------
Zesstra18626972017-01-31 10:38:27 +01009
10 varargs int Defend(int dam, mixed dam_type, mixed spell, object enemy)
11
12BEMERKUNGEN
13-----------
Zesstra18626972017-01-31 10:38:27 +010014
15 Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis gedacht.
16
17BEISPIELE
18---------
Zesstra18626972017-01-31 10:38:27 +010019
20 1) Ein ordinaerer Biss ins Bein.
Zesstradbf63d62020-01-23 19:06:08 +010021
22 .. code-block:: pike
23
24 this_player()->Defend(random(500),
25 ({DT_PIERCE, DT_RIP}),
26 0,
27 this_object());
Zesstra18626972017-01-31 10:38:27 +010028
29 2) Ein Biss ins Bein, mit der Hose als 200%ige Ruestung und Rest mit 100%.
Zesstradbf63d62020-01-23 19:06:08 +010030
31 .. code-block:: pike
32
33 this_player()->Defend(random(500),
34 ({DT_PIERCE, DT_RIP}),
35 ([SP_PHYSICAL_ATTACK: 1,
36 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200])
37 ]),
38 this_object());
Zesstra18626972017-01-31 10:38:27 +010039
40 3) Der Biss, wenn ein Tier in die Hose gekrochen ist und dieser ohne
41 Treffermeldung und physischen Ruestungsschutz durchgeht.
Zesstradbf63d62020-01-23 19:06:08 +010042
43 .. code-block:: pike
44
45 this_player()->Defend(random(500),
46 ({DT_PIERCE, DT_RIP}),
47 ([SP_PHYSICAL_ATTACK: 0, SP_SHOW_DAMAGE:0]),
48 this_object());
Zesstra18626972017-01-31 10:38:27 +010049
50 4) Spell-Parameter
Zesstradbf63d62020-01-23 19:06:08 +010051 Beispiel fuer einen Spell, der nur vom Helm normal und von einem
52 Amulett mit 115% aufgehalten wird, alle anderen (angebenenen)
53 Ruestungen haben 0% Schutzwirkung.
54 Mit Ausgabe eigener Meldungen: beginnend mit -1, da der verursachte
55 Schadenswert minimal 0 wird (fuers Ersetzen: Feind: @WEx2,
56 Spieler: WEx1); maximal wird er (Empfindlichkeiten jetzt mal aussen
57 vor) 49 (499/10 = 49), nicht 499!!!
58
59 .. code-block:: pike
60
61 this_player()->Defend(
Zesstra18626972017-01-31 10:38:27 +010062 random(500),
63 ({DT_PIERCE, DT_AIR}),
64 ([SP_PHYSICAL_ATTACK: 1, // wegen DT_PIERCE
65 SP_REDUCE_ARMOUR: ([AT_ARMOUR: 0,
66 AT_HELMET: 100,
67 AT_RING: 0,
68 AT_GLOVE: 0,
69 AT_CLOAK: 0,
70 AT_BOOT: 0,
71 AT_TROUSERS: 0,
72 AT_SHIELD: 0,
73 AT_AMULET: 115,
74 AT_MISC: 0,
75 AT_BELT: 0,
76 AT_QUIVER: 0])
77 SP_SHOW_DAMAGE:
78 ({({-1,"@WER2 schrammt Dich mit einem durchbohrenden Blick.",
79 "Du schrammst @WEN1 mit einem durchbohrenden Blick.",
80 "@WER2 schrammt @WEN1 mit einem durchbohrenden Blick."
81 }),
82 ({5,"Der durchbohrende Blick von @WEM2 trifft Dich.",
83 "Dein durchbohrender Blick trifft @WEN1.",
84 "Der durchbohrende Blick von @WEM2 trifft @WEN1."
85 }),
86 ({20,"@WESSEN2 stechender Blick durchbohrt Dich.",
87 "Dein stechender Blick durchbohrt @WEN1.",
88 "@WESSEN2 stechender Blick durchbohrt @WEN1."
89 })})
90 ]),
91 this_object());
92
Zesstradbf63d62020-01-23 19:06:08 +010093 Etwas geschickter geht das Ganze, wenn wir einfach aus der Mudlib
94 alle existierenden Ruestungen in ein Mapping packen und diese
95 nullen (damit sind wir auch gegen neue Ruestungstypen sicher):
Zesstra18626972017-01-31 10:38:27 +010096
Zesstradbf63d62020-01-23 19:06:08 +010097 .. code-block:: pike
98
99 mapping amap = map_indices(VALID_ARMOUR_CLASS,#'!);
100 amap[AT_HELMET]=100;
101 amap[AT_AMULET]=115;
102
103 this_player()->Defend(random(500),
104 ({DT_PIERCE, DT_AIR}),
105 ([SP_PHYSICAL_ATTACK: 1,
106 SP_REDUCE_ARMOUR: amap,
107 SP_SHOW_DAMAGE: ({ ... (siehe oben)
Zesstra18626972017-01-31 10:38:27 +0100108
109 5) Der Biss von weiter oben mit Meldung.
Zesstradbf63d62020-01-23 19:06:08 +0100110 Eine Meldung, die nur ausgegeben wird, wenn der Biss auch mindestens
111 einen LP abzieht.
112
113 .. code-block:: pike
114
115 this_player()->Defend(random(500),
116 ({DT_PIERCE, DT_RIP}),
117 ([SP_PHYSICAL_ATTACK: 1,
118 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200]),
119 SP_SHOW_DAMAGE: ({
120 ({1,"@WER2 beisst Dich ins Bein!",
121 "Du beisst @WEN1 ins Bein!",
122 "@WER2 beisst @WEN1 ins Bein!"
123 }) })
124 ]),
125 this_object());
Zesstra18626972017-01-31 10:38:27 +0100126
127 6) DefendFunc() und Defend() in einem Objekt
Zesstra18626972017-01-31 10:38:27 +0100128
Zesstradbf63d62020-01-23 19:06:08 +0100129 a) eine Luftangriffe reflektierende Ruestung:
Zesstra18626972017-01-31 10:38:27 +0100130
Zesstradbf63d62020-01-23 19:06:08 +0100131 .. code-block:: pike
132
133 int DefendFunc(string *dtyp, mixed spell, object enemy) {
134 if(member(dtyp, DT_AIR)>=0 && !spell[SP_RECURSIVE])
135 enemy->Defend(random(200),
136 ({DT_AIR}),
137 ([SP_RECURSIVE: 1,
138 SP_SHOW_DAMAGE:
139 ({"Ein Luftwirbel erfasst auch Dich.",
140 "Deine Ruestung wirbelt @WEN1 herum.",
141 "@WESSEN2 Ruestung wirbelt @WEN1 herum."
142 })
143 ]),
144 QueryProp(P_WORN));
145
146 return 0; // -> In diesem Fall gibts keinen Ruestungsbonus!
147 }
148
149 b) Eine NUR REINE Luftangriffe reflektierende Ruestung:
150
151 .. code-block:: pike
152
153 int DefendFunc(string *dtyp, mixed spell, object enemy) {
154 if(!sizeof(dtyp-({DT_AIR})) && !spell[SP_RECURSIVE])
155 ...
Zesstra18626972017-01-31 10:38:27 +0100156
157SIEHE AUCH
158----------
Zesstra18626972017-01-31 10:38:27 +0100159
Zesstradbf63d62020-01-23 19:06:08 +0100160 * Angriff:
161 :doc:`Attack`, :doc:`do_damage`, :doc:`InsertEnemy`,
162 :doc:`../props/P_NO_ATTACK`
Zesstra18626972017-01-31 10:38:27 +0100163
Zesstradbf63d62020-01-23 19:06:08 +0100164 * Schaden:
165 :doc:`reduce_hit_points`, :doc:`reduce_spell_points`,
166 :doc:`../props/P_ENABLE_IN_ATTACK_OUT`, :doc:`../props/P_LAST_MOVE`
Zesstra18626972017-01-31 10:38:27 +0100167
Zesstradbf63d62020-01-23 19:06:08 +0100168 * Schutz:
169 :doc:`InformDefend`, :doc:`DefendOther`, :doc:`QueryDefend`,
170 :doc:`Defend`,
171 :doc:`../props/P_DEFENDERS`, :doc:`../props/P_ARMOURS`,
172 :doc:`../props/P_AC`, :doc:`../props/P_DEFEND_FUNC`,
173 :doc:`../props/P_BODY`
174
175 * Resistenz:
176 :doc:`CheckResistance`, :doc:`../props/P_RESISTANCE_STRENGTHS`
177
178 * Daten:
179 :doc:`../props/P_LAST_COMBAT_TIME`, :doc:`../props/P_LAST_XP`,
180 :doc:`../props/P_LAST_DAMAGE`, :doc:`../props/P_LAST_DAMTYPES`,
181 :doc:`../props/P_LAST_DAMTIME`
182
183 * Sonstiges
184 :doc:`CheckSensitiveAttack`, :doc:`UseSkill`, :doc:`InternalModifyDefend`
185
18623.01.2020 Zesstra