using Content.Server.Interaction; namespace Content.Server.NPC.HTN.Preconditions; public sealed class TargetInLOSPrecondition : HTNPrecondition { private InteractionSystem _interaction = default!; [ViewVariables, DataField("targetKey")] public string TargetKey = "CombatTarget"; [ViewVariables, DataField("rangeKey")] public string RangeKey = "RangeKey"; public override void Initialize(IEntitySystemManager sysManager) { base.Initialize(sysManager); _interaction = sysManager.GetEntitySystem(); } public override bool IsMet(NPCBlackboard blackboard) { var owner = blackboard.GetValue(NPCBlackboard.Owner); if (!blackboard.TryGetValue(TargetKey, out var target)) return false; var range = blackboard.GetValueOrDefault(RangeKey); return _interaction.InRangeUnobstructed(owner, target, range); } }