From d99e66d93125f991c638c192f6322df915cefbd9 Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 17 May 2009 10:09:06 -0500 Subject: [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 --- src/game/GridNotifiersImpl.h | 4 ++-- src/game/Object.cpp | 30 +++++++++++++++++++++--------- 2 files changed, 23 insertions(+), 11 deletions(-) (limited to 'src') 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::Visit(PlayerMapType &m) template void MaNGOS::LocalizedPacketDo::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::operator()( Player* p ) template void MaNGOS::LocalizedPacketListDo::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; -- cgit v1.2.3