[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
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
+21
-9
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user