Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_loken.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 Loken
8
SD%Complete: 60%
9
SDComment: Missing intro.
10
SDCategory: Halls of Lightning
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
SpellScript.h
"
16
#include "
halls_of_lightning.h
"
17
18
enum
Yells
19
{
20
SAY_INTRO_1
= 0,
21
SAY_INTRO_2
= 1,
22
SAY_AGGRO
= 2,
23
SAY_NOVA
= 3,
24
SAY_SLAY
= 4,
25
SAY_75HEALTH
= 5,
26
SAY_50HEALTH
= 6,
27
SAY_25HEALTH
= 7,
28
SAY_DEATH
= 8,
29
EMOTE_NOVA
= 9
30
};
31
32
enum
Spells
33
{
34
SPELL_ARC_LIGHTNING
= 52921,
35
SPELL_LIGHTNING_NOVA_N
= 52960,
36
SPELL_LIGHTNING_NOVA_H
= 59835,
37
38
SPELL_PULSING_SHOCKWAVE_N
= 52961,
39
SPELL_PULSING_SHOCKWAVE_H
= 59836,
40
SPELL_PULSING_SHOCKWAVE_AURA
= 59414
41
};
42
43
enum
Misc
44
{
45
ACHIEV_TIMELY_DEATH_START_EVENT
= 20384
46
};
47
48
/*######
49
## Boss Loken
50
######*/
51
52
class
boss_loken
:
public
CreatureScript
53
{
54
public
:
55
boss_loken
() :
CreatureScript
(
"boss_loken"
) { }
56
57
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
58
{
59
return
new
boss_lokenAI
(creature);
60
}
61
62
struct
boss_lokenAI
:
public
ScriptedAI
63
{
64
boss_lokenAI
(
Creature
* creature) :
ScriptedAI
(creature)
65
{
66
instance
= creature->
GetInstanceScript
();
67
}
68
69
InstanceScript
*
instance
;
70
71
uint32
m_uiArcLightning_Timer
;
72
uint32
m_uiLightningNova_Timer
;
73
uint32
m_uiResumePulsingShockwave_Timer
;
74
75
uint32
m_uiHealthAmountModifier
;
76
77
void
Reset
()
OVERRIDE
78
{
79
m_uiArcLightning_Timer
= 15000;
80
m_uiLightningNova_Timer
= 20000;
81
m_uiResumePulsingShockwave_Timer
= 1000;
82
83
m_uiHealthAmountModifier
= 1;
84
85
if
(
instance
)
86
{
87
instance
->SetBossState(
DATA_LOKEN
,
NOT_STARTED
);
88
instance
->DoStopTimedAchievement(
ACHIEVEMENT_TIMED_TYPE_EVENT
,
ACHIEV_TIMELY_DEATH_START_EVENT
);
89
}
90
}
91
92
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
93
{
94
Talk
(
SAY_AGGRO
);
95
96
if
(
instance
)
97
{
98
instance
->SetBossState(
DATA_LOKEN
,
IN_PROGRESS
);
99
instance
->DoStartTimedAchievement(
ACHIEVEMENT_TIMED_TYPE_EVENT
,
ACHIEV_TIMELY_DEATH_START_EVENT
);
100
}
101
}
102
103
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
104
{
105
Talk
(
SAY_DEATH
);
106
107
if
(
instance
)
108
{
109
instance
->SetBossState(
DATA_LOKEN
,
DONE
);
110
instance
->DoRemoveAurasDueToSpellOnPlayers(
SPELL_PULSING_SHOCKWAVE_AURA
);
111
}
112
}
113
114
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
115
{
116
Talk
(
SAY_SLAY
);
117
}
118
119
void
UpdateAI
(
uint32
uiDiff)
OVERRIDE
120
{
121
//Return since we have no target
122
if
(!
UpdateVictim
())
123
return
;
124
125
if
(
m_uiResumePulsingShockwave_Timer
)
126
{
127
if
(
m_uiResumePulsingShockwave_Timer
<= uiDiff)
128
{
129
DoCast
(
me
,
SPELL_PULSING_SHOCKWAVE_AURA
,
true
);
130
me
->ClearUnitState(
UNIT_STATE_CASTING
);
// this flag breaks movement
131
132
DoCast
(
me
,
SPELL_PULSING_SHOCKWAVE_N
,
true
);
133
m_uiResumePulsingShockwave_Timer
= 0;
134
}
135
else
136
m_uiResumePulsingShockwave_Timer
-= uiDiff;
137
}
138
139
if
(
m_uiArcLightning_Timer
<= uiDiff)
140
{
141
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
142
DoCast
(target,
SPELL_ARC_LIGHTNING
);
143
144
m_uiArcLightning_Timer
= std::rand() % 16000 + 15000;
145
}
146
else
147
m_uiArcLightning_Timer
-= uiDiff;
148
149
if
(
m_uiLightningNova_Timer
<= uiDiff)
150
{
151
Talk
(
SAY_NOVA
);
152
Talk
(
EMOTE_NOVA
);
153
DoCast
(
me
,
SPELL_LIGHTNING_NOVA_N
);
154
155
me
->RemoveAurasDueToSpell(
DUNGEON_MODE<uint32>
(
SPELL_PULSING_SHOCKWAVE_N
,
SPELL_PULSING_SHOCKWAVE_H
));
156
m_uiResumePulsingShockwave_Timer
=
DUNGEON_MODE
(5000, 4000);
// Pause Pulsing Shockwave aura
157
m_uiLightningNova_Timer
= std::rand() % 21000 + 20000;
158
}
159
else
160
m_uiLightningNova_Timer
-= uiDiff;
161
162
// Health check
163
if
(
HealthBelowPct
(100 - 25 *
m_uiHealthAmountModifier
))
164
{
165
switch
(
m_uiHealthAmountModifier
)
166
{
167
case
1:
Talk
(
SAY_75HEALTH
);
break
;
168
case
2:
Talk
(
SAY_50HEALTH
);
break
;
169
case
3:
Talk
(
SAY_25HEALTH
);
break
;
170
}
171
172
++
m_uiHealthAmountModifier
;
173
}
174
175
DoMeleeAttackIfReady
();
176
}
177
};
178
};
179
180
class
spell_loken_pulsing_shockwave
:
public
SpellScriptLoader
181
{
182
public
:
183
spell_loken_pulsing_shockwave
() :
SpellScriptLoader
(
"spell_loken_pulsing_shockwave"
) { }
184
185
class
spell_loken_pulsing_shockwave_SpellScript
:
public
SpellScript
186
{
187
PrepareSpellScript
(
spell_loken_pulsing_shockwave_SpellScript
);
188
189
void
CalculateDamage
(
SpellEffIndex
/*effIndex*/
)
190
{
191
if
(!
GetHitUnit
())
192
return
;
193
194
float
distance =
GetCaster
()->
GetDistance2d
(
GetHitUnit
());
195
if
(distance > 1.0f)
196
SetHitDamage
(
int32
(
GetHitDamage
() * distance));
197
}
198
199
void
Register
()
OVERRIDE
200
{
201
OnEffectHitTarget
+=
SpellEffectFn
(
spell_loken_pulsing_shockwave_SpellScript::CalculateDamage
,
EFFECT_0
,
SPELL_EFFECT_SCHOOL_DAMAGE
);
202
}
203
};
204
205
SpellScript
*
GetSpellScript
() const
OVERRIDE
206
{
207
return
new
spell_loken_pulsing_shockwave_SpellScript
();
208
}
209
};
210
211
void
AddSC_boss_loken
()
212
{
213
new
boss_loken
();
214
new
spell_loken_pulsing_shockwave
();
215
}
Spells
Spells
Definition
BattlegroundIC.h:645
ACHIEVEMENT_TIMED_TYPE_EVENT
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition
DBCEnums.h:158
int32
std::int32_t int32
Definition
Define.h:73
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
ScriptMgr.h
ScriptedCreature.h
SpellEffIndex
SpellEffIndex
Definition
SharedDefines.h:17
EFFECT_0
@ EFFECT_0
Definition
SharedDefines.h:18
SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_EFFECT_SCHOOL_DAMAGE
Definition
SharedDefines.h:890
SpellScript.h
SpellEffectFn
#define SpellEffectFn(F, I, N)
Definition
SpellScript.h:269
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
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
AddSC_boss_loken
void AddSC_boss_loken()
Definition
boss_loken.cpp:211
ACHIEV_TIMELY_DEATH_START_EVENT
@ ACHIEV_TIMELY_DEATH_START_EVENT
Definition
boss_loken.cpp:45
SAY_DEATH
@ SAY_DEATH
Definition
boss_loken.cpp:28
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_loken.cpp:22
EMOTE_NOVA
@ EMOTE_NOVA
Definition
boss_loken.cpp:29
SAY_25HEALTH
@ SAY_25HEALTH
Definition
boss_loken.cpp:27
SAY_SLAY
@ SAY_SLAY
Definition
boss_loken.cpp:24
SAY_NOVA
@ SAY_NOVA
Definition
boss_loken.cpp:23
SAY_50HEALTH
@ SAY_50HEALTH
Definition
boss_loken.cpp:26
SAY_75HEALTH
@ SAY_75HEALTH
Definition
boss_loken.cpp:25
SPELL_LIGHTNING_NOVA_H
@ SPELL_LIGHTNING_NOVA_H
Definition
boss_loken.cpp:36
SPELL_LIGHTNING_NOVA_N
@ SPELL_LIGHTNING_NOVA_N
Definition
boss_loken.cpp:35
SPELL_ARC_LIGHTNING
@ SPELL_ARC_LIGHTNING
Definition
boss_loken.cpp:34
SPELL_PULSING_SHOCKWAVE_N
@ SPELL_PULSING_SHOCKWAVE_N
Definition
boss_loken.cpp:38
SPELL_PULSING_SHOCKWAVE_H
@ SPELL_PULSING_SHOCKWAVE_H
Definition
boss_loken.cpp:39
SPELL_PULSING_SHOCKWAVE_AURA
@ SPELL_PULSING_SHOCKWAVE_AURA
Definition
boss_loken.cpp:40
Misc
Misc
Definition
boss_occuthar.cpp:37
SAY_NOVA
@ SAY_NOVA
Definition
boss_rage_winterchill.cpp:24
EMOTE_NOVA
@ EMOTE_NOVA
Definition
boss_slad_ran.cpp:29
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
SpellScript
Definition
SpellScript.h:139
SpellScript::OnEffectHitTarget
HookList< EffectHandler > OnEffectHitTarget
Definition
SpellScript.h:268
SpellScript::GetHitUnit
Unit * GetHitUnit()
Definition
SpellScript.cpp:399
SpellScript::SetHitDamage
void SetHitDamage(int32 damage)
Definition
SpellScript.cpp:475
SpellScript::GetCaster
Unit * GetCaster()
Definition
SpellScript.cpp:352
SpellScript::GetHitDamage
int32 GetHitDamage()
Definition
SpellScript.cpp:465
SpellScriptLoader::SpellScriptLoader
SpellScriptLoader(const char *name)
Definition
ScriptMgr.cpp:1372
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
Unit
Definition
Unit.h:1367
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
WorldObject::GetDistance2d
float GetDistance2d(WorldObject const *obj) const
Definition
Object.cpp:1684
boss_loken
Definition
boss_loken.cpp:53
boss_loken::boss_loken
boss_loken()
Definition
boss_loken.cpp:55
boss_loken::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_loken.cpp:57
spell_loken_pulsing_shockwave::spell_loken_pulsing_shockwave_SpellScript
Definition
boss_loken.cpp:186
spell_loken_pulsing_shockwave::spell_loken_pulsing_shockwave_SpellScript::Register
void Register() OVERRIDE
Definition
boss_loken.cpp:199
spell_loken_pulsing_shockwave::spell_loken_pulsing_shockwave_SpellScript::CalculateDamage
void CalculateDamage(SpellEffIndex)
Definition
boss_loken.cpp:189
spell_loken_pulsing_shockwave::spell_loken_pulsing_shockwave_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_loken_pulsing_shockwave_SpellScript)
spell_loken_pulsing_shockwave
Definition
boss_loken.cpp:181
spell_loken_pulsing_shockwave::spell_loken_pulsing_shockwave
spell_loken_pulsing_shockwave()
Definition
boss_loken.cpp:183
spell_loken_pulsing_shockwave::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_loken.cpp:205
halls_of_lightning.h
DATA_LOKEN
@ DATA_LOKEN
Definition
halls_of_lightning.h:19
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
ScriptedAI::DUNGEON_MODE
const T & DUNGEON_MODE(const T &normal5, const T &heroic5) const
Definition
ScriptedCreature.h:294
Yells
Definition
boss_illidan.cpp:256
boss_loken::boss_lokenAI
Definition
boss_loken.cpp:63
boss_loken::boss_lokenAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_loken.cpp:103
boss_loken::boss_lokenAI::m_uiLightningNova_Timer
uint32 m_uiLightningNova_Timer
Definition
boss_loken.cpp:72
boss_loken::boss_lokenAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_loken.cpp:92
boss_loken::boss_lokenAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_loken.cpp:114
boss_loken::boss_lokenAI::m_uiHealthAmountModifier
uint32 m_uiHealthAmountModifier
Definition
boss_loken.cpp:75
boss_loken::boss_lokenAI::m_uiArcLightning_Timer
uint32 m_uiArcLightning_Timer
Definition
boss_loken.cpp:71
boss_loken::boss_lokenAI::instance
InstanceScript * instance
Definition
boss_loken.cpp:69
boss_loken::boss_lokenAI::boss_lokenAI
boss_lokenAI(Creature *creature)
Definition
boss_loken.cpp:64
boss_loken::boss_lokenAI::Reset
void Reset() OVERRIDE
Definition
boss_loken.cpp:77
boss_loken::boss_lokenAI::m_uiResumePulsingShockwave_Timer
uint32 m_uiResumePulsingShockwave_Timer
Definition
boss_loken.cpp:73
boss_loken::boss_lokenAI::UpdateAI
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_loken.cpp:119
SAY_INTRO_2
@ SAY_INTRO_2
Definition
trial_of_the_champion.cpp:27
SAY_INTRO_1
@ SAY_INTRO_1
Definition
trial_of_the_champion.cpp:26
src
server
scripts
Northrend
Ulduar
HallsOfLightning
boss_loken.cpp
Generated on
for Project SkyFire Core by
1.17.0