//============================================================================== // Shared_IslandCapture.xs // Author: Matt Craver // // This AI will send attacks to islands specified by RM. //============================================================================== include "aiHeader.xs"; // Gets global vars, function forward declarations include "aiUtil.xs"; // Misc. shared AI utility functions include "aiEcon.xs"; // All of the AI's econ functionality include "aiMilitary.xs"; // All of the AI's military functionality include "aiNavy.xs"; // All of the AI's naval functionality include "aiEventHandlers.xs"; // Event handler methods for the AI include "aiMain.xs"; // The bulk of the AI include "aiCampaignCore.xs"; // The Core Campaign AI data and features include "aiIslandCaptureCore.xs"; // Island Capture functionality extern int gActivatePatrolQuery = -1; void setUpBuildOrder(int type=-1, bool smallIsland=false) { if(gBuildOrder == -1) { gBuildOrder = xsArrayCreateInt(gMaxNumberOfBuildings, -1, "Build Order"); gBuildPlanIDs = xsArrayCreateInt(gMaxNumberOfBuildings, -1, "Build Plan IDs"); } else { for (i = 0; < gMaxNumberOfBuildings) { xsArraySetInt(gBuildOrder, i, -1); xsArraySetInt(gBuildPlanIDs, i, -1); } } switch(type) { // econ case cEconBuildOrder: { if(smallIsland == false) { gNumberOfBuildings = 7; xsArraySetInt(gBuildOrder, 0, kbFindBuilding(cUnitTypeUnitTypeBldgWatchPost)); xsArraySetInt(gBuildOrder, 1, kbFindBuilding(cUnitTypeUnitTypeBldgWatchPost)); xsArraySetInt(gBuildOrder, 2, kbFindBuilding(cUnitTypeUnitTypeBldgStorehouse)); xsArraySetInt(gBuildOrder, 3, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); xsArraySetInt(gBuildOrder, 4, kbFindBuilding(cUnitTypeUnitTypeBldgFarm)); xsArraySetInt(gBuildOrder, 5, kbFindBuilding(cUnitTypeUnitTypeBldgFarm)); xsArraySetInt(gBuildOrder, 6, kbFindBuilding(cUnitTypeUnitTypeBldgFarm)); gCenterBuilding = kbFindBuilding(cUnitTypeUnitTypeBldgStorehouse); kbAdjustResourceByID(cMyID, cResourceWood, 400); } else { gNumberOfBuildings = 4; xsArraySetInt(gBuildOrder, 0, kbFindBuilding(cUnitTypeUnitTypeBldgWatchPost)); xsArraySetInt(gBuildOrder, 1, kbFindBuilding(cUnitTypeUnitTypeBldgStorehouse)); xsArraySetInt(gBuildOrder, 2, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); xsArraySetInt(gBuildOrder, 3, kbFindBuilding(cUnitTypeUnitTypeBldgFarm)); gCenterBuilding = kbFindBuilding(cUnitTypeUnitTypeBldgWatchPost); kbAdjustResourceByID(cMyID, cResourceWood, 200); } break; } case cMilitaryBuildOrder: { if(smallIsland == false) { gNumberOfBuildings = 7; xsArraySetInt(gBuildOrder, 0, kbFindBuilding(cUnitTypeUnitTypeBldgTower)); xsArraySetInt(gBuildOrder, 1, kbFindBuilding(cUnitTypeUnitTypeBldgTower)); xsArraySetInt(gBuildOrder, 2, kbFindBuilding(cUnitTypeUnitTypeBldgBarracks)); xsArraySetInt(gBuildOrder, 3, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); xsArraySetInt(gBuildOrder, 4, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); xsArraySetInt(gBuildOrder, 5, kbFindBuilding(cUnitTypeUnitTypeBldgArcheryRange)); xsArraySetInt(gBuildOrder, 6, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); gCenterBuilding = kbFindBuilding(cUnitTypeUnitTypeBldgBarracks); kbAdjustResourceByID(cMyID, cResourceWood, 500); kbAdjustResourceByID(cMyID, cResourceStone, 450); } else { gNumberOfBuildings = 4; xsArraySetInt(gBuildOrder, 0, kbFindBuilding(cUnitTypeUnitTypeBldgTower)); xsArraySetInt(gBuildOrder, 1, kbFindBuilding(cUnitTypeUnitTypeBldgBarracks)); xsArraySetInt(gBuildOrder, 2, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); xsArraySetInt(gBuildOrder, 3, kbFindBuilding(cUnitTypeUnitTypeBldgHouse)); gCenterBuilding = kbFindBuilding(cUnitTypeUnitTypeBldgTower); kbAdjustResourceByID(cMyID, cResourceWood, 250); kbAdjustResourceByID(cMyID, cResourceStone, 150); } break; } } } rule activateNavalPatrol active minInterval 10 { bool activate = false; if(xsGetTime() > 25 * 60 * 1000) { activate = true; } else { if(gActivatePatrolQuery == -1) { gActivatePatrolQuery = kbUnitQueryCreate("Activate Patrol Query"); kbUnitQuerySetPlayerRelation(gActivatePatrolQuery, cPlayerRelationEnemyNotGaia); kbUnitQuerySetUnitType(gActivatePatrolQuery, cUnitTypeAbstractWarShip); kbUnitQuerySetState(gActivatePatrolQuery, cUnitStateAlive); } kbUnitQueryResetResults(gActivatePatrolQuery); kbUnitQueryExecute(gActivatePatrolQuery); if(kbUnitQueryNumberResults(gActivatePatrolQuery) >= 10) { activate = true; } else { int uncapturedIslands = 0; for(i = 0; < gNumberOfAttacks) { if(getVillageSize(i) > 0) { uncapturedIslands = uncapturedIslands + 1; } } if(uncapturedIslands <= 3) { activate = true; } } } if(activate == true) { aiEcho("ACTIVATING NAVAL PATROL"); xsEnableRule("navalPatrol"); xsDisableSelf(); } } //------------------------------------------------------------------- // for anything defined in SetCampaignDefaults, if needed, override it here void OverrideCampaignDefaults() { btStrengthATK = 4.0; // 0.0 - 4.0, weak attack strength to hardcore attack strength btStrengthDEF = 0.0; // 0.0 - 4.0, weak defense strength to hardcore defense strength btStrengthECO = 1.0; // 0.0 - 4.0, weak economy strength to economy attack strength btRushBoom = 0.0; // -1.0 = max rush, 1.0 = max boom bAllowTCBuild = false; bPreventLevelUpTCChanges = true; btBiasSIE = 0.0; bAllowAttack = false; } //============================================================================== /* preInit() This function is called in main() before any of the normal initialization happens. Use it to override default values of variables as needed for personality or scenario effects. */ //============================================================================== void preInit(void) { aiEcho("preInit() starting."); // force defaults for all internal settings SetCampaignDefaults(); // Override Defaults // do this before any formula based settings are calculated // This allows each parent script to set the intended default overrides before anything is calculated OverrideCampaignDefaults(); // derive any settings from the defaults CalculateCampaignSettings(); // print everything out EchoCampaignSettings(); gNumberOfBuildOrderTypes = 2; gPlanMilitaryUnitType = cUnitTypeLogicalTypeLandPickerChoice; gAttackPlanTargetUnitType = cUnitTypeBuilding; gSmallIslandVillagers = 3; gSmallIslandMilitary = 7; gLargeIslandVillagers = 6; gLargeIslandMilitary = 10; gSendDefendAlways = false; gDefendUncapturedLocations = true; //gAttackPlanTargetUnitType = cUnitTypeUnitTypeBldgTemple; } //============================================================================== /* postInit() This function is called in main() after the normal initialization is complete. Use it to override settings and decisions made by the startup logic. */ //============================================================================== void postInit(void) { aiEcho("postInit() starting."); createSimpleMaintainPlan(kbFindUnit(cUnitTypeUnitTypeShipUtility1), 3, false, kbBaseGetMainID(cMyID), 1); }