Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_void_reaver.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
/* ScriptData
7
SDName: Boss_Void_Reaver
8
SD%Complete: 90
9
SDComment: Should reset if raid are out of room.
10
SDCategory: Tempest Keep, The Eye
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
the_eye.h
"
16
17
enum
Yells
18
{
19
SAY_AGGRO
= 0,
20
SAY_SLAY
= 1,
21
SAY_DEATH
= 2,
22
SAY_POUNDING
= 3
23
};
24
25
enum
Spells
26
{
27
SPELL_POUNDING
= 34162,
28
SPELL_ARCANE_ORB
= 34172,
29
SPELL_KNOCK_AWAY
= 25778,
30
SPELL_BERSERK
= 27680
31
};
32
33
class
boss_void_reaver
:
public
CreatureScript
34
{
35
public
:
36
boss_void_reaver
() :
CreatureScript
(
"boss_void_reaver"
) { }
37
38
struct
boss_void_reaverAI
:
public
ScriptedAI
39
{
40
boss_void_reaverAI
(
Creature
* creature) :
ScriptedAI
(creature)
41
{
42
instance
= creature->
GetInstanceScript
();
43
}
44
45
InstanceScript
*
instance
;
46
47
uint32
Pounding_Timer
;
48
uint32
ArcaneOrb_Timer
;
49
uint32
KnockAway_Timer
;
50
uint32
Berserk_Timer
;
51
52
bool
Enraged
;
53
54
void
Reset
()
OVERRIDE
55
{
56
Pounding_Timer
= 15000;
57
ArcaneOrb_Timer
= 3000;
58
KnockAway_Timer
= 30000;
59
Berserk_Timer
= 600000;
60
61
Enraged
=
false
;
62
63
if
(
instance
&&
me
->IsAlive())
64
instance
->SetData(
DATA_VOIDREAVEREVENT
,
NOT_STARTED
);
65
}
66
67
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
68
{
69
Talk
(
SAY_SLAY
);
70
}
71
72
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
73
{
74
Talk
(
SAY_DEATH
);
75
DoZoneInCombat
();
76
77
if
(
instance
)
78
instance
->SetData(
DATA_VOIDREAVEREVENT
,
DONE
);
79
}
80
81
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
82
{
83
Talk
(
SAY_AGGRO
);
84
85
if
(
instance
)
86
instance
->SetData(
DATA_VOIDREAVEREVENT
,
IN_PROGRESS
);
87
}
88
89
void
UpdateAI
(
uint32
diff)
OVERRIDE
90
{
91
if
(!
UpdateVictim
())
92
return
;
93
// Pounding
94
if
(
Pounding_Timer
<= diff)
95
{
96
DoCastVictim
(
SPELL_POUNDING
);
97
Talk
(
SAY_POUNDING
);
98
Pounding_Timer
= 15000;
//cast time(3000) + cooldown time(12000)
99
}
100
else
101
Pounding_Timer
-= diff;
102
// Arcane Orb
103
if
(
ArcaneOrb_Timer
<= diff)
104
{
105
Unit
* target = NULL;
106
std::list<HostileReference*> t_list =
me
->getThreatManager().getThreatList();
107
std::vector<Unit*> target_list;
108
for
(std::list<HostileReference*>::const_iterator itr = t_list.begin(); itr != t_list.end(); ++itr)
109
{
110
target =
Unit::GetUnit
(*
me
, (*itr)->getUnitGuid());
111
if
(!target)
112
continue
;
113
// exclude pets & totems, 18 yard radius minimum
114
if
(target->
GetTypeId
() ==
TypeID::TYPEID_PLAYER
&& target->
IsAlive
() && !target->
IsWithinDist
(
me
, 18,
false
))
115
target_list.push_back(target);
116
target = NULL;
117
}
118
119
if
(!target_list.empty())
120
target = *(target_list.begin() + rand() % target_list.size());
121
else
122
target =
me
->GetVictim();
123
124
if
(target)
125
me
->CastSpell(target,
SPELL_ARCANE_ORB
,
false
, NULL, NULL, 0);
126
ArcaneOrb_Timer
= 3000;
127
}
128
else
129
ArcaneOrb_Timer
-= diff;
130
// Single Target knock back, reduces aggro
131
if
(
KnockAway_Timer
<= diff)
132
{
133
DoCastVictim
(
SPELL_KNOCK_AWAY
);
134
//Drop 25% aggro
135
if
(
DoGetThreat
(
me
->GetVictim()))
136
DoModifyThreatPercent
(
me
->GetVictim(), -25);
137
KnockAway_Timer
= 30000;
138
}
139
else
140
KnockAway_Timer
-= diff;
141
//Berserk
142
if
(
Berserk_Timer
< diff && !
Enraged
)
143
{
144
DoCast
(
me
,
SPELL_BERSERK
);
145
Enraged
=
true
;
146
}
147
else
148
Berserk_Timer
-= diff;
149
150
DoMeleeAttackIfReady
();
151
152
EnterEvadeIfOutOfCombatArea
(diff);
153
}
154
};
155
156
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
157
{
158
return
new
boss_void_reaverAI
(creature);
159
}
160
};
161
162
void
AddSC_boss_void_reaver
()
163
{
164
new
boss_void_reaver
();
165
}
166
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
ScriptMgr.h
ScriptedCreature.h
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
SPELL_KNOCK_AWAY
@ SPELL_KNOCK_AWAY
Definition
boss_gyth.cpp:16
SAY_DEATH
@ SAY_DEATH
Definition
boss_void_reaver.cpp:21
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_void_reaver.cpp:19
SAY_POUNDING
@ SAY_POUNDING
Definition
boss_void_reaver.cpp:22
SAY_SLAY
@ SAY_SLAY
Definition
boss_void_reaver.cpp:20
SPELL_ARCANE_ORB
@ SPELL_ARCANE_ORB
Definition
boss_void_reaver.cpp:28
SPELL_KNOCK_AWAY
@ SPELL_KNOCK_AWAY
Definition
boss_void_reaver.cpp:29
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_void_reaver.cpp:30
SPELL_POUNDING
@ SPELL_POUNDING
Definition
boss_void_reaver.cpp:27
AddSC_boss_void_reaver
void AddSC_boss_void_reaver()
Definition
boss_void_reaver.cpp:162
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::DoZoneInCombat
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
Definition
CreatureAI.cpp:33
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
Object::GetTypeId
TypeID GetTypeId() const
Definition
Object.h:131
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
Unit::IsAlive
bool IsAlive() const
Definition
Unit.h:2032
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
WorldObject::IsWithinDist
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
Definition
Object.cpp:1730
boss_void_reaver
Definition
boss_void_reaver.cpp:34
boss_void_reaver::boss_void_reaver
boss_void_reaver()
Definition
boss_void_reaver.cpp:36
boss_void_reaver::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_void_reaver.cpp:156
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::DoGetThreat
float DoGetThreat(Unit *unit)
Definition
ScriptedCreature.cpp:278
ScriptedAI::EnterEvadeIfOutOfCombatArea
bool EnterEvadeIfOutOfCombatArea(uint32 const diff)
Definition
ScriptedCreature.cpp:409
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
ScriptedAI::DoModifyThreatPercent
void DoModifyThreatPercent(Unit *unit, int32 pct)
Definition
ScriptedCreature.cpp:285
Yells
Definition
boss_illidan.cpp:256
boss_void_reaver::boss_void_reaverAI
Definition
boss_void_reaver.cpp:39
boss_void_reaver::boss_void_reaverAI::boss_void_reaverAI
boss_void_reaverAI(Creature *creature)
Definition
boss_void_reaver.cpp:40
boss_void_reaver::boss_void_reaverAI::Pounding_Timer
uint32 Pounding_Timer
Definition
boss_void_reaver.cpp:47
boss_void_reaver::boss_void_reaverAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_void_reaver.cpp:67
boss_void_reaver::boss_void_reaverAI::KnockAway_Timer
uint32 KnockAway_Timer
Definition
boss_void_reaver.cpp:49
boss_void_reaver::boss_void_reaverAI::Enraged
bool Enraged
Definition
boss_void_reaver.cpp:52
boss_void_reaver::boss_void_reaverAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_void_reaver.cpp:89
boss_void_reaver::boss_void_reaverAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_void_reaver.cpp:81
boss_void_reaver::boss_void_reaverAI::Berserk_Timer
uint32 Berserk_Timer
Definition
boss_void_reaver.cpp:50
boss_void_reaver::boss_void_reaverAI::instance
InstanceScript * instance
Definition
boss_void_reaver.cpp:45
boss_void_reaver::boss_void_reaverAI::Reset
void Reset() OVERRIDE
Definition
boss_void_reaver.cpp:54
boss_void_reaver::boss_void_reaverAI::ArcaneOrb_Timer
uint32 ArcaneOrb_Timer
Definition
boss_void_reaver.cpp:48
boss_void_reaver::boss_void_reaverAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_void_reaver.cpp:72
the_eye.h
DATA_VOIDREAVEREVENT
@ DATA_VOIDREAVEREVENT
Definition
the_eye.h:20
src
server
scripts
Outland
TempestKeep
Eye
boss_void_reaver.cpp
Generated on
for Project SkyFire Core by
1.17.0