Core/Objects: increase sight range of all Infinite, Gigantic and Large objects & correct general default visibility distance

This commit is contained in:
hondacrx
2019-01-16 19:42:22 -05:00
parent 055e9d1776
commit ec7807eaac
9 changed files with 186 additions and 19 deletions
@@ -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
+13 -1
View File
@@ -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
{
+18 -2
View File
@@ -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;