Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_anomalus.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
#include "
nexus.h
"
9
10
enum
Spells
11
{
12
SPELL_SPARK
= 47751,
13
H_SPELL_SPARK
= 57062,
14
SPELL_RIFT_SHIELD
= 47748,
15
SPELL_CHARGE_RIFT
= 47747,
//Works wrong (affect players, not rifts)
16
SPELL_CREATE_RIFT
= 47743,
//Don't work, using WA
17
SPELL_ARCANE_ATTRACTION
= 57063,
//No idea, when it's used
18
};
19
20
enum
Adds
21
{
22
NPC_CRAZED_MANA_WRAITH
= 26746,
23
NPC_CHAOTIC_RIFT
= 26918
24
};
25
26
enum
Yells
27
{
28
SAY_AGGRO
= 0,
29
SAY_DEATH
= 1,
30
SAY_RIFT
= 2,
31
SAY_SHIELD
= 3
32
};
33
34
enum
RiftSpells
35
{
36
SPELL_CHAOTIC_ENERGY_BURST
= 47688,
37
SPELL_CHARGED_CHAOTIC_ENERGY_BURST
= 47737,
38
SPELL_ARCANEFORM
= 48019,
//Chaotic Rift visual
39
};
40
41
Position
const
RiftLocation
[6] =
42
{
43
{ 652.64f, -273.70f, -8.75f, 0.0f },
44
{ 634.45f, -265.94f, -8.44f, 0.0f },
45
{ 620.73f, -281.17f, -9.02f, 0.0f },
46
{ 626.10f, -304.67f, -9.44f, 0.0f },
47
{ 639.87f, -314.11f, -9.49f, 0.0f },
48
{ 651.72f, -297.44f, -9.37f, 0.0f }
49
};
50
51
enum
Misc
52
{
53
DATA_CHAOS_THEORY
= 1
54
};
55
56
class
boss_anomalus
:
public
CreatureScript
57
{
58
public
:
59
boss_anomalus
() :
CreatureScript
(
"boss_anomalus"
) {}
60
61
struct
boss_anomalusAI
:
public
ScriptedAI
62
{
63
boss_anomalusAI
(
Creature
* creature) :
ScriptedAI
(creature)
64
{
65
instance
=
me
->GetInstanceScript();
66
67
Phase
= 0;
68
uiSparkTimer
= 0;
69
uiCreateRiftTimer
= 0;
70
uiChaoticRiftGUID
= 0;
71
chaosTheory
=
false
;
72
}
73
74
void
Reset
()
OVERRIDE
75
{
76
Phase
= 0;
77
uiSparkTimer
= 5000;
78
uiChaoticRiftGUID
= 0;
79
chaosTheory
=
true
;
80
81
if
(
instance
)
82
instance
->SetData(
DATA_ANOMALUS_EVENT
,
NOT_STARTED
);
83
}
84
85
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
86
{
87
Talk
(
SAY_AGGRO
);
88
89
if
(
instance
)
90
instance
->SetData(
DATA_ANOMALUS_EVENT
,
IN_PROGRESS
);
91
}
92
93
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
94
{
95
Talk
(
SAY_DEATH
);
96
97
if
(
instance
)
98
instance
->SetData(
DATA_ANOMALUS_EVENT
,
DONE
);
99
}
100
101
uint32
GetData
(
uint32
type)
const
OVERRIDE
102
{
103
if
(type ==
DATA_CHAOS_THEORY
)
104
return
chaosTheory
? 1 : 0;
105
106
return
0;
107
}
108
109
void
SummonedCreatureDies
(
Creature
* summoned,
Unit
*
/*who*/
)
OVERRIDE
110
{
111
if
(summoned->GetEntry() ==
NPC_CHAOTIC_RIFT
)
112
chaosTheory
=
false
;
113
}
114
115
void
UpdateAI
(
uint32
diff)
OVERRIDE
116
{
117
if
(!
UpdateVictim
())
118
return
;
119
120
if
(
me
->GetDistance(
me
->GetHomePosition()) > 60.0f)
121
{
122
// Not blizzlike, hack to avoid an exploit
123
EnterEvadeMode
();
124
return
;
125
}
126
127
if
(
me
->HasAura(
SPELL_RIFT_SHIELD
))
128
{
129
if
(
uiChaoticRiftGUID
)
130
{
131
Creature
* Rift =
ObjectAccessor::GetCreature
(*
me
,
uiChaoticRiftGUID
);
132
if
(Rift && Rift->
isDead
())
133
{
134
me
->RemoveAurasDueToSpell(
SPELL_RIFT_SHIELD
);
135
uiChaoticRiftGUID
= 0;
136
}
137
return
;
138
}
139
}
140
else
141
uiChaoticRiftGUID
= 0;
142
143
if
((
Phase
== 0) &&
HealthBelowPct
(50))
144
{
145
Phase
= 1;
146
Talk
(
SAY_SHIELD
);
147
DoCast
(
me
,
SPELL_RIFT_SHIELD
);
148
if
(
Creature
* Rift =
me
->SummonCreature(
NPC_CHAOTIC_RIFT
,
RiftLocation
[std::rand() % 5],
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
, 1000))
149
{
150
//DoCast(Rift, SPELL_CHARGE_RIFT);
151
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
152
Rift->AI()->AttackStart(target);
153
uiChaoticRiftGUID
= Rift->GetGUID();
154
Talk
(
SAY_RIFT
);
155
}
156
}
157
158
if
(
uiSparkTimer
<= diff)
159
{
160
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
161
DoCast
(target,
SPELL_SPARK
);
162
uiSparkTimer
= 5000;
163
}
164
else
165
uiSparkTimer
-= diff;
166
167
DoMeleeAttackIfReady
();
168
}
169
170
private
:
171
InstanceScript
*
instance
;
172
173
uint8
Phase
;
174
uint32
uiSparkTimer
;
175
uint32
uiCreateRiftTimer
;
176
uint64
uiChaoticRiftGUID
;
177
bool
chaosTheory
;
178
};
179
180
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
181
{
182
return
new
boss_anomalusAI
(creature);
183
}
184
};
185
186
class
npc_chaotic_rift
:
public
CreatureScript
187
{
188
public
:
189
npc_chaotic_rift
() :
CreatureScript
(
"npc_chaotic_rift"
) {}
190
191
struct
npc_chaotic_riftAI
:
public
ScriptedAI
192
{
193
npc_chaotic_riftAI
(
Creature
* creature) :
ScriptedAI
(creature)
194
{
195
instance
=
me
->GetInstanceScript();
196
SetCombatMovement
(
false
);
197
uiChaoticEnergyBurstTimer
= 0;
198
uiSummonCrazedManaWraithTimer
= 0;
199
}
200
201
void
Reset
()
OVERRIDE
202
{
203
uiChaoticEnergyBurstTimer
= 1000;
204
uiSummonCrazedManaWraithTimer
= 5000;
205
me
->SetDisplayId(
me
->GetCreatureTemplate()->Modelid2);
206
DoCast
(
me
,
SPELL_ARCANEFORM
,
false
);
207
}
208
209
void
UpdateAI
(
uint32
diff)
OVERRIDE
210
{
211
if
(!
UpdateVictim
())
212
return
;
213
214
if
(
uiChaoticEnergyBurstTimer
<= diff)
215
{
216
Creature
* Anomalus =
ObjectAccessor::GetCreature
(*
me
,
instance
->GetData64(
DATA_ANOMALUS
));
217
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
218
{
219
if
(Anomalus && Anomalus->
HasAura
(
SPELL_RIFT_SHIELD
))
220
DoCast
(target,
SPELL_CHARGED_CHAOTIC_ENERGY_BURST
);
221
else
222
DoCast
(target,
SPELL_CHAOTIC_ENERGY_BURST
);
223
}
224
uiChaoticEnergyBurstTimer
= 1000;
225
}
226
else
227
uiChaoticEnergyBurstTimer
-= diff;
228
229
if
(
uiSummonCrazedManaWraithTimer
<= diff)
230
{
231
if
(
Creature
* Wraith =
me
->SummonCreature(
NPC_CRAZED_MANA_WRAITH
,
me
->GetPositionX() + 1,
me
->GetPositionY() + 1,
me
->GetPositionZ(), 0,
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
, 1000))
232
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
233
Wraith->AI()->AttackStart(target);
234
Creature
* Anomalus =
ObjectAccessor::GetCreature
(*
me
,
instance
->GetData64(
DATA_ANOMALUS
));
235
if
(Anomalus && Anomalus->
HasAura
(
SPELL_RIFT_SHIELD
))
236
uiSummonCrazedManaWraithTimer
= 5000;
237
else
238
uiSummonCrazedManaWraithTimer
= 10000;
239
}
240
else
241
uiSummonCrazedManaWraithTimer
-= diff;
242
}
243
private
:
244
InstanceScript
*
instance
;
245
246
uint32
uiChaoticEnergyBurstTimer
;
247
uint32
uiSummonCrazedManaWraithTimer
;
248
};
249
250
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
251
{
252
return
new
npc_chaotic_riftAI
(creature);
253
}
254
};
255
256
class
achievement_chaos_theory
:
public
AchievementCriteriaScript
257
{
258
public
:
259
achievement_chaos_theory
() :
AchievementCriteriaScript
(
"achievement_chaos_theory"
) { }
260
261
bool
OnCheck
(
Player
*
/*player*/
,
Unit
* target)
OVERRIDE
262
{
263
if
(!target)
264
return
false
;
265
266
if
(
Creature
* Anomalus = target->
ToCreature
())
267
if
(Anomalus->AI()->GetData(
DATA_CHAOS_THEORY
))
268
return
true
;
269
270
return
false
;
271
}
272
};
273
274
void
AddSC_boss_anomalus
()
275
{
276
new
boss_anomalus
();
277
new
npc_chaotic_rift
();
278
new
achievement_chaos_theory
();
279
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint8
std::uint8_t uint8
Definition
Define.h:79
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
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition
Object.h:71
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
NPC_CRAZED_MANA_WRAITH
@ NPC_CRAZED_MANA_WRAITH
Definition
boss_anomalus.cpp:22
NPC_CHAOTIC_RIFT
@ NPC_CHAOTIC_RIFT
Definition
boss_anomalus.cpp:23
DATA_CHAOS_THEORY
@ DATA_CHAOS_THEORY
Definition
boss_anomalus.cpp:53
SAY_DEATH
@ SAY_DEATH
Definition
boss_anomalus.cpp:29
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_anomalus.cpp:28
SAY_SHIELD
@ SAY_SHIELD
Definition
boss_anomalus.cpp:31
SAY_RIFT
@ SAY_RIFT
Definition
boss_anomalus.cpp:30
AddSC_boss_anomalus
void AddSC_boss_anomalus()
Definition
boss_anomalus.cpp:274
SPELL_SPARK
@ SPELL_SPARK
Definition
boss_anomalus.cpp:12
SPELL_CHARGE_RIFT
@ SPELL_CHARGE_RIFT
Definition
boss_anomalus.cpp:15
SPELL_RIFT_SHIELD
@ SPELL_RIFT_SHIELD
Definition
boss_anomalus.cpp:14
H_SPELL_SPARK
@ H_SPELL_SPARK
Definition
boss_anomalus.cpp:13
SPELL_ARCANE_ATTRACTION
@ SPELL_ARCANE_ATTRACTION
Definition
boss_anomalus.cpp:17
SPELL_CREATE_RIFT
@ SPELL_CREATE_RIFT
Definition
boss_anomalus.cpp:16
RiftLocation
Position const RiftLocation[6]
Definition
boss_anomalus.cpp:41
RiftSpells
RiftSpells
Definition
boss_anomalus.cpp:35
SPELL_CHARGED_CHAOTIC_ENERGY_BURST
@ SPELL_CHARGED_CHAOTIC_ENERGY_BURST
Definition
boss_anomalus.cpp:37
SPELL_CHAOTIC_ENERGY_BURST
@ SPELL_CHAOTIC_ENERGY_BURST
Definition
boss_anomalus.cpp:36
SPELL_ARCANEFORM
@ SPELL_ARCANEFORM
Definition
boss_anomalus.cpp:38
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
Misc
Misc
Definition
boss_occuthar.cpp:37
Adds
Adds
Definition
boss_overlord_wyrmthalak.cpp:27
SAY_SHIELD
@ SAY_SHIELD
Definition
boss_temple_guardian_anhuur.cpp:18
AchievementCriteriaScript::AchievementCriteriaScript
AchievementCriteriaScript(const char *name)
Definition
ScriptMgr.cpp:1508
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
InstanceScript
Definition
InstanceScript.h:123
ObjectAccessor::GetCreature
static Creature * GetCreature(WorldObject const &u, uint64 guid)
Definition
ObjectAccessor.cpp:209
Object::ToCreature
Creature * ToCreature()
Definition
Object.h:207
Player
Definition
Player.h:1289
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::HasAura
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
Definition
UnitAuraState.cpp:1182
Unit::isDead
bool isDead() const
Definition
Unit.h:2040
achievement_chaos_theory
Definition
boss_anomalus.cpp:257
achievement_chaos_theory::achievement_chaos_theory
achievement_chaos_theory()
Definition
boss_anomalus.cpp:259
achievement_chaos_theory::OnCheck
bool OnCheck(Player *, Unit *target) OVERRIDE
Definition
boss_anomalus.cpp:261
boss_anomalus
Definition
boss_anomalus.cpp:57
boss_anomalus::boss_anomalus
boss_anomalus()
Definition
boss_anomalus.cpp:59
boss_anomalus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_anomalus.cpp:180
npc_chaotic_rift
Definition
boss_anomalus.cpp:187
npc_chaotic_rift::npc_chaotic_rift
npc_chaotic_rift()
Definition
boss_anomalus.cpp:189
npc_chaotic_rift::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_anomalus.cpp:250
nexus.h
DATA_ANOMALUS_EVENT
@ DATA_ANOMALUS_EVENT
Definition
nexus.h:12
DATA_ANOMALUS
@ DATA_ANOMALUS
Definition
nexus.h:16
Position
Definition
Object.h:274
ScriptedAI::SetCombatMovement
void SetCombatMovement(bool allowMovement)
Definition
ScriptedCreature.cpp:394
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
boss_anomalus::boss_anomalusAI
Definition
boss_anomalus.cpp:62
boss_anomalus::boss_anomalusAI::boss_anomalusAI
boss_anomalusAI(Creature *creature)
Definition
boss_anomalus.cpp:63
boss_anomalus::boss_anomalusAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_anomalus.cpp:93
boss_anomalus::boss_anomalusAI::chaosTheory
bool chaosTheory
Definition
boss_anomalus.cpp:177
boss_anomalus::boss_anomalusAI::uiChaoticRiftGUID
uint64 uiChaoticRiftGUID
Definition
boss_anomalus.cpp:176
boss_anomalus::boss_anomalusAI::GetData
uint32 GetData(uint32 type) const OVERRIDE
Definition
boss_anomalus.cpp:101
boss_anomalus::boss_anomalusAI::Reset
void Reset() OVERRIDE
Definition
boss_anomalus.cpp:74
boss_anomalus::boss_anomalusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_anomalus.cpp:115
boss_anomalus::boss_anomalusAI::uiCreateRiftTimer
uint32 uiCreateRiftTimer
Definition
boss_anomalus.cpp:175
boss_anomalus::boss_anomalusAI::SummonedCreatureDies
void SummonedCreatureDies(Creature *summoned, Unit *) OVERRIDE
Definition
boss_anomalus.cpp:109
boss_anomalus::boss_anomalusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_anomalus.cpp:85
boss_anomalus::boss_anomalusAI::uiSparkTimer
uint32 uiSparkTimer
Definition
boss_anomalus.cpp:174
boss_anomalus::boss_anomalusAI::Phase
uint8 Phase
Definition
boss_anomalus.cpp:173
boss_anomalus::boss_anomalusAI::instance
InstanceScript * instance
Definition
boss_anomalus.cpp:171
npc_chaotic_rift::npc_chaotic_riftAI
Definition
boss_anomalus.cpp:192
npc_chaotic_rift::npc_chaotic_riftAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_anomalus.cpp:209
npc_chaotic_rift::npc_chaotic_riftAI::npc_chaotic_riftAI
npc_chaotic_riftAI(Creature *creature)
Definition
boss_anomalus.cpp:193
npc_chaotic_rift::npc_chaotic_riftAI::uiSummonCrazedManaWraithTimer
uint32 uiSummonCrazedManaWraithTimer
Definition
boss_anomalus.cpp:247
npc_chaotic_rift::npc_chaotic_riftAI::Reset
void Reset() OVERRIDE
Definition
boss_anomalus.cpp:201
npc_chaotic_rift::npc_chaotic_riftAI::instance
InstanceScript * instance
Definition
boss_anomalus.cpp:244
npc_chaotic_rift::npc_chaotic_riftAI::uiChaoticEnergyBurstTimer
uint32 uiChaoticEnergyBurstTimer
Definition
boss_anomalus.cpp:246
src
server
scripts
Northrend
Nexus
Nexus
boss_anomalus.cpp
Generated on
for Project SkyFire Core by
1.17.0