Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_anubrekhan.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 "
naxxramas.h
"
9
10
enum
Says
11
{
12
SAY_AGGRO
= 0,
13
SAY_GREET
= 1,
14
SAY_SLAY
= 2
15
};
16
17
Position
const
GuardSummonPos
= {3333.72f, -3476.30f, 287.1f, 6.2801f};
18
19
enum
Events
20
{
21
EVENT_IMPALE
= 1,
22
EVENT_LOCUST
,
23
EVENT_SPAWN_GUARDIAN_NORMAL
,
24
EVENT_BERSERK
25
};
26
27
enum
Spells
28
{
29
SPELL_IMPALE_10
= 28783,
30
SPELL_IMPALE_25
= 56090,
31
SPELL_LOCUST_SWARM_10
= 28785,
32
SPELL_LOCUST_SWARM_25
= 54021,
33
SPELL_SUMMON_CORPSE_SCARABS_PLR
= 29105,
// This spawns 5 corpse scarabs on top of player
34
SPELL_SUMMON_CORPSE_SCARABS_MOB
= 28864,
// This spawns 10 corpse scarabs on top of dead guards
35
SPELL_BERSERK
= 27680
36
};
37
38
enum
Misc
39
{
40
ACHIEV_TIMED_START_EVENT
= 9891
41
};
42
43
class
boss_anubrekhan
:
public
CreatureScript
44
{
45
public
:
46
boss_anubrekhan
() :
CreatureScript
(
"boss_anubrekhan"
) { }
47
48
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
49
{
50
return
new
boss_anubrekhanAI
(creature);
51
}
52
53
struct
boss_anubrekhanAI
:
public
BossAI
54
{
55
boss_anubrekhanAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_ANUBREKHAN
) { }
56
57
bool
hasTaunted
;
58
59
void
Reset
()
OVERRIDE
60
{
61
_Reset
();
62
63
hasTaunted
=
false
;
64
65
if
(
GetDifficulty
() ==
DIFFICULTY_25MAN_NORMAL
)
66
{
67
Position
pos;
68
69
// respawn guard using home position,
70
// otherwise, after a wipe, they respawn where boss was at wipe moment.
71
pos =
me
->GetHomePosition();
72
pos.
m_positionY
-= 10.0f;
73
me
->SummonCreature(
NPC_CRYPT_GUARD
, pos,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
);
74
75
pos =
me
->GetHomePosition();
76
pos.
m_positionY
+= 10.0f;
77
me
->SummonCreature(
NPC_CRYPT_GUARD
, pos,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
);
78
}
79
}
80
81
void
KilledUnit
(
Unit
* victim)
OVERRIDE
82
{
84
if
(!(rand()%5))
85
if
(victim->GetTypeId() ==
TypeID::TYPEID_PLAYER
)
86
victim->CastSpell(victim,
SPELL_SUMMON_CORPSE_SCARABS_PLR
,
true
, NULL, NULL,
me
->GetGUID());
87
88
Talk
(
SAY_SLAY
);
89
}
90
91
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
92
{
93
_JustDied
();
94
95
// start achievement timer (kill Maexna within 20 min)
96
if
(
instance
)
97
instance
->DoStartTimedAchievement(
ACHIEVEMENT_TIMED_TYPE_EVENT
,
ACHIEV_TIMED_START_EVENT
);
98
}
99
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
100
{
101
_EnterCombat
();
102
Talk
(
SAY_AGGRO
);
103
events
.ScheduleEvent(
EVENT_IMPALE
, std::rand() % 20000 + 10000);
104
events
.ScheduleEvent(
EVENT_LOCUST
, 90000);
105
events
.ScheduleEvent(
EVENT_BERSERK
, 600000);
106
107
if
(
GetDifficulty
() ==
DIFFICULTY_10MAN_NORMAL
)
108
events
.ScheduleEvent(
EVENT_SPAWN_GUARDIAN_NORMAL
, std::rand() % 20000 + 15000);
109
}
110
111
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
112
113
{
114
if
(!
hasTaunted
&&
me
->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() ==
TypeID::TYPEID_PLAYER
)
115
{
116
Talk
(
SAY_GREET
);
117
hasTaunted
=
true
;
118
}
119
ScriptedAI::MoveInLineOfSight
(who);
120
}
121
122
void
SummonedCreatureDespawn
(
Creature
* summon)
OVERRIDE
123
{
124
BossAI::SummonedCreatureDespawn
(summon);
125
126
// check if it is an actual killed guard
127
if
(!
me
->IsAlive() || summon->IsAlive() || summon->GetEntry() !=
NPC_CRYPT_GUARD
)
128
return
;
129
130
summon->CastSpell(summon,
SPELL_SUMMON_CORPSE_SCARABS_MOB
,
true
, NULL, NULL,
me
->GetGUID());
131
}
132
133
void
UpdateAI
(
uint32
diff)
OVERRIDE
134
{
135
if
(!
UpdateVictim
() || !
CheckInRoom
())
136
return
;
137
138
events
.Update(diff);
139
140
while
(
uint32
eventId =
events
.ExecuteEvent())
141
{
142
switch
(eventId)
143
{
144
case
EVENT_IMPALE
:
145
//Cast Impale on a random target
146
//Do NOT cast it when we are afflicted by locust swarm
147
if
(!
me
->HasAura(
RAID_MODE
(
SPELL_LOCUST_SWARM_10
,
SPELL_LOCUST_SWARM_25
)))
148
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
149
DoCast
(target,
RAID_MODE
(
SPELL_IMPALE_10
,
SPELL_IMPALE_25
));
150
events
.ScheduleEvent(
EVENT_IMPALE
, std::rand() % 20000 + 10000);
151
break
;
152
case
EVENT_LOCUST
:
154
DoCast
(
me
,
RAID_MODE
(
SPELL_LOCUST_SWARM_10
,
SPELL_LOCUST_SWARM_25
));
155
DoSummon
(
NPC_CRYPT_GUARD
,
GuardSummonPos
, 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
);
156
events
.ScheduleEvent(
EVENT_LOCUST
, 90000);
157
break
;
158
case
EVENT_SPAWN_GUARDIAN_NORMAL
:
160
DoSummon
(
NPC_CRYPT_GUARD
,
GuardSummonPos
, 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
);
161
break
;
162
case
EVENT_BERSERK
:
163
DoCast
(
me
,
SPELL_BERSERK
,
true
);
164
events
.ScheduleEvent(
EVENT_BERSERK
, 600000);
165
break
;
166
}
167
}
168
DoMeleeAttackIfReady
();
169
}
170
};
171
};
172
173
void
AddSC_boss_anubrekhan
()
174
{
175
new
boss_anubrekhan
();
176
}
Spells
Spells
Definition
BattlegroundIC.h:645
ACHIEVEMENT_TIMED_TYPE_EVENT
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition
DBCEnums.h:158
DIFFICULTY_25MAN_NORMAL
@ DIFFICULTY_25MAN_NORMAL
Definition
DBCEnums.h:335
DIFFICULTY_10MAN_NORMAL
@ DIFFICULTY_10MAN_NORMAL
Definition
DBCEnums.h:334
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
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
Definition
Object.h:72
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Events
Events
Definition
alterac_valley.cpp:40
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_anubrekhan.cpp:12
SAY_GREET
@ SAY_GREET
Definition
boss_anubrekhan.cpp:13
SAY_SLAY
@ SAY_SLAY
Definition
boss_anubrekhan.cpp:14
AddSC_boss_anubrekhan
void AddSC_boss_anubrekhan()
Definition
boss_anubrekhan.cpp:173
GuardSummonPos
Position const GuardSummonPos
Definition
boss_anubrekhan.cpp:17
ACHIEV_TIMED_START_EVENT
@ ACHIEV_TIMED_START_EVENT
Definition
boss_anubrekhan.cpp:40
SPELL_SUMMON_CORPSE_SCARABS_MOB
@ SPELL_SUMMON_CORPSE_SCARABS_MOB
Definition
boss_anubrekhan.cpp:34
SPELL_SUMMON_CORPSE_SCARABS_PLR
@ SPELL_SUMMON_CORPSE_SCARABS_PLR
Definition
boss_anubrekhan.cpp:33
SPELL_LOCUST_SWARM_25
@ SPELL_LOCUST_SWARM_25
Definition
boss_anubrekhan.cpp:32
SPELL_IMPALE_10
@ SPELL_IMPALE_10
Definition
boss_anubrekhan.cpp:29
SPELL_IMPALE_25
@ SPELL_IMPALE_25
Definition
boss_anubrekhan.cpp:30
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_anubrekhan.cpp:35
SPELL_LOCUST_SWARM_10
@ SPELL_LOCUST_SWARM_10
Definition
boss_anubrekhan.cpp:31
EVENT_LOCUST
@ EVENT_LOCUST
Definition
boss_anubrekhan.cpp:22
EVENT_SPAWN_GUARDIAN_NORMAL
@ EVENT_SPAWN_GUARDIAN_NORMAL
Definition
boss_anubrekhan.cpp:23
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_anubrekhan.cpp:24
EVENT_IMPALE
@ EVENT_IMPALE
Definition
boss_anubrekhan.cpp:21
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
Says
Says
Definition
boss_halycon.cpp:17
EVENT_IMPALE
@ EVENT_IMPALE
Definition
boss_northrend_beasts.cpp:104
Misc
Misc
Definition
boss_occuthar.cpp:37
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_occuthar.cpp:31
BossAI::instance
InstanceScript *const instance
Definition
ScriptedCreature.h:383
BossAI::SummonedCreatureDespawn
void SummonedCreatureDespawn(Creature *summon) OVERRIDE
Definition
ScriptedCreature.cpp:569
BossAI::CheckInRoom
bool CheckInRoom()
Definition
ScriptedCreature.h:427
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
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::MoveInLineOfSight
virtual void MoveInLineOfSight(Unit *)
Definition
CreatureAI.cpp:114
CreatureAI::DoSummon
Creature * DoSummon(uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN)
Definition
CreatureAI.cpp:235
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_anubrekhan
Definition
boss_anubrekhan.cpp:44
boss_anubrekhan::boss_anubrekhan
boss_anubrekhan()
Definition
boss_anubrekhan.cpp:46
boss_anubrekhan::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_anubrekhan.cpp:48
naxxramas.h
NPC_CRYPT_GUARD
@ NPC_CRYPT_GUARD
Definition
naxxramas.h:75
BOSS_ANUBREKHAN
@ BOSS_ANUBREKHAN
Definition
naxxramas.h:13
ACHIEV_TIMED_START_EVENT
@ ACHIEV_TIMED_START_EVENT
Definition
onyxias_lair.h:55
Position
Definition
Object.h:274
Position::m_positionY
float m_positionY
Definition
Object.h:288
ScriptedAI::GetDifficulty
DifficultyID GetDifficulty() const
Definition
ScriptedCreature.h:285
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::RAID_MODE
const T & RAID_MODE(const T &normal10, const T &normal25) const
Definition
ScriptedCreature.h:310
boss_anubrekhan::boss_anubrekhanAI
Definition
boss_anubrekhan.cpp:54
boss_anubrekhan::boss_anubrekhanAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_anubrekhan.cpp:99
boss_anubrekhan::boss_anubrekhanAI::boss_anubrekhanAI
boss_anubrekhanAI(Creature *creature)
Definition
boss_anubrekhan.cpp:55
boss_anubrekhan::boss_anubrekhanAI::KilledUnit
void KilledUnit(Unit *victim) OVERRIDE
Definition
boss_anubrekhan.cpp:81
boss_anubrekhan::boss_anubrekhanAI::Reset
void Reset() OVERRIDE
Definition
boss_anubrekhan.cpp:59
boss_anubrekhan::boss_anubrekhanAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_anubrekhan.cpp:133
boss_anubrekhan::boss_anubrekhanAI::hasTaunted
bool hasTaunted
Definition
boss_anubrekhan.cpp:57
boss_anubrekhan::boss_anubrekhanAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
boss_anubrekhan.cpp:111
boss_anubrekhan::boss_anubrekhanAI::SummonedCreatureDespawn
void SummonedCreatureDespawn(Creature *summon) OVERRIDE
Definition
boss_anubrekhan.cpp:122
boss_anubrekhan::boss_anubrekhanAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_anubrekhan.cpp:91
src
server
scripts
Northrend
Naxxramas
boss_anubrekhan.cpp
Generated on
for Project SkyFire Core by
1.17.0