Index: binaries/data/mods/public/simulation/ai/common-api/entitycollection.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/entitycollection.js +++ binaries/data/mods/public/simulation/ai/common-api/entitycollection.js @@ -84,9 +84,10 @@ filter = { "func": filter, "dynamicProperties": [] }; let ret = new Map(); - for (let [id, ent] of this._entities) + this._entities.forEach((ent, id) => { if (filter.func.call(thisp, ent, id, this)) ret.set(id, ent); + }); return new m.EntityCollection(this._ai, ret, this._filters.concat([filter])); }; Index: binaries/data/mods/public/simulation/ai/petra/garrisonManager.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/garrisonManager.js +++ binaries/data/mods/public/simulation/ai/petra/garrisonManager.js @@ -64,6 +64,8 @@ } } + const enemyEnts = gameState.getEnemyEntities().values(); + for (let [id, data] of this.holders.entries()) { let list = data.list; @@ -130,7 +132,7 @@ { let range = holder.attackRange("Ranged") ? holder.attackRange("Ranged").max : 80; let around = { "defenseStructure": false, "meleeSiege": false, "rangeSiege": false, "unit": false }; - for (let ent of gameState.getEnemyEntities().values()) + for (let ent of enemyEnts) { if (ent.hasClass("Structure")) {