Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_tharon_ja.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 "
SpellScript.h
"
9
#include "
SpellAuraEffects.h
"
10
#include "
Player.h
"
11
#include "
drak_tharon_keep.h
"
12
13
/*
14
* Known Issues: Spell 49356 and 53463 will be interrupted for an unknown reason
15
*/
16
17
enum
Spells
18
{
19
// Skeletal Spells (phase 1)
20
SPELL_CURSE_OF_LIFE
= 49527,
21
SPELL_RAIN_OF_FIRE
= 49518,
22
SPELL_SHADOW_VOLLEY
= 49528,
23
SPELL_DECAY_FLESH
= 49356,
// casted at end of phase 1, starts phase 2
24
// Flesh Spells (phase 2)
25
SPELL_GIFT_OF_THARON_JA
= 52509,
26
SPELL_CLEAR_GIFT_OF_THARON_JA
= 53242,
27
SPELL_EYE_BEAM
= 49544,
28
SPELL_LIGHTNING_BREATH
= 49537,
29
SPELL_POISON_CLOUD
= 49548,
30
SPELL_RETURN_FLESH
= 53463,
// Channeled spell ending phase two and returning to phase 1. This ability will stun the party for 6 seconds.
31
SPELL_ACHIEVEMENT_CHECK
= 61863,
32
SPELL_FLESH_VISUAL
= 52582,
33
SPELL_DUMMY
= 49551
34
};
35
36
enum
Events
37
{
38
EVENT_CURSE_OF_LIFE
= 1,
39
EVENT_RAIN_OF_FIRE
,
40
EVENT_SHADOW_VOLLEY
,
41
42
EVENT_EYE_BEAM
,
43
EVENT_LIGHTNING_BREATH
,
44
EVENT_POISON_CLOUD
,
45
46
EVENT_DECAY_FLESH
,
47
EVENT_GOING_FLESH
,
48
EVENT_RETURN_FLESH
,
49
EVENT_GOING_SKELETAL
50
};
51
52
enum
Yells
53
{
54
SAY_AGGRO
= 0,
55
SAY_KILL
= 1,
56
SAY_FLESH
= 2,
57
SAY_SKELETON
= 3,
58
SAY_DEATH
= 4
59
};
60
61
enum
Models
62
{
63
MODEL_FLESH
= 27073
64
};
65
66
class
boss_tharon_ja
:
public
CreatureScript
67
{
68
public
:
69
boss_tharon_ja
() :
CreatureScript
(
"boss_tharon_ja"
) { }
70
71
struct
boss_tharon_jaAI
:
public
BossAI
72
{
73
boss_tharon_jaAI
(
Creature
* creature) :
BossAI
(creature,
DATA_THARON_JA
) { }
74
75
void
Reset
()
OVERRIDE
76
{
77
_Reset
();
78
me
->RestoreDisplayId();
79
}
80
81
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
82
{
83
Talk
(
SAY_AGGRO
);
84
_EnterCombat
();
85
86
events
.ScheduleEvent(
EVENT_DECAY_FLESH
, 20000);
87
events
.ScheduleEvent(
EVENT_CURSE_OF_LIFE
, 1000);
88
events
.ScheduleEvent(
EVENT_RAIN_OF_FIRE
, std::rand() % 18000 + 14000);
89
events
.ScheduleEvent(
EVENT_SHADOW_VOLLEY
, std::rand() % 10000 + 8000);
90
}
91
92
void
KilledUnit
(
Unit
* who)
OVERRIDE
93
{
94
if
(who->GetTypeId() ==
TypeID::TYPEID_PLAYER
)
95
Talk
(
SAY_KILL
);
96
}
97
98
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
99
{
100
_JustDied
();
101
102
Talk
(
SAY_DEATH
);
103
DoCastAOE
(
SPELL_CLEAR_GIFT_OF_THARON_JA
,
true
);
104
DoCastAOE
(
SPELL_ACHIEVEMENT_CHECK
,
true
);
105
}
106
107
void
UpdateAI
(
uint32
diff)
OVERRIDE
108
{
109
if
(!
UpdateVictim
())
110
return
;
111
112
events
.Update(diff);
113
114
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
115
return
;
116
117
while
(
uint32
eventId =
events
.ExecuteEvent())
118
{
119
switch
(eventId)
120
{
121
case
EVENT_CURSE_OF_LIFE
:
122
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100.0f,
true
))
123
DoCast
(target,
SPELL_CURSE_OF_LIFE
);
124
events
.ScheduleEvent(
EVENT_CURSE_OF_LIFE
, std::rand() % 15000 + 10000);
125
return
;
126
case
EVENT_SHADOW_VOLLEY
:
127
DoCastVictim
(
SPELL_SHADOW_VOLLEY
);
128
events
.ScheduleEvent(
EVENT_SHADOW_VOLLEY
, std::rand() % 10000 + 8000);
129
return
;
130
case
EVENT_RAIN_OF_FIRE
:
131
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100.0f,
true
))
132
DoCast
(target,
SPELL_RAIN_OF_FIRE
);
133
events
.ScheduleEvent(
EVENT_RAIN_OF_FIRE
, std::rand() % 18000 + 14000);
134
return
;
135
case
EVENT_LIGHTNING_BREATH
:
136
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100.0f,
true
))
137
DoCast
(target,
SPELL_LIGHTNING_BREATH
);
138
events
.ScheduleEvent(
EVENT_LIGHTNING_BREATH
, std::rand() % 7000 + 6000);
139
return
;
140
case
EVENT_EYE_BEAM
:
141
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100.0f,
true
))
142
DoCast
(target,
SPELL_EYE_BEAM
);
143
events
.ScheduleEvent(
EVENT_EYE_BEAM
, std::rand() % 6000 + 4000);
144
return
;
145
case
EVENT_POISON_CLOUD
:
146
DoCastAOE
(
SPELL_POISON_CLOUD
);
147
events
.ScheduleEvent(
EVENT_POISON_CLOUD
, std::rand() % 12000 + 10000);
148
return
;
149
case
EVENT_DECAY_FLESH
:
150
DoCastAOE
(
SPELL_DECAY_FLESH
);
151
events
.ScheduleEvent(
EVENT_GOING_FLESH
, 6000);
152
return
;
153
case
EVENT_GOING_FLESH
:
154
Talk
(
SAY_FLESH
);
155
me
->SetDisplayId(
MODEL_FLESH
);
156
DoCastAOE
(
SPELL_GIFT_OF_THARON_JA
,
true
);
157
DoCast
(
me
,
SPELL_FLESH_VISUAL
,
true
);
158
DoCast
(
me
,
SPELL_DUMMY
,
true
);
159
160
events
.Reset();
161
events
.ScheduleEvent(
EVENT_RETURN_FLESH
, 20000);
162
events
.ScheduleEvent(
EVENT_LIGHTNING_BREATH
, std::rand() % 4000 + 3000);
163
events
.ScheduleEvent(
EVENT_EYE_BEAM
, std::rand() % 8000 + 4000);
164
events
.ScheduleEvent(
EVENT_POISON_CLOUD
, std::rand() % 7000 + 6000);
165
break
;
166
case
EVENT_RETURN_FLESH
:
167
DoCastAOE
(
SPELL_RETURN_FLESH
);
168
events
.ScheduleEvent(
EVENT_GOING_SKELETAL
, 6000);
169
return
;
170
case
EVENT_GOING_SKELETAL
:
171
Talk
(
SAY_SKELETON
);
172
me
->RestoreDisplayId();
173
DoCastAOE
(
SPELL_CLEAR_GIFT_OF_THARON_JA
,
true
);
174
175
events
.Reset();
176
events
.ScheduleEvent(
EVENT_DECAY_FLESH
, 20000);
177
events
.ScheduleEvent(
EVENT_CURSE_OF_LIFE
, 1000);
178
events
.ScheduleEvent(
EVENT_RAIN_OF_FIRE
, std::rand() % 18000 + 14000);
179
events
.ScheduleEvent(
EVENT_SHADOW_VOLLEY
, std::rand() % 10000 + 8000);
180
break
;
181
default
:
182
break
;
183
}
184
}
185
186
DoMeleeAttackIfReady
();
187
}
188
};
189
190
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
191
{
192
return
GetDrakTharonKeepAI<boss_tharon_jaAI>
(creature);
193
}
194
};
195
196
class
spell_tharon_ja_clear_gift_of_tharon_ja
:
public
SpellScriptLoader
197
{
198
public
:
199
spell_tharon_ja_clear_gift_of_tharon_ja
() :
SpellScriptLoader
(
"spell_tharon_ja_clear_gift_of_tharon_ja"
) { }
200
201
class
spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript
:
public
SpellScript
202
{
203
PrepareSpellScript
(
spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript
);
204
205
bool
Validate
(
SpellInfo
const
*
/*spellInfo*/
)
OVERRIDE
206
{
207
if
(!
sSpellMgr
->GetSpellInfo(
SPELL_GIFT_OF_THARON_JA
))
208
return
false
;
209
return
true
;
210
}
211
212
void
HandleScript
(
SpellEffIndex
/*effIndex*/
)
213
{
214
if
(
Unit
* target =
GetHitUnit
())
215
target->RemoveAura(
SPELL_GIFT_OF_THARON_JA
);
216
}
217
218
void
Register
()
OVERRIDE
219
{
220
OnEffectHitTarget
+=
SpellEffectFn
(
spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::HandleScript
,
EFFECT_0
,
SPELL_EFFECT_SCRIPT_EFFECT
);
221
}
222
};
223
224
SpellScript
*
GetSpellScript
() const
OVERRIDE
225
{
226
return
new
spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript
();
227
}
228
};
229
230
void
AddSC_boss_tharon_ja
()
231
{
232
new
boss_tharon_ja
();
233
new
spell_tharon_ja_clear_gift_of_tharon_ja
();
234
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
Player.h
ScriptMgr.h
ScriptedCreature.h
SpellEffIndex
SpellEffIndex
Definition
SharedDefines.h:17
EFFECT_0
@ EFFECT_0
Definition
SharedDefines.h:18
SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCRIPT_EFFECT
Definition
SharedDefines.h:965
SpellAuraEffects.h
sSpellMgr
#define sSpellMgr
Definition
SpellMgr.h:744
SpellScript.h
SpellEffectFn
#define SpellEffectFn(F, I, N)
Definition
SpellScript.h:269
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Events
Events
Definition
alterac_valley.cpp:40
SPELL_POISON_CLOUD
@ SPELL_POISON_CLOUD
Definition
boss_aku_mai.cpp:12
EVENT_POISON_CLOUD
@ EVENT_POISON_CLOUD
Definition
boss_aku_mai.cpp:18
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SAY_KILL
#define SAY_KILL
Definition
boss_commander_kolurg.cpp:29
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_gehennas.cpp:21
EVENT_RAIN_OF_FIRE
@ EVENT_RAIN_OF_FIRE
Definition
boss_gehennas.cpp:28
Models
Models
Definition
boss_magistrate_barthilas.cpp:26
SAY_DEATH
@ SAY_DEATH
Definition
boss_tharon_ja.cpp:58
SAY_FLESH
@ SAY_FLESH
Definition
boss_tharon_ja.cpp:56
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_tharon_ja.cpp:54
SAY_KILL
@ SAY_KILL
Definition
boss_tharon_ja.cpp:55
SAY_SKELETON
@ SAY_SKELETON
Definition
boss_tharon_ja.cpp:57
SPELL_CLEAR_GIFT_OF_THARON_JA
@ SPELL_CLEAR_GIFT_OF_THARON_JA
Definition
boss_tharon_ja.cpp:26
SPELL_DECAY_FLESH
@ SPELL_DECAY_FLESH
Definition
boss_tharon_ja.cpp:23
SPELL_ACHIEVEMENT_CHECK
@ SPELL_ACHIEVEMENT_CHECK
Definition
boss_tharon_ja.cpp:31
SPELL_FLESH_VISUAL
@ SPELL_FLESH_VISUAL
Definition
boss_tharon_ja.cpp:32
SPELL_SHADOW_VOLLEY
@ SPELL_SHADOW_VOLLEY
Definition
boss_tharon_ja.cpp:22
SPELL_DUMMY
@ SPELL_DUMMY
Definition
boss_tharon_ja.cpp:33
SPELL_EYE_BEAM
@ SPELL_EYE_BEAM
Definition
boss_tharon_ja.cpp:27
SPELL_CURSE_OF_LIFE
@ SPELL_CURSE_OF_LIFE
Definition
boss_tharon_ja.cpp:20
SPELL_RETURN_FLESH
@ SPELL_RETURN_FLESH
Definition
boss_tharon_ja.cpp:30
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_tharon_ja.cpp:21
SPELL_GIFT_OF_THARON_JA
@ SPELL_GIFT_OF_THARON_JA
Definition
boss_tharon_ja.cpp:25
SPELL_LIGHTNING_BREATH
@ SPELL_LIGHTNING_BREATH
Definition
boss_tharon_ja.cpp:28
SPELL_POISON_CLOUD
@ SPELL_POISON_CLOUD
Definition
boss_tharon_ja.cpp:29
AddSC_boss_tharon_ja
void AddSC_boss_tharon_ja()
Definition
boss_tharon_ja.cpp:230
MODEL_FLESH
@ MODEL_FLESH
Definition
boss_tharon_ja.cpp:63
EVENT_POISON_CLOUD
@ EVENT_POISON_CLOUD
Definition
boss_tharon_ja.cpp:44
EVENT_GOING_SKELETAL
@ EVENT_GOING_SKELETAL
Definition
boss_tharon_ja.cpp:49
EVENT_DECAY_FLESH
@ EVENT_DECAY_FLESH
Definition
boss_tharon_ja.cpp:46
EVENT_EYE_BEAM
@ EVENT_EYE_BEAM
Definition
boss_tharon_ja.cpp:42
EVENT_SHADOW_VOLLEY
@ EVENT_SHADOW_VOLLEY
Definition
boss_tharon_ja.cpp:40
EVENT_GOING_FLESH
@ EVENT_GOING_FLESH
Definition
boss_tharon_ja.cpp:47
EVENT_RAIN_OF_FIRE
@ EVENT_RAIN_OF_FIRE
Definition
boss_tharon_ja.cpp:39
EVENT_CURSE_OF_LIFE
@ EVENT_CURSE_OF_LIFE
Definition
boss_tharon_ja.cpp:38
EVENT_RETURN_FLESH
@ EVENT_RETURN_FLESH
Definition
boss_tharon_ja.cpp:48
EVENT_LIGHTNING_BREATH
@ EVENT_LIGHTNING_BREATH
Definition
boss_tharon_ja.cpp:43
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_JustDied
void _JustDied()
Definition
ScriptedCreature.cpp:474
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
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
SpellInfo
Definition
SpellInfo.h:158
SpellScript
Definition
SpellScript.h:139
SpellScript::OnEffectHitTarget
HookList< EffectHandler > OnEffectHitTarget
Definition
SpellScript.h:268
SpellScript::GetHitUnit
Unit * GetHitUnit()
Definition
SpellScript.cpp:399
SpellScriptLoader::SpellScriptLoader
SpellScriptLoader(const char *name)
Definition
ScriptMgr.cpp:1372
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCast
void DoCast(uint32 spellId)
Definition
UnitAI.cpp:110
UnitAI::SelectTarget
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition
UnitAI.cpp:66
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
UnitAI::DoCastAOE
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:176
Unit
Definition
Unit.h:1367
boss_tharon_ja
Definition
boss_tharon_ja.cpp:67
boss_tharon_ja::boss_tharon_ja
boss_tharon_ja()
Definition
boss_tharon_ja.cpp:69
boss_tharon_ja::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_tharon_ja.cpp:190
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript
Definition
boss_tharon_ja.cpp:202
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::HandleScript
void HandleScript(SpellEffIndex)
Definition
boss_tharon_ja.cpp:212
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript)
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::Validate
bool Validate(SpellInfo const *) OVERRIDE
Definition
boss_tharon_ja.cpp:205
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja_SpellScript::Register
void Register() OVERRIDE
Definition
boss_tharon_ja.cpp:218
spell_tharon_ja_clear_gift_of_tharon_ja
Definition
boss_tharon_ja.cpp:197
spell_tharon_ja_clear_gift_of_tharon_ja::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_tharon_ja.cpp:224
spell_tharon_ja_clear_gift_of_tharon_ja::spell_tharon_ja_clear_gift_of_tharon_ja
spell_tharon_ja_clear_gift_of_tharon_ja()
Definition
boss_tharon_ja.cpp:199
drak_tharon_keep.h
GetDrakTharonKeepAI
AI * GetDrakTharonKeepAI(Creature *creature)
Definition
drak_tharon_keep.h:75
DATA_THARON_JA
@ DATA_THARON_JA
Definition
drak_tharon_keep.h:19
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
Yells
Definition
boss_illidan.cpp:256
boss_tharon_ja::boss_tharon_jaAI::boss_tharon_jaAI
boss_tharon_jaAI(Creature *creature)
Definition
boss_tharon_ja.cpp:73
boss_tharon_ja::boss_tharon_jaAI::Reset
void Reset() OVERRIDE
Definition
boss_tharon_ja.cpp:75
boss_tharon_ja::boss_tharon_jaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_tharon_ja.cpp:98
boss_tharon_ja::boss_tharon_jaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_tharon_ja.cpp:107
boss_tharon_ja::boss_tharon_jaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_tharon_ja.cpp:81
boss_tharon_ja::boss_tharon_jaAI::KilledUnit
void KilledUnit(Unit *who) OVERRIDE
Definition
boss_tharon_ja.cpp:92
src
server
scripts
Northrend
DraktharonKeep
boss_tharon_ja.cpp
Generated on
for Project SkyFire Core by
1.17.0