From 45b209df50d90613e5f5579db3082577fa5f7c1a Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 16 May 2009 10:03:09 +0400 Subject: [PATCH] [7836] Fixes for distance range checks. * ignore 0.0f min range limit (this correct case when 2 object overlapped) * typo in CreatureEventAI::CanCast Also use int32 for temporary store GetSessionDbLocaleIndex result. --- src/game/CreatureEventAI.cpp | 2 +- src/game/GridNotifiersImpl.h | 4 ++-- src/game/Object.cpp | 30 +++++++++++++++++++++--------- src/shared/revision_nr.h | 2 +- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/game/CreatureEventAI.cpp b/src/game/CreatureEventAI.cpp index 10addd297..ddae14fdd 100644 --- a/src/game/CreatureEventAI.cpp +++ b/src/game/CreatureEventAI.cpp @@ -1581,7 +1581,7 @@ bool CreatureEventAI::CanCast(Unit* Target, SpellEntry const *Spell, bool Trigge return false; //Unit is out of range of this spell - if (!m_creature->IsInRange(Target,TempRange->minRange,TempRange->minRange)) + if (!m_creature->IsInRange(Target,TempRange->minRange,TempRange->maxRange)) return false; return true; diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 75d1ef9c9..583732a65 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -540,7 +540,7 @@ void MaNGOS::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; @@ -565,7 +565,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 81ff11d97..ee0ec2edc 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1207,9 +1207,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; @@ -1223,9 +1227,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; @@ -1240,9 +1248,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; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 13bd699da..d73142f5b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7835" + #define REVISION_NR "7836" #endif // __REVISION_NR_H__