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
|
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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue