h
This commit is contained in:
parent
ba28e46f2f
commit
08f3717542
@ -162,6 +162,10 @@ public class baseExpensionAI {
|
||||
}
|
||||
}
|
||||
|
||||
if(mainThread.ec.difficulty == 1)
|
||||
lowGoldmineThreshold = 22500;
|
||||
else if(mainThread.ec.difficulty == 0)
|
||||
lowGoldmineThreshold = 15000;
|
||||
|
||||
if(myMCV == null && expensionGoldMine.goldDeposite >= 17500 && (mainThread.ec.theEconomyManagerAI.preferedGoldMine.goldDeposite < lowGoldmineThreshold ||
|
||||
(!hasRefineryNearTheGoldmine(mainThread.ec.theEconomyManagerAI.preferedGoldMine) && !hasConstructionYardNearGoldMine(mainThread.ec.theEconomyManagerAI.preferedGoldMine)) ||
|
||||
@ -428,6 +432,9 @@ public class baseExpensionAI {
|
||||
|
||||
//3 stealth tanks will make a perfect scout team for the base expansion exploration
|
||||
public boolean needStealthTank(){
|
||||
if(mainThread.ec.difficulty == 0)
|
||||
return false;
|
||||
|
||||
for(int i = 0; i < scouts.length; i++){
|
||||
if((scouts[i] == null || scouts[i].currentHP <=0) && frameAI > 800){
|
||||
return true;
|
||||
|
@ -173,7 +173,7 @@ public class buildingManagerAI {
|
||||
|
||||
|
||||
//build more factory if we have plenty of money in the bank
|
||||
if(theBaseInfo.currentCredit > 2200 && theBaseInfo.canBuildFactory && theBaseInfo.numberOfFactory < 5 && theBaseInfo.numberOfFactory <= mainThread.ec.theEconomyManagerAI.numberOfharvesters/2){
|
||||
if(theBaseInfo.currentCredit > 2200 && mainThread.ec.difficulty > 0 && theBaseInfo.canBuildFactory && theBaseInfo.numberOfFactory < 5 && theBaseInfo.numberOfFactory <= mainThread.ec.theEconomyManagerAI.numberOfharvesters/2){
|
||||
addBuildingToQueue(105);
|
||||
}
|
||||
|
||||
|
@ -130,15 +130,6 @@ public class combatManagerAI {
|
||||
combatCenterZ = mainThread.ec.theUnitProductionAI.combatAICenterZ;
|
||||
|
||||
|
||||
//System.out.println(combatCenterX + " " + combatCenterZ + " " + currentState + " " + numberOfUnitInCombatRadius);
|
||||
|
||||
|
||||
if(Float.isNaN(combatCenterX) || Float.isNaN(combatCenterZ)) {
|
||||
// combatCenterX = 0;
|
||||
// combatCenterZ= 0;
|
||||
}
|
||||
|
||||
|
||||
boolean frontalTroopIverwhelmed = false;
|
||||
boolean shouldAttack = false;
|
||||
boolean playerHasBecomeStrongerThanAIDuringMarching = false;
|
||||
@ -161,7 +152,7 @@ public class combatManagerAI {
|
||||
if(currentState == booming){
|
||||
//enemy AI compares its own force with player's force, then make a decision whether it should attack or not
|
||||
attackTime = standardAttackTime;
|
||||
if(mainThread.ec.theMapAwarenessAI.canRushPlayer)
|
||||
if(mainThread.ec.theMapAwarenessAI.canRushPlayer && mainThread.ec.difficulty > 0)
|
||||
attackTime = rushAttackTime;
|
||||
|
||||
int targetPlayerExpension = mainThread.ec.theMapAwarenessAI.targetPlayerExpension;
|
||||
@ -403,8 +394,12 @@ public class combatManagerAI {
|
||||
}
|
||||
}
|
||||
|
||||
if(mainThread.ec.difficulty < 1)
|
||||
staticDefenseAhead = false;
|
||||
|
||||
|
||||
//if a rush tactics is denied by the player (e.g player builds static defenses around natural), then briefly suspend the attacking force (wait for rocket tanks to take out the static defenses)
|
||||
if(frameAI < standardAttackTime && mainThread.ec.theMapAwarenessAI.canRushPlayer && distanceToTower < 2){
|
||||
if(frameAI < standardAttackTime && mainThread.ec.theMapAwarenessAI.canRushPlayer && distanceToTower < 2 && mainThread.ec.difficulty > 0){
|
||||
if(Math.abs(attackPosition.x - myRallyPointX) > 12 || Math.abs(attackPosition.z - myRallyPointZ) > 12) {
|
||||
for(int i = 0; i < troopsControlledByCombatAI.length; i++) {
|
||||
if(troopsControlledByCombatAI[i] != null && troopsControlledByCombatAI[i].currentHP > 0 && troopsControlledByCombatAI[i].type != 1) {
|
||||
@ -625,6 +620,8 @@ public class combatManagerAI {
|
||||
|
||||
for(int i = 0; i < mainThread.ec.theUnitProductionAI.numberOfCombatUnit; i++){
|
||||
if(team[i] != null && team[i].currentHP > 0){
|
||||
|
||||
if(mainThread.ec.difficulty > 0) {
|
||||
//stop chasing player unit if it has got out of sight
|
||||
if(team[i].targetObject != null && team[i].targetObject.currentHP >0) {
|
||||
int targetPositionIndex = (int)(team[i].targetObject.centre.x*64)/16 + (127 - (int)(team[i].targetObject.centre.z*64)/16)*128;
|
||||
@ -666,6 +663,11 @@ public class combatManagerAI {
|
||||
team[i].secondaryCommand = solidObject.attackMove;
|
||||
|
||||
}
|
||||
}else {
|
||||
team[i].attackMoveTo(attackPosition.x, attackPosition.z);
|
||||
team[i].currentCommand = solidObject.attackMove;
|
||||
team[i].secondaryCommand = solidObject.attackMove;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -729,6 +731,8 @@ public class combatManagerAI {
|
||||
|
||||
public boolean checkIfAIHasBiggerForce(float ratio){
|
||||
|
||||
|
||||
|
||||
int numberOfLightTanks_AI = mainThread.ec.theUnitProductionAI.numberOfLightTanksControlledByCombatAI;
|
||||
int numberOfRocketTanks_AI = mainThread.ec.theUnitProductionAI.numberOfRocketTanksControlledByCombatAI;
|
||||
int numberOfStealthTanks_AI = mainThread.ec.theUnitProductionAI.numberOfStealthTanksControlledByCombatAI;
|
||||
@ -767,6 +771,8 @@ public class combatManagerAI {
|
||||
|
||||
//System.out.println("unrevealedPlayerForceStrength" + unrevealedPlayerForceStrength + " " + "enemyAIForceStrength " + enemyAIForceStrength + " " + "playerForceStrength" + playerForceStrength);
|
||||
|
||||
|
||||
|
||||
return enemyAIForceStrength > 0 && playerForceStrength/enemyAIForceStrength < ratio;
|
||||
}
|
||||
|
||||
|
@ -80,6 +80,7 @@ public class defenseManagerAI {
|
||||
lightTanksControlledByCombatAI = mainThread.ec.theUnitProductionAI.lightTanksControlledByCombatAI;
|
||||
|
||||
//after 500 seconds mark, borrow 2 stealth tanks from combat manager, and send them to guard western and southern side of the main base
|
||||
if(mainThread.ec.difficulty == 2) {
|
||||
if(frameAI >= 450 && mainThread.ec.theCombatManagerAI.checkIfAIHasBiggerForce(0.8f)) {
|
||||
for(int i = 0; i < 2; i++) {
|
||||
if(observers[i] == null || observers[i].currentHP <=0) {
|
||||
@ -174,6 +175,7 @@ public class defenseManagerAI {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//send units to deal with minor threat on the map if there is any
|
||||
vector mainPlayerForceLocation = mainThread.ec.theMapAwarenessAI.mainPlayerForceLocation;
|
||||
|
@ -105,6 +105,7 @@ public class enemyCommander {
|
||||
}
|
||||
|
||||
if(mainThread.gameFrame % 30 == 3){
|
||||
if(difficulty > 0)
|
||||
theScoutingManagerAI.processAI();
|
||||
}
|
||||
|
||||
@ -121,16 +122,18 @@ public class enemyCommander {
|
||||
}
|
||||
|
||||
if(mainThread.gameFrame % 30 == 7){
|
||||
if(difficulty > 0)
|
||||
theDefenseManagerAI.processAI();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(difficulty == 2){
|
||||
theHarassmentAI.processAI();
|
||||
|
||||
|
||||
//if(mainThread.frameIndex % 5 == 0){
|
||||
theMicroManagementAI.processAI();
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ public class unitProductionAI {
|
||||
|
||||
rallyPoint.set(x - 2f, 0, z - 1.5f);
|
||||
|
||||
if(frameAI < 240) {
|
||||
if(frameAI < 240 && mainThread.ec.difficulty == 2) {
|
||||
rallyPoint.set(mainThread.theAssetManager.goldMines[5].centre);
|
||||
}
|
||||
}else {
|
||||
@ -147,6 +147,7 @@ public class unitProductionAI {
|
||||
}
|
||||
|
||||
|
||||
if(mainThread.ec.difficulty > 0) {
|
||||
//make decision on what unit to produce
|
||||
int numberOfPlayerGunTurrets= mainThread.ec.theMapAwarenessAI.numberOfGunTurret_player;
|
||||
int numberOfPlayerMissileTurrets= mainThread.ec.theMapAwarenessAI.numberOfMissileTurret_player;
|
||||
@ -194,7 +195,7 @@ public class unitProductionAI {
|
||||
}
|
||||
|
||||
//make decision on what tech to research
|
||||
if(mainThread.ec.theBuildingManagerAI.theBaseInfo.numberOfCommunicationCenter > 0) {
|
||||
if(mainThread.ec.theBuildingManagerAI.theBaseInfo.numberOfCommunicationCenter > 0 && mainThread.ec.difficulty > 1) {
|
||||
if(mainThread.ec.theDefenseManagerAI.needMissileTurret || theBaseInfo.currentCredit > 1500 && frameAI > 450) {
|
||||
if(!communicationCenter.rapidfireResearched_enemy) {
|
||||
if(communicationCenter.rapidfireResearchProgress_enemy == 255){
|
||||
@ -204,7 +205,7 @@ public class unitProductionAI {
|
||||
}
|
||||
}
|
||||
|
||||
if(mainThread.ec.theEconomyManagerAI.numberOfharvesters >= 6 && theBaseInfo.currentCredit > 1500) {
|
||||
if(mainThread.ec.theEconomyManagerAI.numberOfharvesters >= 6 && theBaseInfo.currentCredit > 1500 && mainThread.ec.difficulty > 1) {
|
||||
if(!communicationCenter.harvesterSpeedResearched_enemy) {
|
||||
if(communicationCenter.harvesterSpeedResearchProgress_enemy == 255){
|
||||
communicationCenter.researchHarvesterSpeed(1);
|
||||
@ -256,6 +257,19 @@ public class unitProductionAI {
|
||||
|
||||
|
||||
}
|
||||
}else {
|
||||
int roll = gameData.getRandom();
|
||||
if(roll < 612) {
|
||||
currentProductionOrder = produceLightTank;
|
||||
}else if(roll >= 612 && roll < 700) {
|
||||
currentProductionOrder = produceRocketTank;
|
||||
}else if(roll >= 700 && roll < 900) {
|
||||
currentProductionOrder = produceStealthTank;
|
||||
}else {
|
||||
currentProductionOrder = produceHeavyTank;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
for(int i = 0; i < mainThread.theAssetManager.factories.length; i++){
|
||||
@ -301,6 +315,7 @@ public class unitProductionAI {
|
||||
for(int i = 0; i < lightTanksControlledByCombatAI.length; i++){
|
||||
if(lightTanksControlledByCombatAI[i] == null || (lightTanksControlledByCombatAI[i] != null && lightTanksControlledByCombatAI[i].currentHP <=0)){
|
||||
lightTanksControlledByCombatAI[i] = o;
|
||||
if(mainThread.ec.difficulty > 0)
|
||||
mainThread.ec.theDefenseManagerAI.addUnitToDefenders(o);
|
||||
break;
|
||||
}
|
||||
@ -340,7 +355,7 @@ public class unitProductionAI {
|
||||
for(int i = 0; i < stealthTanksControlledByCombatAI.length; i++){
|
||||
if(stealthTanksControlledByCombatAI[i] == null || (stealthTanksControlledByCombatAI[i] != null && stealthTanksControlledByCombatAI[i].currentHP <=0)){
|
||||
stealthTanksControlledByCombatAI[i] = o;
|
||||
|
||||
if(mainThread.ec.difficulty > 0)
|
||||
mainThread.ec.theDefenseManagerAI.addUnitToDefenders(o);
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user