fix(Scripts/Naxxramas): further modernise Anub'Rekhan (#24225)

Co-authored-by: sogladev <sogladev@gmail.com>
This commit is contained in:
Dan
2026-01-10 15:45:57 +01:00
committed by GitHub
parent 226591a02e
commit beae2ba6d6
2 changed files with 95 additions and 107 deletions
@@ -37,42 +37,35 @@ enum Spells
{ {
SPELL_IMPALE = 28783, SPELL_IMPALE = 28783,
SPELL_LOCUST_SWARM = 28785, SPELL_LOCUST_SWARM = 28785,
SPELL_SUMMON_CORPSE_SCRABS_5 = 29105, SPELL_SUMMON_CORPSE_SCARABS_5 = 29105,
SPELL_SUMMON_CORPSE_SCRABS_10 = 28864, SPELL_SUMMON_CORPSE_SCARABS_10 = 28864,
SPELL_BERSERK = 26662 SPELL_BERSERK = 26662
}; };
enum Misc enum Misc
{ {
NPC_CORPSE_SCARAB = 16698, ACHIEV_TIMED_START_EVENT = 9891,
NPC_CRYPT_GUARD = 16573, EVENT_SPAWN_CRYPT_GUARDS_1 = 0,
EVENT_BERSERK = 1,
ACHIEV_TIMED_START_EVENT = 9891 EVENT_SPAWN_CRYPT_GUARDS_EXTRA = 2,
}; };
class boss_anubrekhan : public CreatureScript 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 }
};
struct boss_anubrekhan : public BossAI
{ {
public: boss_anubrekhan(Creature* creature) : BossAI(creature, BOSS_ANUB) { }
boss_anubrekhan() : CreatureScript("boss_anubrekhan") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetNaxxramasAI<boss_anubrekhanAI>(pCreature);
}
struct boss_anubrekhanAI : public BossAI
{
boss_anubrekhanAI(Creature* c) : BossAI(c, BOSS_ANUB)
{
sayGreet = false;
}
void SummonCryptGuards() void SummonCryptGuards()
{ {
if (Is25ManRaid()) 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, cryptguardPositions[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
me->SummonCreature(NPC_CRYPT_GUARD, 3299.086f, -3450.929f, 287.077f, 3.999f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
} }
} }
@@ -80,7 +73,6 @@ public:
{ {
BossAI::Reset(); BossAI::Reset();
SummonCryptGuards(); SummonCryptGuards();
me->m_Events.KillAllEvents(false);
} }
void JustSummoned(Creature* cr) override void JustSummoned(Creature* cr) override
@@ -94,12 +86,12 @@ public:
summons.Summon(cr); summons.Summon(cr);
} }
void SummonedCreatureDies(Creature* cr, Unit*) override void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
{ {
if (cr->GetEntry() == NPC_CRYPT_GUARD) if (summon->GetEntry() == NPC_CRYPT_GUARD)
{ {
cr->CastSpell(cr, SPELL_SUMMON_CORPSE_SCRABS_10, true, nullptr, nullptr, me->GetGUID()); summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_10, true, nullptr, nullptr, me->GetGUID());
cr->AI()->Talk(EMOTE_SCARAB); summon->AI()->Talk(EMOTE_SCARAB);
} }
} }
@@ -115,7 +107,7 @@ public:
return; return;
Talk(SAY_SLAY); Talk(SAY_SLAY);
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID()); victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCARABS_5, true, nullptr, nullptr, me->GetGUID());
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1); instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
} }
@@ -129,10 +121,9 @@ public:
SummonCryptGuards(); SummonCryptGuards();
if (!Is25ManRaid()) if (!Is25ManRaid())
{ {
me->m_Events.AddEventAtOffset([&] ScheduleUniqueTimedEvent(17500ms, [&] {
{ me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); }, EVENT_SPAWN_CRYPT_GUARDS_1);
}, Milliseconds(urand(15000, 20000)));
} }
ScheduleTimedEvent(15s, [&] { ScheduleTimedEvent(15s, [&] {
@@ -143,35 +134,29 @@ public:
Talk(EMOTE_LOCUST); Talk(EMOTE_LOCUST);
DoCastSelf(SPELL_LOCUST_SWARM); DoCastSelf(SPELL_LOCUST_SWARM);
me->m_Events.AddEventAtOffset([&] scheduler.Schedule(3s, [this](TaskContext /*context*/) {
{ me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); });
}, 3s);
}, 90s); }, 90s);
me->m_Events.AddEventAtOffset([&] ScheduleEnrageTimer(SPELL_BERSERK, 10min);
{
DoCastSelf(SPELL_BERSERK, true);
}, 10min);
} }
void MoveInLineOfSight(Unit* who) override void MoveInLineOfSight(Unit* who) override
{ {
if (!sayGreet && who->IsPlayer()) if (!_sayGreet && who->IsPlayer())
{ {
Talk(SAY_GREET); Talk(SAY_GREET);
sayGreet = true; _sayGreet = true;
} }
ScriptedAI::MoveInLineOfSight(who); BossAI::MoveInLineOfSight(who);
} }
private: private:
bool sayGreet; bool _sayGreet{false};
};
}; };
void AddSC_boss_anubrekhan() void AddSC_boss_anubrekhan()
{ {
new boss_anubrekhan(); RegisterNaxxramasCreatureAI(boss_anubrekhan);
} }
@@ -146,6 +146,9 @@ enum NaxxramasGameObjectsDisplayId
enum NaxxramasCreatureId enum NaxxramasCreatureId
{ {
// Anub'Rekhan
NPC_CRYPT_GUARD = 16573,
// Patchwerk // Patchwerk
NPC_PATCHWERK = 16028, NPC_PATCHWERK = 16028,
NPC_PATCHWORK_GOLEM = 16017, NPC_PATCHWORK_GOLEM = 16017,