Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_krystallus.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
/* Script Data Start
7
SDName: Boss krystallus
8
SDAuthor: LordVanMartin
9
SD%Complete:
10
SDComment:
11
SDCategory:
12
Script Data End */
13
14
#include "
ScriptMgr.h
"
15
#include "
ScriptedCreature.h
"
16
#include "
SpellScript.h
"
17
#include "
halls_of_stone.h
"
18
19
enum
Spells
20
{
21
SPELL_BOULDER_TOSS
= 50843,
22
H_SPELL_BOULDER_TOSS
= 59742,
23
SPELL_GROUND_SPIKE
= 59750,
24
SPELL_GROUND_SLAM
= 50827,
25
SPELL_SHATTER
= 50810,
26
H_SPELL_SHATTER
= 61546,
27
SPELL_SHATTER_EFFECT
= 50811,
28
H_SPELL_SHATTER_EFFECT
= 61547,
29
SPELL_STONED
= 50812,
30
SPELL_STOMP
= 48131,
31
H_SPELL_STOMP
= 59744
32
};
33
34
enum
Yells
35
{
36
SAY_AGGRO
= 0,
37
SAY_KILL
= 1,
38
SAY_DEATH
= 2,
39
SAY_SHATTER
= 3
40
};
41
42
class
boss_krystallus
:
public
CreatureScript
43
{
44
public
:
45
boss_krystallus
() :
CreatureScript
(
"boss_krystallus"
) { }
46
47
struct
boss_krystallusAI
:
public
ScriptedAI
48
{
49
boss_krystallusAI
(
Creature
* creature) :
ScriptedAI
(creature)
50
{
51
instance
= creature->
GetInstanceScript
();
52
}
53
54
uint32
uiBoulderTossTimer
;
55
uint32
uiGroundSpikeTimer
;
56
uint32
uiGroundSlamTimer
;
57
uint32
uiShatterTimer
;
58
uint32
uiStompTimer
;
59
60
bool
bIsSlam
;
61
62
InstanceScript
*
instance
;
63
64
void
Reset
()
OVERRIDE
65
{
66
bIsSlam
=
false
;
67
68
uiBoulderTossTimer
= std::rand() % 9000 + 3000;
69
uiGroundSpikeTimer
= std::rand() % 14000 + 9000;
70
uiGroundSlamTimer
= std::rand() % 18000 + 15000;
71
uiStompTimer
= std::rand() % 29000 + 20000;
72
uiShatterTimer
= 0;
73
74
if
(
instance
)
75
instance
->SetBossState(
DATA_KRYSTALLUS
,
NOT_STARTED
);
76
}
77
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
78
{
79
Talk
(
SAY_AGGRO
);
80
81
if
(
instance
)
82
instance
->SetBossState(
DATA_KRYSTALLUS
,
IN_PROGRESS
);
83
}
84
85
void
UpdateAI
(
uint32
diff)
OVERRIDE
86
{
87
//Return since we have no target
88
if
(!
UpdateVictim
())
89
return
;
90
91
if
(
uiBoulderTossTimer
<= diff)
92
{
93
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100,
true
))
94
DoCast
(target,
SPELL_BOULDER_TOSS
);
95
uiBoulderTossTimer
= std::rand() % 15000 + 9000;
96
}
else
uiBoulderTossTimer
-= diff;
97
98
if
(
uiGroundSpikeTimer
<= diff)
99
{
100
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 100,
true
))
101
DoCast
(target,
SPELL_GROUND_SPIKE
);
102
uiGroundSpikeTimer
= std::rand() % 17000 + 12000;
103
}
else
uiGroundSpikeTimer
-= diff;
104
105
if
(
uiStompTimer
<= diff)
106
{
107
DoCast
(
me
,
SPELL_STOMP
);
108
uiStompTimer
= std::rand() % 29000 + 20000;
109
}
else
uiStompTimer
-= diff;
110
111
if
(
uiGroundSlamTimer
<= diff)
112
{
113
DoCast
(
me
,
SPELL_GROUND_SLAM
);
114
bIsSlam
=
true
;
115
uiShatterTimer
= 10000;
116
uiGroundSlamTimer
= std::rand() % 18000 + 15000;
117
}
else
uiGroundSlamTimer
-= diff;
118
119
if
(
bIsSlam
)
120
{
121
if
(
uiShatterTimer
<= diff)
122
{
123
DoCast
(
me
,
DUNGEON_MODE
(
SPELL_SHATTER
,
H_SPELL_SHATTER
));
124
}
else
uiShatterTimer
-= diff;
125
}
126
127
DoMeleeAttackIfReady
();
128
}
129
130
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
131
{
132
Talk
(
SAY_DEATH
);
133
134
if
(
instance
)
135
instance
->SetBossState(
DATA_KRYSTALLUS
,
DONE
);
136
}
137
138
void
KilledUnit
(
Unit
* victim)
OVERRIDE
139
{
140
if
(victim->GetTypeId() !=
TypeID::TYPEID_PLAYER
)
141
return
;
142
143
Talk
(
SAY_KILL
);
144
}
145
146
void
SpellHitTarget
(
Unit
*
/*target*/
,
const
SpellInfo
* pSpell)
OVERRIDE
147
{
148
//this part should be in the core
149
if
(pSpell->Id ==
SPELL_SHATTER
|| pSpell->Id ==
H_SPELL_SHATTER
)
150
{
152
//clear this, if we are still performing
153
if
(
bIsSlam
)
154
{
155
bIsSlam
=
false
;
156
157
//and correct movement, if not already
158
if
(
me
->GetMotionMaster()->GetCurrentMovementGeneratorType() !=
CHASE_MOTION_TYPE
)
159
{
160
if
(
me
->GetVictim())
161
me
->GetMotionMaster()->MoveChase(
me
->GetVictim());
162
}
163
}
164
}
165
}
166
};
167
168
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
169
{
170
return
GetHallsOfStoneAI<boss_krystallusAI>
(creature);
171
}
172
};
173
174
class
spell_krystallus_shatter
:
public
SpellScriptLoader
175
{
176
public
:
177
spell_krystallus_shatter
() :
SpellScriptLoader
(
"spell_krystallus_shatter"
) { }
178
179
class
spell_krystallus_shatter_SpellScript
:
public
SpellScript
180
{
181
PrepareSpellScript
(
spell_krystallus_shatter_SpellScript
);
182
183
void
HandleScript
(
SpellEffIndex
/*effIndex*/
)
184
{
185
if
(
Unit
* target =
GetHitUnit
())
186
{
187
target->RemoveAurasDueToSpell(
SPELL_STONED
);
188
target->CastSpell((
Unit
*)NULL,
SPELL_SHATTER_EFFECT
,
true
);
189
}
190
}
191
192
void
Register
()
OVERRIDE
193
{
194
OnEffectHitTarget
+=
SpellEffectFn
(
spell_krystallus_shatter_SpellScript::HandleScript
,
EFFECT_0
,
SPELL_EFFECT_SCRIPT_EFFECT
);
195
}
196
};
197
198
SpellScript
*
GetSpellScript
() const
OVERRIDE
199
{
200
return
new
spell_krystallus_shatter_SpellScript
();
201
}
202
};
203
204
class
spell_krystallus_shatter_effect
:
public
SpellScriptLoader
205
{
206
public
:
207
spell_krystallus_shatter_effect
() :
SpellScriptLoader
(
"spell_krystallus_shatter_effect"
) { }
208
209
class
spell_krystallus_shatter_effect_SpellScript
:
public
SpellScript
210
{
211
PrepareSpellScript
(
spell_krystallus_shatter_effect_SpellScript
);
212
213
void
CalculateDamage
()
214
{
215
if
(!
GetHitUnit
())
216
return
;
217
218
float
radius =
GetSpellInfo
()->
Effects
[
EFFECT_0
].
CalcRadius
(
GetCaster
());
219
if
(!radius)
220
return
;
221
222
float
distance =
GetCaster
()->
GetDistance2d
(
GetHitUnit
());
223
if
(distance > 1.0f)
224
SetHitDamage
(
int32
(
GetHitDamage
() * ((radius - distance) / radius)));
225
}
226
227
void
Register
()
OVERRIDE
228
{
229
OnHit
+=
SpellHitFn
(
spell_krystallus_shatter_effect_SpellScript::CalculateDamage
);
230
}
231
};
232
233
SpellScript
*
GetSpellScript
() const
OVERRIDE
234
{
235
return
new
spell_krystallus_shatter_effect_SpellScript
();
236
}
237
};
238
239
void
AddSC_boss_krystallus
()
240
{
241
new
boss_krystallus
();
242
new
spell_krystallus_shatter
();
243
new
spell_krystallus_shatter_effect
();
244
}
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
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
CHASE_MOTION_TYPE
@ CHASE_MOTION_TYPE
Definition
MotionMaster.h:30
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
ScriptMgr.h
ScriptedCreature.h
SpellEffIndex
SpellEffIndex
Definition
SharedDefines.h:17
EFFECT_0
@ EFFECT_0
Definition
SharedDefines.h:18
SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCRIPT_EFFECT
Definition
SharedDefines.h:965
SpellScript.h
SpellEffectFn
#define SpellEffectFn(F, I, N)
Definition
SpellScript.h:269
SpellHitFn
#define SpellHitFn(F)
Definition
SpellScript.h:278
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
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
H_SPELL_STOMP
@ H_SPELL_STOMP
Definition
boss_gal_darah.cpp:18
SAY_DEATH
@ SAY_DEATH
Definition
boss_krystallus.cpp:38
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_krystallus.cpp:36
SAY_KILL
@ SAY_KILL
Definition
boss_krystallus.cpp:37
SAY_SHATTER
@ SAY_SHATTER
Definition
boss_krystallus.cpp:39
SPELL_STOMP
@ SPELL_STOMP
Definition
boss_krystallus.cpp:30
SPELL_BOULDER_TOSS
@ SPELL_BOULDER_TOSS
Definition
boss_krystallus.cpp:21
SPELL_SHATTER_EFFECT
@ SPELL_SHATTER_EFFECT
Definition
boss_krystallus.cpp:27
H_SPELL_BOULDER_TOSS
@ H_SPELL_BOULDER_TOSS
Definition
boss_krystallus.cpp:22
H_SPELL_SHATTER
@ H_SPELL_SHATTER
Definition
boss_krystallus.cpp:26
H_SPELL_SHATTER_EFFECT
@ H_SPELL_SHATTER_EFFECT
Definition
boss_krystallus.cpp:28
SPELL_GROUND_SLAM
@ SPELL_GROUND_SLAM
Definition
boss_krystallus.cpp:24
SPELL_SHATTER
@ SPELL_SHATTER
Definition
boss_krystallus.cpp:25
SPELL_GROUND_SPIKE
@ SPELL_GROUND_SPIKE
Definition
boss_krystallus.cpp:23
SPELL_STONED
@ SPELL_STONED
Definition
boss_krystallus.cpp:29
AddSC_boss_krystallus
void AddSC_boss_krystallus()
Definition
boss_krystallus.cpp:239
SPELL_STOMP
@ SPELL_STOMP
Definition
chapter5.cpp:158
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
SpellEffectInfo::CalcRadius
float CalcRadius(Unit *caster=NULL, Spell *=NULL) const
Definition
SpellInfo.cpp:300
SpellInfo
Definition
SpellInfo.h:158
SpellInfo::Effects
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
Definition
SpellInfo.h:255
SpellScript
Definition
SpellScript.h:139
SpellScript::GetSpellInfo
SpellInfo const * GetSpellInfo()
Definition
SpellScript.cpp:362
SpellScript::OnHit
HookList< HitHandler > OnHit
Definition
SpellScript.h:274
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_krystallus
Definition
boss_krystallus.cpp:43
boss_krystallus::boss_krystallus
boss_krystallus()
Definition
boss_krystallus.cpp:45
boss_krystallus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_krystallus.cpp:168
spell_krystallus_shatter::spell_krystallus_shatter_SpellScript
Definition
boss_krystallus.cpp:180
spell_krystallus_shatter::spell_krystallus_shatter_SpellScript::HandleScript
void HandleScript(SpellEffIndex)
Definition
boss_krystallus.cpp:183
spell_krystallus_shatter::spell_krystallus_shatter_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_krystallus_shatter_SpellScript)
spell_krystallus_shatter::spell_krystallus_shatter_SpellScript::Register
void Register() OVERRIDE
Definition
boss_krystallus.cpp:192
spell_krystallus_shatter_effect::spell_krystallus_shatter_effect_SpellScript
Definition
boss_krystallus.cpp:210
spell_krystallus_shatter_effect::spell_krystallus_shatter_effect_SpellScript::CalculateDamage
void CalculateDamage()
Definition
boss_krystallus.cpp:213
spell_krystallus_shatter_effect::spell_krystallus_shatter_effect_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_krystallus_shatter_effect_SpellScript)
spell_krystallus_shatter_effect::spell_krystallus_shatter_effect_SpellScript::Register
void Register() OVERRIDE
Definition
boss_krystallus.cpp:227
spell_krystallus_shatter_effect
Definition
boss_krystallus.cpp:205
spell_krystallus_shatter_effect::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_krystallus.cpp:233
spell_krystallus_shatter_effect::spell_krystallus_shatter_effect
spell_krystallus_shatter_effect()
Definition
boss_krystallus.cpp:207
spell_krystallus_shatter
Definition
boss_krystallus.cpp:175
spell_krystallus_shatter::spell_krystallus_shatter
spell_krystallus_shatter()
Definition
boss_krystallus.cpp:177
spell_krystallus_shatter::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_krystallus.cpp:198
halls_of_stone.h
GetHallsOfStoneAI
AI * GetHallsOfStoneAI(Creature *creature)
Definition
halls_of_stone.h:58
DATA_KRYSTALLUS
@ DATA_KRYSTALLUS
Definition
halls_of_stone.h:16
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
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_krystallus::boss_krystallusAI::uiGroundSpikeTimer
uint32 uiGroundSpikeTimer
Definition
boss_krystallus.cpp:55
boss_krystallus::boss_krystallusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_krystallus.cpp:77
boss_krystallus::boss_krystallusAI::uiStompTimer
uint32 uiStompTimer
Definition
boss_krystallus.cpp:58
boss_krystallus::boss_krystallusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_krystallus.cpp:85
boss_krystallus::boss_krystallusAI::Reset
void Reset() OVERRIDE
Definition
boss_krystallus.cpp:64
boss_krystallus::boss_krystallusAI::boss_krystallusAI
boss_krystallusAI(Creature *creature)
Definition
boss_krystallus.cpp:49
boss_krystallus::boss_krystallusAI::bIsSlam
bool bIsSlam
Definition
boss_krystallus.cpp:60
boss_krystallus::boss_krystallusAI::SpellHitTarget
void SpellHitTarget(Unit *, const SpellInfo *pSpell) OVERRIDE
Definition
boss_krystallus.cpp:146
boss_krystallus::boss_krystallusAI::uiBoulderTossTimer
uint32 uiBoulderTossTimer
Definition
boss_krystallus.cpp:54
boss_krystallus::boss_krystallusAI::uiShatterTimer
uint32 uiShatterTimer
Definition
boss_krystallus.cpp:57
boss_krystallus::boss_krystallusAI::uiGroundSlamTimer
uint32 uiGroundSlamTimer
Definition
boss_krystallus.cpp:56
boss_krystallus::boss_krystallusAI::instance
InstanceScript * instance
Definition
boss_krystallus.cpp:62
boss_krystallus::boss_krystallusAI::KilledUnit
void KilledUnit(Unit *victim) OVERRIDE
Definition
boss_krystallus.cpp:138
boss_krystallus::boss_krystallusAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_krystallus.cpp:130
src
server
scripts
Northrend
Ulduar
HallsOfStone
boss_krystallus.cpp
Generated on
for Project SkyFire Core by
1.17.0