Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -3581,7 +3581,10 @@ // Exclude allies, and self // TODO: How to handle neutral players - Special query to attack military only? - var players = cmpPlayer.GetEnemies(); + let players = cmpPlayer.GetEnemies(); + if (!players.length) + return; + var range = this.GetQueryRange(IID_Attack); this.losRangeQuery = cmpRangeManager.CreateActiveQuery(this.entity, range.min, range.max, players, IID_Resistance, cmpRangeManager.GetEntityFlagMask("normal")); Index: binaries/data/mods/public/simulation/components/tests/test_UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_UnitAI.js +++ binaries/data/mods/public/simulation/components/tests/test_UnitAI.js @@ -61,7 +61,7 @@ AddMock(playerEntity, IID_Player, { IsAlly: function() { return false; }, IsEnemy: function() { return true; }, - GetEnemies: function() { return []; }, + GetEnemies: function() { return [2]; }, }); AddMock(SYSTEM_ENTITY, IID_ObstructionManager, { @@ -219,7 +219,7 @@ AddMock(playerEntity, IID_Player, { IsAlly: function() { return false; }, IsEnemy: function() { return true; }, - GetEnemies: function() { return []; }, + GetEnemies: function() { return [2]; }, }); // create units Index: binaries/data/mods/public/simulation/helpers/Attacking.js =================================================================== --- binaries/data/mods/public/simulation/helpers/Attacking.js +++ binaries/data/mods/public/simulation/helpers/Attacking.js @@ -303,7 +303,7 @@ Attacking.prototype.EntitiesNearPoint = function(origin, radius, players) { // If there is insufficient data return an empty array. - if (!origin || !radius || !players) + if (!origin || !radius || !players || !players.length) return []; let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); @@ -312,8 +312,12 @@ let gaiaEntities = []; let gaiaIndex = players.indexOf(0); if (gaiaIndex !== -1) + { // splice() modifies players in-place and returns [0] gaiaEntities = gaiaEntities.concat(cmpRangeManager.ExecuteQueryAroundPos(origin, 0, radius, players.splice(gaiaIndex, 1), IID_Health)); + if (!players.length) + return gaiaEntities; + } return cmpRangeManager.ExecuteQueryAroundPos(origin, 0, radius, players, 0).concat(gaiaEntities); };