Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_vaelastrasz.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 "
blackwing_lair.h
"
9
#include "
ScriptedGossip.h
"
10
#include "
Player.h
"
11
12
enum
Says
13
{
14
SAY_LINE1
= 0,
15
SAY_LINE2
= 1,
16
SAY_LINE3
= 2,
17
SAY_HALFLIFE
= 3,
18
SAY_KILLTARGET
= 4
19
};
20
21
enum
Gossip
22
{
23
GOSSIP_ID
= 21334,
24
};
25
26
enum
Spells
27
{
28
SPELL_ESSENCEOFTHERED
= 23513,
29
SPELL_FLAMEBREATH
= 23461,
30
SPELL_FIRENOVA
= 23462,
31
SPELL_TAILSWIPE
= 15847,
32
SPELL_BURNINGADRENALINE
= 23620,
33
SPELL_CLEAVE
= 20684
//Chain cleave is most likely named something different and contains a dummy effect
34
};
35
36
enum
Events
37
{
38
EVENT_SPEECH_1
= 1,
39
EVENT_SPEECH_2
= 2,
40
EVENT_SPEECH_3
= 3,
41
EVENT_SPEECH_4
= 4,
42
EVENT_ESSENCEOFTHERED
= 5,
43
EVENT_FLAMEBREATH
= 6,
44
EVENT_FIRENOVA
= 7,
45
EVENT_TAILSWIPE
= 8,
46
EVENT_CLEAVE
= 9,
47
EVENT_BURNINGADRENALINE_CASTER
= 10,
48
EVENT_BURNINGADRENALINE_TANK
= 11
49
};
50
51
class
boss_vaelastrasz
:
public
CreatureScript
52
{
53
public
:
54
boss_vaelastrasz
() :
CreatureScript
(
"boss_vaelastrasz"
) { }
55
56
struct
boss_vaelAI
:
public
BossAI
57
{
58
boss_vaelAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_VAELASTRAZ
)
59
{
60
PlayerGUID
= 0;
61
HasYelled
=
false
;
62
creature->
SetFlag
(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
63
creature->
setFaction
(35);
64
creature->
RemoveFlag
(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NOT_SELECTABLE
);
65
}
66
67
void
Reset
()
OVERRIDE
68
{
69
_Reset
();
70
71
me
->SetStandState(
UNIT_STAND_STATE_DEAD
);
72
PlayerGUID
= 0;
73
74
HasYelled
=
false
;
75
}
76
77
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
78
{
79
_EnterCombat
();
80
81
DoCast
(
me
,
SPELL_ESSENCEOFTHERED
);
82
me
->SetHealth(
me
->CountPctFromMaxHealth(30));
83
// now drop damage requirement to be able to take loot
84
me
->ResetPlayerDamageReq();
85
86
events
.ScheduleEvent(
EVENT_CLEAVE
, 10000);
87
events
.ScheduleEvent(
EVENT_FLAMEBREATH
, 15000);
88
events
.ScheduleEvent(
EVENT_FIRENOVA
, 20000);
89
events
.ScheduleEvent(
EVENT_TAILSWIPE
, 11000);
90
events
.ScheduleEvent(
EVENT_BURNINGADRENALINE_CASTER
, 15000);
91
events
.ScheduleEvent(
EVENT_BURNINGADRENALINE_TANK
, 45000);
92
}
93
94
void
BeginSpeech
(
Unit
* target)
95
{
96
PlayerGUID
= target->
GetGUID
();
97
me
->RemoveFlag(
UNIT_FIELD_NPC_FLAGS
,
UNIT_NPC_FLAG_GOSSIP
);
98
events
.ScheduleEvent(
EVENT_SPEECH_1
, 1000);
99
}
100
101
void
KilledUnit
(
Unit
* victim)
OVERRIDE
102
{
103
if
(rand()%5)
104
return
;
105
106
Talk
(
SAY_KILLTARGET
, victim);
107
}
108
109
void
UpdateAI
(
uint32
diff)
OVERRIDE
110
{
111
events
.Update(diff);
112
113
// Speech
114
if
(!
UpdateVictim
())
115
{
116
while
(
uint32
eventId =
events
.ExecuteEvent())
117
{
118
switch
(eventId)
119
{
120
case
EVENT_SPEECH_1
:
121
Talk
(
SAY_LINE1
);
122
me
->SetStandState(
UNIT_STAND_STATE_STAND
);
123
me
->HandleEmoteCommand(
EMOTE_ONESHOT_TALK
);
124
events
.ScheduleEvent(
EVENT_SPEECH_2
, 12000);
125
break
;
126
case
EVENT_SPEECH_2
:
127
Talk
(
SAY_LINE2
);
128
me
->HandleEmoteCommand(
EMOTE_ONESHOT_TALK
);
129
events
.ScheduleEvent(
EVENT_SPEECH_3
, 12000);
130
break
;
131
case
EVENT_SPEECH_3
:
132
Talk
(
SAY_LINE3
);
133
me
->HandleEmoteCommand(
EMOTE_ONESHOT_TALK
);
134
events
.ScheduleEvent(
EVENT_SPEECH_4
, 16000);
135
break
;
136
case
EVENT_SPEECH_4
:
137
me
->setFaction(103);
138
if
(
PlayerGUID
&&
Unit::GetUnit
(*
me
,
PlayerGUID
))
139
AttackStart
(
Unit::GetUnit
(*
me
,
PlayerGUID
));;
140
break
;
141
}
142
}
143
return
;
144
}
145
146
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
147
return
;
148
149
while
(
uint32
eventId =
events
.ExecuteEvent())
150
{
151
switch
(eventId)
152
{
153
case
EVENT_CLEAVE
:
154
events
.ScheduleEvent(
EVENT_CLEAVE
, 15000);
155
DoCastVictim
(
SPELL_CLEAVE
);
156
break
;
157
case
EVENT_FLAMEBREATH
:
158
DoCastVictim
(
SPELL_FLAMEBREATH
);
159
events
.ScheduleEvent(
EVENT_FLAMEBREATH
, std::rand() % 14000 + 8000);
160
break
;
161
case
EVENT_FIRENOVA
:
162
DoCastVictim
(
SPELL_FIRENOVA
);
163
events
.ScheduleEvent(
EVENT_FIRENOVA
, 15000);
164
break
;
165
case
EVENT_TAILSWIPE
:
166
//Only cast if we are behind
167
/*if (!me->HasInArc(M_PI, me->GetVictim()))
168
{
169
DoCast(me->GetVictim(), SPELL_TAILSWIPE);
170
}*/
171
events
.ScheduleEvent(
EVENT_TAILSWIPE
, 15000);
172
break
;
173
case
EVENT_BURNINGADRENALINE_CASTER
:
174
{
175
Unit
* target = NULL;
176
177
uint8
i = 0;
178
while
(i < 3)
// max 3 tries to get a random target with power_mana
179
{
180
++i;
181
target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100,
true
);
// not aggro leader
182
if
(target && target->
getPowerType
() ==
POWER_MANA
)
183
i = 3;
184
}
185
if
(target)
// cast on self (see below)
186
target->
CastSpell
(target,
SPELL_BURNINGADRENALINE
,
true
);
187
}
188
events
.ScheduleEvent(
EVENT_BURNINGADRENALINE_CASTER
, 15000);
189
break
;
190
case
EVENT_BURNINGADRENALINE_TANK
:
191
// have the victim cast the spell on himself otherwise the third effect aura will be applied to Vael instead of the player
192
me
->GetVictim()->CastSpell(
me
->GetVictim(),
SPELL_BURNINGADRENALINE
,
true
);
193
events
.ScheduleEvent(
EVENT_BURNINGADRENALINE_TANK
, 45000);
194
break
;
195
}
196
}
197
198
// Yell if hp lower than 15%
199
if
(
HealthBelowPct
(15) && !
HasYelled
)
200
{
201
Talk
(
SAY_HALFLIFE
);
202
HasYelled
=
true
;
203
}
204
205
DoMeleeAttackIfReady
();
206
}
207
208
void
sGossipSelect
(
Player
* player,
uint32
sender,
uint32
action)
OVERRIDE
209
{
210
if
(sender ==
GOSSIP_ID
&& action == 0)
211
{
212
player->CLOSE_GOSSIP_MENU();
213
BeginSpeech
(player);
214
}
215
}
216
217
private
:
218
uint64
PlayerGUID
;
219
bool
HasYelled
;
220
};
221
222
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
223
{
224
return
new
boss_vaelAI
(creature);
225
}
226
};
227
228
void
AddSC_boss_vaelastrasz
()
229
{
230
new
boss_vaelastrasz
();
231
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint8
std::uint8_t uint8
Definition
Define.h:79
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
Player.h
ScriptMgr.h
ScriptedCreature.h
ScriptedGossip.h
EMOTE_ONESHOT_TALK
@ EMOTE_ONESHOT_TALK
Definition
SharedDefines.h:2132
POWER_MANA
@ POWER_MANA
Definition
SharedDefines.h:215
UNIT_NPC_FLAG_GOSSIP
@ UNIT_NPC_FLAG_GOSSIP
Definition
Unit.h:687
UNIT_STAND_STATE_DEAD
@ UNIT_STAND_STATE_DEAD
Definition
Unit.h:169
UNIT_STAND_STATE_STAND
@ UNIT_STAND_STATE_STAND
Definition
Unit.h:162
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
UNIT_FLAG_NOT_SELECTABLE
@ UNIT_FLAG_NOT_SELECTABLE
Definition
Unit.h:650
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
UNIT_FIELD_NPC_FLAGS
@ UNIT_FIELD_NPC_FLAGS
Definition
UpdateFields.h:107
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
alterac_valley.cpp:12
Events
Events
Definition
alterac_valley.cpp:40
EVENT_CLEAVE
@ EVENT_CLEAVE
Definition
alterac_valley.cpp:42
blackwing_lair.h
BOSS_VAELASTRAZ
@ BOSS_VAELASTRAZ
Definition
blackwing_lair.h:16
SPELL_FIRENOVA
@ SPELL_FIRENOVA
Definition
boss_drakkisath.cpp:12
SPELL_FLAMEBREATH
@ SPELL_FLAMEBREATH
Definition
boss_gyth.cpp:14
Says
Says
Definition
boss_halycon.cpp:17
Gossip
Gossip
Definition
boss_nefarian.cpp:66
GOSSIP_ID
@ GOSSIP_ID
Definition
boss_nefarian.cpp:67
EVENT_FIRENOVA
@ EVENT_FIRENOVA
Definition
boss_pyroguard_emberseer.cpp:49
SAY_LINE2
@ SAY_LINE2
Definition
boss_vaelastrasz.cpp:15
SAY_LINE3
@ SAY_LINE3
Definition
boss_vaelastrasz.cpp:16
SAY_KILLTARGET
@ SAY_KILLTARGET
Definition
boss_vaelastrasz.cpp:18
SAY_LINE1
@ SAY_LINE1
Definition
boss_vaelastrasz.cpp:14
SAY_HALFLIFE
@ SAY_HALFLIFE
Definition
boss_vaelastrasz.cpp:17
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
boss_vaelastrasz.cpp:33
SPELL_ESSENCEOFTHERED
@ SPELL_ESSENCEOFTHERED
Definition
boss_vaelastrasz.cpp:28
SPELL_FLAMEBREATH
@ SPELL_FLAMEBREATH
Definition
boss_vaelastrasz.cpp:29
SPELL_BURNINGADRENALINE
@ SPELL_BURNINGADRENALINE
Definition
boss_vaelastrasz.cpp:32
SPELL_FIRENOVA
@ SPELL_FIRENOVA
Definition
boss_vaelastrasz.cpp:30
SPELL_TAILSWIPE
@ SPELL_TAILSWIPE
Definition
boss_vaelastrasz.cpp:31
AddSC_boss_vaelastrasz
void AddSC_boss_vaelastrasz()
Definition
boss_vaelastrasz.cpp:228
GOSSIP_ID
@ GOSSIP_ID
Definition
boss_vaelastrasz.cpp:23
EVENT_SPEECH_2
@ EVENT_SPEECH_2
Definition
boss_vaelastrasz.cpp:39
EVENT_TAILSWIPE
@ EVENT_TAILSWIPE
Definition
boss_vaelastrasz.cpp:45
EVENT_BURNINGADRENALINE_CASTER
@ EVENT_BURNINGADRENALINE_CASTER
Definition
boss_vaelastrasz.cpp:47
EVENT_BURNINGADRENALINE_TANK
@ EVENT_BURNINGADRENALINE_TANK
Definition
boss_vaelastrasz.cpp:48
EVENT_SPEECH_3
@ EVENT_SPEECH_3
Definition
boss_vaelastrasz.cpp:40
EVENT_SPEECH_1
@ EVENT_SPEECH_1
Definition
boss_vaelastrasz.cpp:38
EVENT_CLEAVE
@ EVENT_CLEAVE
Definition
boss_vaelastrasz.cpp:46
EVENT_ESSENCEOFTHERED
@ EVENT_ESSENCEOFTHERED
Definition
boss_vaelastrasz.cpp:42
EVENT_FLAMEBREATH
@ EVENT_FLAMEBREATH
Definition
boss_vaelastrasz.cpp:43
EVENT_SPEECH_4
@ EVENT_SPEECH_4
Definition
boss_vaelastrasz.cpp:41
EVENT_FIRENOVA
@ EVENT_FIRENOVA
Definition
boss_vaelastrasz.cpp:44
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
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
Object::GetGUID
uint64 GetGUID() const
Definition
Object.h:119
Object::SetFlag
void SetFlag(uint16 index, uint32 newFlag)
Definition
Object.cpp:1261
Object::RemoveFlag
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition
Object.cpp:1280
Player
Definition
Player.h:1289
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::setFaction
void setFaction(uint32 faction)
Definition
Unit.h:1699
Unit::CastSpell
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
Definition
UnitCombat.cpp:324
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
Unit::getPowerType
Powers getPowerType() const
Definition
Unit.h:1651
boss_vaelastrasz
Definition
boss_vaelastrasz.cpp:52
boss_vaelastrasz::boss_vaelastrasz
boss_vaelastrasz()
Definition
boss_vaelastrasz.cpp:54
boss_vaelastrasz::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_vaelastrasz.cpp:222
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::AttackStart
void AttackStart(Unit *) OVERRIDE
Definition
ScriptedCreature.cpp:118
boss_vaelastrasz::boss_vaelAI
Definition
boss_vaelastrasz.cpp:57
boss_vaelastrasz::boss_vaelAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_vaelastrasz.cpp:77
boss_vaelastrasz::boss_vaelAI::BeginSpeech
void BeginSpeech(Unit *target)
Definition
boss_vaelastrasz.cpp:94
boss_vaelastrasz::boss_vaelAI::HasYelled
bool HasYelled
Definition
boss_vaelastrasz.cpp:219
boss_vaelastrasz::boss_vaelAI::Reset
void Reset() OVERRIDE
Definition
boss_vaelastrasz.cpp:67
boss_vaelastrasz::boss_vaelAI::KilledUnit
void KilledUnit(Unit *victim) OVERRIDE
Definition
boss_vaelastrasz.cpp:101
boss_vaelastrasz::boss_vaelAI::PlayerGUID
uint64 PlayerGUID
Definition
boss_vaelastrasz.cpp:218
boss_vaelastrasz::boss_vaelAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_vaelastrasz.cpp:109
boss_vaelastrasz::boss_vaelAI::boss_vaelAI
boss_vaelAI(Creature *creature)
Definition
boss_vaelastrasz.cpp:58
boss_vaelastrasz::boss_vaelAI::sGossipSelect
void sGossipSelect(Player *player, uint32 sender, uint32 action) OVERRIDE
Definition
boss_vaelastrasz.cpp:208
src
server
scripts
EasternKingdoms
BlackrockMountain
BlackwingLair
boss_vaelastrasz.cpp
Generated on
for Project SkyFire Core by
1.17.0