mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-22 13:16:23 +00:00
fix(Core): increase visibility distance of large game objects (#1788)
This commit is contained in:
@@ -351,6 +351,10 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa
|
||||
LastUsedScriptID = GetGOInfo()->ScriptId;
|
||||
AIM_Initialize();
|
||||
|
||||
// Check if GameObject is Large
|
||||
if (goinfo->IsLargeGameObject())
|
||||
SetVisibilityDistanceOverride(true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -524,6 +524,22 @@ struct GameObjectTemplate
|
||||
}
|
||||
}
|
||||
|
||||
bool IsLargeGameObject() const
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case GAMEOBJECT_TYPE_BUTTON: return button.large != 0;
|
||||
case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.large != 0;
|
||||
case GAMEOBJECT_TYPE_GENERIC: return _generic.large != 0;
|
||||
case GAMEOBJECT_TYPE_TRAP: return trap.large != 0;
|
||||
case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.large != 0;
|
||||
case GAMEOBJECT_TYPE_GOOBER: return goober.large != 0;
|
||||
case GAMEOBJECT_TYPE_SPELLCASTER: return spellcaster.large != 0;
|
||||
case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.large != 0;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool IsGameObjectForQuests() const
|
||||
{
|
||||
return IsForQuests;
|
||||
|
||||
@@ -968,7 +968,7 @@ WorldObject::WorldObject(bool isWorldObject) : WorldLocation(),
|
||||
#ifdef ELUNA
|
||||
elunaEvents(NULL),
|
||||
#endif
|
||||
LastUsedScriptID(0), m_name(""), m_isActive(false), m_isWorldObject(isWorldObject), m_zoneScript(NULL),
|
||||
LastUsedScriptID(0), m_name(""), m_isActive(false), m_isVisibilityDistanceOverride(false), m_isWorldObject(isWorldObject), m_zoneScript(NULL),
|
||||
m_transport(NULL), m_currMap(NULL), m_InstanceId(0),
|
||||
m_phaseMask(PHASEMASK_NORMAL), m_notifyflags(0), m_executed_notifies(0)
|
||||
{
|
||||
@@ -1039,6 +1039,14 @@ void WorldObject::setActive(bool on)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldObject::SetVisibilityDistanceOverride(bool isVisibilityDistanceOverride)
|
||||
{
|
||||
if (GetTypeId() == TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
m_isVisibilityDistanceOverride = isVisibilityDistanceOverride;
|
||||
}
|
||||
|
||||
void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/)
|
||||
{
|
||||
if (IsInWorld())
|
||||
@@ -1515,7 +1523,14 @@ float WorldObject::GetVisibilityRange() const
|
||||
if (isActiveObject() && !ToPlayer())
|
||||
return MAX_VISIBILITY_DISTANCE;
|
||||
else if (GetTypeId() == TYPEID_GAMEOBJECT)
|
||||
return IsInWintergrasp() ? VISIBILITY_DIST_WINTERGRASP+VISIBILITY_INC_FOR_GOBJECTS : GetMap()->GetVisibilityRange()+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
{
|
||||
if (IsInWintergrasp())
|
||||
return VISIBILITY_DIST_WINTERGRASP+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
else if (IsVisibilityOverridden())
|
||||
return MAX_VISIBILITY_DISTANCE;
|
||||
else
|
||||
return GetMap()->GetVisibilityRange()+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
}
|
||||
else
|
||||
return IsInWintergrasp() ? VISIBILITY_DIST_WINTERGRASP : GetMap()->GetVisibilityRange();
|
||||
}
|
||||
@@ -1531,7 +1546,14 @@ float WorldObject::GetSightRange(const WorldObject* target) const
|
||||
if (target->isActiveObject() && !target->ToPlayer())
|
||||
return MAX_VISIBILITY_DISTANCE;
|
||||
else if (target->GetTypeId() == TYPEID_GAMEOBJECT)
|
||||
return IsInWintergrasp() && target->IsInWintergrasp() ? VISIBILITY_DIST_WINTERGRASP+VISIBILITY_INC_FOR_GOBJECTS : GetMap()->GetVisibilityRange()+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
{
|
||||
if (IsInWintergrasp() && target->IsInWintergrasp())
|
||||
return VISIBILITY_DIST_WINTERGRASP+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
else if (target->IsVisibilityOverridden())
|
||||
return MAX_VISIBILITY_DISTANCE;
|
||||
else
|
||||
return GetMap()->GetVisibilityRange()+VISIBILITY_INC_FOR_GOBJECTS;
|
||||
}
|
||||
|
||||
return IsInWintergrasp() && target->IsInWintergrasp() ? VISIBILITY_DIST_WINTERGRASP : GetMap()->GetVisibilityRange();
|
||||
}
|
||||
|
||||
@@ -974,6 +974,8 @@ class WorldObject : public Object, public WorldLocation
|
||||
|
||||
bool isActiveObject() const { return m_isActive; }
|
||||
void setActive(bool isActiveObject);
|
||||
bool IsVisibilityOverridden() const { return m_isVisibilityDistanceOverride; }
|
||||
void SetVisibilityDistanceOverride(bool isVisibilityDistanceOverride);
|
||||
void SetWorldObject(bool apply);
|
||||
bool IsPermanentWorldObject() const { return m_isWorldObject; }
|
||||
bool IsWorldObject() const;
|
||||
@@ -1018,6 +1020,7 @@ class WorldObject : public Object, public WorldLocation
|
||||
protected:
|
||||
std::string m_name;
|
||||
bool m_isActive;
|
||||
bool m_isVisibilityDistanceOverride;
|
||||
const bool m_isWorldObject;
|
||||
ZoneScript* m_zoneScript;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user