Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_the_black_stalker.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_the_black_stalker
8
SD%Complete: 95
9
SDComment: Timers may be incorrect
10
SDCategory: Coilfang Resevoir, Underbog
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
16
enum
Spells
17
{
18
SPELL_LEVITATE
= 31704,
19
SPELL_SUSPENSION
= 31719,
20
SPELL_LEVITATION_PULSE
= 31701,
21
SPELL_MAGNETIC_PULL
= 31705,
22
SPELL_CHAIN_LIGHTNING
= 31717,
23
SPELL_STATIC_CHARGE
= 31715,
24
SPELL_SUMMON_SPORE_STRIDER
= 38755
25
};
26
27
enum
CreatureIdS
28
{
29
ENTRY_SPORE_STRIDER
= 22299
30
};
31
32
class
boss_the_black_stalker
:
public
CreatureScript
33
{
34
public
:
35
boss_the_black_stalker
() :
CreatureScript
(
"boss_the_black_stalker"
) { }
36
37
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
38
{
39
return
new
boss_the_black_stalkerAI
(creature);
40
}
41
42
struct
boss_the_black_stalkerAI
:
public
ScriptedAI
43
{
44
boss_the_black_stalkerAI
(
Creature
* creature) :
ScriptedAI
(creature)
45
{
46
}
47
48
uint32
SporeStriders_Timer
;
49
uint32
Levitate_Timer
;
50
uint32
ChainLightning_Timer
;
51
uint32
StaticCharge_Timer
;
52
uint64
LevitatedTarget
;
53
uint32
LevitatedTarget_Timer
;
54
bool
InAir
;
55
uint32
check_Timer
;
56
std::list<uint64>
Striders
;
57
58
void
Reset
()
OVERRIDE
59
{
60
Levitate_Timer
= 12000;
61
ChainLightning_Timer
= 6000;
62
StaticCharge_Timer
= 10000;
63
SporeStriders_Timer
= 10000+rand()%5000;
64
check_Timer
= 5000;
65
LevitatedTarget
= 0;
66
LevitatedTarget_Timer
= 0;
67
Striders
.clear();
68
}
69
70
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
71
72
void
JustSummoned
(
Creature
* summon)
OVERRIDE
73
{
74
if
(summon && summon->GetEntry() ==
ENTRY_SPORE_STRIDER
)
75
{
76
Striders
.push_back(summon->GetGUID());
77
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1))
78
summon->AI()->AttackStart(target);
79
else
80
if
(
me
->GetVictim())
81
summon->AI()->AttackStart(
me
->GetVictim());
82
}
83
}
84
85
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
86
{
87
for
(std::list<uint64>::const_iterator i =
Striders
.begin(); i !=
Striders
.end(); ++i)
88
if
(
Creature
* strider =
Unit::GetCreature
(*
me
, *i))
89
strider->DisappearAndDie();
90
}
91
92
void
UpdateAI
(
uint32
diff)
OVERRIDE
93
{
94
if
(!
UpdateVictim
())
95
return
;
96
97
// Evade if too far
98
if
(
check_Timer
<= diff)
99
{
100
float
x, y, z, o;
101
me
->GetHomePosition(x, y, z, o);
102
if
(!
me
->IsWithinDist3d(x, y, z, 60))
103
{
104
EnterEvadeMode
();
105
return
;
106
}
107
check_Timer
= 1000;
108
}
else
check_Timer
-= diff;
109
110
// Spore Striders
111
if
(
IsHeroic
() &&
SporeStriders_Timer
<= diff)
112
{
113
DoCast
(
me
,
SPELL_SUMMON_SPORE_STRIDER
);
114
SporeStriders_Timer
= 10000+rand()%5000;
115
}
else
SporeStriders_Timer
-= diff;
116
117
// Levitate
118
if
(
LevitatedTarget
)
119
{
120
if
(
LevitatedTarget_Timer
<= diff)
121
{
122
if
(
Unit
* target =
Unit::GetUnit
(*
me
,
LevitatedTarget
))
123
{
124
if
(!target->HasAura(
SPELL_LEVITATE
))
125
{
126
LevitatedTarget
= 0;
127
return
;
128
}
129
if
(
InAir
)
130
{
131
target->AddAura(
SPELL_SUSPENSION
, target);
132
LevitatedTarget
= 0;
133
}
134
else
135
{
136
target->CastSpell(target,
SPELL_MAGNETIC_PULL
,
true
);
137
InAir
=
true
;
138
LevitatedTarget_Timer
= 1500;
139
}
140
}
141
else
142
LevitatedTarget
= 0;
143
}
else
LevitatedTarget_Timer
-= diff;
144
}
145
if
(
Levitate_Timer
<= diff)
146
{
147
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1))
148
{
149
DoCast
(target,
SPELL_LEVITATE
);
150
LevitatedTarget
= target->GetGUID();
151
LevitatedTarget_Timer
= 2000;
152
InAir
=
false
;
153
}
154
Levitate_Timer
= 12000+rand()%3000;
155
}
else
Levitate_Timer
-= diff;
156
157
// Chain Lightning
158
if
(
ChainLightning_Timer
<= diff)
159
{
160
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
161
DoCast
(target,
SPELL_CHAIN_LIGHTNING
);
162
ChainLightning_Timer
= 7000;
163
}
else
ChainLightning_Timer
-= diff;
164
165
// Static Charge
166
if
(
StaticCharge_Timer
<= diff)
167
{
168
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 30,
true
))
169
DoCast
(target,
SPELL_STATIC_CHARGE
);
170
StaticCharge_Timer
= 10000;
171
}
else
StaticCharge_Timer
-= diff;
172
173
DoMeleeAttackIfReady
();
174
}
175
};
176
};
177
178
void
AddSC_boss_the_black_stalker
()
179
{
180
new
boss_the_black_stalker
();
181
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SPELL_STATIC_CHARGE
@ SPELL_STATIC_CHARGE
Definition
boss_sjonnir.cpp:14
SPELL_MAGNETIC_PULL
@ SPELL_MAGNETIC_PULL
Definition
boss_thaddius.cpp:24
SPELL_SUSPENSION
@ SPELL_SUSPENSION
Definition
boss_the_black_stalker.cpp:19
SPELL_MAGNETIC_PULL
@ SPELL_MAGNETIC_PULL
Definition
boss_the_black_stalker.cpp:21
SPELL_SUMMON_SPORE_STRIDER
@ SPELL_SUMMON_SPORE_STRIDER
Definition
boss_the_black_stalker.cpp:24
SPELL_CHAIN_LIGHTNING
@ SPELL_CHAIN_LIGHTNING
Definition
boss_the_black_stalker.cpp:22
SPELL_STATIC_CHARGE
@ SPELL_STATIC_CHARGE
Definition
boss_the_black_stalker.cpp:23
SPELL_LEVITATE
@ SPELL_LEVITATE
Definition
boss_the_black_stalker.cpp:18
SPELL_LEVITATION_PULSE
@ SPELL_LEVITATION_PULSE
Definition
boss_the_black_stalker.cpp:20
CreatureIdS
CreatureIdS
Definition
boss_the_black_stalker.cpp:28
ENTRY_SPORE_STRIDER
@ ENTRY_SPORE_STRIDER
Definition
boss_the_black_stalker.cpp:29
AddSC_boss_the_black_stalker
void AddSC_boss_the_black_stalker()
Definition
boss_the_black_stalker.cpp:178
SPELL_CHAIN_LIGHTNING
@ SPELL_CHAIN_LIGHTNING
Definition
bosses_opera.cpp:73
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
CreatureAI::EnterEvadeMode
virtual void EnterEvadeMode()
Definition
CreatureAI.cpp:130
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
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
Unit::GetCreature
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4905
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
boss_the_black_stalker
Definition
boss_the_black_stalker.cpp:33
boss_the_black_stalker::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_the_black_stalker.cpp:37
boss_the_black_stalker::boss_the_black_stalker
boss_the_black_stalker()
Definition
boss_the_black_stalker.cpp:35
ScriptedAI::IsHeroic
bool IsHeroic() const
Definition
ScriptedCreature.h:279
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_the_black_stalker::boss_the_black_stalkerAI
Definition
boss_the_black_stalker.cpp:43
boss_the_black_stalker::boss_the_black_stalkerAI::LevitatedTarget_Timer
uint32 LevitatedTarget_Timer
Definition
boss_the_black_stalker.cpp:53
boss_the_black_stalker::boss_the_black_stalkerAI::boss_the_black_stalkerAI
boss_the_black_stalkerAI(Creature *creature)
Definition
boss_the_black_stalker.cpp:44
boss_the_black_stalker::boss_the_black_stalkerAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_the_black_stalker.cpp:85
boss_the_black_stalker::boss_the_black_stalkerAI::SporeStriders_Timer
uint32 SporeStriders_Timer
Definition
boss_the_black_stalker.cpp:48
boss_the_black_stalker::boss_the_black_stalkerAI::InAir
bool InAir
Definition
boss_the_black_stalker.cpp:54
boss_the_black_stalker::boss_the_black_stalkerAI::LevitatedTarget
uint64 LevitatedTarget
Definition
boss_the_black_stalker.cpp:52
boss_the_black_stalker::boss_the_black_stalkerAI::Levitate_Timer
uint32 Levitate_Timer
Definition
boss_the_black_stalker.cpp:49
boss_the_black_stalker::boss_the_black_stalkerAI::check_Timer
uint32 check_Timer
Definition
boss_the_black_stalker.cpp:55
boss_the_black_stalker::boss_the_black_stalkerAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_the_black_stalker.cpp:70
boss_the_black_stalker::boss_the_black_stalkerAI::Striders
std::list< uint64 > Striders
Definition
boss_the_black_stalker.cpp:56
boss_the_black_stalker::boss_the_black_stalkerAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_the_black_stalker.cpp:92
boss_the_black_stalker::boss_the_black_stalkerAI::JustSummoned
void JustSummoned(Creature *summon) OVERRIDE
Definition
boss_the_black_stalker.cpp:72
boss_the_black_stalker::boss_the_black_stalkerAI::StaticCharge_Timer
uint32 StaticCharge_Timer
Definition
boss_the_black_stalker.cpp:51
boss_the_black_stalker::boss_the_black_stalkerAI::ChainLightning_Timer
uint32 ChainLightning_Timer
Definition
boss_the_black_stalker.cpp:50
boss_the_black_stalker::boss_the_black_stalkerAI::Reset
void Reset() OVERRIDE
Definition
boss_the_black_stalker.cpp:58
src
server
scripts
Outland
CoilfangReservoir
TheUnderbog
boss_the_black_stalker.cpp
Generated on
for Project SkyFire Core by
1.17.0