Skip to content

Commit

Permalink
fix(Scripts/Naxxramas): refactored instance script
Browse files Browse the repository at this point in the history
  • Loading branch information
Razor2142 committed Feb 20, 2025
1 parent f6c4164 commit 32650f1
Show file tree
Hide file tree
Showing 19 changed files with 1,035 additions and 1,738 deletions.
8 changes: 8 additions & 0 deletions data/sql/updates/pending_db_world/rev_1739822360188928600.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
-- update Mr. Bigglesworth script name
UPDATE `creature_template` SET `ScriptName` = 'npc_mr_bigglesworth' WHERE (`entry` = 16998);

-- update Living Poison script name
UPDATE `creature_template` SET `ScriptName` = 'npc_living_poison' WHERE (`entry` = 16027);

-- update Naxxramas Trigger script name
UPDATE `creature_template` SET `ScriptName` = 'npc_naxxramas_trigger' WHERE (`entry` = 16082);
2 changes: 1 addition & 1 deletion src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class boss_anubrekhan : public CreatureScript

Talk(SAY_SLAY);
victim->CastSpell(victim, SPELL_SUMMON_CORPSE_SCRABS_5, true, nullptr, nullptr, me->GetGUID());
instance->SetData(DATA_IMMORTAL_FAIL, 0);
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void JustEngagedWith(Unit* who) override
Expand Down
9 changes: 1 addition & 8 deletions src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ class boss_faerlina : public CreatureScript
BossAI::Reset();
summons.DespawnAll();
SummonHelpers();
if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
go->SetGoState(GO_STATE_ACTIVE);
}

void JustEngagedWith(Unit* who) override
Expand Down Expand Up @@ -114,9 +112,6 @@ class boss_faerlina : public CreatureScript
else
context.Repeat(30s);
});

if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
go->SetGoState(GO_STATE_READY);
}

void MoveInLineOfSight(Unit* who) override
Expand All @@ -137,15 +132,13 @@ class boss_faerlina : public CreatureScript
if (!urand(0, 3))
Talk(SAY_SLAY);

instance->SetData(DATA_IMMORTAL_FAIL, 0);
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
if (GameObject* go = me->GetMap()->GetGameObject(instance->GetGuidData(DATA_FAERLINA_WEB)))
go->SetGoState(GO_STATE_ACTIVE);
}

void SpellHit(Unit* caster, SpellInfo const* spell) override
Expand Down
50 changes: 7 additions & 43 deletions src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@ class boss_four_horsemen : public CreatureScript
{
explicit boss_four_horsemenAI(Creature* c) : BossAI(c, BOSS_HORSEMAN)
{
pInstance = me->GetInstanceScript();
switch (me->GetEntry())
{
case NPC_SIR_ZELIEK:
Expand All @@ -150,7 +149,6 @@ class boss_four_horsemen : public CreatureScript
}

EventMap events;
InstanceScript* pInstance;
uint8 currentWaypoint{};
uint8 movementPhase{};
uint8 horsemanId;
Expand Down Expand Up @@ -203,16 +201,6 @@ class boss_four_horsemen : public CreatureScript
{
events.RescheduleEvent(EVENT_SECONDARY_SPELL, 15s);
}
if (pInstance)
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
{
if (pInstance->GetBossState(BOSS_GOTHIK) == DONE)
{
go->SetGoState(GO_STATE_ACTIVE);
}
}
}
}

void MovementInform(uint32 type, uint32 id) override
Expand Down Expand Up @@ -262,36 +250,19 @@ class boss_four_horsemen : public CreatureScript
return;

Talk(SAY_SLAY);
if (pInstance)
{
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
}
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
if (pInstance)
{
if (pInstance->GetBossState(BOSS_HORSEMAN) == DONE)
{
if (!me->GetMap()->GetPlayers().IsEmpty())
{
if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
{
if (GameObject* chest = player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0))
{
chest->SetLootRecipient(me);
}
}
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
}
}
Talk(SAY_DEATH);

if (instance->GetBossState(BOSS_HORSEMAN) == DONE)
if (!me->GetMap()->GetPlayers().IsEmpty())
if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
if (GameObject* chest = player->SummonGameObject(RAID_MODE(GO_HORSEMEN_CHEST_10, GO_HORSEMEN_CHEST_25), 2514.8f, -2944.9f, 245.55f, 5.51f, 0, 0, 0, 0, 0))
chest->SetLootRecipient(me);
}

void JustEngagedWith(Unit* who) override
Expand All @@ -305,13 +276,6 @@ class boss_four_horsemen : public CreatureScript
me->SetSpeed(MOVE_RUN, me->GetSpeedRate(MOVE_RUN), true);
MoveToCorner();
}
if (pInstance)
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_HORSEMEN_GATE)))
{
go->SetGoState(GO_STATE_READY);
}
}
}

