blob: 5b411abd31c8b534f8d45ecaa68b4b6b0b0243cc [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001Defend_bsp()
2************
3
4
MG Mud User88f12472016-06-24 23:31:02 +02005Defend() - BEISPIELE
Zesstra953f9972017-02-18 15:37:36 +01006====================
MG Mud User88f12472016-06-24 23:31:02 +02007
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009FUNKTION
10========
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra051ad6b2020-01-23 21:46:58 +010012 varargs int Defend(int dam, mixed dam_type, mixed spell, object
13 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 +010016BEMERKUNGEN
17===========
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra051ad6b2020-01-23 21:46:58 +010019 Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis
20 gedacht.
MG Mud User88f12472016-06-24 23:31:02 +020021
MG Mud User88f12472016-06-24 23:31:02 +020022
Zesstra953f9972017-02-18 15:37:36 +010023BEISPIELE
24=========
MG Mud User88f12472016-06-24 23:31:02 +020025
Zesstra051ad6b2020-01-23 21:46:58 +010026 1. Ein ordinaerer Biss ins Bein.
MG Mud User88f12472016-06-24 23:31:02 +020027
Zesstra051ad6b2020-01-23 21:46:58 +010028 this_player()->Defend(random(500),
29 ({DT_PIERCE, DT_RIP}),
30 0,
31 this_object());
MG Mud User88f12472016-06-24 23:31:02 +020032
Zesstra051ad6b2020-01-23 21:46:58 +010033 2. Ein Biss ins Bein, mit der Hose als 200%ige Ruestung und Rest
34 mit 100%.
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra051ad6b2020-01-23 21:46:58 +010036 this_player()->Defend(random(500),
37 ({DT_PIERCE, DT_RIP}),
38 ([SP_PHYSICAL_ATTACK: 1,
39 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200])
40 ]),
41 this_object());
MG Mud User88f12472016-06-24 23:31:02 +020042
Zesstra051ad6b2020-01-23 21:46:58 +010043 3. Der Biss, wenn ein Tier in die Hose gekrochen ist und dieser
44 ohne Treffermeldung und physischen Ruestungsschutz durchgeht.
Zesstra953f9972017-02-18 15:37:36 +010045
Zesstra051ad6b2020-01-23 21:46:58 +010046 this_player()->Defend(random(500),
47 ({DT_PIERCE, DT_RIP}),
48 ([SP_PHYSICAL_ATTACK: 0, SP_SHOW_DAMAGE:0]),
49 this_object());
Zesstra953f9972017-02-18 15:37:36 +010050
Zesstra051ad6b2020-01-23 21:46:58 +010051 4. Spell-Parameter Beispiel fuer einen Spell, der nur vom Helm
52 normal und von einem Amulett mit 115% aufgehalten wird, alle
53 anderen (angebenenen) Ruestungen haben 0% Schutzwirkung. Mit
54 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
57 aussen vor) 49 (499/10 = 49), nicht 499!!!
Zesstra953f9972017-02-18 15:37:36 +010058
Zesstra051ad6b2020-01-23 21:46:58 +010059 this_player()->Defend(
60 random(500),
61 ({DT_PIERCE, DT_AIR}),
62 ([SP_PHYSICAL_ATTACK: 1, // wegen DT_PIERCE
63 SP_REDUCE_ARMOUR: ([AT_ARMOUR: 0,
64 AT_HELMET: 100,
65 AT_RING: 0,
66 AT_GLOVE: 0,
67 AT_CLOAK: 0,
68 AT_BOOT: 0,
69 AT_TROUSERS: 0,
70 AT_SHIELD: 0,
71 AT_AMULET: 115,
72 AT_MISC: 0,
73 AT_BELT: 0,
74 AT_QUIVER: 0])
75 SP_SHOW_DAMAGE:
76 ({({-1,"@WER2 schrammt Dich mit einem durchbohrenden Blick.",
77 "Du schrammst @WEN1 mit einem durchbohrenden Blick.",
78 "@WER2 schrammt @WEN1 mit einem durchbohrenden Blick."
79 }),
80 ({5,"Der durchbohrende Blick von @WEM2 trifft Dich.",
81 "Dein durchbohrender Blick trifft @WEN1.",
82 "Der durchbohrende Blick von @WEM2 trifft @WEN1."
83 }),
84 ({20,"@WESSEN2 stechender Blick durchbohrt Dich.",
85 "Dein stechender Blick durchbohrt @WEN1.",
86 "@WESSEN2 stechender Blick durchbohrt @WEN1."
87 })})
88 ]),
89 this_object());
Zesstra953f9972017-02-18 15:37:36 +010090
Zesstra051ad6b2020-01-23 21:46:58 +010091 Etwas geschickter geht das Ganze, wenn wir einfach aus der
92 Mudlib alle existierenden Ruestungen in ein Mapping packen und
93 diese nullen (damit sind wir auch gegen neue Ruestungstypen
94 sicher):
Zesstra953f9972017-02-18 15:37:36 +010095
Zesstra051ad6b2020-01-23 21:46:58 +010096 mapping amap = map_indices(VALID_ARMOUR_CLASS,#'!);
97 amap[AT_HELMET]=100;
98 amap[AT_AMULET]=115;
99
100 this_player()->Defend(random(500),
101 ({DT_PIERCE, DT_AIR}),
102 ([SP_PHYSICAL_ATTACK: 1,
103 SP_REDUCE_ARMOUR: amap,
104 SP_SHOW_DAMAGE: ({ ... (siehe oben)
105
106 5. Der Biss von weiter oben mit Meldung. Eine Meldung, die nur
107 ausgegeben wird, wenn der Biss auch mindestens einen LP abzieht.
108
109 this_player()->Defend(random(500),
110 ({DT_PIERCE, DT_RIP}),
111 ([SP_PHYSICAL_ATTACK: 1,
112 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200]),
113 SP_SHOW_DAMAGE: ({
114 ({1,"@WER2 beisst Dich ins Bein!",
115 "Du beisst @WEN1 ins Bein!",
116 "@WER2 beisst @WEN1 ins Bein!"
117 }) })
118 ]),
119 this_object());
120
121 6. DefendFunc() und Defend() in einem Objekt
122
123 1. eine Luftangriffe reflektierende Ruestung:
124
125 int DefendFunc(string *dtyp, mixed spell, object enemy) {
126 if(member(dtyp, DT_AIR)>=0 && !spell[SP_RECURSIVE])
127 enemy->Defend(random(200),
128 ({DT_AIR}),
129 ([SP_RECURSIVE: 1,
130 SP_SHOW_DAMAGE:
131 ({"Ein Luftwirbel erfasst auch Dich.",
132 "Deine Ruestung wirbelt @WEN1 herum.",
133 "@WESSEN2 Ruestung wirbelt @WEN1 herum."
134 })
135 ]),
136 QueryProp(P_WORN));
137
138 return 0; // -> In diesem Fall gibts keinen Ruestungsbonus!
139 }
140
141 2. Eine NUR REINE Luftangriffe reflektierende Ruestung:
142
143 int DefendFunc(string *dtyp, mixed spell, object enemy) {
144 if(!sizeof(dtyp-({DT_AIR})) && !spell[SP_RECURSIVE])
145 ...
Zesstra953f9972017-02-18 15:37:36 +0100146
147
148SIEHE AUCH
149==========
150
Zesstra051ad6b2020-01-23 21:46:58 +0100151 * Angriff: Attack(), do_damage(), InsertEnemy(), P_NO_ATTACK
MG Mud User88f12472016-06-24 23:31:02 +0200152
Zesstra051ad6b2020-01-23 21:46:58 +0100153 * Schaden: reduce_hit_points(), reduce_spell_points(),
154 P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE
155
156 * Schutz: InformDefend(), DefendOther(), QueryDefend(), Defend(),
157 P_DEFENDERS, P_ARMOURS, P_AC, P_DEFEND_FUNC, P_BODY
158
159 * Resistenz: CheckResistance(), P_RESISTANCE_STRENGTHS
160
161 * Daten: P_LAST_COMBAT_TIME, P_LAST_XP, P_LAST_DAMAGE,
162 P_LAST_DAMTYPES, P_LAST_DAMTIME
163
164 * Sonstiges CheckSensitiveAttack(), UseSkill(),
165 InternalModifyDefend()
166
16723.01.2020 Zesstra