diff options
author | megamage <none@none> | 2009-05-17 10:09:06 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-17 10:09:06 -0500 |
commit | d99e66d93125f991c638c192f6322df915cefbd9 (patch) | |
tree | cf5a250e4839afab8a8cb8bde7db88244faca610 | |
parent | 98e32a041d08734c3ddbedf527491ec2bdee76b0 (diff) |
[7836] Fixes for distance range checks. Author: VladimirMangos
* ignore 0.0f min range limit (this correct case when 2 object overlapped)
Also use int32 for temporary store GetSessionDbLocaleIndex result.
--HG--
branch : trunk
-rw-r--r-- | src/game/GridNotifiersImpl.h | 4 | ||||
-rw-r--r-- | src/game/Object.cpp | 30 |
2 files changed, 23 insertions, 11 deletions
diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 12f3706c4e2..d4413b9f777 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -576,7 +576,7 @@ void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) template<class Builder> void MaNGOS::LocalizedPacketDo<Builder>::operator()( Player* p ) { - uint32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); + int32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); uint32 cache_idx = loc_idx+1; WorldPacket* data; @@ -601,7 +601,7 @@ void MaNGOS::LocalizedPacketDo<Builder>::operator()( Player* p ) template<class Builder> void MaNGOS::LocalizedPacketListDo<Builder>::operator()( Player* p ) { - uint32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); + int32 loc_idx = p->GetSession()->GetSessionDbLocaleIndex(); uint32 cache_idx = loc_idx+1; WorldPacketList* data_list; diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 5c186921524..634702daab1 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1311,9 +1311,13 @@ bool WorldObject::IsInRange(WorldObject const* obj, float minRange, float maxRan float sizefactor = GetObjectSize() + obj->GetObjectSize(); - float mindist = minRange + sizefactor; - if(distsq < mindist * mindist) - return false; + // check only for real range + if(minRange > 0.0f) + { + float mindist = minRange + sizefactor; + if(distsq < mindist * mindist) + return false; + } float maxdist = maxRange + sizefactor; return distsq < maxdist * maxdist; @@ -1327,9 +1331,13 @@ bool WorldObject::IsInRange2d(float x, float y, float minRange, float maxRange) float sizefactor = GetObjectSize(); - float mindist = minRange + sizefactor; - if(distsq < mindist * mindist) - return false; + // check only for real range + if(minRange > 0.0f) + { + float mindist = minRange + sizefactor; + if(distsq < mindist * mindist) + return false; + } float maxdist = maxRange + sizefactor; return distsq < maxdist * maxdist; @@ -1344,9 +1352,13 @@ bool WorldObject::IsInRange3d(float x, float y, float z, float minRange, float m float sizefactor = GetObjectSize(); - float mindist = minRange + sizefactor; - if(distsq < mindist * mindist) - return false; + // check only for real range + if(minRange > 0.0f) + { + float mindist = minRange + sizefactor; + if(distsq < mindist * mindist) + return false; + } float maxdist = maxRange + sizefactor; return distsq < maxdist * maxdist; |