[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.
This commit is contained in:
VladimirMangos 2009-05-16 10:03:09 +04:00
parent 7a7ee86f97
commit 45b209df50
4 changed files with 25 additions and 13 deletions

View file

@ -1581,7 +1581,7 @@ bool CreatureEventAI::CanCast(Unit* Target, SpellEntry const *Spell, bool Trigge
return false; return false;
//Unit is out of range of this spell //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 false;
return true; return true;

View file

@ -540,7 +540,7 @@ void MaNGOS::PlayerSearcher<Check>::Visit(PlayerMapType &m)
template<class Builder> template<class Builder>
void MaNGOS::LocalizedPacketDo<Builder>::operator()( Player* p ) 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; uint32 cache_idx = loc_idx+1;
WorldPacket* data; WorldPacket* data;
@ -565,7 +565,7 @@ void MaNGOS::LocalizedPacketDo<Builder>::operator()( Player* p )
template<class Builder> template<class Builder>
void MaNGOS::LocalizedPacketListDo<Builder>::operator()( Player* p ) 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; uint32 cache_idx = loc_idx+1;
WorldPacketList* data_list; WorldPacketList* data_list;

View file

@ -1207,9 +1207,13 @@ bool WorldObject::IsInRange(WorldObject const* obj, float minRange, float maxRan
float sizefactor = GetObjectSize() + obj->GetObjectSize(); float sizefactor = GetObjectSize() + obj->GetObjectSize();
float mindist = minRange + sizefactor; // check only for real range
if(distsq < mindist * mindist) if(minRange > 0.0f)
return false; {
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor; float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist; return distsq < maxdist * maxdist;
@ -1223,9 +1227,13 @@ bool WorldObject::IsInRange2d(float x, float y, float minRange, float maxRange)
float sizefactor = GetObjectSize(); float sizefactor = GetObjectSize();
float mindist = minRange + sizefactor; // check only for real range
if(distsq < mindist * mindist) if(minRange > 0.0f)
return false; {
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor; float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist; 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 sizefactor = GetObjectSize();
float mindist = minRange + sizefactor; // check only for real range
if(distsq < mindist * mindist) if(minRange > 0.0f)
return false; {
float mindist = minRange + sizefactor;
if(distsq < mindist * mindist)
return false;
}
float maxdist = maxRange + sizefactor; float maxdist = maxRange + sizefactor;
return distsq < maxdist * maxdist; return distsq < maxdist * maxdist;

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7835" #define REVISION_NR "7836"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__