diff --git a/binaries/data/mods/public/simulation/ai/petra/baseManager.js b/binaries/data/mods/public/simulation/ai/petra/baseManager.js index de4b5e2c3d..70f4deebc4 100644 --- a/binaries/data/mods/public/simulation/ai/petra/baseManager.js +++ b/binaries/data/mods/public/simulation/ai/petra/baseManager.js @@ -178,6 +178,7 @@ m.BaseManager.prototype.anchorLost = function (gameState, ent) bestbase.assignEntity(gameState, entity); for (let entity of this.buildings.values()) bestbase.assignEntity(gameState, entity); + gameState.ai.HQ.updateTerritories(gameState); }; /** diff --git a/binaries/data/mods/public/simulation/ai/petra/headquarters.js b/binaries/data/mods/public/simulation/ai/petra/headquarters.js index 388d274c75..017286b090 100644 --- a/binaries/data/mods/public/simulation/ai/petra/headquarters.js +++ b/binaries/data/mods/public/simulation/ai/petra/headquarters.js @@ -195,6 +195,8 @@ m.HQ.prototype.checkEvents = function (gameState, events, queues) else if (ent.hasTerritoryInfluence()) this.updateTerritories(gameState); } + else // TODO should be reassigned later if a better base is captured + m.getBestBase(ent, gameState).assignEntity(gameState, ent); } let captureEvents = events["OwnershipChanged"]; @@ -216,8 +218,15 @@ m.HQ.prototype.checkEvents = function (gameState, events, queues) newbase.init(gameState, "captured"); newbase.setAnchor(gameState, ent); this.baseManagers.push(newbase); + this.updateTerritories(gameState); newbase.assignEntity(gameState, ent); } + else + { + // TODO affect it to the nearest base + if (ent.hasTerritoryInfluence()) + this.updateTerritories(gameState); + } } // deal with the different rally points of training units: the rally point is set when the training starts diff --git a/binaries/data/mods/public/simulation/ai/petra/tradeManager.js b/binaries/data/mods/public/simulation/ai/petra/tradeManager.js index 5fda2adae5..c49012fc23 100644 --- a/binaries/data/mods/public/simulation/ai/petra/tradeManager.js +++ b/binaries/data/mods/public/simulation/ai/petra/tradeManager.js @@ -322,14 +322,14 @@ m.TradeManager.prototype.checkEvents = function(gameState, events) } } - // if one market is destroyed or built (i.e. its foundation is destroyed), we should look for a better route + // if one market is destroyed, we should look for a better route let destroyEvents = events["Destroy"]; for (let evt of destroyEvents) { if (!evt.entityObj) continue; let ent = evt.entityObj; - if (!ent || !ent.hasClass("Market") || !gameState.isPlayerAlly(ent.owner())) + if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market") || !gameState.isPlayerAlly(ent.owner())) continue; this.routeProspection = true; gameState.ai.HQ.restartBuild(gameState, "structures/{civ}_market"); @@ -337,14 +337,28 @@ m.TradeManager.prototype.checkEvents = function(gameState, events) return true; } - // same thing for captured markets + // same thing if one market is built + let createEvents = events["Create"]; + for (let evt of createEvents) + { + let ent = gameState.getEntityById(evt.entity); + if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market") || !gameState.isPlayerAlly(ent.owner())) + continue; + this.routeProspection = true; + gameState.ai.HQ.restartBuild(gameState, "structures/{civ}_market"); + gameState.ai.HQ.restartBuild(gameState, "structures/{civ}_dock"); + return true; + } + + + // and same thing for captured markets let capturedEvents = events["OwnershipChanged"]; for (let evt of capturedEvents) { if (!gameState.isPlayerAlly(evt.from) && !gameState.isPlayerAlly(evt.to)) continue; let ent = gameState.getEntityById(evt.entity); - if (!ent || !ent.hasClass("Market")) + if (!ent || ent.foundationProgress() !== undefined || !ent.hasClass("Market")) continue; this.routeProspection = true; gameState.ai.HQ.restartBuild(gameState, "structures/{civ}_market");