blob: e3e4261d8eaf71b238a4804d5ee40cef2e3a1f13 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
2Defend_bsp()
3************
4
5
MG Mud User88f12472016-06-24 23:31:02 +02006Defend() - BEISPIELE
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
Zesstra051ad6b2020-01-23 21:46:58 +010013 varargs int Defend(int dam, mixed dam_type, mixed spell, object
14 enemy)
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017BEMERKUNGEN
18===========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra051ad6b2020-01-23 21:46:58 +010020 Die hier aufgefuehrten Komplexbeispiele sind zum Verstaendnis
21 gedacht.
MG Mud User88f12472016-06-24 23:31:02 +020022
MG Mud User88f12472016-06-24 23:31:02 +020023
Zesstra953f9972017-02-18 15:37:36 +010024BEISPIELE
25=========
MG Mud User88f12472016-06-24 23:31:02 +020026
Zesstra051ad6b2020-01-23 21:46:58 +010027 1. Ein ordinaerer Biss ins Bein.
MG Mud User88f12472016-06-24 23:31:02 +020028
Zesstra051ad6b2020-01-23 21:46:58 +010029 this_player()->Defend(random(500),
30 ({DT_PIERCE, DT_RIP}),
31 0,
32 this_object());
MG Mud User88f12472016-06-24 23:31:02 +020033
Zesstra051ad6b2020-01-23 21:46:58 +010034 2. Ein Biss ins Bein, mit der Hose als 200%ige Ruestung und Rest
35 mit 100%.
MG Mud User88f12472016-06-24 23:31:02 +020036
Zesstra051ad6b2020-01-23 21:46:58 +010037 this_player()->Defend(random(500),
38 ({DT_PIERCE, DT_RIP}),
39 ([SP_PHYSICAL_ATTACK: 1,
40 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200])
41 ]),
42 this_object());
MG Mud User88f12472016-06-24 23:31:02 +020043
Zesstra051ad6b2020-01-23 21:46:58 +010044 3. Der Biss, wenn ein Tier in die Hose gekrochen ist und dieser
45 ohne Treffermeldung und physischen Ruestungsschutz durchgeht.
Zesstra953f9972017-02-18 15:37:36 +010046
Zesstra051ad6b2020-01-23 21:46:58 +010047 this_player()->Defend(random(500),
48 ({DT_PIERCE, DT_RIP}),
49 ([SP_PHYSICAL_ATTACK: 0, SP_SHOW_DAMAGE:0]),
50 this_object());
Zesstra953f9972017-02-18 15:37:36 +010051
Zesstra051ad6b2020-01-23 21:46:58 +010052 4. Spell-Parameter Beispiel fuer einen Spell, der nur vom Helm
53 normal und von einem Amulett mit 115% aufgehalten wird, alle
54 anderen (angebenenen) Ruestungen haben 0% Schutzwirkung. Mit
55 Ausgabe eigener Meldungen: beginnend mit -1, da der verursachte
56 Schadenswert minimal 0 wird (fuers Ersetzen: Feind: @WEx2,
57 Spieler: WEx1); maximal wird er (Empfindlichkeiten jetzt mal
58 aussen vor) 49 (499/10 = 49), nicht 499!!!
Zesstra953f9972017-02-18 15:37:36 +010059
Zesstra051ad6b2020-01-23 21:46:58 +010060 this_player()->Defend(
61 random(500),
62 ({DT_PIERCE, DT_AIR}),
63 ([SP_PHYSICAL_ATTACK: 1, // wegen DT_PIERCE
64 SP_REDUCE_ARMOUR: ([AT_ARMOUR: 0,
65 AT_HELMET: 100,
66 AT_RING: 0,
67 AT_GLOVE: 0,
68 AT_CLOAK: 0,
69 AT_BOOT: 0,
70 AT_TROUSERS: 0,
71 AT_SHIELD: 0,
72 AT_AMULET: 115,
73 AT_MISC: 0,
74 AT_BELT: 0,
75 AT_QUIVER: 0])
76 SP_SHOW_DAMAGE:
77 ({({-1,"@WER2 schrammt Dich mit einem durchbohrenden Blick.",
78 "Du schrammst @WEN1 mit einem durchbohrenden Blick.",
79 "@WER2 schrammt @WEN1 mit einem durchbohrenden Blick."
80 }),
81 ({5,"Der durchbohrende Blick von @WEM2 trifft Dich.",
82 "Dein durchbohrender Blick trifft @WEN1.",
83 "Der durchbohrende Blick von @WEM2 trifft @WEN1."
84 }),
85 ({20,"@WESSEN2 stechender Blick durchbohrt Dich.",
86 "Dein stechender Blick durchbohrt @WEN1.",
87 "@WESSEN2 stechender Blick durchbohrt @WEN1."
88 })})
89 ]),
90 this_object());
Zesstra953f9972017-02-18 15:37:36 +010091
Zesstra051ad6b2020-01-23 21:46:58 +010092 Etwas geschickter geht das Ganze, wenn wir einfach aus der
93 Mudlib alle existierenden Ruestungen in ein Mapping packen und
94 diese nullen (damit sind wir auch gegen neue Ruestungstypen
95 sicher):
Zesstra953f9972017-02-18 15:37:36 +010096
Zesstra051ad6b2020-01-23 21:46:58 +010097 mapping amap = map_indices(VALID_ARMOUR_CLASS,#'!);
98 amap[AT_HELMET]=100;
99 amap[AT_AMULET]=115;
100
101 this_player()->Defend(random(500),
102 ({DT_PIERCE, DT_AIR}),
103 ([SP_PHYSICAL_ATTACK: 1,
104 SP_REDUCE_ARMOUR: amap,
105 SP_SHOW_DAMAGE: ({ ... (siehe oben)
106
107 5. Der Biss von weiter oben mit Meldung. Eine Meldung, die nur
108 ausgegeben wird, wenn der Biss auch mindestens einen LP abzieht.
109
110 this_player()->Defend(random(500),
111 ({DT_PIERCE, DT_RIP}),
112 ([SP_PHYSICAL_ATTACK: 1,
113 SP_REDUCE_ARMOUR: ([AT_TROUSERS: 200]),
114 SP_SHOW_DAMAGE: ({
115 ({1,"@WER2 beisst Dich ins Bein!",
116 "Du beisst @WEN1 ins Bein!",
117 "@WER2 beisst @WEN1 ins Bein!"
118 }) })
119 ]),
120 this_object());
121
122 6. DefendFunc() und Defend() in einem Objekt
123
124 1. eine Luftangriffe reflektierende Ruestung:
125
126 int DefendFunc(string *dtyp, mixed spell, object enemy) {
127 if(member(dtyp, DT_AIR)>=0 && !spell[SP_RECURSIVE])
128 enemy->Defend(random(200),
129 ({DT_AIR}),
130 ([SP_RECURSIVE: 1,
131 SP_SHOW_DAMAGE:
132 ({"Ein Luftwirbel erfasst auch Dich.",
133 "Deine Ruestung wirbelt @WEN1 herum.",
134 "@WESSEN2 Ruestung wirbelt @WEN1 herum."
135 })
136 ]),
137 QueryProp(P_WORN));
138
139 return 0; // -> In diesem Fall gibts keinen Ruestungsbonus!
140 }
141
142 2. Eine NUR REINE Luftangriffe reflektierende Ruestung:
143
144 int DefendFunc(string *dtyp, mixed spell, object enemy) {
145 if(!sizeof(dtyp-({DT_AIR})) && !spell[SP_RECURSIVE])
146 ...
Zesstra953f9972017-02-18 15:37:36 +0100147
148
149SIEHE AUCH
150==========
151
Zesstra051ad6b2020-01-23 21:46:58 +0100152 * Angriff: Attack(), do_damage(), InsertEnemy(), P_NO_ATTACK
MG Mud User88f12472016-06-24 23:31:02 +0200153
Zesstra051ad6b2020-01-23 21:46:58 +0100154 * Schaden: reduce_hit_points(), reduce_spell_points(),
155 P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE
156
157 * Schutz: InformDefend(), DefendOther(), QueryDefend(), Defend(),
158 P_DEFENDERS, P_ARMOURS, P_AC, P_DEFEND_FUNC, P_BODY
159
160 * Resistenz: CheckResistance(), P_RESISTANCE_STRENGTHS
161
162 * Daten: P_LAST_COMBAT_TIME, P_LAST_XP, P_LAST_DAMAGE,
163 P_LAST_DAMTYPES, P_LAST_DAMTIME
164
165 * Sonstiges CheckSensitiveAttack(), UseSkill(),
166 InternalModifyDefend()
167
16823.01.2020 Zesstra