Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_azgalor.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 "
hyjal.h
"
9
#include "
hyjal_trash.h
"
10
11
enum
Spells
12
{
13
SPELL_RAIN_OF_FIRE
= 31340,
14
SPELL_DOOM
= 31347,
15
SPELL_HOWL_OF_AZGALOR
= 31344,
16
SPELL_CLEAVE
= 31345,
17
SPELL_BERSERK
= 26662,
18
19
SPELL_THRASH
= 12787,
20
SPELL_CRIPPLE
= 31406,
21
SPELL_WARSTOMP
= 31408,
22
};
23
24
enum
Texts
25
{
26
SAY_ONDEATH
= 0,
27
SAY_ONSLAY
= 1,
28
SAY_DOOM
= 2,
// Not used?
29
SAY_ONAGGRO
= 3,
30
};
31
32
class
boss_azgalor
:
public
CreatureScript
33
{
34
public
:
35
boss_azgalor
() :
CreatureScript
(
"boss_azgalor"
) { }
36
37
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
38
{
39
return
new
boss_azgalorAI
(creature);
40
}
41
42
struct
boss_azgalorAI
:
public
hyjal_trashAI
43
{
44
boss_azgalorAI
(
Creature
* creature) :
hyjal_trashAI
(creature)
45
{
46
instance
= creature->
GetInstanceScript
();
47
go
=
false
;
48
}
49
50
uint32
RainTimer
;
51
uint32
DoomTimer
;
52
uint32
HowlTimer
;
53
uint32
CleaveTimer
;
54
uint32
EnrageTimer
;
55
bool
enraged
;
56
57
bool
go
;
58
59
void
Reset
()
OVERRIDE
60
{
61
damageTaken
= 0;
62
RainTimer
= 20000;
63
DoomTimer
= 50000;
64
HowlTimer
= 30000;
65
CleaveTimer
= 10000;
66
EnrageTimer
= 600000;
67
enraged
=
false
;
68
69
if
(
instance
&&
IsEvent
)
70
instance
->SetData(
DATA_AZGALOREVENT
,
NOT_STARTED
);
71
}
72
73
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
74
{
75
if
(
instance
&&
IsEvent
)
76
instance
->SetData(
DATA_AZGALOREVENT
,
IN_PROGRESS
);
77
Talk
(
SAY_ONAGGRO
);
78
}
79
80
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
81
{
82
Talk
(
SAY_ONSLAY
);
83
}
84
85
void
WaypointReached
(
uint32
waypointId)
OVERRIDE
86
{
87
if
(waypointId == 7 &&
instance
)
88
{
89
Unit
* target =
Unit::GetUnit
(*
me
,
instance
->GetData64(
DATA_THRALL
));
90
if
(target && target->
IsAlive
())
91
me
->AddThreat(target, 0.0f);
92
}
93
}
94
95
void
JustDied
(
Unit
* killer)
OVERRIDE
96
{
97
hyjal_trashAI::JustDied
(killer);
98
if
(
instance
&&
IsEvent
)
99
instance
->SetData(
DATA_AZGALOREVENT
,
DONE
);
100
Talk
(
SAY_ONDEATH
);
101
}
102
103
void
UpdateAI
(
uint32
diff)
OVERRIDE
104
{
105
if
(
IsEvent
)
106
{
107
//Must update npc_escortAI
108
npc_escortAI::UpdateAI
(diff);
109
if
(!
go
)
110
{
111
go
=
true
;
112
if
(
instance
)
113
{
114
AddWaypoint
(0, 5492.91f, -2404.61f, 1462.63f);
115
AddWaypoint
(1, 5531.76f, -2460.87f, 1469.55f);
116
AddWaypoint
(2, 5554.58f, -2514.66f, 1476.12f);
117
AddWaypoint
(3, 5554.16f, -2567.23f, 1479.90f);
118
AddWaypoint
(4, 5540.67f, -2625.99f, 1480.89f);
119
AddWaypoint
(5, 5508.16f, -2659.2f, 1480.15f);
120
AddWaypoint
(6, 5489.62f, -2704.05f, 1482.18f);
121
AddWaypoint
(7, 5457.04f, -2726.26f, 1485.10f);
122
Start
(
false
,
true
);
123
SetDespawnAtEnd
(
false
);
124
}
125
}
126
}
127
128
//Return since we have no target
129
if
(!
UpdateVictim
())
130
return
;
131
132
if
(
RainTimer
<= diff)
133
{
134
DoCast
(
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 30,
true
),
SPELL_RAIN_OF_FIRE
);
135
RainTimer
= 20000+rand()%15000;
136
}
else
RainTimer
-= diff;
137
138
if
(
DoomTimer
<= diff)
139
{
140
DoCast
(
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100,
true
),
SPELL_DOOM
);
//never on tank
141
DoomTimer
= 45000+rand()%5000;
142
}
else
DoomTimer
-= diff;
143
144
if
(
HowlTimer
<= diff)
145
{
146
DoCast
(
me
,
SPELL_HOWL_OF_AZGALOR
);
147
HowlTimer
= 30000;
148
}
else
HowlTimer
-= diff;
149
150
if
(
CleaveTimer
<= diff)
151
{
152
DoCastVictim
(
SPELL_CLEAVE
);
153
CleaveTimer
= 10000+rand()%5000;
154
}
else
CleaveTimer
-= diff;
155
156
if
(
EnrageTimer
< diff && !
enraged
)
157
{
158
me
->InterruptNonMeleeSpells(
false
);
159
DoCast
(
me
,
SPELL_BERSERK
,
true
);
160
enraged
=
true
;
161
EnrageTimer
= 600000;
162
}
else
EnrageTimer
-= diff;
163
164
DoMeleeAttackIfReady
();
165
}
166
};
167
};
168
169
class
npc_lesser_doomguard
:
public
CreatureScript
170
{
171
public
:
172
npc_lesser_doomguard
() :
CreatureScript
(
"npc_lesser_doomguard"
) { }
173
174
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
175
{
176
return
new
npc_lesser_doomguardAI
(creature);
177
}
178
179
struct
npc_lesser_doomguardAI
:
public
hyjal_trashAI
180
{
181
npc_lesser_doomguardAI
(
Creature
* creature) :
hyjal_trashAI
(creature)
182
{
183
instance
= creature->
GetInstanceScript
();
184
if
(
instance
)
185
AzgalorGUID
=
instance
->GetData64(
DATA_AZGALOR
);
186
}
187
188
uint32
CrippleTimer
;
189
uint32
WarstompTimer
;
190
uint32
CheckTimer
;
191
uint64
AzgalorGUID
;
192
InstanceScript
*
instance
;
193
194
void
Reset
()
OVERRIDE
195
{
196
CrippleTimer
= 50000;
197
WarstompTimer
= 10000;
198
DoCast
(
me
,
SPELL_THRASH
);
199
CheckTimer
= 5000;
200
}
201
202
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
203
{
204
}
205
206
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
207
{
208
}
209
210
void
WaypointReached
(
uint32
/*waypointId*/
)
OVERRIDE
211
{
212
}
213
214
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
215
216
{
217
if
(
me
->IsWithinDist(who, 50) && !
me
->IsInCombat() &&
me
->IsValidAttackTarget(who))
218
AttackStart
(who);
219
}
220
221
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
222
{
223
}
224
225
void
UpdateAI
(
uint32
diff)
OVERRIDE
226
{
227
if
(
CheckTimer
<= diff)
228
{
229
if
(
AzgalorGUID
)
230
{
231
Creature
* boss =
Unit::GetCreature
((*
me
),
AzgalorGUID
);
232
if
(!boss || (boss && boss->
isDead
()))
233
{
234
me
->setDeathState(
DeathState::JUST_DIED
);
235
me
->RemoveCorpse();
236
return
;
237
}
238
}
239
CheckTimer
= 5000;
240
}
else
CheckTimer
-= diff;
241
242
//Return since we have no target
243
if
(!
UpdateVictim
())
244
return
;
245
246
if
(
WarstompTimer
<= diff)
247
{
248
DoCast
(
me
,
SPELL_WARSTOMP
);
249
WarstompTimer
= 10000+rand()%5000;
250
}
else
WarstompTimer
-= diff;
251
252
if
(
CrippleTimer
<= diff)
253
{
254
DoCast
(
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100,
true
),
SPELL_CRIPPLE
);
255
CrippleTimer
= 25000+rand()%5000;
256
}
else
CrippleTimer
-= diff;
257
258
DoMeleeAttackIfReady
();
259
}
260
};
261
};
262
263
void
AddSC_boss_azgalor
()
264
{
265
new
boss_azgalor
();
266
new
npc_lesser_doomguard
();
267
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
ScriptMgr.h
ScriptedCreature.h
DeathState::JUST_DIED
@ JUST_DIED
Definition
Unit.h:504
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
alterac_valley.cpp:12
Texts
Texts
Definition
boss_alizabal.cpp:13
SAY_ONAGGRO
@ SAY_ONAGGRO
Definition
boss_anetheron.cpp:28
SAY_ONSLAY
@ SAY_ONSLAY
Definition
boss_anetheron.cpp:24
SAY_ONDEATH
@ SAY_ONDEATH
Definition
boss_anetheron.cpp:23
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
boss_azgalor.cpp:16
SPELL_CRIPPLE
@ SPELL_CRIPPLE
Definition
boss_azgalor.cpp:20
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_azgalor.cpp:13
SPELL_DOOM
@ SPELL_DOOM
Definition
boss_azgalor.cpp:14
SPELL_WARSTOMP
@ SPELL_WARSTOMP
Definition
boss_azgalor.cpp:21
SPELL_HOWL_OF_AZGALOR
@ SPELL_HOWL_OF_AZGALOR
Definition
boss_azgalor.cpp:15
SPELL_THRASH
@ SPELL_THRASH
Definition
boss_azgalor.cpp:19
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_azgalor.cpp:17
AddSC_boss_azgalor
void AddSC_boss_azgalor()
Definition
boss_azgalor.cpp:263
SAY_ONAGGRO
@ SAY_ONAGGRO
Definition
boss_azgalor.cpp:29
SAY_ONSLAY
@ SAY_ONSLAY
Definition
boss_azgalor.cpp:27
SAY_ONDEATH
@ SAY_ONDEATH
Definition
boss_azgalor.cpp:26
SAY_DOOM
@ SAY_DOOM
Definition
boss_azgalor.cpp:28
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_gehennas.cpp:21
SPELL_THRASH
@ SPELL_THRASH
Definition
boss_halycon.cpp:13
SPELL_WARSTOMP
@ SPELL_WARSTOMP
Definition
boss_magmus.cpp:12
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
InstanceScript
Definition
InstanceScript.h:123
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
Unit
Definition
Unit.h:1367
Unit::IsAlive
bool IsAlive() const
Definition
Unit.h:2032
Unit::GetCreature
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4905
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
Unit::isDead
bool isDead() const
Definition
Unit.h:2040
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
boss_azgalor
Definition
boss_azgalor.cpp:33
boss_azgalor::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_azgalor.cpp:37
boss_azgalor::boss_azgalor
boss_azgalor()
Definition
boss_azgalor.cpp:35
npc_lesser_doomguard
Definition
boss_azgalor.cpp:170
npc_lesser_doomguard::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_azgalor.cpp:174
npc_lesser_doomguard::npc_lesser_doomguard
npc_lesser_doomguard()
Definition
boss_azgalor.cpp:172
hyjal.h
DATA_THRALL
@ DATA_THRALL
Definition
hyjal.h:26
DATA_AZGALOREVENT
@ DATA_AZGALOREVENT
Definition
hyjal.h:20
DATA_AZGALOR
@ DATA_AZGALOR
Definition
hyjal.h:19
hyjal_trash.h
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
boss_azgalor::boss_azgalorAI
Definition
boss_azgalor.cpp:43
boss_azgalor::boss_azgalorAI::Reset
void Reset() OVERRIDE
Definition
boss_azgalor.cpp:59
boss_azgalor::boss_azgalorAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_azgalor.cpp:103
boss_azgalor::boss_azgalorAI::HowlTimer
uint32 HowlTimer
Definition
boss_azgalor.cpp:52
boss_azgalor::boss_azgalorAI::enraged
bool enraged
Definition
boss_azgalor.cpp:55
boss_azgalor::boss_azgalorAI::WaypointReached
void WaypointReached(uint32 waypointId) OVERRIDE
Definition
boss_azgalor.cpp:85
boss_azgalor::boss_azgalorAI::go
bool go
Definition
boss_azgalor.cpp:57
boss_azgalor::boss_azgalorAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_azgalor.cpp:73
boss_azgalor::boss_azgalorAI::CleaveTimer
uint32 CleaveTimer
Definition
boss_azgalor.cpp:53
boss_azgalor::boss_azgalorAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_azgalor.cpp:80
boss_azgalor::boss_azgalorAI::JustDied
void JustDied(Unit *killer) OVERRIDE
Definition
boss_azgalor.cpp:95
boss_azgalor::boss_azgalorAI::boss_azgalorAI
boss_azgalorAI(Creature *creature)
Definition
boss_azgalor.cpp:44
boss_azgalor::boss_azgalorAI::DoomTimer
uint32 DoomTimer
Definition
boss_azgalor.cpp:51
boss_azgalor::boss_azgalorAI::RainTimer
uint32 RainTimer
Definition
boss_azgalor.cpp:50
boss_azgalor::boss_azgalorAI::EnrageTimer
uint32 EnrageTimer
Definition
boss_azgalor.cpp:54
hyjal_trashAI::JustDied
void JustDied(Unit *)
Definition
hyjal_trash.cpp:386
hyjal_trashAI::damageTaken
uint32 damageTaken
Definition
hyjal_trash.h:34
hyjal_trashAI::instance
InstanceScript * instance
Definition
hyjal_trash.h:25
hyjal_trashAI::IsEvent
bool IsEvent
Definition
hyjal_trash.h:26
hyjal_trashAI::hyjal_trashAI
hyjal_trashAI(Creature *creature)
Definition
hyjal_trash.cpp:164
npc_escortAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
ScriptedEscortAI.cpp:209
npc_escortAI::SetDespawnAtEnd
void SetDespawnAtEnd(bool despawn)
Definition
ScriptedEscortAI.h:90
npc_escortAI::Start
void Start(bool isActiveAttacker=true, bool run=false, uint64 playerGUID=0, Quest const *quest=NULL, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
Definition
ScriptedEscortAI.cpp:420
npc_escortAI::AddWaypoint
void AddWaypoint(uint32 id, float x, float y, float z, uint32 waitTime=0)
Definition
ScriptedEscortAI.cpp:367
npc_escortAI::AttackStart
void AttackStart(Unit *who) OVERRIDE
Definition
ScriptedEscortAI.cpp:41
npc_lesser_doomguard::npc_lesser_doomguardAI
Definition
boss_azgalor.cpp:180
npc_lesser_doomguard::npc_lesser_doomguardAI::AzgalorGUID
uint64 AzgalorGUID
Definition
boss_azgalor.cpp:191
npc_lesser_doomguard::npc_lesser_doomguardAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
boss_azgalor.cpp:214
npc_lesser_doomguard::npc_lesser_doomguardAI::Reset
void Reset() OVERRIDE
Definition
boss_azgalor.cpp:194
npc_lesser_doomguard::npc_lesser_doomguardAI::WarstompTimer
uint32 WarstompTimer
Definition
boss_azgalor.cpp:189
npc_lesser_doomguard::npc_lesser_doomguardAI::npc_lesser_doomguardAI
npc_lesser_doomguardAI(Creature *creature)
Definition
boss_azgalor.cpp:181
npc_lesser_doomguard::npc_lesser_doomguardAI::CrippleTimer
uint32 CrippleTimer
Definition
boss_azgalor.cpp:188
npc_lesser_doomguard::npc_lesser_doomguardAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_azgalor.cpp:202
npc_lesser_doomguard::npc_lesser_doomguardAI::instance
InstanceScript * instance
Definition
boss_azgalor.cpp:192
npc_lesser_doomguard::npc_lesser_doomguardAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_azgalor.cpp:221
npc_lesser_doomguard::npc_lesser_doomguardAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_azgalor.cpp:225
npc_lesser_doomguard::npc_lesser_doomguardAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_azgalor.cpp:206
npc_lesser_doomguard::npc_lesser_doomguardAI::WaypointReached
void WaypointReached(uint32) OVERRIDE
Definition
boss_azgalor.cpp:210
npc_lesser_doomguard::npc_lesser_doomguardAI::CheckTimer
uint32 CheckTimer
Definition
boss_azgalor.cpp:190
src
server
scripts
Kalimdor
CavernsOfTime
BattleForMountHyjal
boss_azgalor.cpp
Generated on
for Project SkyFire Core by
1.17.0