From e2c4c5a5dcf72fbe095752e430bf6e8727e97c24 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 6 Aug 2022 02:07:03 +0200 Subject: [PATCH] fix(Core/Spells): Volley should suspend auto-shot. (#12596) --- src/server/game/Entities/Unit/Unit.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 71962e1ed..2c28c9a7b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -464,6 +464,7 @@ void Unit::Update(uint32 p_time) // xinef: if attack time > 0, reduce by diff // if on next update, attack time < 0 assume player didnt attack - set to 0 bool suspendAttackTimer = false; + bool suspendRangedAttackTimer = false; if (IsPlayer() && HasUnitState(UNIT_STATE_CASTING)) { for (Spell* spell : m_currentSpells) @@ -472,6 +473,11 @@ void Unit::Update(uint32 p_time) { if (spell->GetSpellInfo()->HasAttribute(SPELL_ATTR2_DO_NOT_RESET_COMBAT_TIMERS)) { + if (spell->IsChannelActive()) + { + suspendRangedAttackTimer = true; + } + suspendAttackTimer = true; break; } @@ -492,9 +498,12 @@ void Unit::Update(uint32 p_time) } } - if (int32 ranged_attack = getAttackTimer(RANGED_ATTACK)) + if (!suspendRangedAttackTimer) { - setAttackTimer(RANGED_ATTACK, ranged_attack > 0 ? ranged_attack - (int32) p_time : 0); + if (int32 ranged_attack = getAttackTimer(RANGED_ATTACK)) + { + setAttackTimer(RANGED_ATTACK, ranged_attack > 0 ? ranged_attack - (int32)p_time : 0); + } } // update abilities available only for fraction of time