From 3b67d70835eaa0450bfaa2c11d07fb24c1b9dc00 Mon Sep 17 00:00:00 2001 From: Aqua Deus <95978183+aquadeus@users.noreply.github.com> Date: Sun, 1 Feb 2026 12:32:35 +0100 Subject: [PATCH] Core/Auras: Implement SPELL_AURA_DISABLE_AUTOATTACK (#31542) --- src/server/game/Entities/Unit/Unit.cpp | 6 ++++++ src/server/game/Spells/Auras/SpellAuraDefines.h | 2 +- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index def713ce45..e65ca863b3 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2254,6 +2254,9 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr if (HasAuraType(SPELL_AURA_DISABLE_ATTACKING_EXCEPT_ABILITIES)) return; + if (HasAuraType(SPELL_AURA_DISABLE_AUTOATTACK)) + return; + if (!victim->IsAlive()) return; @@ -3005,6 +3008,9 @@ void Unit::_UpdateAutoRepeatSpell() { SpellInfo const* autoRepeatSpellInfo = m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo; + if (HasAuraType(SPELL_AURA_DISABLE_AUTOATTACK)) + return; + // check "realtime" interrupts // don't cancel spells which are affected by a SPELL_AURA_CAST_WHILE_WALKING effect if ((isMoving() && m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->CheckMovement() != SPELL_CAST_OK) || IsNonMeleeSpellCast(false, false, true, autoRepeatSpellInfo->Id == 75)) diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 248d3aa7f5..e5bf0b1c02 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -455,7 +455,7 @@ enum AuraType : uint32 SPELL_AURA_368 = 368, // Not used in 4.3.4 SPELL_AURA_ENABLE_POWER_BAR_TIMER = 369, SPELL_AURA_SPELL_OVERRIDE_NAME_GROUP = 370, // picks a random SpellOverrideName id from a group (group id in miscValue) - SPELL_AURA_371 = 371, + SPELL_AURA_DISABLE_AUTOATTACK = 371, SPELL_AURA_OVERRIDE_MOUNT_FROM_SET = 372, // NYI SPELL_AURA_MOD_SPEED_NO_CONTROL = 373, // NYI SPELL_AURA_MODIFY_FALL_DAMAGE_PCT = 374, diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 45f7bb3f96..ed1052d28a 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -440,7 +440,7 @@ NonDefaultConstructible AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleUnused, //368 unused (4.3.4) &AuraEffect::HandleNULL, //369 SPELL_AURA_ENABLE_POWER_BAR_TIMER &AuraEffect::HandleNULL, //370 SPELL_AURA_SPELL_OVERRIDE_NAME_GROUP - &AuraEffect::HandleNULL, //371 + &AuraEffect::HandleNoImmediateEffect, //371 SPELL_AURA_DISABLE_AUTOATTACK implemented in Unit::_UpdateAutoRepeatSpell and Unit::AttackerStateUpdate &AuraEffect::HandleNULL, //372 SPELL_AURA_OVERRIDE_MOUNT_FROM_SET &AuraEffect::HandleNULL, //373 SPELL_AURA_MOD_SPEED_NO_CONTROL &AuraEffect::HandleNoImmediateEffect, //374 SPELL_AURA_MODIFY_FALL_DAMAGE_PCT implemented in Player::HandleFall