From 5a6416bdf057845ada16afb2ee44b1312cafbcd6 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 4 Feb 2026 22:35:35 -0300 Subject: [PATCH 1/7] fix(Scripts/Naxxramas): Thaddius casting Chain Lightning shouldn't prevent other spells --- .../Northrend/Naxxramas/boss_thaddius.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index f0831da053a4a2..0549c64c11d73c 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 @@ -268,8 +267,6 @@ class boss_thaddius : public CreatureScript return; events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; if (summonTimer) // Revive { @@ -316,19 +313,16 @@ class boss_thaddius : public CreatureScript 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); + DoCastVictim(SPELL_CHAIN_LIGHTNING); events.Repeat(15s); break; case EVENT_THADDIUS_POLARITY_SHIFT: - me->CastSpell(me, SPELL_POLARITY_SHIFT, false); + DoCastAOE(SPELL_POLARITY_SHIFT); events.Repeat(30s); break; case EVENT_ALLOW_BALL_LIGHTNING: From 4b4322e1a7ec8aa5bd2a091374f33e04aababfeb Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:17:35 -0300 Subject: [PATCH 2/7] Update boss_thaddius.cpp --- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 0549c64c11d73c..623f65568e4552 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -332,7 +332,7 @@ class boss_thaddius : public CreatureScript 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); } From 5d379681787c73c6d65f4129f4995d805a43b6d4 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:36:38 -0300 Subject: [PATCH 3/7] Avoid Polarity Shift during casting When handling EVENT_THADDIUS_POLARITY_SHIFT, check if the boss is currently casting and, if so, defer the event by 1s and disable ball lightning until the cast completes. Also schedule EVENT_ALLOW_BALL_LIGHTNING 3s after successfully casting SPELL_POLARITY_SHIFT. This prevents overlapping casts and ensures ball lightning is re-enabled at the correct time. --- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 623f65568e4552..91a847ffcc65f2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -322,7 +322,15 @@ class boss_thaddius : public CreatureScript events.Repeat(15s); break; case EVENT_THADDIUS_POLARITY_SHIFT: + 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: From 68e173f1bc27bfe25768588174c5339b901a4fea Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:49:45 -0300 Subject: [PATCH 4/7] Update boss_thaddius.cpp --- .../Northrend/Naxxramas/boss_thaddius.cpp | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 91a847ffcc65f2..9bfa6a82a7e371 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -237,7 +237,7 @@ class boss_thaddius : public CreatureScript if (resetTimer > 1000) { resetTimer = 0; - me->CastSpell(me, SPELL_THADDIUS_SPAWN_STUN, true); + DoCastSelf(SPELL_THADDIUS_SPAWN_STUN, true); } return; } @@ -284,25 +284,19 @@ class boss_thaddius : public CreatureScript { 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; } From bb95a79f63cd6835f010abf5af7b9b620f58e9fc Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:51:56 -0300 Subject: [PATCH 5/7] Update boss_thaddius.cpp --- .../scripts/Northrend/Naxxramas/boss_thaddius.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 9bfa6a82a7e371..d3bcd2e98811d9 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -246,17 +246,15 @@ class boss_thaddius : public CreatureScript 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); } From 87f20b176a7d247a2f7b13c43ab4b5fe165220e7 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 5 Feb 2026 21:14:17 -0300 Subject: [PATCH 6/7] Update boss_thaddius.cpp --- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index d3bcd2e98811d9..9a5b83bbd3118c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -118,11 +118,9 @@ class boss_thaddius : public CreatureScript 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{}; From 1c7cdde3de0e834eae3777a35a5aaa5170adab58 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 6 Feb 2026 23:16:45 -0300 Subject: [PATCH 7/7] Update boss_thaddius.cpp --- src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 9a5b83bbd3118c..4e60d7c8a30b56 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -308,7 +308,15 @@ class boss_thaddius : public CreatureScript ScheduleEnrageTimer(SPELL_BERSERK, 6min); return; case EVENT_THADDIUS_CHAIN_LIGHTNING: + 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: