mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[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:
parent
0c45eee083
commit
d597ffe10e
8 changed files with 5 additions and 33 deletions
|
|
@ -252,7 +252,7 @@ bool Corpse::LoadFromDB(uint32 lowguid, Field *fields)
|
|||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ bool DynamicObject::isVisibleForInState(Player const* u, WorldObject const* view
|
|||
return true;
|
||||
|
||||
// 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
|
||||
|
|
|
|||
|
|
@ -722,7 +722,7 @@ bool GameObject::isVisibleForInState(Player const* u, WorldObject const* viewPoi
|
|||
}
|
||||
|
||||
// check distance
|
||||
return IsWithinDistInMap(viewPoint,World::GetMaxVisibleDistanceForObject() +
|
||||
return IsWithinDistInMap(viewPoint, GetMap()->GetVisibilityDistance() +
|
||||
(inVisibleList ? World::GetVisibleObjectGreyDistance() : 0.0f), false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
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)
|
||||
{
|
||||
// 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;
|
||||
|
||||
// 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;
|
||||
|
||||
// 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)
|
||||
return false;
|
||||
|
||||
// phased visibility (both must phased in same way)
|
||||
if(!InSamePhase(u))
|
||||
return false;
|
||||
|
||||
// raw invisibility
|
||||
bool invisible = (m_invisibilityMask != 0 || u->m_invisibilityMask !=0);
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ volatile uint32 World::m_worldLoopCounter = 0;
|
|||
float World::m_MaxVisibleDistanceOnContinents = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_MaxVisibleDistanceInInstances = DEFAULT_VISIBILITY_INSTANCE;
|
||||
float World::m_MaxVisibleDistanceInBGArenas = DEFAULT_VISIBILITY_BGARENAS;
|
||||
float World::m_MaxVisibleDistanceForObject = DEFAULT_VISIBILITY_DISTANCE;
|
||||
|
||||
float World::m_MaxVisibleDistanceInFlight = DEFAULT_VISIBILITY_DISTANCE;
|
||||
float World::m_VisibleUnitGreyDistance = 0;
|
||||
|
|
@ -821,17 +820,6 @@ void World::LoadConfigSettings(bool reload)
|
|||
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);
|
||||
if(m_MaxVisibleDistanceInFlight + m_VisibleObjectGreyDistance > MAX_VISIBILITY_DISTANCE)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -560,7 +560,6 @@ class World
|
|||
static float GetMaxVisibleDistanceOnContinents() { return m_MaxVisibleDistanceOnContinents; }
|
||||
static float GetMaxVisibleDistanceInInstances() { return m_MaxVisibleDistanceInInstances; }
|
||||
static float GetMaxVisibleDistanceInBGArenas() { return m_MaxVisibleDistanceInBGArenas; }
|
||||
static float GetMaxVisibleDistanceForObject() { return m_MaxVisibleDistanceForObject; }
|
||||
|
||||
static float GetMaxVisibleDistanceInFlight() { return m_MaxVisibleDistanceInFlight; }
|
||||
static float GetVisibleUnitGreyDistance() { return m_VisibleUnitGreyDistance; }
|
||||
|
|
@ -650,7 +649,6 @@ class World
|
|||
static float m_MaxVisibleDistanceOnContinents;
|
||||
static float m_MaxVisibleDistanceInInstances;
|
||||
static float m_MaxVisibleDistanceInBGArenas;
|
||||
static float m_MaxVisibleDistanceForObject;
|
||||
|
||||
static float m_MaxVisibleDistanceInFlight;
|
||||
static float m_VisibleUnitGreyDistance;
|
||||
|
|
|
|||
|
|
@ -1123,10 +1123,6 @@ GM.AllowAchievementGain = 1
|
|||
# Max limited by active player zone: ~ 333
|
||||
# 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
|
||||
# Visible distance for player in flight
|
||||
# Min limit is 0 (not show any objects)
|
||||
|
|
@ -1149,7 +1145,6 @@ Visibility.GroupMode = 0
|
|||
Visibility.Distance.Continents = 90
|
||||
Visibility.Distance.Instances = 120
|
||||
Visibility.Distance.BGArenas = 180
|
||||
Visibility.Distance.Object = 100
|
||||
Visibility.Distance.InFlight = 100
|
||||
Visibility.Distance.Grey.Unit = 1
|
||||
Visibility.Distance.Grey.Object = 10
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "11182"
|
||||
#define REVISION_NR "11183"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue