Last batch of fix for qBot-xp for the day if all goes well.
This was SVN commit r12358.
This commit is contained in:
parent
508994e4c8
commit
226738d447
@ -488,11 +488,16 @@ CityAttack.prototype.StartAttack = function(gameState, militaryManager){
|
||||
}
|
||||
|
||||
this.unitCollection.move(this.path[0][0], this.path[0][1]);
|
||||
this.unitCollection.setStance("aggressive"); // make sure units won't disperse out of control
|
||||
|
||||
delete this.pathFinder;
|
||||
|
||||
debug ("Started to attack with the plan " + this.name);
|
||||
this.state = "walking";
|
||||
} else {
|
||||
gameState.ai.gameFinished = true;
|
||||
debug ("I do not have any target. So I'll just assume I won the game.");
|
||||
delete this.pathFinder;
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
|
@ -45,7 +45,7 @@ var baseConfig = {
|
||||
"house" : 500,
|
||||
"citizenSoldier" : 65,
|
||||
"villager" : 95,
|
||||
"economicBuilding" : 80,
|
||||
"economicBuilding" : 95,
|
||||
"field" : 20,
|
||||
"advancedSoldier" : 30,
|
||||
"siege" : 10,
|
||||
|
@ -71,7 +71,10 @@ Defence.prototype.update = function(gameState, events, militaryManager){
|
||||
|
||||
// putting unneeded units at rest
|
||||
this.idleDefs.forEach(function(ent) {
|
||||
ent.setMetadata("role", ent.getMetadata("formerrole") );
|
||||
if (ent.getMetadata("formerrole"))
|
||||
ent.setMetadata("role", ent.getMetadata("formerrole") );
|
||||
else
|
||||
ent.setMetadata("role", "worker");
|
||||
ent.setMetadata("subrole", undefined);
|
||||
});
|
||||
|
||||
@ -229,11 +232,29 @@ Defence.prototype.defendFromEnemyArmies = function(gameState, events, militaryMa
|
||||
gameState.setDefcon(3);
|
||||
}
|
||||
|
||||
var nonDefenders = this.myUnits.filter(Filters.or( Filters.not(Filters.byMetadata("role","defence")),Filters.isIdle()));
|
||||
nonDefenders = nonDefenders.filter(Filters.not(Filters.byClass("Female")));
|
||||
// we're having too many.
|
||||
if (this.myUnits.filter(Filters.byMetadata("role","defence")).length > nbOfAttackers*this.defenceRatio*1.3) {
|
||||
this.myUnits.filter(Filters.byMetadata("role","defence")).forEach(function (defender) { //}){
|
||||
if (defender.unitAIOrderData() && defender.unitAIOrderData()["target"]) {
|
||||
if (self.attackerCache[defender.unitAIOrderData()["target"]].length > 3) {
|
||||
// okay release me.
|
||||
defender.stopMoving();
|
||||
if (defender.getMetadata("formerrole"))
|
||||
defender.setMetadata("role", defender.getMetadata("formerrole") );
|
||||
else
|
||||
defender.setMetadata("role", "worker");
|
||||
defender.setMetadata("subrole", undefined);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var nonDefenders = this.myUnits.filter(Filters.or(Filters.not(Filters.byMetadata("role","defence")),Filters.isIdle()));
|
||||
nonDefenders = nonDefenders.filter(Filters.not(Filters.byClass("Female")));
|
||||
nonDefenders = nonDefenders.filter(Filters.not(Filters.byMetadata("subrole","attacking")));
|
||||
var defenceRatio = this.defenceRatio;
|
||||
if (newEnemies.length * defenceRatio> nonDefenders.length) {
|
||||
if (newEnemies.length * defenceRatio > nonDefenders.length) {
|
||||
defenceRatio = 1;
|
||||
}
|
||||
|
||||
@ -264,7 +285,8 @@ Defence.prototype.defendFromEnemyArmies = function(gameState, events, militaryMa
|
||||
for (var i = 0; i < defenceRatio && i < counters.length; i++) {
|
||||
if (counters[i].getMetadata("plan") !== undefined)
|
||||
militaryManager.pausePlan(gameState,counters[i].getMetadata("plan"));
|
||||
counters[i].setMetadata("formerrole", counters[i].getMetadata("role"));
|
||||
if (counters[i].getMetadata("role") == "worker" || counters[i].getMetadata("role") == "attack")
|
||||
counters[i].setMetadata("formerrole", counters[i].getMetadata("role"));
|
||||
counters[i].setMetadata("role","defence");
|
||||
counters[i].setMetadata("subrole","defending");
|
||||
counters[i].attack(+enemy.id());
|
||||
@ -277,7 +299,8 @@ Defence.prototype.defendFromEnemyArmies = function(gameState, events, militaryMa
|
||||
nonDefenders.filter(Filters.byClass("CitizenSoldier")).filterNearest(enemy.position(),defenceRatio-assigned).forEach(function (defender) { //}){
|
||||
if (defender.getMetadata("plan") !== undefined)
|
||||
militaryManager.pausePlan(gameState,defender.getMetadata("plan"));
|
||||
defender.setMetadata("formerrole", defender.getMetadata("role"));
|
||||
if (defender.getMetadata("role") == "worker" || defender.getMetadata("role") == "attack")
|
||||
defender.setMetadata("formerrole", defender.getMetadata("role"));
|
||||
defender.setMetadata("role","defence");
|
||||
defender.setMetadata("subrole","defending");
|
||||
defender.attack(+enemy.id());
|
||||
|
@ -291,10 +291,10 @@ EconomyManager.prototype.assignToFoundations = function(gameState) {
|
||||
var nearestNonBuilders = nonBuilderWorkers.filterNearest(target.position(), this.targetNumBuilders - assigned);
|
||||
|
||||
nearestNonBuilders.forEach(function(ent) {
|
||||
addedWorkers++;
|
||||
ent.setMetadata("subrole", "builder");
|
||||
ent.setMetadata("target-foundation", target);
|
||||
});
|
||||
addedWorkers++;
|
||||
ent.setMetadata("subrole", "builder");
|
||||
ent.setMetadata("target-foundation", target);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -470,6 +470,7 @@ EconomyManager.prototype.getBestResourceBuildSpot = function(gameState, resource
|
||||
|
||||
var territory = Map.createTerritoryMap(gameState);
|
||||
friendlyTiles.multiplyTerritory(gameState,territory);
|
||||
friendlyTiles.annulateTerritory(gameState,territory);
|
||||
|
||||
var resources = ["wood","stone","metal"];
|
||||
for (i in resources) {
|
||||
@ -488,17 +489,18 @@ EconomyManager.prototype.getBestResourceBuildSpot = function(gameState, resource
|
||||
var obstructions = Map.createObstructionMap(gameState);
|
||||
obstructions.expandInfluences();
|
||||
|
||||
var isCivilCenter = false;
|
||||
var bestIdx = friendlyTiles.findBestTile(2, obstructions)[0];
|
||||
var x = ((bestIdx % friendlyTiles.width) + 0.5) * gameState.cellSize;
|
||||
var z = (Math.floor(bestIdx / friendlyTiles.width) + 0.5) * gameState.cellSize;
|
||||
|
||||
if (territory.getOwner([x,z]) === 0) {
|
||||
isCivilCenter = true;
|
||||
bestIdx = friendlyTiles.findBestTile(4, obstructions)[0];
|
||||
x = ((bestIdx % friendlyTiles.width) + 0.5) * gameState.cellSize;
|
||||
z = (Math.floor(bestIdx / friendlyTiles.width) + 0.5) * gameState.cellSize;
|
||||
return [true, [x,z]];
|
||||
}
|
||||
return [false, [x,z]];
|
||||
return [isCivilCenter, [x,z]];
|
||||
};
|
||||
EconomyManager.prototype.updateResourceConcentrations = function(gameState, resource){
|
||||
var self = this;
|
||||
@ -675,8 +677,9 @@ EconomyManager.prototype.tryBartering = function(gameState){
|
||||
};
|
||||
// so this always try to build dropsites.
|
||||
EconomyManager.prototype.buildDropsites = function(gameState, queues){
|
||||
if (queues.economicBuilding.totalLength() === 0 && gameState.countFoundationsWithType(gameState.applyCiv("structures/{civ}_mill")) === 0 &&
|
||||
gameState.countFoundationsWithType(gameState.applyCiv("structures/{civ}_civil_centre")) === 0){
|
||||
if ( (queues.economicBuilding.totalLength() - queues.economicBuilding.countTotalQueuedUnitsWithClass("BarterMarket")) === 0 &&
|
||||
gameState.countFoundationsWithType(gameState.applyCiv("structures/{civ}_mill")) === 0 &&
|
||||
gameState.countFoundationsWithType(gameState.applyCiv("structures/{civ}_civil_centre")) === 0){
|
||||
//only ever build one mill/CC/market at a time
|
||||
if (gameState.getTimeElapsed() > 30 * 1000){
|
||||
for (var resource in this.dropsiteNumbers){
|
||||
@ -804,6 +807,7 @@ EconomyManager.prototype.update = function(gameState, queues, events) {
|
||||
if (e.type === "Destroy") {
|
||||
if (e.msg.metadata && e.msg.metadata[gameState.getPlayerID()] && e.msg.metadata[gameState.getPlayerID()]["worker-object"]){
|
||||
e.msg.metadata[gameState.getPlayerID()]["worker-object"].updateGathererCounts(gameState, true);
|
||||
delete e.msg.metadata[gameState.getPlayerID()]["worker-object"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ EntityTemplate.prototype.getCounteredClasses = function() {
|
||||
if (!this._template.Attack[i].Bonuses)
|
||||
continue;
|
||||
for (o in this._template.Attack[i].Bonuses) {
|
||||
if (this._template.Attack[i].Bonuses[o].Classes == "")
|
||||
if (this._template.Attack[i].Bonuses[o].Classes == undefined)
|
||||
continue;
|
||||
Classes.push([this._template.Attack[i].Bonuses[o].Classes.split(" "), +this._template.Attack[i].Bonuses[o].Multiplier]);
|
||||
}
|
||||
|
@ -348,6 +348,15 @@ Map.prototype.multiplyTerritory = function(gameState,map){
|
||||
this.map[i] *= 2.5;
|
||||
}
|
||||
};
|
||||
|
||||
// sets to 0 any enemy territory
|
||||
Map.prototype.annulateTerritory = function(gameState,map){
|
||||
for (var i = 0; i < this.length; ++i){
|
||||
if (map.getOwnerIndex(i) !== gameState.player && map.getOwnerIndex(i) !== 0)
|
||||
this.map[i] = 0;
|
||||
}
|
||||
};
|
||||
|
||||
// Multiplies current map by the parameter map pixelwise
|
||||
Map.prototype.multiply = function(map, onlyBetter,divider,maxMultiplier){
|
||||
for (var i = 0; i < this.length; ++i){
|
||||
|
@ -385,7 +385,7 @@ MilitaryAttackManager.prototype.buildDefences = function(gameState, queues){
|
||||
}
|
||||
|
||||
if (numFortresses + queues.defenceBuilding.totalLength() < 1){ //gameState.getBuildLimits()["Fortress"]) {
|
||||
if (gameState.getTimeElapsed() > 720 * 1000 + numFortresses * 300 * 1000){
|
||||
if (gameState.getTimeElapsed() > 840 * 1000 + numFortresses * 300 * 1000){
|
||||
if (gameState.ai.pathsToMe && gameState.ai.pathsToMe.length > 0){
|
||||
var position = gameState.ai.pathsToMe.shift();
|
||||
// TODO: pick a fort randomly from the list.
|
||||
@ -410,7 +410,11 @@ MilitaryAttackManager.prototype.constructTrainingBuildings = function(gameState,
|
||||
//build advanced military buildings
|
||||
if (gameState.getTimeElapsed() > 720*1000){
|
||||
if (queues.militaryBuilding.totalLength() === 0){
|
||||
for (var i in this.bAdvanced){
|
||||
var inConst = 0;
|
||||
for (var i in this.bAdvanced)
|
||||
inConst += gameState.countFoundationsWithType(gameState.applyCiv(this.bAdvanced[i]));
|
||||
if (inConst == 0) {
|
||||
var i = Math.floor(Math.random() * this.bAdvanced.length);
|
||||
if (gameState.countEntitiesAndQueuedByType(gameState.applyCiv(this.bAdvanced[i])) < 1){
|
||||
queues.militaryBuilding.addItem(new BuildingConstructionPlan(gameState, this.bAdvanced[i]));
|
||||
}
|
||||
|
@ -144,6 +144,8 @@ BuildingConstructionPlan.prototype.findGoodPosition = function(gameState) {
|
||||
var bestTile = friendlyTiles.findBestTile(10, obstructionMap);
|
||||
var bestIdx = bestTile[0];
|
||||
var bestVal = bestTile[1];
|
||||
} else if (template.genericName() == "House") {
|
||||
radius *= 0.9;
|
||||
}
|
||||
if (bestVal === undefined || bestVal === -1) {
|
||||
var bestTile = friendlyTiles.findBestTile(radius, obstructionMap);
|
||||
|
@ -299,6 +299,7 @@ QueueManager.prototype.update = function(gameState) {
|
||||
if (this.queues[p].outQueueNext().canExecute(gameState)) {
|
||||
this.queues[p].executeNext(gameState);
|
||||
gameState.buildingsBuilt += 1;
|
||||
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
@ -60,9 +60,11 @@ Worker.prototype.update = function(gameState) {
|
||||
} else if(subrole === "builder") {
|
||||
if (this.ent.unitAIState().split(".")[1] !== "REPAIR"){
|
||||
var target = this.ent.getMetadata("target-foundation");
|
||||
this.ent.repair(target);
|
||||
if (target.foundationProgress() === undefined && target.needsRepair() == false)
|
||||
this.ent.setMetadata("subrole", "idle");
|
||||
else
|
||||
this.ent.repair(target);
|
||||
}
|
||||
|
||||
//Engine.PostCommand({"type": "set-shading-color", "entities": [this.ent.id()], "rgb": [0,10,0]});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user