Index: ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/common-api/gamestate.js @@ -810,9 +810,10 @@ */ m.GameState.prototype.findBuilder = function(template) { + let civ = this.getPlayerCiv(); for (let ent of this.getOwnUnits().values()) { - let buildable = ent.buildableEntities(); + let buildable = ent.buildableEntities(civ); if (buildable && buildable.indexOf(template) !== -1) return ent; } Index: ps/trunk/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js +++ ps/trunk/binaries/data/mods/public/simulation/ai/petra/queueplanBuilding.js @@ -38,10 +38,16 @@ { Engine.ProfileStart("Building construction start"); - // We don't care which builder we assign, since they won't actually - // do the building themselves - all we care about is that there is - // at least one unit that can start the foundation + // We don't care which builder we assign, since they won't actually do + // the building themselves - all we care about is that there is at least + // one unit that can start the foundation (should always be the case here). let builder = gameState.findBuilder(this.type); + if (!builder) + { + API3.warn("petra error: builder not found when starting construction."); + Engine.ProfileStop(); + return; + } let pos = this.findGoodPosition(gameState); if (!pos) Index: ps/trunk/binaries/data/mods/public/simulation/components/Builder.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/components/Builder.js +++ ps/trunk/binaries/data/mods/public/simulation/components/Builder.js @@ -27,19 +27,14 @@ Builder.prototype.GetEntitiesList = function() { let string = this.template.Entities._string; - if (!string) return []; - let cmpIdentity = Engine.QueryInterface(this.entity, IID_Identity); - if (cmpIdentity) - string = string.replace(/\{civ\}/g, cmpIdentity.GetCiv()); - - let entities = string.split(/\s+/); - let cmpPlayer = QueryOwnerInterface(this.entity); if (!cmpPlayer) - return entities; + return []; + + let entities = string.replace(/\{civ\}/g, cmpPlayer.GetCiv()).split(/\s+/); let disabledTemplates = cmpPlayer.GetDisabledTemplates();