From accfd151ede0fcd2036880672de1577bef0f8d57 Mon Sep 17 00:00:00 2001 From: Atrik Date: Mon, 18 May 2026 14:54:26 +0200 Subject: [PATCH] Filter out hidden targets in CanAttack Units should not be able to attack entities with "hidden" visibility. Visible and fogged (mirage/retainInFog) targets remain attackable. --- .../data/mods/public/simulation/components/Attack.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js index 138f50de8d..37a646d721 100644 --- a/binaries/data/mods/public/simulation/components/Attack.js +++ b/binaries/data/mods/public/simulation/components/Attack.js @@ -286,6 +286,15 @@ Attack.prototype.CanAttack = function(target, wantedTypes) if (!cmpTargetPlayer || !cmpEntityPlayer) return false; + // Must be visible or miraged / with retainInFog flag, not completely hidden + const cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); + if (cmpRangeManager) + { + const visibility = cmpRangeManager.GetLosVisibility(target, cmpEntityPlayer.GetPlayerID()); + if (visibility == "hidden") + return false; + } + const types = this.GetAttackTypes(wantedTypes); const entityOwner = cmpEntityPlayer.GetPlayerID(); const targetOwner = cmpTargetPlayer.GetPlayerID();