Core/GameObjects: Fixed Frozen Trap target selection

Closes #14238
Closes #17517
This commit is contained in:
Shauren authored and Aokromes committed 2016-11-02 03:23:23 +01:00
1 parent 5157c87198
commit 93fd8f2511
2 files changed
+10 -8

No files matched your search

@@ -537,11 +537,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<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
VisitNearbyGridObject(radius, searcher);
if (!target)
VisitNearbyWorldObject(radius, searcher);
Trinity::NearestUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
Trinity::UnitLastSearcher<Trinity::NearestUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
VisitNearbyObject(radius, searcher);
}
else
{
@@ -843,10 +843,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())
@@ -861,7 +861,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;