mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-07 21:01:37 +00:00
fix(Scripts/Naxxramas): further modernise Anub'Rekhan (#24225)
Co-authored-by: sogladev <sogladev@gmail.com>
This commit is contained in:
@@ -37,141 +37,126 @@ 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 },
|
||||||
public:
|
{ 3299.086f, -3450.929f, 287.077f, 3.999f },
|
||||||
boss_anubrekhan() : CreatureScript("boss_anubrekhan") { }
|
{ 3331.217f, -3476.607f, 287.074f, 3.269f }
|
||||||
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI(Creature* pCreature) const override
|
struct boss_anubrekhan : public BossAI
|
||||||
|
{
|
||||||
|
boss_anubrekhan(Creature* creature) : BossAI(creature, BOSS_ANUB) { }
|
||||||
|
|
||||||
|
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)
|
BossAI::Reset();
|
||||||
{
|
SummonCryptGuards();
|
||||||
sayGreet = false;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void SummonCryptGuards()
|
void JustSummoned(Creature* cr) override
|
||||||
{
|
{
|
||||||
if (Is25ManRaid())
|
if (me->IsInCombat())
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reset() override
|
|
||||||
{
|
|
||||||
BossAI::Reset();
|
|
||||||
SummonCryptGuards();
|
|
||||||
me->m_Events.KillAllEvents(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
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 SummonedCreatureDies(Creature* cr, Unit*) override
|
|
||||||
{
|
{
|
||||||
|
cr->SetInCombatWithZone();
|
||||||
if (cr->GetEntry() == NPC_CRYPT_GUARD)
|
if (cr->GetEntry() == NPC_CRYPT_GUARD)
|
||||||
{
|
cr->AI()->Talk(EMOTE_SPAWN, me);
|
||||||
cr->CastSpell(cr, SPELL_SUMMON_CORPSE_SCRABS_10, true, nullptr, nullptr, me->GetGUID());
|
|
||||||
cr->AI()->Talk(EMOTE_SCARAB);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
summons.Summon(cr);
|
||||||
|
}
|
||||||
|
|
||||||
void JustDied(Unit* killer) override
|
void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override
|
||||||
|
{
|
||||||
|
if (summon->GetEntry() == NPC_CRYPT_GUARD)
|
||||||
{
|
{
|
||||||
BossAI::JustDied(killer);
|
summon->CastSpell(summon, SPELL_SUMMON_CORPSE_SCARABS_10, true, nullptr, nullptr, me->GetGUID());
|
||||||
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
summon->AI()->Talk(EMOTE_SCARAB);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void KilledUnit(Unit* victim) override
|
void JustDied(Unit* killer) override
|
||||||
|
{
|
||||||
|
BossAI::JustDied(killer);
|
||||||
|
instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
if (!summons.HasEntry(NPC_CRYPT_GUARD))
|
||||||
|
SummonCryptGuards();
|
||||||
|
if (!Is25ManRaid())
|
||||||
{
|
{
|
||||||
if (!victim->IsPlayer())
|
ScheduleUniqueTimedEvent(17500ms, [&] {
|
||||||
return;
|
me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
|
||||||
|
}, EVENT_SPAWN_CRYPT_GUARDS_1);
|
||||||
Talk(SAY_SLAY);
|
|
||||||
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID());
|
|
||||||
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustEngagedWith(Unit* who) override
|
ScheduleTimedEvent(15s, [&] {
|
||||||
|
DoCastRandomTarget(SPELL_IMPALE);
|
||||||
|
}, 20s);
|
||||||
|
|
||||||
|
ScheduleTimedEvent(70s, 2min, [&] {
|
||||||
|
Talk(EMOTE_LOCUST);
|
||||||
|
DoCastSelf(SPELL_LOCUST_SWARM);
|
||||||
|
|
||||||
|
scheduler.Schedule(3s, [this](TaskContext /*context*/) {
|
||||||
|
me->SummonCreature(NPC_CRYPT_GUARD, cryptguardPositions[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000);
|
||||||
|
});
|
||||||
|
}, 90s);
|
||||||
|
|
||||||
|
ScheduleEnrageTimer(SPELL_BERSERK, 10min);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveInLineOfSight(Unit* who) override
|
||||||
|
{
|
||||||
|
if (!_sayGreet && who->IsPlayer())
|
||||||
{
|
{
|
||||||
BossAI::JustEngagedWith(who);
|
Talk(SAY_GREET);
|
||||||
me->CallForHelp(30.0f);
|
_sayGreet = true;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
BossAI::MoveInLineOfSight(who);
|
||||||
|
}
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* who) override
|
private:
|
||||||
{
|
bool _sayGreet{false};
|
||||||
if (!sayGreet && who->IsPlayer())
|
|
||||||
{
|
|
||||||
Talk(SAY_GREET);
|
|
||||||
sayGreet = true;
|
|
||||||
}
|
|
||||||
ScriptedAI::MoveInLineOfSight(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool sayGreet;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user