Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_warlord_kalithresh.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_Warlord_Kalithres
8
SD%Complete: 65
9
SDComment: Contains workarounds regarding warlord's rage spells not acting as expected. Both scripts here require review and fine tuning.
10
SDCategory: Coilfang Resevoir, The Steamvault
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
steam_vault.h
"
16
#include "
SpellInfo.h
"
17
18
enum
NagaDistiller
19
{
20
SAY_INTRO
= 0,
21
SAY_REGEN
= 1,
22
SAY_AGGRO
= 2,
23
SAY_SLAY
= 3,
24
SAY_DEATH
= 4,
25
26
SPELL_SPELL_REFLECTION
= 31534,
27
SPELL_IMPALE
= 39061,
28
SPELL_WARLORDS_RAGE
= 37081,
29
SPELL_WARLORDS_RAGE_NAGA
= 31543,
30
31
SPELL_WARLORDS_RAGE_PROC
= 36453
32
};
33
34
class
npc_naga_distiller
:
public
CreatureScript
35
{
36
public
:
37
npc_naga_distiller
() :
CreatureScript
(
"npc_naga_distiller"
) { }
38
39
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
40
{
41
return
new
npc_naga_distillerAI
(creature);
42
}
43
44
struct
npc_naga_distillerAI
:
public
ScriptedAI
45
{
46
npc_naga_distillerAI
(
Creature
* creature) :
ScriptedAI
(creature)
47
{
48
instance
= creature->
GetInstanceScript
();
49
}
50
51
InstanceScript
*
instance
;
52
53
void
Reset
()
OVERRIDE
54
{
55
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NOT_SELECTABLE
);
56
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NON_ATTACKABLE
);
57
58
//hack, due to really weird spell behaviour :(
59
if
(
instance
)
60
{
61
if
(
instance
->GetData(
DATA_DISTILLER
) ==
IN_PROGRESS
)
62
{
63
me
->RemoveFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NOT_SELECTABLE
);
64
me
->RemoveFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NON_ATTACKABLE
);
65
}
66
}
67
}
68
69
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
70
71
void
StartRageGen
(
Unit
*
/*caster*/
)
72
{
73
me
->RemoveFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NOT_SELECTABLE
);
74
me
->RemoveFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NON_ATTACKABLE
);
75
76
DoCast
(
me
,
SPELL_WARLORDS_RAGE_NAGA
,
true
);
77
78
if
(
instance
)
79
instance
->SetData(
DATA_DISTILLER
,
IN_PROGRESS
);
80
}
81
82
void
DamageTaken
(
Unit
*
/*done_by*/
,
uint32
&damage)
OVERRIDE
83
{
84
if
(
me
->GetHealth() <= damage)
85
if
(
instance
)
86
instance
->SetData(
DATA_DISTILLER
,
DONE
);
87
}
88
};
89
};
90
91
class
boss_warlord_kalithresh
:
public
CreatureScript
92
{
93
public
:
94
boss_warlord_kalithresh
() :
CreatureScript
(
"boss_warlord_kalithresh"
) { }
95
96
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
97
{
98
return
new
boss_warlord_kalithreshAI
(creature);
99
}
100
101
struct
boss_warlord_kalithreshAI
:
public
ScriptedAI
102
{
103
boss_warlord_kalithreshAI
(
Creature
* creature) :
ScriptedAI
(creature)
104
{
105
instance
= creature->
GetInstanceScript
();
106
}
107
108
InstanceScript
*
instance
;
109
110
uint32
Reflection_Timer
;
111
uint32
Impale_Timer
;
112
uint32
Rage_Timer
;
113
bool
CanRage
;
114
115
void
Reset
()
OVERRIDE
116
{
117
Reflection_Timer
= 10000;
118
Impale_Timer
= 7000+rand()%7000;
119
Rage_Timer
= 45000;
120
CanRage
=
false
;
121
122
if
(
instance
)
123
instance
->SetBossState(
DATA_WARLORD_KALITHRESH
,
NOT_STARTED
);
124
}
125
126
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
127
{
128
Talk
(
SAY_AGGRO
);
129
130
if
(
instance
)
131
instance
->SetBossState(
DATA_WARLORD_KALITHRESH
,
IN_PROGRESS
);
132
}
133
134
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
135
{
136
Talk
(
SAY_SLAY
);
137
}
138
139
void
SpellHit
(
Unit
*
/*caster*/
,
const
SpellInfo
* spell)
OVERRIDE
140
{
141
//hack :(
142
if
(spell->Id ==
SPELL_WARLORDS_RAGE_PROC
)
143
if
(
instance
)
144
if
(
instance
->GetData(
DATA_DISTILLER
) ==
DONE
)
145
me
->RemoveAurasDueToSpell(
SPELL_WARLORDS_RAGE_PROC
);
146
}
147
148
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
149
{
150
Talk
(
SAY_DEATH
);
151
152
if
(
instance
)
153
instance
->SetBossState(
DATA_WARLORD_KALITHRESH
,
DONE
);
154
}
155
156
void
UpdateAI
(
uint32
diff)
OVERRIDE
157
{
158
if
(!
UpdateVictim
())
159
return
;
160
161
if
(
Rage_Timer
<= diff)
162
{
163
if
(
Creature
* distiller =
me
->FindNearestCreature(17954, 100.0f))
164
{
165
Talk
(
SAY_REGEN
);
166
DoCast
(
me
,
SPELL_WARLORDS_RAGE
);
167
CAST_AI
(
npc_naga_distiller::npc_naga_distillerAI
, distiller->AI())->StartRageGen(
me
);
168
}
169
Rage_Timer
= 3000+rand()%15000;
170
}
else
Rage_Timer
-= diff;
171
172
//Reflection_Timer
173
if
(
Reflection_Timer
<= diff)
174
{
175
DoCast
(
me
,
SPELL_SPELL_REFLECTION
);
176
Reflection_Timer
= 15000+rand()%10000;
177
}
else
Reflection_Timer
-= diff;
178
179
//Impale_Timer
180
if
(
Impale_Timer
<= diff)
181
{
182
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
183
DoCast
(target,
SPELL_IMPALE
);
184
185
Impale_Timer
= 7500+rand()%5000;
186
}
else
Impale_Timer
-= diff;
187
188
DoMeleeAttackIfReady
();
189
}
190
};
191
};
192
193
void
AddSC_boss_warlord_kalithresh
()
194
{
195
new
npc_naga_distiller
();
196
new
boss_warlord_kalithresh
();
197
}
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
CAST_AI
#define CAST_AI(a, b)
Definition
ScriptedCreature.h:14
SpellInfo.h
UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_NON_ATTACKABLE
Definition
Unit.h:626
UNIT_FLAG_NOT_SELECTABLE
@ UNIT_FLAG_NOT_SELECTABLE
Definition
Unit.h:650
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
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
SPELL_IMPALE
@ SPELL_IMPALE
Definition
boss_northrend_beasts.cpp:57
SPELL_SPELL_REFLECTION
@ SPELL_SPELL_REFLECTION
Definition
boss_ormorok.cpp:13
AddSC_boss_warlord_kalithresh
void AddSC_boss_warlord_kalithresh()
Definition
boss_warlord_kalithresh.cpp:193
NagaDistiller
NagaDistiller
Definition
boss_warlord_kalithresh.cpp:19
SAY_DEATH
@ SAY_DEATH
Definition
boss_warlord_kalithresh.cpp:24
SPELL_WARLORDS_RAGE_NAGA
@ SPELL_WARLORDS_RAGE_NAGA
Definition
boss_warlord_kalithresh.cpp:29
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_warlord_kalithresh.cpp:22
SPELL_WARLORDS_RAGE
@ SPELL_WARLORDS_RAGE
Definition
boss_warlord_kalithresh.cpp:28
SAY_SLAY
@ SAY_SLAY
Definition
boss_warlord_kalithresh.cpp:23
SPELL_WARLORDS_RAGE_PROC
@ SPELL_WARLORDS_RAGE_PROC
Definition
boss_warlord_kalithresh.cpp:31
SPELL_SPELL_REFLECTION
@ SPELL_SPELL_REFLECTION
Definition
boss_warlord_kalithresh.cpp:26
SPELL_IMPALE
@ SPELL_IMPALE
Definition
boss_warlord_kalithresh.cpp:27
SAY_REGEN
@ SAY_REGEN
Definition
boss_warlord_kalithresh.cpp:21
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
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
Unit
Definition
Unit.h:1367
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
boss_warlord_kalithresh
Definition
boss_warlord_kalithresh.cpp:92
boss_warlord_kalithresh::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_warlord_kalithresh.cpp:96
boss_warlord_kalithresh::boss_warlord_kalithresh
boss_warlord_kalithresh()
Definition
boss_warlord_kalithresh.cpp:94
npc_naga_distiller
Definition
boss_warlord_kalithresh.cpp:35
npc_naga_distiller::npc_naga_distiller
npc_naga_distiller()
Definition
boss_warlord_kalithresh.cpp:37
npc_naga_distiller::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_warlord_kalithresh.cpp:39
steam_vault.h
DATA_DISTILLER
@ DATA_DISTILLER
Definition
steam_vault.h:18
DATA_WARLORD_KALITHRESH
@ DATA_WARLORD_KALITHRESH
Definition
steam_vault.h:17
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_warlord_kalithresh::boss_warlord_kalithreshAI
Definition
boss_warlord_kalithresh.cpp:102
boss_warlord_kalithresh::boss_warlord_kalithreshAI::instance
InstanceScript * instance
Definition
boss_warlord_kalithresh.cpp:108
boss_warlord_kalithresh::boss_warlord_kalithreshAI::boss_warlord_kalithreshAI
boss_warlord_kalithreshAI(Creature *creature)
Definition
boss_warlord_kalithresh.cpp:103
boss_warlord_kalithresh::boss_warlord_kalithreshAI::Rage_Timer
uint32 Rage_Timer
Definition
boss_warlord_kalithresh.cpp:112
boss_warlord_kalithresh::boss_warlord_kalithreshAI::CanRage
bool CanRage
Definition
boss_warlord_kalithresh.cpp:113
boss_warlord_kalithresh::boss_warlord_kalithreshAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_warlord_kalithresh.cpp:156
boss_warlord_kalithresh::boss_warlord_kalithreshAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:126
boss_warlord_kalithresh::boss_warlord_kalithreshAI::Reset
void Reset() OVERRIDE
Definition
boss_warlord_kalithresh.cpp:115
boss_warlord_kalithresh::boss_warlord_kalithreshAI::Impale_Timer
uint32 Impale_Timer
Definition
boss_warlord_kalithresh.cpp:111
boss_warlord_kalithresh::boss_warlord_kalithreshAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:148
boss_warlord_kalithresh::boss_warlord_kalithreshAI::Reflection_Timer
uint32 Reflection_Timer
Definition
boss_warlord_kalithresh.cpp:110
boss_warlord_kalithresh::boss_warlord_kalithreshAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:134
boss_warlord_kalithresh::boss_warlord_kalithreshAI::SpellHit
void SpellHit(Unit *, const SpellInfo *spell) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:139
npc_naga_distiller::npc_naga_distillerAI
Definition
boss_warlord_kalithresh.cpp:45
npc_naga_distiller::npc_naga_distillerAI::instance
InstanceScript * instance
Definition
boss_warlord_kalithresh.cpp:51
npc_naga_distiller::npc_naga_distillerAI::StartRageGen
void StartRageGen(Unit *)
Definition
boss_warlord_kalithresh.cpp:71
npc_naga_distiller::npc_naga_distillerAI::Reset
void Reset() OVERRIDE
Definition
boss_warlord_kalithresh.cpp:53
npc_naga_distiller::npc_naga_distillerAI::npc_naga_distillerAI
npc_naga_distillerAI(Creature *creature)
Definition
boss_warlord_kalithresh.cpp:46
npc_naga_distiller::npc_naga_distillerAI::DamageTaken
void DamageTaken(Unit *, uint32 &damage) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:82
npc_naga_distiller::npc_naga_distillerAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_warlord_kalithresh.cpp:69
src
server
scripts
Outland
CoilfangReservoir
SteamVault
boss_warlord_kalithresh.cpp
Generated on
for Project SkyFire Core by
1.17.0