Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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
10enum Says
11{
15};
16
17Position const GuardSummonPos = {3333.72f, -3476.30f, 287.1f, 6.2801f};
18
26
28{
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
36};
37
38enum Misc
39{
41};
42
44{
45public:
46 boss_anubrekhan() : CreatureScript("boss_anubrekhan") { }
47
49 {
50 return new boss_anubrekhanAI(creature);
51 }
52
53 struct boss_anubrekhanAI : public BossAI
54 {
56
58
60 {
61 _Reset();
62
63 hasTaunted = false;
64
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;
74
75 pos = me->GetHomePosition();
76 pos.m_positionY += 10.0f;
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
89 }
90
91 void JustDied(Unit* /*killer*/) OVERRIDE
92 {
93 _JustDied();
94
95 // start achievement timer (kill Maexna within 20 min)
96 if (instance)
98 }
99 void EnterCombat(Unit* /*who*/) OVERRIDE
100 {
101 _EnterCombat();
103 events.ScheduleEvent(EVENT_IMPALE, std::rand() % 20000 + 10000);
104 events.ScheduleEvent(EVENT_LOCUST, 90000);
105 events.ScheduleEvent(EVENT_BERSERK, 600000);
106
108 events.ScheduleEvent(EVENT_SPAWN_GUARDIAN_NORMAL, std::rand() % 20000 + 15000);
109 }
110
112
113 {
114 if (!hasTaunted && me->IsWithinDistInMap(who, 60.0f) && who->GetTypeId() == TypeID::TYPEID_PLAYER)
115 {
117 hasTaunted = true;
118 }
120 }
121
123 {
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
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
148 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
150 events.ScheduleEvent(EVENT_IMPALE, std::rand() % 20000 + 10000);
151 break;
152 case EVENT_LOCUST:
156 events.ScheduleEvent(EVENT_LOCUST, 90000);
157 break;
161 break;
162 case EVENT_BERSERK:
163 DoCast(me, SPELL_BERSERK, true);
164 events.ScheduleEvent(EVENT_BERSERK, 600000);
165 break;
166 }
167 }
169 }
170 };
171};
172
174{
175 new boss_anubrekhan();
176}
@ ACHIEVEMENT_TIMED_TYPE_EVENT
Definition DBCEnums.h:158
@ DIFFICULTY_25MAN_NORMAL
Definition DBCEnums.h:335
@ DIFFICULTY_10MAN_NORMAL
Definition DBCEnums.h:334
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ TYPEID_PLAYER
Definition Object.h:55
@ TEMPSUMMON_CORPSE_DESPAWN
Definition Object.h:72
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ SAY_SLAY
@ SAY_AGGRO
@ SAY_GREET
@ SAY_SLAY
void AddSC_boss_anubrekhan()
Position const GuardSummonPos
@ ACHIEV_TIMED_START_EVENT
@ SPELL_SUMMON_CORPSE_SCARABS_MOB
@ SPELL_SUMMON_CORPSE_SCARABS_PLR
@ SPELL_LOCUST_SWARM_25
@ SPELL_IMPALE_10
@ SPELL_IMPALE_25
@ SPELL_BERSERK
@ SPELL_LOCUST_SWARM_10
@ EVENT_LOCUST
@ EVENT_SPAWN_GUARDIAN_NORMAL
@ EVENT_BERSERK
@ EVENT_IMPALE
#define SAY_AGGRO
#define SPELL_BERSERK
@ EVENT_BERSERK
InstanceScript *const instance
void SummonedCreatureDespawn(Creature *summon) OVERRIDE
bool CheckInRoom()
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
virtual void MoveInLineOfSight(Unit *)
Creature * DoSummon(uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
@ NPC_CRYPT_GUARD
Definition naxxramas.h:75
@ BOSS_ANUBREKHAN
Definition naxxramas.h:13
@ ACHIEV_TIMED_START_EVENT
float m_positionY
Definition Object.h:288
DifficultyID GetDifficulty() const
Creature * me
const T & RAID_MODE(const T &normal10, const T &normal25) const
void KilledUnit(Unit *victim) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void MoveInLineOfSight(Unit *who) OVERRIDE
void SummonedCreatureDespawn(Creature *summon) OVERRIDE