From f0ab95f19cd5e269efdee33cf02b91eb77a98277 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 30 Oct 2016 11:12:57 +0100 Subject: Core/GameObjects: Fixed Frozen Trap target selection Closes #14238 Closes #17517 --- src/server/game/Entities/GameObject/GameObject.cpp | 8 +++----- src/server/game/Grids/Notifiers/GridNotifiers.h | 10 +++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 8c43d287c91..4bdfd33c58e 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -511,11 +511,9 @@ void GameObject::Update(uint32 diff) if (Unit* owner = GetOwner()) { // Hunter trap: Search units which are unfriendly to the trap's owner - Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); - Trinity::UnitSearcher searcher(this, target, checker); - VisitNearbyGridObject(radius, searcher); - if (!target) - VisitNearbyWorldObject(radius, searcher); + Trinity::NearestUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); + Trinity::UnitLastSearcher searcher(this, target, checker); + VisitNearbyObject(radius, searcher); } else { diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index df4788a0a1e..d029f0fb8d0 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -830,10 +830,10 @@ namespace Trinity float i_range; }; - class AnyUnfriendlyNoTotemUnitInObjectRangeCheck + class NearestUnfriendlyNoTotemUnitInObjectRangeCheck { public: - AnyUnfriendlyNoTotemUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) : i_obj(obj), i_funit(funit), i_range(range) { } + NearestUnfriendlyNoTotemUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) : i_obj(obj), i_funit(funit), i_range(range) { } bool operator()(Unit* u) { if (!u->IsAlive()) @@ -848,7 +848,11 @@ namespace Trinity if (!u->isTargetableForAttack(false)) return false; - return i_obj->IsWithinDistInMap(u, i_range) && !i_funit->IsFriendlyTo(u); + if (!i_obj->IsWithinDistInMap(u, i_range) || i_funit->IsFriendlyTo(u)) + return false; + + i_range = i_obj->GetDistance(*u); + return true; } private: WorldObject const* i_obj; -- cgit v1.2.3