diff options
| author | Dan <83884799+elthehablo@users.noreply.github.com> | 2026-01-10 15:45:57 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-10 11:45:57 -0300 |
| commit | beae2ba6d6f7c09940ea14e508a88c21b4c81fb9 (patch) | |
| tree | 85e3b68b4748a976f2bd7d4ac4c88fcefad0acd8 | |
| parent | 226591a02e3f9c4c18007776a3b31d20906ba7a3 (diff) | |
Co-authored-by: sogladev <sogladev@gmail.com>
| -rw-r--r-- | src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp | 187 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/Naxxramas/naxxramas.h | 3 |
2 files changed, 89 insertions, 101 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index a312ea1d71..18fe7a7725 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -37,141 +37,126 @@ enum Spells { SPELL_IMPALE = 28783, SPELL_LOCUST_SWARM = 28785, - SPELL_SUMMON_CORPSE_SCRABS_5 = 29105, - SPELL_SUMMON_CORPSE_SCRABS_10 = 28864, + SPELL_SUMMON_CORPSE_SCARABS_5 = 29105, + SPELL_SUMMON_CORPSE_SCARABS_10 = 28864, SPELL_BERSERK = 26662 }; enum Misc { - NPC_CORPSE_SCARAB = 16698, - NPC_CRYPT_GUARD = 16573, + ACHIEV_TIMED_START_EVENT = 9891, + EVENT_SPAWN_CRYPT_GUARDS_1 = 0, + EVENT_BERSERK = 1, + EVENT_SPAWN_CRYPT_GUARDS_EXTRA = 2, +}; - ACHIEV_TIMED_START_EVENT = 9891 +Position const cryptguardPositions[] = { + { 3299.732f, -3502.489f, 287.077f, 2.378f }, + { 3299.086f, -3450.929f, 287.077f, 3.999f }, + { 3331.217f, -3476.607f, 287.074f, 3.269f } }; -class boss_anubrekhan : public CreatureScript +struct boss_anubrekhan : public BossAI { -public: - boss_anubrekhan() : CreatureScript("boss_anubrekhan") { } + boss_anubrekhan(Creature* creature) : BossAI(creature, BOSS_ANUB) { } - CreatureAI* GetAI(Creature* pCreature) const override + void SummonCryptGuards() { - return GetNaxxramasAI<boss_anubrekhanAI>(pCreature); + if (Is25ManRaid()) + { + me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); + me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); + } } - struct boss_anubrekhanAI : public BossAI + void Reset() override { - boss_anubrekhanAI(Creature* c) : BossAI(c, BOSS_ANUB) - { - sayGreet = false; - } + BossAI::Reset(); + SummonCryptGuards(); + } - void SummonCryptGuards() + void JustSummoned(Creature* cr) override + { + if (me->IsInCombat()) { - if (Is25ManRaid()) - { - me->SummonCreature(NPC_CRYPT_GUARD, 3299.732f, -3502.489f, 287.077f, 2.378f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); - me->SummonCreature(NPC_CRYPT_GUARD, 3299.086f, -3450.929f, 287.077f, 3.999f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); - } + cr->SetInCombatWithZone(); + if (cr->GetEntry() == NPC_CRYPT_GUARD) + cr->AI()->Talk(EMOTE_SPAWN, me); } + summons.Summon(cr); + } - void Reset() override + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override + { + if (summon->GetEntry() == NPC_CRYPT_GUARD) { - BossAI::Reset(); - SummonCryptGuards(); - me->m_Events.KillAllEvents(false); + summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_10, true, nullptr, nullptr, me->GetGUID()); + summon->AI()->Talk(EMOTE_SCARAB); } + } - void JustSummoned(Creature* cr) override - { - if (me->IsInCombat()) - { - cr->SetInCombatWithZone(); - if (cr->GetEntry() == NPC_CRYPT_GUARD) - cr->AI()->Talk(EMOTE_SPAWN, me); - } - summons.Summon(cr); - } + void JustDied(Unit* killer) override + { + BossAI::JustDied(killer); + instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); + } - void SummonedCreatureDies(Creature* cr, Unit*) override - { - if (cr->GetEntry() == NPC_CRYPT_GUARD) - { - cr->CastSpell(cr, SPELL_SUMMON_CORPSE_SCRABS_10, true, nullptr, nullptr, me->GetGUID()); - cr->AI()->Talk(EMOTE_SCARAB); - } - } + void KilledUnit(Unit* victim) override + { + if (!victim->IsPlayer()) + return; + + Talk(SAY_SLAY); + victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_5, true, nullptr, nullptr, me->GetGUID()); + instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + me->CallForHelp(30.0f); + Talk(SAY_AGGRO); - void JustDied(Unit* killer) override + if (!summons.HasEntry(NPC_CRYPT_GUARD)) + SummonCryptGuards(); + if (!Is25ManRaid()) { - BossAI::JustDied(killer); - instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); + ScheduleUniqueTimedEvent(17500ms, [&] { + me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); + }, EVENT_SPAWN_CRYPT_GUARDS_1); } - void KilledUnit(Unit* victim) override - { - if (!victim->IsPlayer()) - return; + ScheduleTimedEvent(15s, [&] { + DoCastRandomTarget(SPELL_IMPALE); + }, 20s); - Talk(SAY_SLAY); - victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID()); - instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1); - } + ScheduleTimedEvent(70s, 2min, [&] { + Talk(EMOTE_LOCUST); + DoCastSelf(SPELL_LOCUST_SWARM); - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - me->CallForHelp(30.0f); - Talk(SAY_AGGRO); - - if (!summons.HasEntry(NPC_CRYPT_GUARD)) - SummonCryptGuards(); - if (!Is25ManRaid()) - { - 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(SPELL_IMPALE); - }, 20s); - - ScheduleTimedEvent(70s, 2min, [&] { - Talk(EMOTE_LOCUST); - DoCastSelf(SPELL_LOCUST_SWARM); - - 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); - } + scheduler.Schedule(3s, [this](TaskContext /*context*/) { + me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); + }); + }, 90s); - void MoveInLineOfSight(Unit* who) override + ScheduleEnrageTimer(SPELL_BERSERK, 10min); + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_sayGreet && who->IsPlayer()) { - if (!sayGreet && who->IsPlayer()) - { - Talk(SAY_GREET); - sayGreet = true; - } - ScriptedAI::MoveInLineOfSight(who); + Talk(SAY_GREET); + _sayGreet = true; } + BossAI::MoveInLineOfSight(who); + } - private: - bool sayGreet; - }; +private: + bool _sayGreet{false}; }; void AddSC_boss_anubrekhan() { - new boss_anubrekhan(); + RegisterNaxxramasCreatureAI(boss_anubrekhan); } diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h index c28bc2ee4f..f94aeb501e 100644 --- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h +++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h @@ -146,6 +146,9 @@ enum NaxxramasGameObjectsDisplayId enum NaxxramasCreatureId { + // Anub'Rekhan + NPC_CRYPT_GUARD = 16573, + // Patchwerk NPC_PATCHWERK = 16028, NPC_PATCHWORK_GOLEM = 16017, |
