Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_tailonking_ikiss.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_Talon_King_Ikiss
8
SD%Complete: 80
9
SDComment: Heroic supported. Some details missing, but most are spell related.
10
SDCategory: Auchindoun, Sethekk Halls
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
sethekk_halls.h
"
16
17
enum
Says
18
{
19
SAY_INTRO
= 0,
20
SAY_AGGRO
= 1,
21
SAY_SLAY
= 2,
22
SAY_DEATH
= 3,
23
EMOTE_ARCANE_EXP
= 4
24
};
25
26
enum
Spells
27
{
28
SPELL_BLINK
= 38194,
29
SPELL_BLINK_TELEPORT
= 38203,
30
SPELL_MANA_SHIELD
= 38151,
31
SPELL_ARCANE_BUBBLE
= 9438,
32
H_SPELL_SLOW
= 35032,
33
SPELL_POLYMORPH
= 38245,
34
H_SPELL_POLYMORPH
= 43309,
35
SPELL_ARCANE_VOLLEY
= 35059,
36
H_SPELL_ARCANE_VOLLEY
= 40424,
37
SPELL_ARCANE_EXPLOSION
= 38197,
38
H_SPELL_ARCANE_EXPLOSION
= 40425
39
};
40
41
class
boss_talon_king_ikiss
:
public
CreatureScript
42
{
43
public
:
44
boss_talon_king_ikiss
() :
CreatureScript
(
"boss_talon_king_ikiss"
) { }
45
46
struct
boss_talon_king_ikissAI
:
public
BossAI
47
{
48
boss_talon_king_ikissAI
(
Creature
* creature) :
BossAI
(creature,
DATA_TALON_KING_IKISS
) { }
49
50
void
Reset
()
OVERRIDE
51
{
52
_Reset
();
53
ArcaneVolley_Timer
= 5000;
54
Sheep_Timer
= 8000;
55
Blink_Timer
= 35000;
56
Slow_Timer
= 15000+rand()%15000;
57
Blink
=
false
;
58
Intro
=
false
;
59
ManaShield
=
false
;
60
}
61
62
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
63
{
64
if
(!
me
->GetVictim() &&
me
->CanCreatureAttack(who))
65
{
66
if
(!
Intro
&&
me
->IsWithinDistInMap(who, 100))
67
{
68
Intro
=
true
;
69
Talk
(
SAY_INTRO
);
70
}
71
72
if
(!
me
->CanFly() &&
me
->GetDistanceZ(who) >
CREATURE_Z_ATTACK_RANGE
)
73
return
;
74
75
float
attackRadius =
me
->GetAttackDistance(who);
76
if
(
me
->IsWithinDistInMap(who, attackRadius) &&
me
->IsWithinLOSInMap(who))
77
{
78
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
79
AttackStart
(who);
80
}
81
}
82
}
83
84
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
85
{
86
_EnterCombat
();
87
Talk
(
SAY_AGGRO
);
88
}
89
90
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
91
{
92
_JustDied
();
93
Talk
(
SAY_DEATH
);
94
}
95
96
void
KilledUnit
(
Unit
* who)
OVERRIDE
97
{
98
if
(who->GetTypeId() ==
TypeID::TYPEID_PLAYER
)
99
Talk
(
SAY_SLAY
);
100
}
101
102
void
UpdateAI
(
uint32
diff)
OVERRIDE
103
{
104
if
(!
UpdateVictim
())
105
return
;
106
107
if
(
Blink
)
108
{
109
DoCast
(
me
,
SPELL_ARCANE_EXPLOSION
);
110
DoCast
(
me
,
SPELL_ARCANE_BUBBLE
,
true
);
111
Blink
=
false
;
112
}
113
114
if
(
ArcaneVolley_Timer
<= diff)
115
{
116
DoCast
(
me
,
SPELL_ARCANE_VOLLEY
);
117
ArcaneVolley_Timer
= 7000+rand()%5000;
118
}
else
ArcaneVolley_Timer
-= diff;
119
120
if
(
Sheep_Timer
<= diff)
121
{
122
Unit
* target;
123
124
//second top aggro target in normal, random target in heroic correct?
125
if
(
IsHeroic
())
126
target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0);
127
else
128
target =
SelectTarget
(
SELECT_TARGET_TOPAGGRO
, 1);
129
130
if
(target)
131
DoCast
(target,
SPELL_POLYMORPH
);
132
Sheep_Timer
= 15000+rand()%2500;
133
}
else
Sheep_Timer
-= diff;
134
135
//may not be correct time to cast
136
if
(!
ManaShield
&&
HealthBelowPct
(20))
137
{
138
DoCast
(
me
,
SPELL_MANA_SHIELD
);
139
ManaShield
=
true
;
140
}
141
142
if
(
IsHeroic
())
143
{
144
if
(
Slow_Timer
<= diff)
145
{
146
DoCast
(
me
,
H_SPELL_SLOW
);
147
Slow_Timer
= 15000+rand()%25000;
148
}
else
Slow_Timer
-= diff;
149
}
150
151
if
(
Blink_Timer
<= diff)
152
{
153
Talk
(
EMOTE_ARCANE_EXP
);
154
155
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
156
{
157
if
(
me
->IsNonMeleeSpellCasted(
false
))
158
me
->InterruptNonMeleeSpells(
false
);
159
160
//Spell doesn't work, but we use for visual effect at least
161
DoCast
(target,
SPELL_BLINK
);
162
163
float
X = target->GetPositionX();
164
float
Y = target->GetPositionY();
165
float
Z = target->GetPositionZ();
166
167
DoTeleportTo
(X, Y, Z);
168
169
DoCast
(target,
SPELL_BLINK_TELEPORT
);
170
Blink
=
true
;
171
}
172
Blink_Timer
= 35000+rand()%5000;
173
}
else
Blink_Timer
-= diff;
174
175
if
(!
Blink
)
176
DoMeleeAttackIfReady
();
177
}
178
179
private
:
180
uint32
ArcaneVolley_Timer
;
181
uint32
Sheep_Timer
;
182
uint32
Blink_Timer
;
183
uint32
Slow_Timer
;
184
185
bool
ManaShield
;
186
bool
Blink
;
187
bool
Intro
;
188
};
189
190
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
191
{
192
return
GetSethekkHallsAI<boss_talon_king_ikissAI>
(creature);
193
}
194
};
195
196
void
AddSC_boss_talon_king_ikiss
()
197
{
198
new
boss_talon_king_ikiss
();
199
}
Spells
Spells
Definition
BattlegroundIC.h:645
CREATURE_Z_ATTACK_RANGE
#define CREATURE_Z_ATTACK_RANGE
Definition
Creature.h:422
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
SELECT_TARGET_TOPAGGRO
@ SELECT_TARGET_TOPAGGRO
Definition
UnitAI.h:24
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_INTRO
@ SAY_INTRO
Definition
boss_alizabal.cpp:14
SPELL_ARCANE_EXPLOSION
@ SPELL_ARCANE_EXPLOSION
Definition
boss_balinda.cpp:11
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SPELL_ARCANE_VOLLEY
@ SPELL_ARCANE_VOLLEY
Definition
boss_eregos.cpp:36
Says
Says
Definition
boss_halycon.cpp:17
SPELL_BLINK
#define SPELL_BLINK
Definition
boss_noth.cpp:28
SPELL_POLYMORPH
@ SPELL_POLYMORPH
Definition
boss_priestess_delrissa.cpp:734
SAY_DEATH
@ SAY_DEATH
Definition
boss_tailonking_ikiss.cpp:22
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_tailonking_ikiss.cpp:20
EMOTE_ARCANE_EXP
@ EMOTE_ARCANE_EXP
Definition
boss_tailonking_ikiss.cpp:23
SAY_SLAY
@ SAY_SLAY
Definition
boss_tailonking_ikiss.cpp:21
SAY_INTRO
@ SAY_INTRO
Definition
boss_tailonking_ikiss.cpp:19
SPELL_BLINK
@ SPELL_BLINK
Definition
boss_tailonking_ikiss.cpp:28
SPELL_ARCANE_BUBBLE
@ SPELL_ARCANE_BUBBLE
Definition
boss_tailonking_ikiss.cpp:31
SPELL_ARCANE_VOLLEY
@ SPELL_ARCANE_VOLLEY
Definition
boss_tailonking_ikiss.cpp:35
H_SPELL_SLOW
@ H_SPELL_SLOW
Definition
boss_tailonking_ikiss.cpp:32
H_SPELL_POLYMORPH
@ H_SPELL_POLYMORPH
Definition
boss_tailonking_ikiss.cpp:34
SPELL_MANA_SHIELD
@ SPELL_MANA_SHIELD
Definition
boss_tailonking_ikiss.cpp:30
H_SPELL_ARCANE_VOLLEY
@ H_SPELL_ARCANE_VOLLEY
Definition
boss_tailonking_ikiss.cpp:36
SPELL_ARCANE_EXPLOSION
@ SPELL_ARCANE_EXPLOSION
Definition
boss_tailonking_ikiss.cpp:37
SPELL_BLINK_TELEPORT
@ SPELL_BLINK_TELEPORT
Definition
boss_tailonking_ikiss.cpp:29
SPELL_POLYMORPH
@ SPELL_POLYMORPH
Definition
boss_tailonking_ikiss.cpp:33
AddSC_boss_talon_king_ikiss
void AddSC_boss_talon_king_ikiss()
Definition
boss_tailonking_ikiss.cpp:196
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_JustDied
void _JustDied()
Definition
ScriptedCreature.cpp:474
BossAI::_Reset
void _Reset()
Definition
ScriptedCreature.cpp:462
BossAI::_EnterCombat
void _EnterCombat()
Definition
ScriptedCreature.cpp:485
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
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
boss_talon_king_ikiss
Definition
boss_tailonking_ikiss.cpp:42
boss_talon_king_ikiss::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_tailonking_ikiss.cpp:190
boss_talon_king_ikiss::boss_talon_king_ikiss
boss_talon_king_ikiss()
Definition
boss_tailonking_ikiss.cpp:44
SPELL_MANA_SHIELD
@ SPELL_MANA_SHIELD
Definition
karazhan.cpp:39
sethekk_halls.h
GetSethekkHallsAI
AI * GetSethekkHallsAI(Creature *creature)
Definition
sethekk_halls.h:33
DATA_TALON_KING_IKISS
@ DATA_TALON_KING_IKISS
Definition
sethekk_halls.h:17
ScriptedAI::IsHeroic
bool IsHeroic() const
Definition
ScriptedCreature.h:279
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::DoTeleportTo
void DoTeleportTo(float x, float y, float z, uint32 time=0)
Definition
ScriptedCreature.cpp:292
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::AttackStart
void AttackStart(Unit *) OVERRIDE
Definition
ScriptedCreature.cpp:118
boss_talon_king_ikiss::boss_talon_king_ikissAI::KilledUnit
void KilledUnit(Unit *who) OVERRIDE
Definition
boss_tailonking_ikiss.cpp:96
boss_talon_king_ikiss::boss_talon_king_ikissAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
boss_tailonking_ikiss.cpp:62
boss_talon_king_ikiss::boss_talon_king_ikissAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_tailonking_ikiss.cpp:90
boss_talon_king_ikiss::boss_talon_king_ikissAI::Blink
bool Blink
Definition
boss_tailonking_ikiss.cpp:186
boss_talon_king_ikiss::boss_talon_king_ikissAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_tailonking_ikiss.cpp:84
boss_talon_king_ikiss::boss_talon_king_ikissAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_tailonking_ikiss.cpp:102
boss_talon_king_ikiss::boss_talon_king_ikissAI::Slow_Timer
uint32 Slow_Timer
Definition
boss_tailonking_ikiss.cpp:183
boss_talon_king_ikiss::boss_talon_king_ikissAI::ManaShield
bool ManaShield
Definition
boss_tailonking_ikiss.cpp:185
boss_talon_king_ikiss::boss_talon_king_ikissAI::Intro
bool Intro
Definition
boss_tailonking_ikiss.cpp:187
boss_talon_king_ikiss::boss_talon_king_ikissAI::ArcaneVolley_Timer
uint32 ArcaneVolley_Timer
Definition
boss_tailonking_ikiss.cpp:180
boss_talon_king_ikiss::boss_talon_king_ikissAI::Blink_Timer
uint32 Blink_Timer
Definition
boss_tailonking_ikiss.cpp:182
boss_talon_king_ikiss::boss_talon_king_ikissAI::boss_talon_king_ikissAI
boss_talon_king_ikissAI(Creature *creature)
Definition
boss_tailonking_ikiss.cpp:48
boss_talon_king_ikiss::boss_talon_king_ikissAI::Sheep_Timer
uint32 Sheep_Timer
Definition
boss_tailonking_ikiss.cpp:181
boss_talon_king_ikiss::boss_talon_king_ikissAI::Reset
void Reset() OVERRIDE
Definition
boss_tailonking_ikiss.cpp:50
H_SPELL_ARCANE_EXPLOSION
@ H_SPELL_ARCANE_EXPLOSION
Definition
violet_hold.cpp:61
src
server
scripts
Outland
Auchindoun
SethekkHalls
boss_tailonking_ikiss.cpp
Generated on
for Project SkyFire Core by
1.17.0