Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_vexallus.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_Vexallus
8
SD%Complete: 90
9
SDComment: Heroic and Normal support. Needs further testing.
10
SDCategory: Magister's Terrace
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
magisters_terrace.h
"
16
17
enum
Yells
18
{
19
SAY_AGGRO
= 0,
20
SAY_ENERGY
= 1,
21
SAY_OVERLOAD
= 2,
22
SAY_KILL
= 3,
23
EMOTE_DISCHARGE_ENERGY
= 4
24
25
//is this text for real?
26
//#define SAY_DEATH "What...happen...ed."
27
};
28
29
enum
Spells
30
{
31
// Pure energy spell info
32
SPELL_ENERGY_BOLT
= 46156,
33
SPELL_ENERGY_FEEDBACK
= 44335,
34
35
// Vexallus spell info
36
SPELL_CHAIN_LIGHTNING
= 44318,
37
SPELL_H_CHAIN_LIGHTNING
= 46380,
// heroic spell
38
SPELL_OVERLOAD
= 44353,
39
SPELL_ARCANE_SHOCK
= 44319,
40
SPELL_H_ARCANE_SHOCK
= 46381,
// heroic spell
41
42
SPELL_SUMMON_PURE_ENERGY
= 44322,
// mod scale -10
43
H_SPELL_SUMMON_PURE_ENERGY1
= 46154,
// mod scale -5
44
H_SPELL_SUMMON_PURE_ENERGY2
= 46159
// mod scale -5
45
};
46
47
enum
Creatures
48
{
49
NPC_PURE_ENERGY
= 24745,
50
};
51
52
enum
Misc
53
{
54
INTERVAL_MODIFIER
= 15,
55
INTERVAL_SWITCH
= 6
56
};
57
58
class
boss_vexallus
:
public
CreatureScript
59
{
60
public
:
61
boss_vexallus
() :
CreatureScript
(
"boss_vexallus"
) { }
62
63
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
64
{
65
return
new
boss_vexallusAI
(creature);
66
};
67
68
struct
boss_vexallusAI
:
public
BossAI
69
{
70
boss_vexallusAI
(
Creature
* creature) :
BossAI
(creature,
DATA_VEXALLUS_EVENT
)
71
{
72
instance
= creature->
GetInstanceScript
();
73
}
74
75
InstanceScript
*
instance
;
76
77
uint32
ChainLightningTimer
;
78
uint32
ArcaneShockTimer
;
79
uint32
OverloadTimer
;
80
uint32
IntervalHealthAmount
;
81
bool
Enraged
;
82
83
void
Reset
()
OVERRIDE
84
{
85
summons
.DespawnAll();
86
ChainLightningTimer
= 8000;
87
ArcaneShockTimer
= 5000;
88
OverloadTimer
= 1200;
89
IntervalHealthAmount
= 1;
90
Enraged
=
false
;
91
92
if
(
instance
)
93
instance
->SetData(
DATA_VEXALLUS_EVENT
,
NOT_STARTED
);
94
}
95
96
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
97
{
98
Talk
(
SAY_KILL
);
99
}
100
101
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
102
{
103
summons
.DespawnAll();
104
if
(
instance
)
105
instance
->SetData(
DATA_VEXALLUS_EVENT
,
DONE
);
106
}
107
108
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
109
{
110
Talk
(
SAY_AGGRO
);
111
112
if
(
instance
)
113
instance
->SetData(
DATA_VEXALLUS_EVENT
,
IN_PROGRESS
);
114
}
115
116
void
JustSummoned
(
Creature
* summoned)
OVERRIDE
117
{
118
if
(
Unit
* temp =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
119
summoned->GetMotionMaster()->MoveFollow(temp, 0, 0);
120
121
//spells are SUMMON_TYPE_GUARDIAN, so using setOwner should be ok
122
summoned->CastSpell(summoned,
SPELL_ENERGY_BOLT
,
false
, 0, 0,
me
->GetGUID());
123
}
124
125
void
UpdateAI
(
uint32
diff)
OVERRIDE
126
{
127
if
(!
UpdateVictim
())
128
return
;
129
130
if
(!
Enraged
)
131
{
132
//used for check, when Vexallus cast adds 85%, 70%, 55%, 40%, 25%
133
if
(!
HealthAbovePct
(100 -
INTERVAL_MODIFIER
*
IntervalHealthAmount
))
134
{
135
//increase amount, unless we're at 10%, then we switch and return
136
if
(
IntervalHealthAmount
==
INTERVAL_SWITCH
)
137
{
138
Enraged
=
true
;
139
return
;
140
}
141
else
142
++
IntervalHealthAmount
;
143
144
Talk
(
SAY_ENERGY
);
145
Talk
(
EMOTE_DISCHARGE_ENERGY
);
146
147
if
(
IsHeroic
())
148
{
149
DoCast
(
me
,
H_SPELL_SUMMON_PURE_ENERGY1
,
false
);
150
DoCast
(
me
,
H_SPELL_SUMMON_PURE_ENERGY2
,
false
);
151
}
152
else
153
DoCast
(
me
,
SPELL_SUMMON_PURE_ENERGY
,
false
);
154
155
//below are workaround summons, remove when summoning spells w/implicitTarget 73 implemented in the core
156
me
->SummonCreature(
NPC_PURE_ENERGY
, 0.0f, 0.0f, 0.0f, 0.0f,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
, 0);
157
158
if
(
IsHeroic
())
159
me
->SummonCreature(
NPC_PURE_ENERGY
, 0.0f, 0.0f, 0.0f, 0.0f,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
, 0);
160
}
161
162
if
(
ChainLightningTimer
<= diff)
163
{
164
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
165
DoCast
(target,
SPELL_CHAIN_LIGHTNING
);
166
167
ChainLightningTimer
= 8000;
168
}
else
ChainLightningTimer
-= diff;
169
170
if
(
ArcaneShockTimer
<= diff)
171
{
172
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
173
if
(target)
174
DoCast
(target,
SPELL_ARCANE_SHOCK
);
175
176
ArcaneShockTimer
= 8000;
177
}
else
ArcaneShockTimer
-= diff;
178
}
179
else
180
{
181
if
(
OverloadTimer
<= diff)
182
{
183
DoCastVictim
(
SPELL_OVERLOAD
);
184
185
OverloadTimer
= 2000;
186
}
else
OverloadTimer
-= diff;
187
}
188
189
DoMeleeAttackIfReady
();
190
}
191
};
192
};
193
194
class
npc_pure_energy
:
public
CreatureScript
195
{
196
public
:
197
npc_pure_energy
() :
CreatureScript
(
"npc_pure_energy"
) { }
198
199
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
200
{
201
return
new
npc_pure_energyAI
(creature);
202
};
203
204
struct
npc_pure_energyAI
:
public
ScriptedAI
205
{
206
npc_pure_energyAI
(
Creature
* creature) :
ScriptedAI
(creature)
207
{
208
me
->SetDisplayId(
me
->GetCreatureTemplate()->Modelid2);
209
}
210
211
void
Reset
()
OVERRIDE
{ }
212
213
void
JustDied
(
Unit
* slayer)
OVERRIDE
214
{
215
if
(
Unit
* temp =
me
->GetOwner())
216
{
217
if
(temp && temp->IsAlive())
218
slayer->CastSpell(slayer,
SPELL_ENERGY_FEEDBACK
,
true
, 0, 0, temp->GetGUID());
219
}
220
}
221
222
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
223
void
MoveInLineOfSight
(
Unit
*
/*who*/
)
OVERRIDE
{ }
224
225
void
AttackStart
(
Unit
*
/*who*/
)
OVERRIDE
{ }
226
};
227
};
228
229
void
AddSC_boss_vexallus
()
230
{
231
new
boss_vexallus
();
232
new
npc_pure_energy
();
233
}
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
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
Definition
Object.h:72
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Creatures
Creatures
Definition
alterac_valley.cpp:28
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SAY_KILL
#define SAY_KILL
Definition
boss_commander_kolurg.cpp:29
Misc
Misc
Definition
boss_occuthar.cpp:37
SAY_ENERGY
@ SAY_ENERGY
Definition
boss_selin_fireheart.cpp:20
NPC_PURE_ENERGY
@ NPC_PURE_ENERGY
Definition
boss_vexallus.cpp:49
AddSC_boss_vexallus
void AddSC_boss_vexallus()
Definition
boss_vexallus.cpp:229
INTERVAL_MODIFIER
@ INTERVAL_MODIFIER
Definition
boss_vexallus.cpp:54
INTERVAL_SWITCH
@ INTERVAL_SWITCH
Definition
boss_vexallus.cpp:55
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_vexallus.cpp:19
SAY_ENERGY
@ SAY_ENERGY
Definition
boss_vexallus.cpp:20
SAY_KILL
@ SAY_KILL
Definition
boss_vexallus.cpp:22
EMOTE_DISCHARGE_ENERGY
@ EMOTE_DISCHARGE_ENERGY
Definition
boss_vexallus.cpp:23
SAY_OVERLOAD
@ SAY_OVERLOAD
Definition
boss_vexallus.cpp:21
SPELL_H_ARCANE_SHOCK
@ SPELL_H_ARCANE_SHOCK
Definition
boss_vexallus.cpp:40
SPELL_ARCANE_SHOCK
@ SPELL_ARCANE_SHOCK
Definition
boss_vexallus.cpp:39
H_SPELL_SUMMON_PURE_ENERGY2
@ H_SPELL_SUMMON_PURE_ENERGY2
Definition
boss_vexallus.cpp:44
H_SPELL_SUMMON_PURE_ENERGY1
@ H_SPELL_SUMMON_PURE_ENERGY1
Definition
boss_vexallus.cpp:43
SPELL_ENERGY_BOLT
@ SPELL_ENERGY_BOLT
Definition
boss_vexallus.cpp:32
SPELL_OVERLOAD
@ SPELL_OVERLOAD
Definition
boss_vexallus.cpp:38
SPELL_CHAIN_LIGHTNING
@ SPELL_CHAIN_LIGHTNING
Definition
boss_vexallus.cpp:36
SPELL_ENERGY_FEEDBACK
@ SPELL_ENERGY_FEEDBACK
Definition
boss_vexallus.cpp:33
SPELL_SUMMON_PURE_ENERGY
@ SPELL_SUMMON_PURE_ENERGY
Definition
boss_vexallus.cpp:42
SPELL_H_CHAIN_LIGHTNING
@ SPELL_H_CHAIN_LIGHTNING
Definition
boss_vexallus.cpp:37
SPELL_CHAIN_LIGHTNING
@ SPELL_CHAIN_LIGHTNING
Definition
bosses_opera.cpp:73
BossAI::summons
SummonList summons
Definition
ScriptedCreature.h:440
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
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
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
boss_vexallus
Definition
boss_vexallus.cpp:59
boss_vexallus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_vexallus.cpp:63
boss_vexallus::boss_vexallus
boss_vexallus()
Definition
boss_vexallus.cpp:61
npc_pure_energy
Definition
boss_vexallus.cpp:195
npc_pure_energy::npc_pure_energy
npc_pure_energy()
Definition
boss_vexallus.cpp:197
npc_pure_energy::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_vexallus.cpp:199
magisters_terrace.h
DATA_VEXALLUS_EVENT
@ DATA_VEXALLUS_EVENT
Definition
magisters_terrace.h:14
ScriptedAI::IsHeroic
bool IsHeroic() const
Definition
ScriptedCreature.h:279
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthAbovePct
bool HealthAbovePct(uint32 pct) const
Definition
ScriptedCreature.h:251
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
boss_vexallus::boss_vexallusAI
Definition
boss_vexallus.cpp:69
boss_vexallus::boss_vexallusAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:96
boss_vexallus::boss_vexallusAI::JustSummoned
void JustSummoned(Creature *summoned) OVERRIDE
Definition
boss_vexallus.cpp:116
boss_vexallus::boss_vexallusAI::Enraged
bool Enraged
Definition
boss_vexallus.cpp:81
boss_vexallus::boss_vexallusAI::boss_vexallusAI
boss_vexallusAI(Creature *creature)
Definition
boss_vexallus.cpp:70
boss_vexallus::boss_vexallusAI::instance
InstanceScript * instance
Definition
boss_vexallus.cpp:75
boss_vexallus::boss_vexallusAI::Reset
void Reset() OVERRIDE
Definition
boss_vexallus.cpp:83
boss_vexallus::boss_vexallusAI::ArcaneShockTimer
uint32 ArcaneShockTimer
Definition
boss_vexallus.cpp:78
boss_vexallus::boss_vexallusAI::ChainLightningTimer
uint32 ChainLightningTimer
Definition
boss_vexallus.cpp:77
boss_vexallus::boss_vexallusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:108
boss_vexallus::boss_vexallusAI::OverloadTimer
uint32 OverloadTimer
Definition
boss_vexallus.cpp:79
boss_vexallus::boss_vexallusAI::IntervalHealthAmount
uint32 IntervalHealthAmount
Definition
boss_vexallus.cpp:80
boss_vexallus::boss_vexallusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_vexallus.cpp:125
boss_vexallus::boss_vexallusAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:101
npc_pure_energy::npc_pure_energyAI
Definition
boss_vexallus.cpp:205
npc_pure_energy::npc_pure_energyAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:223
npc_pure_energy::npc_pure_energyAI::Reset
void Reset() OVERRIDE
Definition
boss_vexallus.cpp:211
npc_pure_energy::npc_pure_energyAI::npc_pure_energyAI
npc_pure_energyAI(Creature *creature)
Definition
boss_vexallus.cpp:206
npc_pure_energy::npc_pure_energyAI::JustDied
void JustDied(Unit *slayer) OVERRIDE
Definition
boss_vexallus.cpp:213
npc_pure_energy::npc_pure_energyAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:222
npc_pure_energy::npc_pure_energyAI::AttackStart
void AttackStart(Unit *) OVERRIDE
Definition
boss_vexallus.cpp:225
src
server
scripts
EasternKingdoms
MagistersTerrace
boss_vexallus.cpp
Generated on
for Project SkyFire Core by
1.17.0