Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_balinda.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
9
enum
Spells
10
{
11
SPELL_ARCANE_EXPLOSION
= 46608,
12
SPELL_CONE_OF_COLD
= 38384,
13
SPELL_FIREBALL
= 46988,
14
SPELL_FROSTBOLT
= 46987
15
};
16
17
enum
Yells
18
{
19
YELL_AGGRO
= 0,
20
YELL_EVADE
= 1,
21
YELL_SALVATION
= 2,
22
};
23
24
enum
Creatures
25
{
26
NPC_WATER_ELEMENTAL
= 25040
27
};
28
29
enum
WaterElementalSpells
30
{
31
SPELL_WATERBOLT
= 46983
32
};
33
34
class
npc_water_elemental
:
public
CreatureScript
35
{
36
public
:
37
npc_water_elemental
() :
CreatureScript
(
"npc_water_elemental"
) { }
38
39
struct
npc_water_elementalAI
:
public
ScriptedAI
40
{
41
npc_water_elementalAI
(
Creature
* creature) :
ScriptedAI
(creature) { }
42
43
uint32
waterBoltTimer
;
44
uint64
balindaGUID
;
45
uint32
resetTimer
;
46
47
void
Reset
()
OVERRIDE
48
{
49
waterBoltTimer
= 3 *
IN_MILLISECONDS
;
50
resetTimer
= 5 *
IN_MILLISECONDS
;
51
}
52
53
void
UpdateAI
(
uint32
diff)
OVERRIDE
54
{
55
if
(!
UpdateVictim
())
56
return
;
57
58
if
(
waterBoltTimer
< diff)
59
{
60
DoCastVictim
(
SPELL_WATERBOLT
);
61
waterBoltTimer
= 5 *
IN_MILLISECONDS
;
62
}
else
waterBoltTimer
-= diff;
63
64
// check if creature is not outside of building
65
if
(
resetTimer
< diff)
66
{
67
if
(
Creature
* pBalinda =
Unit::GetCreature
(*
me
,
balindaGUID
))
68
if
(
me
->GetDistance2d(pBalinda->GetHomePosition().GetPositionX(), pBalinda->GetHomePosition().GetPositionY()) > 50)
69
EnterEvadeMode
();
70
resetTimer
= 5 *
IN_MILLISECONDS
;
71
}
else
resetTimer
-= diff;
72
73
DoMeleeAttackIfReady
();
74
}
75
};
76
77
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
78
{
79
return
new
npc_water_elementalAI
(creature);
80
}
81
};
82
83
class
boss_balinda
:
public
CreatureScript
84
{
85
public
:
86
boss_balinda
() :
CreatureScript
(
"boss_balinda"
) { }
87
88
struct
boss_balindaAI
:
public
ScriptedAI
89
{
90
boss_balindaAI
(
Creature
* creature) :
ScriptedAI
(creature),
summons
(
me
) { }
91
92
uint32
arcaneExplosionTimer
;
93
uint32
coneOfColdTimer
;
94
uint32
fireBoltTimer
;
95
uint32
frostboltTimer
;
96
uint32
resetTimer
;
97
uint32
waterElementalTimer
;
98
99
SummonList
summons
;
100
101
void
Reset
()
OVERRIDE
102
{
103
arcaneExplosionTimer
= std::rand() % (15 *
IN_MILLISECONDS
) + (5 *
IN_MILLISECONDS
);
104
coneOfColdTimer
= 8 *
IN_MILLISECONDS
;
105
fireBoltTimer
= 1 *
IN_MILLISECONDS
;
106
frostboltTimer
= 4 *
IN_MILLISECONDS
;
107
resetTimer
= 5 *
IN_MILLISECONDS
;
108
waterElementalTimer
= 0;
109
110
summons
.DespawnAll();
111
}
112
113
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
114
{
115
Talk
(
YELL_AGGRO
);
116
}
117
118
void
JustRespawned
()
OVERRIDE
119
{
120
Reset
();
121
}
122
123
void
JustSummoned
(
Creature
* summoned)
OVERRIDE
124
{
125
CAST_AI
(
npc_water_elemental::npc_water_elementalAI
, summoned->AI())->balindaGUID =
me
->GetGUID();
126
summoned->AI()->AttackStart(
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 50,
true
));
127
summoned->setFaction(
me
->getFaction());
128
summons
.Summon(summoned);
129
}
130
131
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
132
{
133
summons
.DespawnAll();
134
}
135
136
void
UpdateAI
(
uint32
diff)
OVERRIDE
137
{
138
if
(!
UpdateVictim
())
139
return
;
140
141
if
(
waterElementalTimer
< diff)
142
{
143
if
(
summons
.empty())
144
me
->SummonCreature(
NPC_WATER_ELEMENTAL
, 0, 0, 0, 0,
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
, 45 *
IN_MILLISECONDS
);
145
waterElementalTimer
= 50 *
IN_MILLISECONDS
;
146
}
else
waterElementalTimer
-= diff;
147
148
if
(
arcaneExplosionTimer
< diff)
149
{
150
DoCastVictim
(
SPELL_ARCANE_EXPLOSION
);
151
arcaneExplosionTimer
= std::rand() % (15 *
IN_MILLISECONDS
) + (5 *
IN_MILLISECONDS
);
152
}
else
arcaneExplosionTimer
-= diff;
153
154
if
(
coneOfColdTimer
< diff)
155
{
156
DoCastVictim
(
SPELL_CONE_OF_COLD
);
157
coneOfColdTimer
= std::rand() % (20 *
IN_MILLISECONDS
) + (10 *
IN_MILLISECONDS
);
158
}
else
coneOfColdTimer
-= diff;
159
160
if
(
fireBoltTimer
< diff)
161
{
162
DoCastVictim
(
SPELL_FIREBALL
);
163
fireBoltTimer
= std::rand() % (9 *
IN_MILLISECONDS
) + (5 *
IN_MILLISECONDS
);
164
}
else
fireBoltTimer
-= diff;
165
166
if
(
frostboltTimer
< diff)
167
{
168
DoCastVictim
(
SPELL_FROSTBOLT
);
169
frostboltTimer
= std::rand() % (12 *
IN_MILLISECONDS
) + (4 *
IN_MILLISECONDS
);
170
}
else
frostboltTimer
-= diff;
171
172
// check if creature is not outside of building
173
if
(
resetTimer
< diff)
174
{
175
if
(
me
->GetDistance2d(
me
->GetHomePosition().GetPositionX(),
me
->GetHomePosition().GetPositionY()) > 50)
176
{
177
EnterEvadeMode
();
178
Talk
(
YELL_EVADE
);
179
}
180
resetTimer
= 5 *
IN_MILLISECONDS
;
181
}
else
resetTimer
-= diff;
182
183
DoMeleeAttackIfReady
();
184
}
185
};
186
187
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
188
{
189
return
new
boss_balindaAI
(creature);
190
}
191
};
192
193
void
AddSC_boss_balinda
()
194
{
195
new
boss_balinda
;
196
new
npc_water_elemental
;
197
};
Spells
Spells
Definition
BattlegroundIC.h:645
IN_MILLISECONDS
@ IN_MILLISECONDS
Definition
Common.h:125
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
TempSummonType::TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
@ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
Definition
Object.h:69
ScriptMgr.h
ScriptedCreature.h
CAST_AI
#define CAST_AI(a, b)
Definition
ScriptedCreature.h:14
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Creatures
Creatures
Definition
alterac_valley.cpp:28
WaterElementalSpells
WaterElementalSpells
Definition
boss_balinda.cpp:30
SPELL_WATERBOLT
@ SPELL_WATERBOLT
Definition
boss_balinda.cpp:31
NPC_WATER_ELEMENTAL
@ NPC_WATER_ELEMENTAL
Definition
boss_balinda.cpp:26
YELL_SALVATION
@ YELL_SALVATION
Definition
boss_balinda.cpp:21
YELL_EVADE
@ YELL_EVADE
Definition
boss_balinda.cpp:20
YELL_AGGRO
@ YELL_AGGRO
Definition
boss_balinda.cpp:19
SPELL_FROSTBOLT
@ SPELL_FROSTBOLT
Definition
boss_balinda.cpp:14
SPELL_ARCANE_EXPLOSION
@ SPELL_ARCANE_EXPLOSION
Definition
boss_balinda.cpp:11
SPELL_FIREBALL
@ SPELL_FIREBALL
Definition
boss_balinda.cpp:13
SPELL_CONE_OF_COLD
@ SPELL_CONE_OF_COLD
Definition
boss_balinda.cpp:12
AddSC_boss_balinda
void AddSC_boss_balinda()
Definition
boss_balinda.cpp:193
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
CreatureAI::EnterEvadeMode
virtual void EnterEvadeMode()
Definition
CreatureAI.cpp:130
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
SummonList
Definition
ScriptedCreature.h:19
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
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::GetCreature
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4905
boss_balinda
Definition
boss_balinda.cpp:84
boss_balinda::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_balinda.cpp:187
boss_balinda::boss_balinda
boss_balinda()
Definition
boss_balinda.cpp:86
npc_water_elemental
Definition
boss_balinda.cpp:35
npc_water_elemental::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_balinda.cpp:77
npc_water_elemental::npc_water_elemental
npc_water_elemental()
Definition
boss_balinda.cpp:37
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
boss_balinda::boss_balindaAI
Definition
boss_balinda.cpp:89
boss_balinda::boss_balindaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_balinda.cpp:131
boss_balinda::boss_balindaAI::fireBoltTimer
uint32 fireBoltTimer
Definition
boss_balinda.cpp:94
boss_balinda::boss_balindaAI::waterElementalTimer
uint32 waterElementalTimer
Definition
boss_balinda.cpp:97
boss_balinda::boss_balindaAI::frostboltTimer
uint32 frostboltTimer
Definition
boss_balinda.cpp:95
boss_balinda::boss_balindaAI::coneOfColdTimer
uint32 coneOfColdTimer
Definition
boss_balinda.cpp:93
boss_balinda::boss_balindaAI::resetTimer
uint32 resetTimer
Definition
boss_balinda.cpp:96
boss_balinda::boss_balindaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_balinda.cpp:113
boss_balinda::boss_balindaAI::JustSummoned
void JustSummoned(Creature *summoned) OVERRIDE
Definition
boss_balinda.cpp:123
boss_balinda::boss_balindaAI::boss_balindaAI
boss_balindaAI(Creature *creature)
Definition
boss_balinda.cpp:90
boss_balinda::boss_balindaAI::arcaneExplosionTimer
uint32 arcaneExplosionTimer
Definition
boss_balinda.cpp:92
boss_balinda::boss_balindaAI::Reset
void Reset() OVERRIDE
Definition
boss_balinda.cpp:101
boss_balinda::boss_balindaAI::JustRespawned
void JustRespawned() OVERRIDE
Definition
boss_balinda.cpp:118
boss_balinda::boss_balindaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_balinda.cpp:136
boss_balinda::boss_balindaAI::summons
SummonList summons
Definition
boss_balinda.cpp:99
npc_water_elemental::npc_water_elementalAI
Definition
boss_balinda.cpp:40
npc_water_elemental::npc_water_elementalAI::waterBoltTimer
uint32 waterBoltTimer
Definition
boss_balinda.cpp:43
npc_water_elemental::npc_water_elementalAI::resetTimer
uint32 resetTimer
Definition
boss_balinda.cpp:45
npc_water_elemental::npc_water_elementalAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_balinda.cpp:53
npc_water_elemental::npc_water_elementalAI::npc_water_elementalAI
npc_water_elementalAI(Creature *creature)
Definition
boss_balinda.cpp:41
npc_water_elemental::npc_water_elementalAI::balindaGUID
uint64 balindaGUID
Definition
boss_balinda.cpp:44
npc_water_elemental::npc_water_elementalAI::Reset
void Reset() OVERRIDE
Definition
boss_balinda.cpp:47
src
server
scripts
EasternKingdoms
AlteracValley
boss_balinda.cpp
Generated on
for Project SkyFire Core by
1.17.0