From 36a1777b99c400484537c358af8fa6b3a42b13c7 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Thu, 5 Aug 2021 13:55:11 +0200 Subject: [PATCH] fix(Core/Movement): properly handle UNIT_STATE_CHARGING (#7152) - Closes #6065 - Closes #6669 --- .../MovementGenerators/PointMovementGenerator.cpp | 13 +++++++++++++ src/server/game/Spells/SpellEffects.cpp | 6 ------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index c57fec141..55c9f608a 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -29,6 +29,11 @@ void PointMovementGenerator::DoInitialize(T* unit) unit->StopMoving(); unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); + if (id == EVENT_CHARGE) + { + unit->AddUnitState(UNIT_STATE_CHARGING); + } + i_recalculateSpeed = false; Movement::MoveSplineInit init(unit); if (m_precomputedPath.size() > 2) // pussywizard: for charge @@ -131,6 +136,10 @@ template void PointMovementGenerator::DoFinalize(T* unit) { unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); + if (id == EVENT_CHARGE) + { + unit->ClearUnitState(UNIT_STATE_CHARGING); + } if (unit->movespline->Finalized()) MovementInform(unit); @@ -143,6 +152,10 @@ void PointMovementGenerator::DoReset(T* unit) unit->StopMoving(); unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); + if (id == EVENT_CHARGE) + { + unit->AddUnitState(UNIT_STATE_CHARGING); + } } template diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 326d39d74..b48939990 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5043,8 +5043,6 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) { sScriptMgr->AnticheatSetUnderACKmount(m_caster->ToPlayer()); } - - m_caster->AddUnitState(UNIT_STATE_CHARGING); } else { @@ -5064,8 +5062,6 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) { sScriptMgr->AnticheatSetUnderACKmount(m_caster->ToPlayer()); } - - m_caster->AddUnitState(UNIT_STATE_CHARGING); } } @@ -5074,8 +5070,6 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) if (!unitTarget) return; - m_caster->ClearUnitState(UNIT_STATE_CHARGING); - if (m_caster->ToPlayer()) { sScriptMgr->AnticheatSetSkipOnePacketForASH(m_caster->ToPlayer(), true);