diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-10-30 11:12:57 +0100 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-11-11 21:05:20 +0100 |
commit | c6881bd8a46b8ebd6a845b471668a630deb6da30 (patch) | |
tree | 6ab11c4bcb3a21fbc7a5ffdb03f7841551059966 | |
parent | 52e71c17236246e1c65bcd5d08e23289cff07f07 (diff) |
Core/GameObjects: Fixed Frozen Trap target selection
Closes #14238
Closes #17517
(cherry picked from commit f0ab95f19cd5e269efdee33cf02b91eb77a98277)
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 10 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 023e827754f..6025f822c78 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -592,8 +592,8 @@ 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<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker); + Trinity::NearestUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); + Trinity::UnitSearcher<Trinity::NearestUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker); Cell::VisitGridObjects(this, searcher, radius); if (!target) Cell::VisitWorldObjects(this, searcher, radius); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index f9f6596a847..b81d130aa08 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -862,10 +862,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) { @@ -881,7 +881,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: |