void UpdateAI(uint32 diff) override
Expand Down
14 changes: 4 additions & 10 deletions src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,10 @@ class boss_gluth : public CreatureScript
struct boss_gluthAI : public BossAI
{
explicit boss_gluthAI(Creature* c) : BossAI(c, BOSS_GLUTH), summons(me)
{
pInstance = me->GetInstanceScript();
}
{}

EventMap events;
SummonList summons;
InstanceScript* pInstance;

void Reset() override
{
Expand Down Expand Up @@ -138,13 +135,10 @@ class boss_gluth : public CreatureScript
void KilledUnit(Unit* who) override
{
if (me->IsAlive() && who->GetEntry() == NPC_ZOMBIE_CHOW)
{
me->ModifyHealth(int32(me->GetMaxHealth() * 0.05f));
}
if (who->IsPlayer() && pInstance)
{
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
}

if (who->IsPlayer())
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void JustDied(Unit* killer) override
Expand Down
79 changes: 13 additions & 66 deletions src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,10 @@ class boss_gothik : public CreatureScript
struct boss_gothikAI : public BossAI
{
explicit boss_gothikAI(Creature* c) : BossAI(c, BOSS_GOTHIK), summons(me)
{
pInstance = me->GetInstanceScript();
}
{}

EventMap events;
SummonList summons;
InstanceScript* pInstance;
bool secondPhase{};
bool gateOpened{};
uint8 waveCount{};
Expand All @@ -233,21 +231,6 @@ class boss_gothik : public CreatureScript
gateOpened = false;
waveCount = 0;
me->NearTeleportTo(2642.139f, -3386.959f, 285.492f, 6.265f);
if (pInstance)
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_EXIT_GATE)))
{
go->SetGoState(GO_STATE_READY);
}
}
}

void JustEngagedWith(Unit* who) override
Expand All @@ -261,17 +244,6 @@ class boss_gothik : public CreatureScript
me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE);
events.ScheduleEvent(EVENT_SUMMON_ADDS, 30s);
events.ScheduleEvent(EVENT_CHECK_PLAYERS, 2min);
if (pInstance)
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
{
go->SetGoState(GO_STATE_READY);
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
{
go->SetGoState(GO_STATE_READY);
}
}
}

void JustSummoned(Creature* summon) override
Expand Down Expand Up @@ -327,32 +299,14 @@ class boss_gothik : public CreatureScript
return;

Talk(SAY_KILL);
if (pInstance)
{
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
}
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void JustDied(Unit* killer) override
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
summons.DespawnAll();
if (pInstance)
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_EXIT_GATE)))
{
go->SetGoState(GO_STATE_ACTIVE);
}
}
}

void SummonHelpers(uint32 entry)
Expand Down Expand Up @@ -472,12 +426,11 @@ class boss_gothik : public CreatureScript
events.Repeat(20s);
break;
case EVENT_CHECK_HEALTH:
if (me->HealthBelowPct(30) && pInstance)
if (me->HealthBelowPct(30))
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
{
if (GameObject* go = instance->GetGameObject(DATA_GOTHIK_INNER_GATE))
go->SetGoState(GO_STATE_ACTIVE);
}

events.CancelEvent(EVENT_TELEPORT);
break;
}
Expand Down Expand Up @@ -509,10 +462,9 @@ class boss_gothik : public CreatureScript
case EVENT_CHECK_PLAYERS:
if (!CheckGroupSplitted())
{
if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_INNER_GATE)))
{
if (GameObject* go = instance->GetGameObject(DATA_GOTHIK_INNER_GATE))
go->SetGoState(GO_STATE_ACTIVE);
}

gateOpened = true;
Talk(EMOTE_GATE_OPENED);
}
Expand Down Expand Up @@ -597,10 +549,8 @@ class npc_boss_gothik_minion : public CreatureScript

void KilledUnit(Unit* who) override
{
if (who->IsPlayer() && me->GetInstanceScript())
{
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
}
if (who->IsPlayer())
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void UpdateAI(uint32 diff) override
Expand Down Expand Up @@ -767,17 +717,14 @@ class npc_gothik_trigger : public CreatureScript
// dead side summons are "owned" by gothik
void JustSummoned(Creature* summon) override
{
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
{
if (Creature* gothik = me->GetInstanceScript()->GetCreature(DATA_GOTHIK_BOSS))
gothik->AI()->JustSummoned(summon);
}
}

void SummonedCreatureDespawn(Creature* summon) override
{
if (Creature* gothik = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_GOTHIK_BOSS)))
{
if (Creature* gothik = me->GetInstanceScript()->GetCreature(DATA_GOTHIK_BOSS))
gothik->AI()->SummonedCreatureDespawn(summon);
}
}
};
};
Expand Down
17 changes: 5 additions & 12 deletions src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,10 @@ class boss_grobbulus : public CreatureScript
struct boss_grobbulusAI : public BossAI
{
explicit boss_grobbulusAI(Creature* c) : BossAI(c, BOSS_GROBBULUS), summons(me)
{
pInstance = me->GetInstanceScript();
}
{}

EventMap events;
SummonList summons;
InstanceScript* pInstance;
uint32 dropSludgeTimer{};

void Reset() override
Expand Down Expand Up @@ -138,10 +135,8 @@ class boss_grobbulus : public CreatureScript

void KilledUnit(Unit* who) override
{
if (who->IsPlayer() && pInstance)
{
pInstance->SetData(DATA_IMMORTAL_FAIL, 0);
}
if (who->IsPlayer())
instance->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void UpdateAI(uint32 diff) override
Expand Down Expand Up @@ -217,10 +212,8 @@ class boss_grobbulus_poison_cloud : public CreatureScript

void KilledUnit(Unit* who) override
{
if (who->IsPlayer() && me->GetInstanceScript())
{
me->GetInstanceScript()->SetData(DATA_IMMORTAL_FAIL, 0);
}
if (who->IsPlayer())
me->GetInstanceScript()->StorePersistentData(PERSISTENT_DATA_IMMORTAL_FAIL, 1);
}

void UpdateAI(uint32 diff) override
Expand Down
Loading

0 comments on commit 32650f1

Please sign in to comment.