Core/Objects: increase sight range of all Infinite, Gigantic and Large objects & correct general default visibility distance
This commit is contained in:
@@ -2136,6 +2136,10 @@ namespace Game.Entities
|
||||
SetMovementAnimKitId(cainfo.movementAnimKit);
|
||||
SetMeleeAnimKitId(cainfo.meleeAnimKit);
|
||||
|
||||
// Check if visibility distance different
|
||||
if (cainfo.visibilityDistanceType != VisibilityDistanceType.Normal)
|
||||
SetVisibilityDistanceOverride(cainfo.visibilityDistanceType);
|
||||
|
||||
//Load Path
|
||||
if (cainfo.path_id != 0)
|
||||
m_path_id = cainfo.path_id;
|
||||
|
||||
@@ -332,6 +332,7 @@ namespace Game.Entities
|
||||
public ushort movementAnimKit;
|
||||
public ushort meleeAnimKit;
|
||||
public uint[] auras;
|
||||
public VisibilityDistanceType visibilityDistanceType;
|
||||
}
|
||||
|
||||
public class VendorItem
|
||||
|
||||
@@ -382,6 +382,18 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
// Check if GameObject is Infinite
|
||||
if (goInfo.IsInfiniteGameObject())
|
||||
SetVisibilityDistanceOverride(VisibilityDistanceType.Infinite);
|
||||
|
||||
// Check if GameObject is Gigantic
|
||||
if (goInfo.IsGiganticGameObject())
|
||||
SetVisibilityDistanceOverride(VisibilityDistanceType.Gigantic);
|
||||
|
||||
// Check if GameObject is Large
|
||||
if (goInfo.IsLargeGameObject())
|
||||
SetVisibilityDistanceOverride(VisibilityDistanceType.Large);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1865,7 +1877,7 @@ namespace Game.Entities
|
||||
return;
|
||||
|
||||
Player player = user.ToPlayer();
|
||||
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(info.artifactForge.conditionID1);
|
||||
PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(info.ArtifactForge.conditionID1);
|
||||
if (playerCondition != null)
|
||||
if (!ConditionManager.IsPlayerMeetingCondition(player, playerCondition))
|
||||
return;
|
||||
|
||||
@@ -180,7 +180,7 @@ namespace Game.Entities
|
||||
public garrisonmonumentplaque GarrisonMonumentPlaque;
|
||||
|
||||
[FieldOffset(68)]
|
||||
public artifactforge artifactForge;
|
||||
public artifactforge ArtifactForge;
|
||||
|
||||
[FieldOffset(68)]
|
||||
public uilink UILink;
|
||||
@@ -431,6 +431,90 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsInfiniteGameObject()
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case GameObjectTypes.Door:
|
||||
return Door.InfiniteAOI != 0;
|
||||
case GameObjectTypes.FlagStand:
|
||||
return FlagStand.InfiniteAOI != 0;
|
||||
case GameObjectTypes.FlagDrop:
|
||||
return FlagDrop.InfiniteAOI != 0;
|
||||
case GameObjectTypes.TrapDoor:
|
||||
return TrapDoor.InfiniteAOI != 0;
|
||||
case GameObjectTypes.NewFlag:
|
||||
return NewFlag.InfiniteAOI != 0;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsGiganticGameObject()
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case GameObjectTypes.Door:
|
||||
return Door.GiganticAOI != 0;
|
||||
case GameObjectTypes.Button:
|
||||
return Button.GiganticAOI != 0;
|
||||
case GameObjectTypes.QuestGiver:
|
||||
return QuestGiver.GiganticAOI != 0;
|
||||
case GameObjectTypes.Chest:
|
||||
return Chest.GiganticAOI != 0;
|
||||
case GameObjectTypes.Generic:
|
||||
return Generic.GiganticAOI != 0;
|
||||
case GameObjectTypes.Trap:
|
||||
return Trap.GiganticAOI != 0;
|
||||
case GameObjectTypes.SpellFocus:
|
||||
return SpellFocus.GiganticAOI != 0;
|
||||
case GameObjectTypes.Goober:
|
||||
return Goober.GiganticAOI != 0;
|
||||
case GameObjectTypes.SpellCaster:
|
||||
return SpellCaster.GiganticAOI != 0;
|
||||
case GameObjectTypes.FlagStand:
|
||||
return FlagStand.GiganticAOI != 0;
|
||||
case GameObjectTypes.FlagDrop:
|
||||
return FlagDrop.GiganticAOI != 0;
|
||||
case GameObjectTypes.ControlZone:
|
||||
return ControlZone.GiganticAOI != 0;
|
||||
case GameObjectTypes.DungeonDifficulty:
|
||||
return DungeonDifficulty.GiganticAOI != 0;
|
||||
case GameObjectTypes.TrapDoor:
|
||||
return TrapDoor.GiganticAOI != 0;
|
||||
case GameObjectTypes.NewFlag:
|
||||
return NewFlag.GiganticAOI != 0;
|
||||
case GameObjectTypes.CapturePoint:
|
||||
return CapturePoint.GiganticAOI != 0;
|
||||
case GameObjectTypes.GarrisonShipment:
|
||||
return GarrisonShipment.GiganticAOI != 0;
|
||||
case GameObjectTypes.UILink:
|
||||
return UILink.GiganticAOI != 0;
|
||||
case GameObjectTypes.GatheringNode:
|
||||
return GatheringNode.GiganticAOI != 0;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsLargeGameObject()
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case GameObjectTypes.Chest:
|
||||
return Chest.LargeAOI != 0;
|
||||
case GameObjectTypes.Generic:
|
||||
return Generic.LargeAOI != 0;
|
||||
case GameObjectTypes.DungeonDifficulty:
|
||||
return DungeonDifficulty.LargeAOI != 0;
|
||||
case GameObjectTypes.GarrisonShipment:
|
||||
return GarrisonShipment.LargeAOI != 0;
|
||||
case GameObjectTypes.ArtifactForge:
|
||||
return ArtifactForge.LargeAOI != 0;
|
||||
case GameObjectTypes.GatheringNode:
|
||||
return GatheringNode.LargeAOI != 0;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
#region TypeStructs
|
||||
public unsafe struct raw
|
||||
{
|
||||
|
||||
@@ -1560,6 +1560,17 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
bool IsVisibilityOverridden() { return m_visibilityDistanceOverride.HasValue; }
|
||||
|
||||
public void SetVisibilityDistanceOverride(VisibilityDistanceType type)
|
||||
{
|
||||
Cypher.Assert(type < VisibilityDistanceType.Max);
|
||||
if (GetTypeId() == TypeId.Player)
|
||||
return;
|
||||
|
||||
m_visibilityDistanceOverride.Set(SharedConst.VisibilityDistances[(int)type]);
|
||||
}
|
||||
|
||||
public virtual void CleanupsBeforeDelete(bool finalCleanup = true)
|
||||
{
|
||||
if (IsInWorld)
|
||||
@@ -1615,7 +1626,9 @@ namespace Game.Entities
|
||||
|
||||
public float GetVisibilityRange()
|
||||
{
|
||||
if (isActiveObject() && !IsTypeId(TypeId.Player))
|
||||
if (IsVisibilityOverridden() && !IsTypeId(TypeId.Player))
|
||||
return m_visibilityDistanceOverride.Value;
|
||||
else if (isActiveObject() && !IsTypeId(TypeId.Player))
|
||||
return SharedConst.MaxVisibilityDistance;
|
||||
else
|
||||
return GetMap().GetVisibilityRange();
|
||||
@@ -1627,7 +1640,9 @@ namespace Game.Entities
|
||||
{
|
||||
if (IsTypeId(TypeId.Player))
|
||||
{
|
||||
if (target != null && target.isActiveObject() && target.ToPlayer() == null)
|
||||
if (target != null && target.IsVisibilityOverridden() && !target.IsTypeId(TypeId.Player))
|
||||
return target.m_visibilityDistanceOverride.Value;
|
||||
else if (target != null && target.isActiveObject() && !target.IsTypeId(TypeId.Player))
|
||||
return SharedConst.MaxVisibilityDistance;
|
||||
else if (ToPlayer().GetCinematicMgr().IsOnCinematic())
|
||||
return SharedConst.DefaultVisibilityInstance;
|
||||
@@ -2902,6 +2917,7 @@ namespace Game.Entities
|
||||
public MovementInfo m_movementInfo;
|
||||
string _name;
|
||||
protected bool m_isActive;
|
||||
Optional<float> m_visibilityDistanceOverride;
|
||||
bool m_isWorldObject;
|
||||
public ZoneScript m_zoneScript;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user