Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_chromaggus.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
ScriptMgr.h
"
7
#include "
ScriptedCreature.h
"
8
#include "
Player.h
"
9
#include "
blackwing_lair.h
"
10
11
enum
Emotes
12
{
13
EMOTE_FRENZY
= 0,
14
EMOTE_SHIMMER
= 1,
15
};
16
17
enum
Spells
18
{
19
// These spells are actually called elemental shield
20
// What they do is decrease all damage by 75% then they increase
21
// One school of damage by 1100%
22
SPELL_FIRE_VULNERABILITY
= 22277,
23
SPELL_FROST_VULNERABILITY
= 22278,
24
SPELL_SHADOW_VULNERABILITY
= 22279,
25
SPELL_NATURE_VULNERABILITY
= 22280,
26
SPELL_ARCANE_VULNERABILITY
= 22281,
27
// Other spells
28
SPELL_INCINERATE
= 23308,
//Incinerate 23308, 23309
29
SPELL_TIMELAPSE
= 23310,
//Time lapse 23310, 23311(old threat mod that was removed in 2.01)
30
SPELL_CORROSIVEACID
= 23313,
//Corrosive Acid 23313, 23314
31
SPELL_IGNITEFLESH
= 23315,
//Ignite Flesh 23315, 23316
32
SPELL_FROSTBURN
= 23187,
//Frost burn 23187, 23189
33
// Brood Affliction 23173 - Scripted Spell that cycles through all targets within 100 yards and has a chance to cast one of the afflictions on them
34
// Since Scripted spells arn't coded I'll just write a function that does the same thing
35
SPELL_BROODAF_BLUE
= 23153,
//Blue affliction 23153
36
SPELL_BROODAF_BLACK
= 23154,
//Black affliction 23154
37
SPELL_BROODAF_RED
= 23155,
//Red affliction 23155 (23168 on death)
38
SPELL_BROODAF_BRONZE
= 23170,
//Bronze Affliction 23170
39
SPELL_BROODAF_GREEN
= 23169,
//Brood Affliction Green 23169
40
SPELL_CHROMATIC_MUT_1
= 23174,
//Spell cast on player if they get all 5 debuffs
41
SPELL_FRENZY
= 28371,
//The frenzy spell may be wrong
42
SPELL_ENRAGE
= 28747
43
};
44
45
enum
Events
46
{
47
EVENT_SHIMMER
= 1,
48
EVENT_BREATH_1
= 2,
49
EVENT_BREATH_2
= 3,
50
EVENT_AFFLICTION
= 4,
51
EVENT_FRENZY
= 5
52
};
53
54
class
boss_chromaggus
:
public
CreatureScript
55
{
56
public
:
57
boss_chromaggus
() :
CreatureScript
(
"boss_chromaggus"
) { }
58
59
struct
boss_chromaggusAI
:
public
BossAI
60
{
61
boss_chromaggusAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_CHROMAGGUS
)
62
{
63
Breath1_Spell
= 0;
64
Breath2_Spell
= 0;
65
CurrentVurln_Spell
= 0;
66
Enraged
=
false
;
67
68
// Select the 2 breaths that we are going to use until despawned
69
// 5 possiblities for the first breath, 4 for the second, 20 total possiblites
70
// This way we don't end up casting 2 of the same breath
71
// TL TL would be stupid
72
switch
(std::rand() % 19)
73
{
74
// B1 - Incin
75
case
0:
76
Breath1_Spell
=
SPELL_INCINERATE
;
77
Breath2_Spell
=
SPELL_TIMELAPSE
;
78
break
;
79
case
1:
80
Breath1_Spell
=
SPELL_INCINERATE
;
81
Breath2_Spell
=
SPELL_CORROSIVEACID
;
82
break
;
83
case
2:
84
Breath1_Spell
=
SPELL_INCINERATE
;
85
Breath2_Spell
=
SPELL_IGNITEFLESH
;
86
break
;
87
case
3:
88
Breath1_Spell
=
SPELL_INCINERATE
;
89
Breath2_Spell
=
SPELL_FROSTBURN
;
90
break
;
91
92
// B1 - TL
93
case
4:
94
Breath1_Spell
=
SPELL_TIMELAPSE
;
95
Breath2_Spell
=
SPELL_INCINERATE
;
96
break
;
97
case
5:
98
Breath1_Spell
=
SPELL_TIMELAPSE
;
99
Breath2_Spell
=
SPELL_CORROSIVEACID
;
100
break
;
101
case
6:
102
Breath1_Spell
=
SPELL_TIMELAPSE
;
103
Breath2_Spell
=
SPELL_IGNITEFLESH
;
104
break
;
105
case
7:
106
Breath1_Spell
=
SPELL_TIMELAPSE
;
107
Breath2_Spell
=
SPELL_FROSTBURN
;
108
break
;
109
110
//B1 - Acid
111
case
8:
112
Breath1_Spell
=
SPELL_CORROSIVEACID
;
113
Breath2_Spell
=
SPELL_INCINERATE
;
114
break
;
115
case
9:
116
Breath1_Spell
=
SPELL_CORROSIVEACID
;
117
Breath2_Spell
=
SPELL_TIMELAPSE
;
118
break
;
119
case
10:
120
Breath1_Spell
=
SPELL_CORROSIVEACID
;
121
Breath2_Spell
=
SPELL_IGNITEFLESH
;
122
break
;
123
case
11:
124
Breath1_Spell
=
SPELL_CORROSIVEACID
;
125
Breath2_Spell
=
SPELL_FROSTBURN
;
126
break
;
127
128
//B1 - Ignite
129
case
12:
130
Breath1_Spell
=
SPELL_IGNITEFLESH
;
131
Breath2_Spell
=
SPELL_INCINERATE
;
132
break
;
133
case
13:
134
Breath1_Spell
=
SPELL_IGNITEFLESH
;
135
Breath2_Spell
=
SPELL_CORROSIVEACID
;
136
break
;
137
case
14:
138
Breath1_Spell
=
SPELL_IGNITEFLESH
;
139
Breath2_Spell
=
SPELL_TIMELAPSE
;
140
break
;
141
case
15:
142
Breath1_Spell
=
SPELL_IGNITEFLESH
;
143
Breath2_Spell
=
SPELL_FROSTBURN
;
144
break
;
145
146
//B1 - Frost
147
case
16:
148
Breath1_Spell
=
SPELL_FROSTBURN
;
149
Breath2_Spell
=
SPELL_INCINERATE
;
150
break
;
151
case
17:
152
Breath1_Spell
=
SPELL_FROSTBURN
;
153
Breath2_Spell
=
SPELL_TIMELAPSE
;
154
break
;
155
case
18:
156
Breath1_Spell
=
SPELL_FROSTBURN
;
157
Breath2_Spell
=
SPELL_CORROSIVEACID
;
158
break
;
159
case
19:
160
Breath1_Spell
=
SPELL_FROSTBURN
;
161
Breath2_Spell
=
SPELL_IGNITEFLESH
;
162
break
;
163
};
164
165
EnterEvadeMode
();
166
}
167
168
void
Reset
()
OVERRIDE
169
{
170
_Reset
();
171
172
CurrentVurln_Spell
= 0;
// We use this to store our last vulnerabilty spell so we can remove it later
173
Enraged
=
false
;
174
}
175
176
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
177
{
178
if
(
instance
&&
instance
->GetBossState(
BOSS_FLAMEGOR
) !=
DONE
)
179
{
180
EnterEvadeMode
();
181
return
;
182
}
183
_EnterCombat
();
184
185
events
.ScheduleEvent(
EVENT_SHIMMER
, 0);
186
events
.ScheduleEvent(
EVENT_BREATH_1
, 30000);
187
events
.ScheduleEvent(
EVENT_BREATH_2
, 60000);
188
events
.ScheduleEvent(
EVENT_AFFLICTION
, 10000);
189
events
.ScheduleEvent(
EVENT_FRENZY
, 15000);
190
}
191
192
void
UpdateAI
(
uint32
diff)
OVERRIDE
193
{
194
if
(!
UpdateVictim
())
195
return
;
196
197
events
.Update(diff);
198
199
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
200
return
;
201
202
while
(
uint32
eventId =
events
.ExecuteEvent())
203
{
204
switch
(eventId)
205
{
206
case
EVENT_SHIMMER
:
207
{
208
// Remove old vulnerabilty spell
209
if
(
CurrentVurln_Spell
)
210
me
->RemoveAurasDueToSpell(
CurrentVurln_Spell
);
211
212
// Cast new random vulnerabilty on self
213
uint32
spell =
RAND
(
SPELL_FIRE_VULNERABILITY
,
SPELL_FROST_VULNERABILITY
,
SPELL_SHADOW_VULNERABILITY
,
SPELL_NATURE_VULNERABILITY
,
SPELL_ARCANE_VULNERABILITY
);
214
DoCast
(
me
, spell);
215
CurrentVurln_Spell
= spell;
216
Talk
(
EMOTE_SHIMMER
);
217
events
.ScheduleEvent(
EVENT_SHIMMER
, 45000);
218
break
;
219
}
220
case
EVENT_BREATH_1
:
221
DoCastVictim
(
Breath1_Spell
);
222
events
.ScheduleEvent(
EVENT_BREATH_1
, 60000);
223
break
;
224
case
EVENT_BREATH_2
:
225
DoCastVictim
(
Breath2_Spell
);
226
events
.ScheduleEvent(
EVENT_BREATH_2
, 60000);
227
break
;
228
case
EVENT_AFFLICTION
:
229
{
230
Map::PlayerList
const
&players =
me
->GetMap()->GetPlayers();
231
for
(
Map::PlayerList::const_iterator
itr = players.
begin
(); itr != players.
end
(); ++itr)
232
{
233
if
(
Player
* player = itr->GetSource()->
ToPlayer
())
234
{
235
DoCast
(player,
RAND
(
SPELL_BROODAF_BLUE
,
SPELL_BROODAF_BLACK
,
SPELL_BROODAF_RED
,
SPELL_BROODAF_BRONZE
,
SPELL_BROODAF_GREEN
),
true
);
236
237
if
(player->HasAura(
SPELL_BROODAF_BLUE
) &&
238
player->HasAura(
SPELL_BROODAF_BLACK
) &&
239
player->HasAura(
SPELL_BROODAF_RED
) &&
240
player->HasAura(
SPELL_BROODAF_BRONZE
) &&
241
player->HasAura(
SPELL_BROODAF_GREEN
))
242
{
243
DoCast
(player,
SPELL_CHROMATIC_MUT_1
);
244
}
245
}
246
}
247
}
248
events
.ScheduleEvent(
EVENT_AFFLICTION
, 10000);
249
break
;
250
case
EVENT_FRENZY
:
251
DoCast
(
me
,
SPELL_FRENZY
);
252
events
.ScheduleEvent(
EVENT_FRENZY
, std::rand() % 15000 + 10000);
253
break
;
254
}
255
}
256
257
// Enrage if not already enraged and below 20%
258
if
(!
Enraged
&&
HealthBelowPct
(20))
259
{
260
DoCast
(
me
,
SPELL_ENRAGE
);
261
Enraged
=
true
;
262
}
263
264
DoMeleeAttackIfReady
();
265
}
266
267
private
:
268
uint32
Breath1_Spell
;
269
uint32
Breath2_Spell
;
270
uint32
CurrentVurln_Spell
;
271
bool
Enraged
;
272
};
273
274
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
275
{
276
return
new
boss_chromaggusAI
(creature);
277
}
278
};
279
280
void
AddSC_boss_chromaggus
()
281
{
282
new
boss_chromaggus
();
283
}
Spells
Spells
Definition
BattlegroundIC.h:645
RAND
const T & RAND(const T &v1, const T &v2)
Definition
CreatureAIImpl.h:17
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
DONE
@ DONE
Definition
InstanceScript.h:49
Player.h
ScriptMgr.h
ScriptedCreature.h
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
alterac_valley.cpp:14
Events
Events
Definition
alterac_valley.cpp:40
blackwing_lair.h
BOSS_FLAMEGOR
@ BOSS_FLAMEGOR
Definition
blackwing_lair.h:20
BOSS_CHROMAGGUS
@ BOSS_CHROMAGGUS
Definition
blackwing_lair.h:21
Emotes
Emotes
Definition
boss_chromaggus.cpp:12
EMOTE_SHIMMER
@ EMOTE_SHIMMER
Definition
boss_chromaggus.cpp:14
AddSC_boss_chromaggus
void AddSC_boss_chromaggus()
Definition
boss_chromaggus.cpp:280
SPELL_IGNITEFLESH
@ SPELL_IGNITEFLESH
Definition
boss_chromaggus.cpp:31
SPELL_FROSTBURN
@ SPELL_FROSTBURN
Definition
boss_chromaggus.cpp:32
SPELL_SHADOW_VULNERABILITY
@ SPELL_SHADOW_VULNERABILITY
Definition
boss_chromaggus.cpp:24
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
boss_chromaggus.cpp:42
SPELL_BROODAF_RED
@ SPELL_BROODAF_RED
Definition
boss_chromaggus.cpp:37
SPELL_FROST_VULNERABILITY
@ SPELL_FROST_VULNERABILITY
Definition
boss_chromaggus.cpp:23
SPELL_BROODAF_BLACK
@ SPELL_BROODAF_BLACK
Definition
boss_chromaggus.cpp:36
SPELL_TIMELAPSE
@ SPELL_TIMELAPSE
Definition
boss_chromaggus.cpp:29
SPELL_CORROSIVEACID
@ SPELL_CORROSIVEACID
Definition
boss_chromaggus.cpp:30
SPELL_FIRE_VULNERABILITY
@ SPELL_FIRE_VULNERABILITY
Definition
boss_chromaggus.cpp:22
SPELL_FRENZY
@ SPELL_FRENZY
Definition
boss_chromaggus.cpp:41
SPELL_BROODAF_GREEN
@ SPELL_BROODAF_GREEN
Definition
boss_chromaggus.cpp:39
SPELL_NATURE_VULNERABILITY
@ SPELL_NATURE_VULNERABILITY
Definition
boss_chromaggus.cpp:25
SPELL_ARCANE_VULNERABILITY
@ SPELL_ARCANE_VULNERABILITY
Definition
boss_chromaggus.cpp:26
SPELL_CHROMATIC_MUT_1
@ SPELL_CHROMATIC_MUT_1
Definition
boss_chromaggus.cpp:40
SPELL_BROODAF_BLUE
@ SPELL_BROODAF_BLUE
Definition
boss_chromaggus.cpp:35
SPELL_INCINERATE
@ SPELL_INCINERATE
Definition
boss_chromaggus.cpp:28
SPELL_BROODAF_BRONZE
@ SPELL_BROODAF_BRONZE
Definition
boss_chromaggus.cpp:38
EVENT_BREATH_1
@ EVENT_BREATH_1
Definition
boss_chromaggus.cpp:48
EVENT_BREATH_2
@ EVENT_BREATH_2
Definition
boss_chromaggus.cpp:49
EVENT_AFFLICTION
@ EVENT_AFFLICTION
Definition
boss_chromaggus.cpp:50
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_chromaggus.cpp:51
EVENT_SHIMMER
@ EVENT_SHIMMER
Definition
boss_chromaggus.cpp:47
SPELL_FRENZY
@ SPELL_FRENZY
Definition
boss_drekthar.cpp:14
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_gizrul_the_slavener.cpp:27
EMOTE_FRENZY
@ EMOTE_FRENZY
Definition
boss_lord_valthalak.cpp:20
BossAI::instance
InstanceScript *const instance
Definition
ScriptedCreature.h:383
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_Reset
void _Reset()
Definition
ScriptedCreature.cpp:462
BossAI::_EnterCombat
void _EnterCombat()
Definition
ScriptedCreature.cpp:485
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::Talk
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Definition
CreatureAI.cpp:28
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
CreatureAI::EnterEvadeMode
virtual void EnterEvadeMode()
Definition
CreatureAI.cpp:130
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
Map::PlayerList
MapRefManager PlayerList
Definition
Map.h:406
MapRefManager::end
iterator end()
Definition
MapRefManager.h:25
MapRefManager::begin
iterator begin()
Definition
MapRefManager.h:24
MapRefManager::const_iterator
LinkedListHead::Iterator< MapReference const > const_iterator
Definition
MapRefManager.h:17
Object::ToPlayer
Player * ToPlayer()
Definition
Object.h:204
Player
Definition
Player.h:1289
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCast
void DoCast(uint32 spellId)
Definition
UnitAI.cpp:110
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
Unit
Definition
Unit.h:1367
boss_chromaggus
Definition
boss_chromaggus.cpp:55
boss_chromaggus::boss_chromaggus
boss_chromaggus()
Definition
boss_chromaggus.cpp:57
boss_chromaggus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_chromaggus.cpp:274
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
boss_chromaggus::boss_chromaggusAI
Definition
boss_chromaggus.cpp:60
boss_chromaggus::boss_chromaggusAI::Reset
void Reset() OVERRIDE
Definition
boss_chromaggus.cpp:168
boss_chromaggus::boss_chromaggusAI::boss_chromaggusAI
boss_chromaggusAI(Creature *creature)
Definition
boss_chromaggus.cpp:61
boss_chromaggus::boss_chromaggusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_chromaggus.cpp:192
boss_chromaggus::boss_chromaggusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_chromaggus.cpp:176
boss_chromaggus::boss_chromaggusAI::Breath2_Spell
uint32 Breath2_Spell
Definition
boss_chromaggus.cpp:269
boss_chromaggus::boss_chromaggusAI::CurrentVurln_Spell
uint32 CurrentVurln_Spell
Definition
boss_chromaggus.cpp:270
boss_chromaggus::boss_chromaggusAI::Enraged
bool Enraged
Definition
boss_chromaggus.cpp:271
boss_chromaggus::boss_chromaggusAI::Breath1_Spell
uint32 Breath1_Spell
Definition
boss_chromaggus.cpp:268
src
server
scripts
EasternKingdoms
BlackrockMountain
BlackwingLair
boss_chromaggus.cpp
Generated on
for Project SkyFire Core by
1.17.0