From 125f6cb748e0f7fb96e630fea79d029cb33718c9 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 10 Feb 2026 00:27:42 -0300 Subject: [PATCH] =?UTF-8?q?fix(Scripts/Naxxramas):=20Thaddius=20casting=20?= =?UTF-8?q?Ball=20Lightning=20shouldn't=20pr=E2=80=A6=20(#24624)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Northrend/Naxxramas/boss_thaddius.cpp | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index d2e7dd1da..7fb48d6d1 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -92,9 +92,8 @@ enum Events EVENT_THADDIUS_INIT = 5, EVENT_THADDIUS_ENTER_COMBAT = 6, EVENT_THADDIUS_CHAIN_LIGHTNING = 7, - EVENT_THADDIUS_BERSERK = 8, - EVENT_THADDIUS_POLARITY_SHIFT = 9, - EVENT_ALLOW_BALL_LIGHTNING = 10 + EVENT_THADDIUS_POLARITY_SHIFT = 8, + EVENT_ALLOW_BALL_LIGHTNING = 9 }; enum Misc @@ -119,11 +118,9 @@ public: struct boss_thaddiusAI : public BossAI { - explicit boss_thaddiusAI(Creature* c) : BossAI(c, BOSS_THADDIUS), summons(me), ballLightningEnabled(false) + explicit boss_thaddiusAI(Creature* c) : BossAI(c, BOSS_THADDIUS), ballLightningEnabled(false) {} - EventMap events; - SummonList summons; uint32 summonTimer{}; uint32 reviveTimer{}; uint32 resetTimer{}; @@ -238,7 +235,7 @@ public: if (resetTimer > 1000) { resetTimer = 0; - me->CastSpell(me, SPELL_THADDIUS_SPAWN_STUN, true); + DoCastSelf(SPELL_THADDIUS_SPAWN_STUN, true); } return; } @@ -247,17 +244,15 @@ public: reviveTimer += diff; if (reviveTimer >= 12000) { - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) + summons.DoForAllSummons([this](WorldObject* summon) { - if (Creature* cr = ObjectAccessor::GetCreature(*me, (*itr))) + if (summon->GetEntry() == NPC_TESLA_COIL) { - if (cr->GetEntry() == NPC_TESLA_COIL) - { - cr->AI()->Talk(EMOTE_TESLA_OVERLOAD); - cr->CastSpell(me, SPELL_SHOCK_VISUAL, true); - } + summon->ToCreature()->AI()->Talk(EMOTE_TESLA_OVERLOAD); + summon->ToCreature()->CastSpell(me, SPELL_SHOCK_VISUAL, true); } - } + }); + reviveTimer = 0; events.ScheduleEvent(EVENT_THADDIUS_INIT, 750ms); } @@ -268,8 +263,6 @@ public: return; events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; if (summonTimer) // Revive { @@ -287,25 +280,19 @@ public: { me->RemoveAllAuras(); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) + summons.DoForAllSummons([](WorldObject* summon) { - if (Creature* cr = ObjectAccessor::GetCreature(*me, (*itr))) - { - if (cr->GetEntry() == NPC_TESLA_COIL) - { - Unit::Kill(cr, cr); - } - } - } + if (summon->GetEntry() == NPC_TESLA_COIL) + summon->ToCreature()->KillSelf(); + }); + if (GameObject* go = me->FindNearestGameObject(GO_TESLA_COIL_LEFT, 100.0f)) - { go->SetGoState(GO_STATE_READY); - } + if (GameObject* go = me->FindNearestGameObject(GO_TESLA_COIL_RIGHT, 100.0f)) - { go->SetGoState(GO_STATE_READY); - } - me->CastSpell(me, SPELL_THADDIUS_VISUAL_LIGHTNING, true); + + DoCastSelf(SPELL_THADDIUS_VISUAL_LIGHTNING, true); events.ScheduleEvent(EVENT_THADDIUS_ENTER_COMBAT, 1s); break; } @@ -316,19 +303,32 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetControlled(false, UNIT_STATE_ROOT); events.ScheduleEvent(EVENT_THADDIUS_CHAIN_LIGHTNING, 14s); - events.ScheduleEvent(EVENT_THADDIUS_BERSERK, 6min); events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 20s); events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 5s); + ScheduleEnrageTimer(SPELL_BERSERK, 6min); return; - case EVENT_THADDIUS_BERSERK: - me->CastSpell(me, SPELL_BERSERK, true); - break; case EVENT_THADDIUS_CHAIN_LIGHTNING: - me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false); + if (me->HasUnitState(UNIT_STATE_CASTING)) + { + events.Repeat(1s); + ballLightningEnabled = false; + return; + } + + DoCastVictim(SPELL_CHAIN_LIGHTNING); + events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 1s); events.Repeat(15s); break; case EVENT_THADDIUS_POLARITY_SHIFT: - me->CastSpell(me, SPELL_POLARITY_SHIFT, false); + if (me->HasUnitState(UNIT_STATE_CASTING)) + { + events.Repeat(1s); + ballLightningEnabled = false; + return; + } + + DoCastAOE(SPELL_POLARITY_SHIFT); + events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 3s); events.Repeat(30s); break; case EVENT_ALLOW_BALL_LIGHTNING: @@ -338,7 +338,7 @@ public: if (IsAnyPlayerInMeleeRange()) DoMeleeAttackIfReady(); - else if (ballLightningEnabled && !IsAnyPlayerInMeleeRange()) + else if (ballLightningEnabled && !IsAnyPlayerInMeleeRange() && !me->HasUnitState(UNIT_STATE_CASTING)) if (Unit* target = SelectTarget(SelectTargetMethod::MaxThreat)) me->CastSpell(target, SPELL_BALL_LIGHTNING, false); }