From 3b1df8136db467f5c542597f012a73dcd13d6dd5 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 19 Jul 2026 20:47:32 -0300 Subject: [PATCH] fix(Scripts/Ulduar): keep VX-001 arms deployed through MK II melee swings in Mimiron phase 4 (#26698) Co-authored-by: Claude Fable 5 --- .../scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 96a31b557..04514be9c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -964,7 +964,10 @@ struct npc_ulduar_leviathan_mkii : public ScriptedAI ScriptedAI::AttackStart(who); // Unit::Attack clears the emote state on target switch, which would retract VX-001's arms if (_phase == 4) + { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01); + me->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01); + } } void SetData(uint32 id, uint32 value) override @@ -1065,7 +1068,15 @@ struct npc_ulduar_leviathan_mkii : public ScriptedAI _events.Update(diff); if (!me->HasUnitState(UNIT_STATE_CASTING)) + { + bool wasAttackReady = me->isAttackReady(); DoMeleeAttackIfReady(); + // Each melee swing knocks the client out of the arms-deployed loop, retracting + // VX-001's arms. Field updates with an unchanged value are ignored by the client, + // so replay the state emote via SMSG_EMOTE, which is always applied. + if (_phase == 4 && wasAttackReady && !me->isAttackReady()) + me->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01); + } Unit* cannon = GetS3(); if (!cannon || cannon->HasUnitState(UNIT_STATE_CASTING) || me->HasUnitState(UNIT_STATE_CASTING) || me->HasSilenceAura())