Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_doomlord_kazzak.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 "
SpellAuraEffects.h
"
9
#include "
SpellScript.h
"
10
11
enum
Texts
12
{
13
SAY_INTRO
= 0,
14
SAY_AGGRO
= 1,
15
SAY_SURPREME
= 2,
16
SAY_KILL
= 3,
17
SAY_DEATH
= 4,
18
EMOTE_FRENZY
= 5,
19
SAY_RAND
= 6
20
};
21
22
enum
Spells
23
{
24
SPELL_SHADOW_VOLLEY
= 32963,
25
SPELL_CLEAVE
= 31779,
26
SPELL_THUNDERCLAP
= 36706,
27
SPELL_VOID_BOLT
= 39329,
28
SPELL_MARK_OF_KAZZAK
= 32960,
29
SPELL_MARK_OF_KAZZAK_DAMAGE
= 32961,
30
SPELL_ENRAGE
= 32964,
31
SPELL_CAPTURE_SOUL
= 32966,
32
SPELL_TWISTED_REFLECTION
= 21063,
33
SPELL_BERSERK
= 32965,
34
};
35
36
enum
Events
37
{
38
EVENT_SHADOW_VOLLEY
= 1,
39
EVENT_CLEAVE
= 2,
40
EVENT_THUNDERCLAP
= 3,
41
EVENT_VOID_BOLT
= 4,
42
EVENT_MARK_OF_KAZZAK
= 5,
43
EVENT_ENRAGE
= 6,
44
EVENT_TWISTED_REFLECTION
= 7,
45
EVENT_BERSERK
= 8
46
};
47
48
class
boss_doomlord_kazzak
:
public
CreatureScript
49
{
50
public
:
51
boss_doomlord_kazzak
() :
CreatureScript
(
"boss_doomlord_kazzak"
) { }
52
53
struct
boss_doomlordkazzakAI
:
public
ScriptedAI
54
{
55
boss_doomlordkazzakAI
(
Creature
* creature) :
ScriptedAI
(creature)
56
{
57
}
58
59
void
Reset
()
OVERRIDE
60
{
61
_events
.Reset();
62
_events
.ScheduleEvent(
EVENT_SHADOW_VOLLEY
, std::rand() % 10000 + 6000);
63
_events
.ScheduleEvent(
EVENT_CLEAVE
, 7000);
64
_events
.ScheduleEvent(
EVENT_THUNDERCLAP
, std::rand() % 18000 + 14000);
65
_events
.ScheduleEvent(
EVENT_VOID_BOLT
, 30000);
66
_events
.ScheduleEvent(
EVENT_MARK_OF_KAZZAK
, 25000);
67
_events
.ScheduleEvent(
EVENT_ENRAGE
, 60000);
68
_events
.ScheduleEvent(
EVENT_TWISTED_REFLECTION
, 33000);
69
_events
.ScheduleEvent(
EVENT_BERSERK
, 180000);
70
}
71
72
void
JustRespawned
()
OVERRIDE
73
{
74
Talk
(
SAY_INTRO
);
75
}
76
77
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
78
{
79
Talk
(
SAY_AGGRO
);
80
}
81
82
void
KilledUnit
(
Unit
* victim)
OVERRIDE
83
{
84
// When Kazzak kills a player (not pets/totems), he regens some health
85
if
(victim->GetTypeId() !=
TypeID::TYPEID_PLAYER
)
86
return
;
87
88
DoCast
(
me
,
SPELL_CAPTURE_SOUL
);
89
90
Talk
(
SAY_KILL
);
91
}
92
93
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
94
{
95
Talk
(
SAY_DEATH
);
96
}
97
98
void
UpdateAI
(
uint32
diff)
OVERRIDE
99
{
100
// Return since we have no target
101
if
(!
UpdateVictim
())
102
return
;
103
104
_events
.Update(diff);
105
106
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
107
return
;
108
109
while
(
uint32
eventId =
_events
.ExecuteEvent())
110
{
111
switch
(eventId)
112
{
113
case
EVENT_SHADOW_VOLLEY
:
114
DoCastVictim
(
SPELL_SHADOW_VOLLEY
);
115
_events
.ScheduleEvent(
EVENT_SHADOW_VOLLEY
, std::rand() % 6000 + 4000);
116
break
;
117
case
EVENT_CLEAVE
:
118
DoCastVictim
(
SPELL_CLEAVE
);
119
_events
.ScheduleEvent(
EVENT_CLEAVE
, std::rand() % 12000 + 8000);
120
break
;
121
case
EVENT_THUNDERCLAP
:
122
DoCastVictim
(
SPELL_THUNDERCLAP
);
123
_events
.ScheduleEvent(
EVENT_THUNDERCLAP
, std::rand() % 14000 + 10000);
124
break
;
125
case
EVENT_VOID_BOLT
:
126
DoCastVictim
(
SPELL_VOID_BOLT
);
127
_events
.ScheduleEvent(
EVENT_VOID_BOLT
, std::rand() % 18000 + 15000);
128
break
;
129
case
EVENT_MARK_OF_KAZZAK
:
130
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
))
131
DoCast
(target,
SPELL_MARK_OF_KAZZAK
);
132
_events
.ScheduleEvent(
EVENT_MARK_OF_KAZZAK
, 20000);
133
break
;
134
case
EVENT_ENRAGE
:
135
Talk
(
EMOTE_FRENZY
);
136
DoCast
(
me
,
SPELL_ENRAGE
);
137
_events
.ScheduleEvent(
EVENT_ENRAGE
, 30000);
138
break
;
139
case
EVENT_TWISTED_REFLECTION
:
140
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
))
141
DoCast
(target,
SPELL_TWISTED_REFLECTION
);
142
_events
.ScheduleEvent(
EVENT_TWISTED_REFLECTION
, 15000);
143
break
;
144
case
EVENT_BERSERK
:
145
DoCast
(
me
,
SPELL_BERSERK
);
146
break
;
147
default
:
148
break
;
149
}
150
}
151
152
DoMeleeAttackIfReady
();
153
}
154
155
private
:
156
EventMap
_events
;
157
};
158
159
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
160
{
161
return
new
boss_doomlordkazzakAI
(creature);
162
}
163
};
164
165
class
spell_mark_of_kazzak
:
public
SpellScriptLoader
166
{
167
public
:
168
spell_mark_of_kazzak
() :
SpellScriptLoader
(
"spell_mark_of_kazzak"
) { }
169
170
class
spell_mark_of_kazzak_AuraScript
:
public
AuraScript
171
{
172
PrepareAuraScript
(
spell_mark_of_kazzak_AuraScript
);
173
174
bool
Validate
(
SpellInfo
const
*
/*spell*/
)
OVERRIDE
175
{
176
if
(!
sSpellMgr
->GetSpellInfo(
SPELL_MARK_OF_KAZZAK_DAMAGE
))
177
return
false
;
178
return
true
;
179
}
180
181
void
CalculateAmount
(
AuraEffect
const
*
/*aurEff*/
,
int32
& amount,
bool
&
/*canBeRecalculated*/
)
182
{
183
if
(
Unit
* owner =
GetUnitOwner
())
184
amount =
CalculatePct
(owner->GetPower(
POWER_MANA
), 5);
185
}
186
187
void
OnPeriodic
(
AuraEffect
const
* aurEff)
188
{
189
Unit
* target =
GetTarget
();
190
191
if
(target->
GetPower
(
POWER_MANA
) == 0)
192
{
193
target->
CastSpell
(target,
SPELL_MARK_OF_KAZZAK_DAMAGE
,
true
, NULL, aurEff);
194
// Remove aura
195
SetDuration
(0);
196
}
197
}
198
199
void
Register
()
OVERRIDE
200
{
201
DoEffectCalcAmount
+=
AuraEffectCalcAmountFn
(
spell_mark_of_kazzak_AuraScript::CalculateAmount
,
EFFECT_0
,
SPELL_AURA_PERIODIC_MANA_LEECH
);
202
OnEffectPeriodic
+=
AuraEffectPeriodicFn
(
spell_mark_of_kazzak_AuraScript::OnPeriodic
,
EFFECT_0
,
SPELL_AURA_PERIODIC_MANA_LEECH
);
203
}
204
};
205
206
AuraScript
*
GetAuraScript
() const
OVERRIDE
207
{
208
return
new
spell_mark_of_kazzak_AuraScript
();
209
}
210
};
211
212
void
AddSC_boss_doomlordkazzak
()
213
{
214
new
boss_doomlord_kazzak
();
215
new
spell_mark_of_kazzak
();
216
}
Spells
Spells
Definition
BattlegroundIC.h:645
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
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
ScriptMgr.h
ScriptedCreature.h
EFFECT_0
@ EFFECT_0
Definition
SharedDefines.h:18
POWER_MANA
@ POWER_MANA
Definition
SharedDefines.h:215
SPELL_AURA_PERIODIC_MANA_LEECH
@ SPELL_AURA_PERIODIC_MANA_LEECH
Definition
SpellAuraDefines.h:111
SpellAuraEffects.h
sSpellMgr
#define sSpellMgr
Definition
SpellMgr.h:744
SpellScript.h
AuraEffectCalcAmountFn
#define AuraEffectCalcAmountFn(F, I, N)
Definition
SpellScript.h:681
AuraEffectPeriodicFn
#define AuraEffectPeriodicFn(F, I, N)
Definition
SpellScript.h:669
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
CalculatePct
T CalculatePct(T base, U pct)
Definition
Util.h:103
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
alterac_valley.cpp:12
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
alterac_valley.cpp:14
Events
Events
Definition
alterac_valley.cpp:40
EVENT_ENRAGE
@ EVENT_ENRAGE
Definition
alterac_valley.cpp:45
EVENT_CLEAVE
@ EVENT_CLEAVE
Definition
alterac_valley.cpp:42
Texts
Texts
Definition
boss_alizabal.cpp:13
SAY_INTRO
@ SAY_INTRO
Definition
boss_alizabal.cpp:14
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SAY_KILL
#define SAY_KILL
Definition
boss_commander_kolurg.cpp:29
SPELL_CLEAVE
@ SPELL_CLEAVE
Definition
boss_doomlord_kazzak.cpp:25
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
boss_doomlord_kazzak.cpp:30
SPELL_MARK_OF_KAZZAK_DAMAGE
@ SPELL_MARK_OF_KAZZAK_DAMAGE
Definition
boss_doomlord_kazzak.cpp:29
SPELL_TWISTED_REFLECTION
@ SPELL_TWISTED_REFLECTION
Definition
boss_doomlord_kazzak.cpp:32
SPELL_SHADOW_VOLLEY
@ SPELL_SHADOW_VOLLEY
Definition
boss_doomlord_kazzak.cpp:24
SPELL_VOID_BOLT
@ SPELL_VOID_BOLT
Definition
boss_doomlord_kazzak.cpp:27
SPELL_THUNDERCLAP
@ SPELL_THUNDERCLAP
Definition
boss_doomlord_kazzak.cpp:26
SPELL_MARK_OF_KAZZAK
@ SPELL_MARK_OF_KAZZAK
Definition
boss_doomlord_kazzak.cpp:28
SPELL_CAPTURE_SOUL
@ SPELL_CAPTURE_SOUL
Definition
boss_doomlord_kazzak.cpp:31
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_doomlord_kazzak.cpp:33
SAY_DEATH
@ SAY_DEATH
Definition
boss_doomlord_kazzak.cpp:17
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_doomlord_kazzak.cpp:14
EMOTE_FRENZY
@ EMOTE_FRENZY
Definition
boss_doomlord_kazzak.cpp:18
SAY_SURPREME
@ SAY_SURPREME
Definition
boss_doomlord_kazzak.cpp:15
SAY_KILL
@ SAY_KILL
Definition
boss_doomlord_kazzak.cpp:16
SAY_RAND
@ SAY_RAND
Definition
boss_doomlord_kazzak.cpp:19
SAY_INTRO
@ SAY_INTRO
Definition
boss_doomlord_kazzak.cpp:13
AddSC_boss_doomlordkazzak
void AddSC_boss_doomlordkazzak()
Definition
boss_doomlord_kazzak.cpp:212
EVENT_MARK_OF_KAZZAK
@ EVENT_MARK_OF_KAZZAK
Definition
boss_doomlord_kazzak.cpp:42
EVENT_ENRAGE
@ EVENT_ENRAGE
Definition
boss_doomlord_kazzak.cpp:43
EVENT_SHADOW_VOLLEY
@ EVENT_SHADOW_VOLLEY
Definition
boss_doomlord_kazzak.cpp:38
EVENT_THUNDERCLAP
@ EVENT_THUNDERCLAP
Definition
boss_doomlord_kazzak.cpp:40
EVENT_VOID_BOLT
@ EVENT_VOID_BOLT
Definition
boss_doomlord_kazzak.cpp:41
EVENT_TWISTED_REFLECTION
@ EVENT_TWISTED_REFLECTION
Definition
boss_doomlord_kazzak.cpp:44
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_doomlord_kazzak.cpp:45
EVENT_CLEAVE
@ EVENT_CLEAVE
Definition
boss_doomlord_kazzak.cpp:39
EVENT_THUNDERCLAP
@ EVENT_THUNDERCLAP
Definition
boss_drakkisath.cpp:23
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
EMOTE_FRENZY
@ EMOTE_FRENZY
Definition
boss_lord_valthalak.cpp:20
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_occuthar.cpp:31
SPELL_SHADOW_VOLLEY
@ SPELL_SHADOW_VOLLEY
Definition
boss_tharon_ja.cpp:22
EVENT_SHADOW_VOLLEY
@ EVENT_SHADOW_VOLLEY
Definition
boss_tharon_ja.cpp:40
SPELL_THUNDERCLAP
@ SPELL_THUNDERCLAP
Definition
boss_vanndar.cpp:22
AuraEffect
Definition
SpellAuraEffects.h:18
AuraScript
Definition
SpellScript.h:436
AuraScript::OnEffectPeriodic
HookList< EffectPeriodicHandler > OnEffectPeriodic
Definition
SpellScript.h:668
AuraScript::AuraScript
AuraScript()
Definition
SpellScript.h:597
AuraScript::DoEffectCalcAmount
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Definition
SpellScript.h:680
AuraScript::SetDuration
void SetDuration(int32 duration, bool withMods=false)
Definition
SpellScript.cpp:980
AuraScript::GetTarget
Unit * GetTarget() const
Definition
SpellScript.cpp:1085
AuraScript::GetUnitOwner
Unit * GetUnitOwner() const
Definition
SpellScript.cpp:950
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
EventMap
Definition
CreatureAIImpl.h:304
SpellInfo
Definition
SpellInfo.h:158
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
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
Unit
Definition
Unit.h:1367
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::GetPower
int32 GetPower(Powers power) const
Definition
Unit.cpp:5237
boss_doomlord_kazzak
Definition
boss_doomlord_kazzak.cpp:49
boss_doomlord_kazzak::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_doomlord_kazzak.cpp:159
boss_doomlord_kazzak::boss_doomlord_kazzak
boss_doomlord_kazzak()
Definition
boss_doomlord_kazzak.cpp:51
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript
Definition
boss_doomlord_kazzak.cpp:171
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript::OnPeriodic
void OnPeriodic(AuraEffect const *aurEff)
Definition
boss_doomlord_kazzak.cpp:187
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript::PrepareAuraScript
PrepareAuraScript(spell_mark_of_kazzak_AuraScript)
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript::CalculateAmount
void CalculateAmount(AuraEffect const *, int32 &amount, bool &)
Definition
boss_doomlord_kazzak.cpp:181
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript::Register
void Register() OVERRIDE
Definition
boss_doomlord_kazzak.cpp:199
spell_mark_of_kazzak::spell_mark_of_kazzak_AuraScript::Validate
bool Validate(SpellInfo const *) OVERRIDE
Definition
boss_doomlord_kazzak.cpp:174
spell_mark_of_kazzak
Definition
boss_doomlord_kazzak.cpp:166
spell_mark_of_kazzak::GetAuraScript
AuraScript * GetAuraScript() const OVERRIDE
Definition
boss_doomlord_kazzak.cpp:206
spell_mark_of_kazzak::spell_mark_of_kazzak
spell_mark_of_kazzak()
Definition
boss_doomlord_kazzak.cpp:168
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_doomlord_kazzak::boss_doomlordkazzakAI
Definition
boss_doomlord_kazzak.cpp:54
boss_doomlord_kazzak::boss_doomlordkazzakAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_doomlord_kazzak.cpp:77
boss_doomlord_kazzak::boss_doomlordkazzakAI::KilledUnit
void KilledUnit(Unit *victim) OVERRIDE
Definition
boss_doomlord_kazzak.cpp:82
boss_doomlord_kazzak::boss_doomlordkazzakAI::JustRespawned
void JustRespawned() OVERRIDE
Definition
boss_doomlord_kazzak.cpp:72
boss_doomlord_kazzak::boss_doomlordkazzakAI::boss_doomlordkazzakAI
boss_doomlordkazzakAI(Creature *creature)
Definition
boss_doomlord_kazzak.cpp:55
boss_doomlord_kazzak::boss_doomlordkazzakAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_doomlord_kazzak.cpp:98
boss_doomlord_kazzak::boss_doomlordkazzakAI::Reset
void Reset() OVERRIDE
Definition
boss_doomlord_kazzak.cpp:59
boss_doomlord_kazzak::boss_doomlordkazzakAI::_events
EventMap _events
Definition
boss_doomlord_kazzak.cpp:156
boss_doomlord_kazzak::boss_doomlordkazzakAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_doomlord_kazzak.cpp:93
src
server
scripts
Outland
boss_doomlord_kazzak.cpp
Generated on
for Project SkyFire Core by
1.17.0