diff --git a/binaries/data/mods/public/simulation/ai/petra/attackPlan.js b/binaries/data/mods/public/simulation/ai/petra/attackPlan.js index 10a233f908..0e08e16405 100644 --- a/binaries/data/mods/public/simulation/ai/petra/attackPlan.js +++ b/binaries/data/mods/public/simulation/ai/petra/attackPlan.js @@ -822,7 +822,7 @@ m.AttackPlan.prototype.StartAttack = function(gameState) if (this.Config.debug) warn("start attack " + this.name + " with type " + this.type); - if (!this.target) // our target was destroyed during our preparation + if (!this.target || !gameState.getEntityById(this.target.id())) // our target was destroyed during our preparation { if (!this.targetPos) // should not happen return false; diff --git a/binaries/data/mods/public/simulation/ai/petra/headquarters.js b/binaries/data/mods/public/simulation/ai/petra/headquarters.js index 9a30f8b299..473d957fd9 100644 --- a/binaries/data/mods/public/simulation/ai/petra/headquarters.js +++ b/binaries/data/mods/public/simulation/ai/petra/headquarters.js @@ -254,7 +254,11 @@ m.HQ.prototype.getSeaIndex = function (gameState, index1, index2) else { if (this.Config.debug > 0) - warn("bad path ??? " + uneval(path)); + { + warn("bad path from " + index1 + " to " + index2 + " ??? " + uneval(path)); + warn(" regionLinks start " + uneval(gameState.ai.accessibility.regionLinks[index1])); + warn(" regionLinks end " + uneval(gameState.ai.accessibility.regionLinks[index2])); + } return undefined; } }; @@ -1283,7 +1287,10 @@ m.HQ.prototype.checkBaseExpansion = function(gameState,queues) // then expand if we have lots of units var numUnits = gameState.getOwnUnits().length; var numCCs = gameState.countEntitiesByType(gameState.applyCiv(this.bBase[0]), true); - if (Math.floor(numUnits/60) >= numCCs) + var popForBase = this.Config.Economy.popForTown + 20; + if (this.saveResources) + popForBase = this.Config.Economy.popForTown + 5; + if (Math.floor(numUnits/popForBase) >= numCCs) { if (this.Config.debug > 1) warn("try to build a new base because of population " + numUnits + " for " + numCCs + " CCs"); diff --git a/binaries/data/mods/public/simulation/ai/petra/worker.js b/binaries/data/mods/public/simulation/ai/petra/worker.js index 38050fca45..0efcdb8c2a 100644 --- a/binaries/data/mods/public/simulation/ai/petra/worker.js +++ b/binaries/data/mods/public/simulation/ai/petra/worker.js @@ -742,15 +742,17 @@ m.Worker.prototype.moveAway = function(baseManager, gameState){ var pos = this.ent.position(); var dist = Math.min(); var destination = pos; - for (var i = 0; i < gatherers.length; ++i) + for (var gatherer of gatherers) { - if (gatherers[i].isIdle()) + if (!gatherer.position() || gatherer.getMetadata(PlayerID, "transport") !== undefined) continue; - var distance = API3.SquareVectorDistance(pos, gatherers[i].position()); + if (gatherer.isIdle()) + continue; + var distance = API3.SquareVectorDistance(pos, gatherer.position()); if (distance > dist) continue; dist = distance; - destination = gatherers[i].position(); + destination = gatherer.position(); } this.ent.move(destination[0], destination[1]); };