summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp132
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp21
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h1
3 files changed, 38 insertions, 116 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
index 57edeb32ff..f89542bba6 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
@@ -44,14 +44,6 @@ enum Spells
SPELL_BERSERK = 26662
};
-enum Events
-{
- EVENT_IMPALE = 1,
- EVENT_LOCUST_SWARM = 2,
- EVENT_BERSERK = 3,
- EVENT_SPAWN_GUARD = 4
-};
-
enum Misc
{
NPC_CORPSE_SCARAB = 16698,
@@ -72,17 +64,11 @@ public:
struct boss_anubrekhanAI : public BossAI
{
- explicit boss_anubrekhanAI(Creature* c) : BossAI(c, BOSS_ANUB), summons(me)
+ boss_anubrekhanAI(Creature* c) : BossAI(c, BOSS_ANUB)
{
- pInstance = c->GetInstanceScript();
sayGreet = false;
}
- InstanceScript* pInstance;
- EventMap events;
- SummonList summons;
- bool sayGreet;
-
void SummonCryptGuards()
{
if (Is25ManRaid())
@@ -95,16 +81,8 @@ public:
void Reset() override
{
BossAI::Reset();
- events.Reset();
- summons.DespawnAll();
SummonCryptGuards();
- if (pInstance)
- {
- if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_ANUB_GATE)))
- {
- go->SetGoState(GO_STATE_ACTIVE);
- }
- }
+ me->m_Events.KillAllEvents(false);
}
void JustSummoned(Creature* cr) override
@@ -113,9 +91,7 @@ public:
{
cr->SetInCombatWithZone();
if (cr->GetEntry() == NPC_CRYPT_GUARD)
- {
cr->AI()->Talk(EMOTE_SPAWN, me);
- }
}
summons.Summon(cr);
}
@@ -129,19 +105,10 @@ public:
}
}
- void SummonedCreatureDespawn(Creature* cr) override
- {
- summons.Despawn(cr);
- }
-
void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
- summons.DespawnAll();
- if (pInstance)
- {
- pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
- }
+ instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
}
void KilledUnit(Unit* victim) override
@@ -151,10 +118,7 @@ public:
Talk(SAY_SLAY);
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID());
- if (pInstance)
- {
- pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
- }
+ instance->SetData(DATA_IMMORTAL_FAIL, 0);
}
void JustEngagedWith(Unit* who) override
@@ -162,24 +126,36 @@ public:
BossAI::JustEngagedWith(who);
me->CallForHelp(30.0f);
Talk(SAY_AGGRO);
- if (pInstance)
- {
- if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_ANUB_GATE)))
- {
- go->SetGoState(GO_STATE_READY);
- }
- }
- events.ScheduleEvent(EVENT_IMPALE, 15s);
- events.ScheduleEvent(EVENT_LOCUST_SWARM, 70s, 120s);
- events.ScheduleEvent(EVENT_BERSERK, 10min);
+
if (!summons.HasEntry(NPC_CRYPT_GUARD))
- {
SummonCryptGuards();
- }
if (!Is25ManRaid())
{
- events.ScheduleEvent(EVENT_SPAWN_GUARD, 15s, 20s);
+ me->m_Events.AddEventAtOffset([&]
+ {
+ me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
+ }, Milliseconds(urand(15000, 20000)));
}
+
+ ScheduleTimedEvent(15s, [&] {
+ DoCastRandomTarget(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
+ }, 20s);
+
+ ScheduleTimedEvent(70s, 2min, [&] {
+ Talk(EMOTE_LOCUST);
+ DoCastSelf(RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25));
+
+ me->m_Events.AddEventAtOffset([&]
+ {
+ me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
+ }, 3s);
+
+ }, 90s);
+
+ me->m_Events.AddEventAtOffset([&]
+ {
+ DoCastSelf(SPELL_BERSERK, true);
+ }, 10min);
}
void MoveInLineOfSight(Unit* who) override
@@ -192,54 +168,8 @@ public:
ScriptedAI::MoveInLineOfSight(who);
}
- void UpdateAI(uint32 diff) override
- {
- if (!me->IsInCombat() && sayGreet)
- {
- for (SummonList::iterator itr = summons.begin(); itr != summons.end(); ++itr)
- {
- if (pInstance)
- {
- if (Creature* cr = pInstance->instance->GetCreature(*itr))
- {
- if (cr->IsInCombat())
- DoZoneInCombat();
- }
- }
- }
- }
-
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- switch (events.ExecuteEvent())
- {
- case EVENT_IMPALE:
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
- {
- me->CastSpell(target, RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25), false);
- }
- events.Repeat(20s);
- break;
- case EVENT_LOCUST_SWARM:
- Talk(EMOTE_LOCUST);
- me->CastSpell(me, RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25), false);
- events.ScheduleEvent(EVENT_SPAWN_GUARD, 3s);
- events.Repeat(90s);
- break;
- case EVENT_SPAWN_GUARD:
- me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
- break;
- case EVENT_BERSERK:
- me->CastSpell(me, SPELL_BERSERK, true);
- break;
- }
- DoMeleeAttackIfReady();
- }
+ private:
+ bool sayGreet;
};
};
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 3709a766b1..9a959dfa72 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -52,6 +52,12 @@ inline uint8 GetEruptionSection(float x, float y)
return 3;
}
+DoorData const doorData[] =
+{
+ { GO_ANUB_GATE, BOSS_ANUB, DOOR_TYPE_ROOM },
+ { 0, 0, DOOR_TYPE_ROOM },
+};
+
ObjectData const creatureData[] =
{
{ NPC_RAZUVIOUS, DATA_RAZUVIOUS },
@@ -79,6 +85,7 @@ public:
{
SetHeaders(DataHeader);
SetBossNumber(MAX_ENCOUNTERS);
+ LoadDoorData(doorData);
LoadObjectData(creatureData, gameObjectData);
for (auto& i : HeiganEruption)
i.clear();
@@ -115,7 +122,6 @@ public:
ObjectGuid _heiganGateGUID;
ObjectGuid _heiganGateExitGUID;
ObjectGuid _loathebGateGUID;
- ObjectGuid _anubGateGUID;
ObjectGuid _anubNextGateGUID;
ObjectGuid _faerlinaWebGUID;
ObjectGuid _faerlinaGateGUID;
@@ -328,13 +334,6 @@ public:
pGo->SetGoState(GO_STATE_ACTIVE);
}
break;
- case GO_ANUB_GATE:
- _anubGateGUID = pGo->GetGUID();
- if (GetBossState(BOSS_ANUB) == DONE)
- {
- pGo->SetGoState(GO_STATE_ACTIVE);
- }
- break;
case GO_ANUB_NEXT_GATE:
_anubNextGateGUID = pGo->GetGUID();
if (GetBossState(BOSS_ANUB) == DONE)
@@ -880,10 +879,6 @@ public:
events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6s);
break;
case BOSS_ANUB:
- if (GameObject* go = instance->GetGameObject(_anubGateGUID))
- {
- go->SetGoState(GO_STATE_ACTIVE);
- }
if (GameObject* go = instance->GetGameObject(_anubNextGateGUID))
{
go->SetGoState(GO_STATE_ACTIVE);
@@ -1074,8 +1069,6 @@ public:
return _heiganGateGUID;
case DATA_LOATHEB_GATE:
return _loathebGateGUID;
- case DATA_ANUB_GATE:
- return _anubGateGUID;
case DATA_FAERLINA_WEB:
return _faerlinaWebGUID;
case DATA_MAEXXNA_GATE:
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 8485d7e404..1b90d2b1dc 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -50,7 +50,6 @@ enum NXData
DATA_HEIGAN_ERUPTION = 101,
DATA_HEIGAN_ENTER_GATE = 102,
DATA_LOATHEB_GATE = 103,
- DATA_ANUB_GATE = 104,
DATA_FAERLINA_WEB = 105,
DATA_MAEXXNA_GATE = 106,
DATA_THADDIUS_BOSS = 107,