Core/Creature: Ignore combat reach when looking for assisting creatures
This commit is contained in:
1 parent
d2790a4c32
commit
8bbe17c684
4 files changed
+15
-11
No files matched your search
@@ -353,7 +353,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
|
||||
void UpdatePackedRotation();
|
||||
|
||||
//! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.
|
||||
bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/) const override
|
||||
bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius*/, bool /*incTargetRadius*/) const override
|
||||
{
|
||||
//! Following check does check 3d distance
|
||||
return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
|
||||
|
||||
@@ -1292,9 +1292,11 @@ float WorldObject::GetDistanceZ(const WorldObject* obj) const
|
||||
return (dist > 0 ? dist : 0);
|
||||
}
|
||||
|
||||
bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const
|
||||
bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
|
||||
{
|
||||
float sizefactor = GetCombatReach() + obj->GetCombatReach();
|
||||
float sizefactor = 0.f;
|
||||
sizefactor += incOwnRadius ? GetCombatReach() : 0.0f;
|
||||
sizefactor += incTargetRadius ? obj->GetCombatReach() : 0.0f;
|
||||
float maxdist = dist2compare + sizefactor;
|
||||
|
||||
if (GetTransport() && obj->GetTransport() && obj->GetTransport()->GetGUID().GetCounter() == GetTransport()->GetGUID().GetCounter())
|
||||
@@ -1391,11 +1393,10 @@ bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool
|
||||
return obj && _IsWithinDist(obj, dist2compare, is3D);
|
||||
}
|
||||
|
||||
bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D /*= true*/) const
|
||||
bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D /*= true*/, bool incOwnRadius /*= true*/, bool incTargetRadius /*= true*/) const
|
||||
{
|
||||
return obj && IsInMap(obj) && IsInPhase(obj) && _IsWithinDist(obj, dist2compare, is3D);
|
||||
return obj && IsInMap(obj) && IsInPhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
|
||||
}
|
||||
|
||||
Position WorldObject::GetHitSpherePointFor(Position const& dest) const
|
||||
{
|
||||
G3D::Vector3 vThis(GetPositionX(), GetPositionY(), GetPositionZ() + GetCollisionHeight());
|
||||
|
||||
@@ -347,7 +347,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
bool IsWithinDist2d(Position const* pos, float dist) const;
|
||||
// use only if you will sure about placing both object at same map
|
||||
bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true) const;
|
||||
bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true) const;
|
||||
bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
|
||||
bool IsWithinLOSInMap(WorldObject const* obj, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing) const;
|
||||
Position GetHitSpherePointFor(Position const& dest) const;
|
||||
@@ -524,7 +524,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
int32 _dbPhase;
|
||||
|
||||
uint16 m_notifyflags;
|
||||
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D) const;
|
||||
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
|
||||
bool CanNeverSee(WorldObject const* obj) const;
|
||||
virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
|
||||
|
||||
@@ -1057,7 +1057,8 @@ namespace Trinity
|
||||
return;
|
||||
|
||||
// too far
|
||||
if (!u->IsWithinDistInMap(i_funit, i_range))
|
||||
// Don't use combat reach distance, range must be an absolute value, otherwise the chain aggro range will be too big
|
||||
if (!u->IsWithinDistInMap(i_funit, i_range, true, false, false))
|
||||
return;
|
||||
|
||||
// only if see assisted creature's enemy
|
||||
@@ -1196,7 +1197,8 @@ namespace Trinity
|
||||
return false;
|
||||
|
||||
// too far
|
||||
if (!i_funit->IsWithinDistInMap(u, i_range))
|
||||
// Don't use combat reach distance, range must be an absolute value, otherwise the chain aggro range will be too big
|
||||
if (!i_funit->IsWithinDistInMap(u, i_range, true, false, false))
|
||||
return false;
|
||||
|
||||
// only if see assisted creature
|
||||
@@ -1224,7 +1226,8 @@ namespace Trinity
|
||||
if (!u->CanAssistTo(i_obj, i_enemy))
|
||||
return false;
|
||||
|
||||
if (!i_obj->IsWithinDistInMap(u, i_range))
|
||||
// Don't use combat reach distance, range must be an absolute value, otherwise the chain aggro range will be too big
|
||||
if (!i_obj->IsWithinDistInMap(u, i_range, true, false, false))
|
||||
return false;
|
||||
|
||||
if (!i_obj->IsWithinLOSInMap(u))
|
||||
|
||||
Reference in new issue
Block a user