[11183] Use map type dependent visibility distance for gameobject, dynamicobject and corpse visibility checks

Also drop no more needed Visibility.Distance.Object config option
This commit is contained in:
SilverIce 2011-02-18 02:09:47 +02:00
parent 0c45eee083
commit d597ffe10e
8 changed files with 5 additions and 33 deletions

View file

@ -252,7 +252,7 @@ bool Corpse::LoadFromDB(uint32 lowguid, Field *fields)
bool Corpse::isVisibleForInState(Player const* u, WorldObject const* viewPoint, bool inVisibleList) const bool Corpse::isVisibleForInState(Player const* u, WorldObject const* viewPoint, bool inVisibleList) const
{ {
return IsInWorld() && u->IsInWorld() && IsWithinDistInMap(viewPoint, World::GetMaxVisibleDistanceForObject() + (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false); return IsInWorld() && u->IsInWorld() && IsWithinDistInMap(viewPoint, GetMap()->GetVisibilityDistance() + (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }
bool Corpse::IsHostileTo( Unit const* unit ) const bool Corpse::IsHostileTo( Unit const* unit ) const

View file

@ -193,7 +193,7 @@ bool DynamicObject::isVisibleForInState(Player const* u, WorldObject const* view
return true; return true;
// normal case // normal case
return IsWithinDistInMap(viewPoint, World::GetMaxVisibleDistanceForObject() + (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false); return IsWithinDistInMap(viewPoint, GetMap()->GetVisibilityDistance() + (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }
bool DynamicObject::IsHostileTo( Unit const* unit ) const bool DynamicObject::IsHostileTo( Unit const* unit ) const

View file

@ -722,7 +722,7 @@ bool GameObject::isVisibleForInState(Player const* u, WorldObject const* viewPoi
} }
// check distance // check distance
return IsWithinDistInMap(viewPoint,World::GetMaxVisibleDistanceForObject() + return IsWithinDistInMap(viewPoint, GetMap()->GetVisibilityDistance() +
(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false); (inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
} }

View file

@ -7901,11 +7901,6 @@ bool Unit::isVisibleForOrDetect(Unit const* u, WorldObject const* viewPoint, boo
if (!IsWithinDistInMap(viewPoint,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), is3dDistance)) if (!IsWithinDistInMap(viewPoint,World::GetMaxVisibleDistanceInFlight()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), is3dDistance))
return false; return false;
} }
else if(!isAlive()) // distance for show body
{
if (!IsWithinDistInMap(viewPoint,World::GetMaxVisibleDistanceForObject()+(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), is3dDistance))
return false;
}
else if(!at_same_transport) // distance for show player/pet/creature (no transport case) else if(!at_same_transport) // distance for show player/pet/creature (no transport case)
{ {
// Any units far than max visible distance for viewer or not in our map are not visible too // Any units far than max visible distance for viewer or not in our map are not visible too
@ -7925,7 +7920,7 @@ bool Unit::isVisibleForOrDetect(Unit const* u, WorldObject const* viewPoint, boo
return false; return false;
// Visible units, always are visible for all units, except for units under invisibility and phases // Visible units, always are visible for all units, except for units under invisibility and phases
if (m_Visibility == VISIBILITY_ON && u->m_invisibilityMask==0 && InSamePhase(u)) if (m_Visibility == VISIBILITY_ON && u->m_invisibilityMask==0)
return true; return true;
// GMs see any players, not higher GMs and all units in any phase // GMs see any players, not higher GMs and all units in any phase
@ -7941,10 +7936,6 @@ bool Unit::isVisibleForOrDetect(Unit const* u, WorldObject const* viewPoint, boo
if (m_Visibility == VISIBILITY_OFF) if (m_Visibility == VISIBILITY_OFF)
return false; return false;
// phased visibility (both must phased in same way)
if(!InSamePhase(u))
return false;
// raw invisibility // raw invisibility
bool invisible = (m_invisibilityMask != 0 || u->m_invisibilityMask !=0); bool invisible = (m_invisibilityMask != 0 || u->m_invisibilityMask !=0);

View file

@ -72,7 +72,6 @@ volatile uint32 World::m_worldLoopCounter = 0;
float World::m_MaxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE; float World::m_MaxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE;
float World::m_MaxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE; float World::m_MaxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE;
float World::m_MaxVisibleDistanceInBGArenas = DEFAULT_VISIBILITY_BGARENAS; float World::m_MaxVisibleDistanceInBGArenas = DEFAULT_VISIBILITY_BGARENAS;
float World::m_MaxVisibleDistanceForObject = DEFAULT_VISIBILITY_DISTANCE;
float World::m_MaxVisibleDistanceInFlight = DEFAULT_VISIBILITY_DISTANCE; float World::m_MaxVisibleDistanceInFlight = DEFAULT_VISIBILITY_DISTANCE;
float World::m_VisibleUnitGreyDistance = 0; float World::m_VisibleUnitGreyDistance = 0;
@ -821,17 +820,6 @@ void World::LoadConfigSettings(bool reload)
m_MaxVisibleDistanceInBGArenas = MAX_VISIBILITY_DISTANCE - m_VisibleUnitGreyDistance; m_MaxVisibleDistanceInBGArenas = MAX_VISIBILITY_DISTANCE - m_VisibleUnitGreyDistance;
} }
m_MaxVisibleDistanceForObject = sConfig.GetFloatDefault("Visibility.Distance.Object", DEFAULT_VISIBILITY_DISTANCE);
if(m_MaxVisibleDistanceForObject < INTERACTION_DISTANCE)
{
sLog.outError("Visibility.Distance.Object can't be less max aggro radius %f",float(INTERACTION_DISTANCE));
m_MaxVisibleDistanceForObject = INTERACTION_DISTANCE;
}
else if(m_MaxVisibleDistanceForObject + m_VisibleObjectGreyDistance > MAX_VISIBILITY_DISTANCE)
{
sLog.outError("Visibility.Distance.Object can't be greater %f",MAX_VISIBILITY_DISTANCE-m_VisibleObjectGreyDistance);
m_MaxVisibleDistanceForObject = MAX_VISIBILITY_DISTANCE - m_VisibleObjectGreyDistance;
}
m_MaxVisibleDistanceInFlight = sConfig.GetFloatDefault("Visibility.Distance.InFlight", DEFAULT_VISIBILITY_DISTANCE); m_MaxVisibleDistanceInFlight = sConfig.GetFloatDefault("Visibility.Distance.InFlight", DEFAULT_VISIBILITY_DISTANCE);
if(m_MaxVisibleDistanceInFlight + m_VisibleObjectGreyDistance > MAX_VISIBILITY_DISTANCE) if(m_MaxVisibleDistanceInFlight + m_VisibleObjectGreyDistance > MAX_VISIBILITY_DISTANCE)
{ {

View file

@ -560,7 +560,6 @@ class World
static float GetMaxVisibleDistanceOnContinents() { return m_MaxVisibleDistanceOnContinents; } static float GetMaxVisibleDistanceOnContinents() { return m_MaxVisibleDistanceOnContinents; }
static float GetMaxVisibleDistanceInInstances() { return m_MaxVisibleDistanceInInstances; } static float GetMaxVisibleDistanceInInstances() { return m_MaxVisibleDistanceInInstances; }
static float GetMaxVisibleDistanceInBGArenas() { return m_MaxVisibleDistanceInBGArenas; } static float GetMaxVisibleDistanceInBGArenas() { return m_MaxVisibleDistanceInBGArenas; }
static float GetMaxVisibleDistanceForObject() { return m_MaxVisibleDistanceForObject; }
static float GetMaxVisibleDistanceInFlight() { return m_MaxVisibleDistanceInFlight; } static float GetMaxVisibleDistanceInFlight() { return m_MaxVisibleDistanceInFlight; }
static float GetVisibleUnitGreyDistance() { return m_VisibleUnitGreyDistance; } static float GetVisibleUnitGreyDistance() { return m_VisibleUnitGreyDistance; }
@ -650,7 +649,6 @@ class World
static float m_MaxVisibleDistanceOnContinents; static float m_MaxVisibleDistanceOnContinents;
static float m_MaxVisibleDistanceInInstances; static float m_MaxVisibleDistanceInInstances;
static float m_MaxVisibleDistanceInBGArenas; static float m_MaxVisibleDistanceInBGArenas;
static float m_MaxVisibleDistanceForObject;
static float m_MaxVisibleDistanceInFlight; static float m_MaxVisibleDistanceInFlight;
static float m_VisibleUnitGreyDistance; static float m_VisibleUnitGreyDistance;

View file

@ -1123,10 +1123,6 @@ GM.AllowAchievementGain = 1
# Max limited by active player zone: ~ 333 # Max limited by active player zone: ~ 333
# Min limit is max aggro radius (45) * Rate.Creature.Aggro # Min limit is max aggro radius (45) * Rate.Creature.Aggro
# #
# Visibility.Distance.Object
# Visible distance for gameobject, dynobject, bodies, corpses, bones
# Min limit is iteraction distance (5)
#
# Visibility.Distance.InFlight # Visibility.Distance.InFlight
# Visible distance for player in flight # Visible distance for player in flight
# Min limit is 0 (not show any objects) # Min limit is 0 (not show any objects)
@ -1149,7 +1145,6 @@ Visibility.GroupMode = 0
Visibility.Distance.Continents = 90 Visibility.Distance.Continents = 90
Visibility.Distance.Instances = 120 Visibility.Distance.Instances = 120
Visibility.Distance.BGArenas = 180 Visibility.Distance.BGArenas = 180
Visibility.Distance.Object = 100
Visibility.Distance.InFlight = 100 Visibility.Distance.InFlight = 100
Visibility.Distance.Grey.Unit = 1 Visibility.Distance.Grey.Unit = 1
Visibility.Distance.Grey.Object = 10 Visibility.Distance.Grey.Object = 10

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 "11182" #define REVISION_NR "11183"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__