fix(Core/Spells): Improvements to Far Sight spell: (#11683)

* fix(Core/Spells): Improvements to Far Sight spell:

Far Sight should not interrupt while casting another spell.
Corrected setting Far Sight object as an active object.
Fixed grid activation range for active dynamic objects.
When Far Sight is over, the camera be reset to player.
Enable swapping camera between Far Sight and Sentry Totem.
Fixes #6368

* Update.

* Update.
This commit is contained in:
UltraNix
2022-05-23 09:26:51 +02:00
committed by GitHub
parent 0c209dae75
commit 99f1cd84e2
12 changed files with 127 additions and 39 deletions

View File

@@ -65,7 +65,7 @@ constexpr float VisibilityDistances[AsUnderlyingType(VisibilityDistanceType::Max
VISIBILITY_DISTANCE_SMALL,
VISIBILITY_DISTANCE_LARGE,
VISIBILITY_DISTANCE_GIGANTIC,
MAX_VISIBILITY_DISTANCE
VISIBILITY_DISTANCE_INFINITE
};
Object::Object() : m_PackGUID(sizeof(uint64) + 1)
@@ -1631,7 +1631,7 @@ float WorldObject::GetGridActivationRange() const
{
return ToCreature()->m_SightDistance;
}
else if (GetTypeId() == TYPEID_GAMEOBJECT && ToGameObject()->IsTransport() && isActiveObject())
else if (((GetTypeId() == TYPEID_GAMEOBJECT && ToGameObject()->IsTransport()) || GetTypeId() == TYPEID_DYNAMICOBJECT) && isActiveObject())
{
return GetMap()->GetVisibilityRange();
}
@@ -1643,7 +1643,7 @@ float WorldObject::GetVisibilityRange() const
{
if (IsVisibilityOverridden() && GetTypeId() == TYPEID_UNIT)
{
return MAX_VISIBILITY_DISTANCE;
return *m_visibilityDistanceOverride;
}
else if (GetTypeId() == TYPEID_GAMEOBJECT)
{
@@ -1654,7 +1654,7 @@ float WorldObject::GetVisibilityRange() const
}
else if (IsVisibilityOverridden())
{
return MAX_VISIBILITY_DISTANCE;
return *m_visibilityDistanceOverride;
}
else
{
@@ -1676,7 +1676,7 @@ float WorldObject::GetSightRange(WorldObject const* target) const
{
if (target->IsVisibilityOverridden() && target->GetTypeId() == TYPEID_UNIT)
{
return MAX_VISIBILITY_DISTANCE;
return *target->m_visibilityDistanceOverride;
}
else if (target->GetTypeId() == TYPEID_GAMEOBJECT)
{
@@ -1686,7 +1686,7 @@ float WorldObject::GetSightRange(WorldObject const* target) const
}
else if (target->IsVisibilityOverridden())
{
return MAX_VISIBILITY_DISTANCE;
return *target->m_visibilityDistanceOverride;
}
else if (ToPlayer()->GetCinematicMgr()->IsOnCinematic())
{

View File

@@ -31,6 +31,7 @@
#define MAX_VISIBILITY_DISTANCE 250.0f // max distance for visible objects, experimental
#define SIGHT_RANGE_UNIT 50.0f
#define MAX_SEARCHER_DISTANCE 150.0f // pussywizard: replace the use of MAX_VISIBILITY_DISTANCE in searchers, because MAX_VISIBILITY_DISTANCE is quite too big for this purpose
#define VISIBILITY_DISTANCE_INFINITE 533.0f
#define VISIBILITY_DISTANCE_GIGANTIC 400.0f
#define VISIBILITY_DISTANCE_LARGE 200.0f
#define VISIBILITY_DISTANCE_NORMAL 100.0f