diff options
author | ccrs <ccrs@users.noreply.github.com> | 2019-01-10 22:51:47 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-11-21 14:17:23 +0100 |
commit | 1c5287032affb1a402b0a6091b75997ef56e556c (patch) | |
tree | bdcd689d566f71623713afc34862ccc441797e16 | |
parent | 90cce65d468590a184114cd7415c8de8a8478f74 (diff) |
Core/Movement: correct logic wrongly ported in 2a84562dc8
I'm referencing line 97 from ChaseMovementGenerator.
That commit introduced a modification in this use case:
- Chasing target is not my current victim, I should stop moving till it is my victim again
Changed To:
- Chasing target is not my current vicitm, I should stop chasing
My correction:
- I dont care about the relation of my current victim and my chasing target, I'm commanded to chase, something will tell me to stop chasing
--> Most likely: evade, new attackstart, etc.
the rest are just minor changes
(cherry picked from commit 9080e7863c28df7dc1c2af321964776e7b59e41a)
6 files changed, 7 insertions, 12 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index a3c8b04f9a7..c0fe7c17b93 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -66,7 +66,7 @@ inline void MovementGeneratorPointerDeleter(MovementGenerator* a) delete a; } -void MovementGeneratorDeleter::operator()(MovementGenerator * a) +void MovementGeneratorDeleter::operator()(MovementGenerator* a) { MovementGeneratorPointerDeleter(a); } @@ -123,7 +123,7 @@ uint32 MotionMaster::Size() const return _defaultGenerator ? 1 : 0 + uint32(_generators.size()); } -std::vector<MovementGeneratorInformation> MotionMaster::GetMovementGeneratorsInformation() const +std::vector<MovementGeneratorInformation> const MotionMaster::GetMovementGeneratorsInformation() const { std::vector<MovementGeneratorInformation> list; diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 2fc2135b603..4c0afcfe492 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -105,7 +105,7 @@ class TC_GAME_API MotionMaster bool Empty() const; uint32 Size() const; - std::vector<MovementGeneratorInformation> GetMovementGeneratorsInformation() const; + std::vector<MovementGeneratorInformation> const GetMovementGeneratorsInformation() const; MovementSlot GetCurrentSlot() const; MovementGenerator* GetCurrentMovementGenerator() const; MovementGeneratorType GetCurrentMovementGeneratorType() const; diff --git a/src/server/game/Movement/MovementDefines.cpp b/src/server/game/Movement/MovementDefines.cpp index 3b0caa87c48..ec0d8d327b9 100644 --- a/src/server/game/Movement/MovementDefines.cpp +++ b/src/server/game/Movement/MovementDefines.cpp @@ -15,7 +15,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "Common.h" #include "MovementDefines.h" #include "ObjectDefines.h" #include "Position.h" diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp index e52393a97ad..d7b95c148f6 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp @@ -90,11 +90,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) // our target might have gone away Unit* const target = GetTarget(); - if (!target) - return false; - - // the owner might've selected a different target (feels like we shouldn't check this here...) - if (owner->GetVictim() != target) + if (!target || !target->IsInWorld()) return false; // the owner might be unable to move (rooted or casting), pause movement diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp index 6d2544f8f89..472b9571ae6 100644 --- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp @@ -78,7 +78,7 @@ bool FollowMovementGenerator::Update(Unit* owner, uint32 diff) // our target might have gone away Unit* const target = GetTarget(); - if (!target) + if (!target || !target->IsInWorld()) return false; if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 3782d181b5d..7f1175a4503 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -2199,8 +2199,8 @@ public: float x, y, z; unit->GetMotionMaster()->GetDestination(x, y, z); - std::vector<MovementGeneratorInformation> list = unit->GetMotionMaster()->GetMovementGeneratorsInformation(); - for (MovementGeneratorInformation info : list) + std::vector<MovementGeneratorInformation> const list = unit->GetMotionMaster()->GetMovementGeneratorsInformation(); + for (MovementGeneratorInformation const& info : list) { switch (info.Type) { |