From 3cf3f69e135f6751c4a5910528dfefaf7ba9fff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Borz=C3=AC?= Date: Fri, 20 Mar 2020 18:52:30 +0100 Subject: [PATCH] fix(Core/Spell): Melee ranged spells (#2686) Co-authored-by: Stoabrogga <38475780+Stoabrogga@users.noreply.github.com> --- src/server/game/Spells/Spell.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index bf4e911be..48f75777c 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6633,8 +6633,12 @@ SpellCastResult Spell::CheckRange(bool strict) // Xinef: WHAT DA FUCK IS THIS SHIT? Spells with 5yd range can hit target 9yd away? >.> if (range_type == SPELL_RANGE_MELEE) { - // Because of lag, we can not check too strictly here. - float real_max_range = m_caster->GetTypeId() == TYPEID_UNIT ? max_range - 2*MIN_MELEE_REACH : max_range - MIN_MELEE_REACH; + float real_max_range = max_range; + if (m_caster->GetTypeId() != TYPEID_UNIT && m_caster->isMoving() && target->isMoving() && !m_caster->IsWalking() && !target->IsWalking()) + real_max_range -= MIN_MELEE_REACH; // Because of lag, we can not check too strictly here (is only used if both caster and target are moving) + else + real_max_range -= 2*MIN_MELEE_REACH; + if (!m_caster->IsWithinMeleeRange(target, std::max(real_max_range, 0.0f))) return SPELL_FAILED_OUT_OF_RANGE; }