Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_faerlina.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 "
naxxramas.h
"
9
#include "
SpellInfo.h
"
10
11
enum
Yells
12
{
13
SAY_GREET
= 0,
14
SAY_AGGRO
= 1,
15
SAY_SLAY
= 2,
16
SAY_DEATH
= 3
17
};
18
19
enum
Spells
20
{
21
SPELL_POISON_BOLT_VOLLEY
= 28796,
22
H_SPELL_POISON_BOLT_VOLLEY
= 54098,
23
SPELL_RAIN_OF_FIRE
= 28794,
24
H_SPELL_RAIN_OF_FIRE
= 54099,
25
SPELL_FRENZY
= 28798,
26
H_SPELL_FRENZY
= 54100,
27
SPELL_WIDOWS_EMBRACE
= 28732,
28
H_SPELL_WIDOWS_EMBRACE
= 54097
29
};
30
31
#define SPELL_WIDOWS_EMBRACE_HELPER RAID_MODE(SPELL_WIDOWS_EMBRACE, H_SPELL_WIDOWS_EMBRACE)
32
33
enum
Events
34
{
35
EVENT_POISON
= 1,
36
EVENT_FIRE
= 2,
37
EVENT_FRENZY
= 3
38
};
39
40
enum
Misc
41
{
42
DATA_FRENZY_DISPELS
= 1
43
};
44
45
class
boss_faerlina
:
public
CreatureScript
46
{
47
public
:
48
boss_faerlina
() :
CreatureScript
(
"boss_faerlina"
) { }
49
50
struct
boss_faerlinaAI
:
public
BossAI
51
{
52
boss_faerlinaAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_FAERLINA
),
53
_frenzyDispels
(0),
_introDone
(false),
_delayFrenzy
(false)
54
{
55
}
56
57
58
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
59
{
60
_EnterCombat
();
61
Talk
(
SAY_AGGRO
);
62
events
.ScheduleEvent(
EVENT_POISON
, std::rand() % 15000 + 10000);
63
events
.ScheduleEvent(
EVENT_FIRE
, std::rand() % 18000 + 6000);
64
events
.ScheduleEvent(
EVENT_FRENZY
, std::rand() % 80000 + 60000);
65
}
66
67
void
Reset
()
OVERRIDE
68
{
69
_Reset
();
70
_delayFrenzy
=
false
;
71
_frenzyDispels
= 0;
72
}
73
74
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
75
76
{
77
if
(!
_introDone
&& who->GetTypeId() ==
TypeID::TYPEID_PLAYER
)
78
{
79
Talk
(
SAY_GREET
);
80
_introDone
=
true
;
81
}
82
83
BossAI::MoveInLineOfSight
(who);
84
}
85
86
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
87
{
88
if
(!(std::rand() % 2))
89
Talk
(
SAY_SLAY
);
90
}
91
92
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
93
{
94
_JustDied
();
95
Talk
(
SAY_DEATH
);
96
}
97
98
void
SpellHit
(
Unit
* caster,
SpellInfo
const
* spell)
OVERRIDE
99
{
100
if
(spell->Id ==
SPELL_WIDOWS_EMBRACE
|| spell->Id ==
H_SPELL_WIDOWS_EMBRACE
)
101
{
103
++
_frenzyDispels
;
104
_delayFrenzy
=
true
;
105
me
->Kill(caster);
106
}
107
}
108
109
uint32
GetData
(
uint32
type)
const
OVERRIDE
110
{
111
if
(type ==
DATA_FRENZY_DISPELS
)
112
return
_frenzyDispels
;
113
114
return
0;
115
}
116
117
void
UpdateAI
(
uint32
diff)
OVERRIDE
118
{
119
if
(!
UpdateVictim
())
120
return
;
121
122
if
(
_delayFrenzy
&& !
me
->HasAura(
SPELL_WIDOWS_EMBRACE_HELPER
))
123
{
124
_delayFrenzy
=
false
;
125
DoCast
(
me
,
RAID_MODE
(
SPELL_FRENZY
,
H_SPELL_FRENZY
),
true
);
126
}
127
128
events
.Update(diff);
129
130
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
131
return
;
132
133
while
(
uint32
eventId =
events
.ExecuteEvent())
134
{
135
switch
(eventId)
136
{
137
case
EVENT_POISON
:
138
if
(!
me
->HasAura(
SPELL_WIDOWS_EMBRACE_HELPER
))
139
DoCastAOE
(
RAID_MODE
(
SPELL_POISON_BOLT_VOLLEY
,
H_SPELL_POISON_BOLT_VOLLEY
));
140
events
.ScheduleEvent(
EVENT_POISON
, std::rand() % 15000 + 8000);
141
break
;
142
case
EVENT_FIRE
:
143
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
144
DoCast
(target,
RAID_MODE
(
SPELL_RAIN_OF_FIRE
,
H_SPELL_RAIN_OF_FIRE
));
145
events
.ScheduleEvent(
EVENT_FIRE
, std::rand() % 18000 + 6000);
146
break
;
147
case
EVENT_FRENZY
:
149
if
(!
me
->HasAura(
SPELL_WIDOWS_EMBRACE_HELPER
))
150
DoCast
(
me
,
RAID_MODE
(
SPELL_FRENZY
,
H_SPELL_FRENZY
));
151
else
152
_delayFrenzy
=
true
;
153
154
events
.ScheduleEvent(
EVENT_FRENZY
, std::rand() % 80000 + 60000);
155
break
;
156
}
157
}
158
159
DoMeleeAttackIfReady
();
160
}
161
162
private
:
163
uint32
_frenzyDispels
;
164
bool
_introDone
;
165
bool
_delayFrenzy
;
166
};
167
168
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
169
{
170
return
new
boss_faerlinaAI
(creature);
171
}
172
};
173
174
class
npc_faerlina_add
:
public
CreatureScript
175
{
176
public
:
177
npc_faerlina_add
() :
CreatureScript
(
"npc_faerlina_add"
) { }
178
179
struct
npc_faerlina_addAI
:
public
ScriptedAI
180
{
181
npc_faerlina_addAI
(
Creature
* creature) :
ScriptedAI
(creature),
182
_instance
(creature->GetInstanceScript())
183
{
184
}
185
186
void
Reset
()
OVERRIDE
187
{
188
if
(
GetDifficulty
() ==
DIFFICULTY_10MAN_NORMAL
) {
189
me
->ApplySpellImmune(0,
IMMUNITY_EFFECT
,
SPELL_EFFECT_BIND
,
true
);
190
me
->ApplySpellImmune(0,
IMMUNITY_MECHANIC
,
MECHANIC_CHARM
,
true
);
191
}
192
}
193
194
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
195
{
196
if
(
_instance
&&
GetDifficulty
() ==
DIFFICULTY_10MAN_NORMAL
)
197
if
(
Creature
* faerlina =
ObjectAccessor::GetCreature
(*
me
,
_instance
->GetData64(
DATA_FAERLINA
)))
198
DoCast
(faerlina,
SPELL_WIDOWS_EMBRACE
);
199
}
200
201
private
:
202
InstanceScript
*
const
_instance
;
203
};
204
205
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
206
{
207
return
new
npc_faerlina_addAI
(creature);
208
}
209
};
210
211
class
achievement_momma_said_knock_you_out
:
public
AchievementCriteriaScript
212
{
213
public
:
214
achievement_momma_said_knock_you_out
() :
AchievementCriteriaScript
(
"achievement_momma_said_knock_you_out"
) { }
215
216
bool
OnCheck
(
Player
*
/*source*/
,
Unit
* target)
OVERRIDE
217
{
218
return
target && !target->GetAI()->GetData(
DATA_FRENZY_DISPELS
);
219
}
220
};
221
222
void
AddSC_boss_faerlina
()
223
{
224
new
boss_faerlina
();
225
new
npc_faerlina_add
();
226
new
achievement_momma_said_knock_you_out
();
227
}
Spells
Spells
Definition
BattlegroundIC.h:645
DIFFICULTY_10MAN_NORMAL
@ DIFFICULTY_10MAN_NORMAL
Definition
DBCEnums.h:334
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
ScriptMgr.h
ScriptedCreature.h
SPELL_EFFECT_BIND
@ SPELL_EFFECT_BIND
Definition
SharedDefines.h:899
IMMUNITY_EFFECT
@ IMMUNITY_EFFECT
Definition
SharedDefines.h:1596
IMMUNITY_MECHANIC
@ IMMUNITY_MECHANIC
Definition
SharedDefines.h:1601
MECHANIC_CHARM
@ MECHANIC_CHARM
Definition
SharedDefines.h:1527
SpellInfo.h
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
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_GREET
@ SAY_GREET
Definition
boss_anubrekhan.cpp:13
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SPELL_FRENZY
@ SPELL_FRENZY
Definition
boss_drekthar.cpp:14
DATA_FRENZY_DISPELS
@ DATA_FRENZY_DISPELS
Definition
boss_faerlina.cpp:42
SAY_DEATH
@ SAY_DEATH
Definition
boss_faerlina.cpp:16
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_faerlina.cpp:14
SAY_GREET
@ SAY_GREET
Definition
boss_faerlina.cpp:13
SAY_SLAY
@ SAY_SLAY
Definition
boss_faerlina.cpp:15
AddSC_boss_faerlina
void AddSC_boss_faerlina()
Definition
boss_faerlina.cpp:222
H_SPELL_POISON_BOLT_VOLLEY
@ H_SPELL_POISON_BOLT_VOLLEY
Definition
boss_faerlina.cpp:22
H_SPELL_FRENZY
@ H_SPELL_FRENZY
Definition
boss_faerlina.cpp:26
H_SPELL_RAIN_OF_FIRE
@ H_SPELL_RAIN_OF_FIRE
Definition
boss_faerlina.cpp:24
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_faerlina.cpp:23
H_SPELL_WIDOWS_EMBRACE
@ H_SPELL_WIDOWS_EMBRACE
Definition
boss_faerlina.cpp:28
SPELL_FRENZY
@ SPELL_FRENZY
Definition
boss_faerlina.cpp:25
SPELL_WIDOWS_EMBRACE
@ SPELL_WIDOWS_EMBRACE
Definition
boss_faerlina.cpp:27
SPELL_POISON_BOLT_VOLLEY
@ SPELL_POISON_BOLT_VOLLEY
Definition
boss_faerlina.cpp:21
SPELL_WIDOWS_EMBRACE_HELPER
#define SPELL_WIDOWS_EMBRACE_HELPER
Definition
boss_faerlina.cpp:31
EVENT_FIRE
@ EVENT_FIRE
Definition
boss_faerlina.cpp:36
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_faerlina.cpp:37
EVENT_POISON
@ EVENT_POISON
Definition
boss_faerlina.cpp:35
SPELL_RAIN_OF_FIRE
@ SPELL_RAIN_OF_FIRE
Definition
boss_gehennas.cpp:21
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_gizrul_the_slavener.cpp:27
Misc
Misc
Definition
boss_occuthar.cpp:37
AchievementCriteriaScript::AchievementCriteriaScript
AchievementCriteriaScript(const char *name)
Definition
ScriptMgr.cpp:1508
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::MoveInLineOfSight
virtual void MoveInLineOfSight(Unit *)
Definition
CreatureAI.cpp:114
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
ObjectAccessor::GetCreature
static Creature * GetCreature(WorldObject const &u, uint64 guid)
Definition
ObjectAccessor.cpp:209
Player
Definition
Player.h:1289
SpellInfo
Definition
SpellInfo.h:158
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::DoCastAOE
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:176
Unit
Definition
Unit.h:1367
achievement_momma_said_knock_you_out
Definition
boss_faerlina.cpp:212
achievement_momma_said_knock_you_out::achievement_momma_said_knock_you_out
achievement_momma_said_knock_you_out()
Definition
boss_faerlina.cpp:214
achievement_momma_said_knock_you_out::OnCheck
bool OnCheck(Player *, Unit *target) OVERRIDE
Definition
boss_faerlina.cpp:216
boss_faerlina
Definition
boss_faerlina.cpp:46
boss_faerlina::boss_faerlina
boss_faerlina()
Definition
boss_faerlina.cpp:48
boss_faerlina::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_faerlina.cpp:168
npc_faerlina_add
Definition
boss_faerlina.cpp:175
npc_faerlina_add::npc_faerlina_add
npc_faerlina_add()
Definition
boss_faerlina.cpp:177
npc_faerlina_add::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_faerlina.cpp:205
naxxramas.h
DATA_FAERLINA
@ DATA_FAERLINA
Definition
naxxramas.h:45
BOSS_FAERLINA
@ BOSS_FAERLINA
Definition
naxxramas.h:14
ScriptedAI::GetDifficulty
DifficultyID GetDifficulty() const
Definition
ScriptedCreature.h:285
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::RAID_MODE
const T & RAID_MODE(const T &normal10, const T &normal25) const
Definition
ScriptedCreature.h:310
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
boss_faerlina::boss_faerlinaAI
Definition
boss_faerlina.cpp:51
boss_faerlina::boss_faerlinaAI::boss_faerlinaAI
boss_faerlinaAI(Creature *creature)
Definition
boss_faerlina.cpp:52
boss_faerlina::boss_faerlinaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_faerlina.cpp:58
boss_faerlina::boss_faerlinaAI::Reset
void Reset() OVERRIDE
Definition
boss_faerlina.cpp:67
boss_faerlina::boss_faerlinaAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
boss_faerlina.cpp:74
boss_faerlina::boss_faerlinaAI::GetData
uint32 GetData(uint32 type) const OVERRIDE
Definition
boss_faerlina.cpp:109
boss_faerlina::boss_faerlinaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_faerlina.cpp:117
boss_faerlina::boss_faerlinaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_faerlina.cpp:92
boss_faerlina::boss_faerlinaAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_faerlina.cpp:86
boss_faerlina::boss_faerlinaAI::SpellHit
void SpellHit(Unit *caster, SpellInfo const *spell) OVERRIDE
Definition
boss_faerlina.cpp:98
boss_faerlina::boss_faerlinaAI::_frenzyDispels
uint32 _frenzyDispels
Definition
boss_faerlina.cpp:163
boss_faerlina::boss_faerlinaAI::_introDone
bool _introDone
Definition
boss_faerlina.cpp:164
boss_faerlina::boss_faerlinaAI::_delayFrenzy
bool _delayFrenzy
Definition
boss_faerlina.cpp:165
npc_faerlina_add::npc_faerlina_addAI
Definition
boss_faerlina.cpp:180
npc_faerlina_add::npc_faerlina_addAI::Reset
void Reset() OVERRIDE
Definition
boss_faerlina.cpp:186
npc_faerlina_add::npc_faerlina_addAI::npc_faerlina_addAI
npc_faerlina_addAI(Creature *creature)
Definition
boss_faerlina.cpp:181
npc_faerlina_add::npc_faerlina_addAI::_instance
InstanceScript *const _instance
Definition
boss_faerlina.cpp:202
npc_faerlina_add::npc_faerlina_addAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_faerlina.cpp:194
src
server
scripts
Northrend
Naxxramas
boss_faerlina.cpp
Generated on
for Project SkyFire Core by
1.17.0