BWAPI
|
00001 #include "BuildOrderManager.h" 00002 00003 void BuildOrderManagerClass::LoadProtossBuilds() 00004 { 00005 using namespace BWAPI::Races; 00006 using namespace BWAPI::UnitTypes; 00007 using namespace BWAPI::UpgradeTypes; 00008 using namespace BWAPI::TechTypes; 00009 00010 int ID_1 = 0; 00011 int ID_2 = 0; 00012 int ID_3 = 0; 00013 00014 /**************************************************************************************************/ 00015 /* Against Zerg */ 00016 /**************************************************************************************************/ 00017 00018 Condition corsairBuildCondition(Condition(ConditionTest::myUnitTotalBuildCountLessThan, Protoss_Corsair, 12) || (Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Corsair, 12) && Condition(ConditionTest::enemyUnitCountGreaterEqualThan, Zerg_Mutalisk, 12))); 00019 Condition corsairStargateCondition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Stargate, 2); 00020 00021 /************************************************************************/ 00022 /* Forge Expand */ 00023 /************************************************************************/ 00024 00025 BuildOrder forgeExpand(Protoss, BuildOrderID::ForgeExpand, "Forge Expand"); 00026 00027 //Starting Conditions 00028 forgeExpand.setStartingCondition(Condition(ConditionTest::numberOfEnemies, 1) && Condition(ConditionTest::isEnemyZerg) && Condition(ConditionTest::canForgeExpand)); 00029 //Condition(ConditionType::minDistanceBetweenMainsGreaterThan, double(BWAPI::UnitTypes::Protoss_Photon_Cannon.buildTime()*BWAPI::UnitTypes::Zerg_Zergling.topSpeed())); //meh, if we know how to forge expand, must be viable 00030 00031 forgeExpand.setArmyBehaviour(ArmyBehaviour::Defensive); 00032 00033 forgeExpand.setDefaultBuild(BuildOrderID::StargateArcon); 00034 00035 //Units to Produce 00036 forgeExpand.addProduce(Protoss_Zealot, 1); 00037 00038 // Build Order 00039 forgeExpand.addItem(Protoss_Probe, 4, TaskType::Highest); 00040 ID_1 = forgeExpand.addItem(Protoss_Pylon, 1, BuildingLocation::BaseChoke, TaskType::Highest); //Pylon on 8 00041 forgeExpand.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); 00042 00043 forgeExpand.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00044 ID_1 = forgeExpand.addItem(Protoss_Forge, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); //Forge on 10 00045 forgeExpand.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); 00046 forgeExpand.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); 00047 00048 ID_1 = forgeExpand.addItem(Protoss_Photon_Cannon, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); 00049 ID_1 = forgeExpand.addItem(Protoss_Photon_Cannon, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); 00050 ID_1 = forgeExpand.addItem(Protoss_Nexus, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::ExpansionGas); 00051 ID_1 = forgeExpand.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); 00052 00053 // Add 00054 // TODO: don't forge ecpand for competition, doesn't force army / defense at all and if they go mass muta it wont always get 00055 // enough anti air out in time 00056 //mBuildOrders[BuildOrderID::ForgeExpand] = forgeExpand; 00057 00058 /************************************************************************/ 00059 /* Stargate Arcon */ 00060 /************************************************************************/ 00061 00062 BuildOrder starArcon(Protoss, BuildOrderID::StargateArcon, "Stargate into Arcon"); 00063 00064 starArcon.addNextBuild(BuildOrderID::ArconTiming, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Archon, 3));//go to timing attack if i have 2 arcons 00065 starArcon.setDefaultBuild(BuildOrderID::ArconTiming, 24*60*4);//or 4 mins have passed 00066 00067 starArcon.setArmyBehaviour(ArmyBehaviour::Defensive); 00068 00069 // Constants 00070 starArcon.addOrder(Order::TrainWorkers); 00071 starArcon.addOrder(Order::MacroArmyProduction); 00072 starArcon.addOrder(Order::SupplyManager); 00073 starArcon.addOrder(Order::Scout); 00074 00075 // Squads 00076 starArcon.addSquad(SquadType::CorsairSquad); 00077 00078 //Units to Produce 00079 starArcon.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00080 starArcon.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); 00081 starArcon.addProduce(Protoss_Zealot, 1); 00082 starArcon.addProduce(Protoss_Dragoon, 1); 00083 00084 // Build Order 00085 starArcon.addItem(Protoss_Zealot, 6, TaskType::Army); 00086 starArcon.addItem(Protoss_Assimilator); 00087 ID_1 = starArcon.addItem(Protoss_Cybernetics_Core); 00088 starArcon.addItem(Protoss_Stargate, 1, TaskType::Highest); 00089 starArcon.addItem(Protoss_Corsair, 2, TaskType::Highest); 00090 00091 starArcon.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); 00092 starArcon.addItem(Protoss_Ground_Weapons, 1, CB(ID_1, CallBackType::onDispatched)); 00093 starArcon.addItem(Protoss_Gateway, TaskType::MacroExtraProduction, CB(ID_1, CallBackType::onDispatched)); 00094 ID_1 = starArcon.addItem(Protoss_Citadel_of_Adun, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); 00095 starArcon.addItem(Protoss_Photon_Cannon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 4); 00096 00097 00098 starArcon.addItem(Leg_Enhancements, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); 00099 starArcon.addItem(Protoss_Templar_Archives, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); 00100 starArcon.addItem(Psionic_Storm, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); 00101 00102 starArcon.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00103 00104 00105 // Add 00106 mBuildOrders[BuildOrderID::StargateArcon] = starArcon; 00107 00108 /************************************************************************/ 00109 /* Arcon Timing */ 00110 /************************************************************************/ 00111 00112 BuildOrder ArconTiming(Protoss, BuildOrderID::ArconTiming, "Arcon Timing Attack"); 00113 00114 // Constants 00115 ArconTiming.addOrder(Order::TrainWorkers); 00116 ArconTiming.addOrder(Order::SupplyManager); 00117 ArconTiming.addOrder(Order::MacroArmyProduction); 00118 ArconTiming.addOrder(Order::RefineryManager); 00119 ArconTiming.addOrder(Order::MacroProductionFacilities); 00120 ArconTiming.addOrder(Order::MacroCanTech); 00121 ArconTiming.addOrder(Order::ExpansionManager); 00122 ArconTiming.addOrder(Order::Scout); 00123 00124 ArconTiming.setDefaultBuild(BuildOrderID::PvZEndGame, 24*60*1); 00125 00126 // Squads 00127 ArconTiming.addSquad(SquadType::CorsairSquad); 00128 00129 //Units to Produce 00130 ArconTiming.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00131 ArconTiming.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); 00132 ArconTiming.addProduce(Protoss_Zealot, 1); 00133 ArconTiming.addProduce(Protoss_Dragoon, 1); 00134 00135 ArconTiming.setArmyBehaviour(ArmyBehaviour::Aggresive); 00136 00137 // Add 00138 mBuildOrders[BuildOrderID::ArconTiming] = ArconTiming; 00139 00140 /************************************************************************/ 00141 /* PvZ End Game */ 00142 /************************************************************************/ 00143 00144 BuildOrder pvzEnd(Protoss, BuildOrderID::PvZEndGame, "PvZ End Game"); 00145 00146 // Constants 00147 pvzEnd.addOrder(Order::TrainWorkers); 00148 pvzEnd.addOrder(Order::SupplyManager); 00149 pvzEnd.addOrder(Order::MacroArmyProduction); 00150 pvzEnd.addOrder(Order::RefineryManager); 00151 pvzEnd.addOrder(Order::MacroProductionFacilities); 00152 pvzEnd.addOrder(Order::MacroCanTech); 00153 pvzEnd.addOrder(Order::ExpansionManager); 00154 pvzEnd.addOrder(Order::Scout); 00155 00156 pvzEnd.setArmyBehaviour(ArmyBehaviour::Default); 00157 00158 // Squads 00159 pvzEnd.addSquad(SquadType::CorsairSquad); 00160 00161 //Units to Produce 00162 pvzEnd.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00163 pvzEnd.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); 00164 pvzEnd.addProduce(Protoss_Zealot, 1); 00165 pvzEnd.addProduce(Protoss_Dragoon, 1); 00166 00167 // Add 00168 mBuildOrders[BuildOrderID::PvZEndGame] = pvzEnd; 00169 00170 /************************************************************************/ 00171 /* Two Gate */ 00172 /************************************************************************/ 00173 00174 BuildOrder twoGate(Protoss, BuildOrderID::TwoGate, "2 Gate"); 00175 00176 //Starting Conditions 00177 twoGate.setStartingCondition(Condition(ConditionTest::isEnemyZerg) || Condition(ConditionTest::isEnemyProtoss)); 00178 00179 // Follow Ups 00180 twoGate.addNextBuild(BuildOrderID::CoreIntoStargate, Condition(ConditionTest::isEnemyZerg)); 00181 twoGate.addNextBuild(BuildOrderID::FourGateGoon, Condition(ConditionTest::isEnemyProtoss)); 00182 00183 //Units to Produce 00184 twoGate.addProduce(Protoss_Zealot, 1); 00185 00186 //Army Behaviour 00187 twoGate.setArmyBehaviour(ArmyBehaviour::Aggresive); 00188 00189 // Build Order 00190 ID_1 = twoGate.addItem(Protoss_Probe, 4); 00191 ID_1 = twoGate.addItem(Protoss_Pylon, CB(ID_1, CallBackType::onDispatched)); //Pylon on 8 00192 twoGate.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); 00193 00194 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); 00195 ID_1 = twoGate.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 10 00196 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); 00197 ID_1 = twoGate.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 12 00198 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched)); 00199 ID_1 = twoGate.addItem(Protoss_Zealot, CB(ID_1, CallBackType::onDispatched));//Zealot on 13 00200 ID_1 = twoGate.addItem(Protoss_Pylon, CB(ID_1, CallBackType::onDispatched)); 00201 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); 00202 ID_1 = twoGate.addItem(Protoss_Zealot, CB(ID_1, CallBackType::onDispatched), 2); 00203 00204 twoGate.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); 00205 twoGate.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); 00206 00207 // Add 00208 mBuildOrders[BuildOrderID::TwoGate] = twoGate; 00209 00210 /************************************************************************/ 00211 /* Core into Stargate */ 00212 /************************************************************************/ 00213 00214 BuildOrder coreStar(Protoss, BuildOrderID::CoreIntoStargate, "Cybernetics Core into Stargate"); 00215 00216 // Follow Ups 00217 coreStar.setDefaultBuild(BuildOrderID::PvZEndGame, 24*60*1); 00218 00219 // Constants 00220 coreStar.addOrder(Order::TrainWorkers); 00221 coreStar.addOrder(Order::SupplyManager); 00222 coreStar.addOrder(Order::MacroArmyProduction); 00223 coreStar.addOrder(Order::Scout); 00224 00225 // Squads 00226 coreStar.addSquad(SquadType::CorsairSquad); 00227 00228 //Units to Produce 00229 coreStar.addProduce(Protoss_Zealot, 1); 00230 coreStar.addProduce(Protoss_Dragoon, 1); 00231 coreStar.addProduce(Protoss_Corsair, 2, 100, corsairBuildCondition, corsairStargateCondition); 00232 00233 //Army Behaviour 00234 coreStar.setArmyBehaviour(ArmyBehaviour::Aggresive); 00235 00236 // Build Order 00237 ID_1 = coreStar.addItem(Protoss_Assimilator); 00238 coreStar.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); 00239 00240 ID_1 = coreStar.addItem(Protoss_Cybernetics_Core); 00241 coreStar.addItem(Protoss_Stargate, CB(ID_1, CallBackType::onDispatched)); 00242 00243 coreStar.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00244 00245 00246 // Add 00247 mBuildOrders[BuildOrderID::CoreIntoStargate] = coreStar; 00248 00249 /**************************************************************************************************/ 00250 /* Against Terran */ 00251 /**************************************************************************************************/ 00252 00253 /************************************************************************/ 00254 /* 14 Nexus */ 00255 /************************************************************************/ 00256 00257 BuildOrder fourteenNexus(Protoss, BuildOrderID::FourteenNexus, "14 Nexus"); 00258 00259 //Starting Conditions 00260 fourteenNexus.setStartingCondition(Condition(ConditionTest::isEnemyTerran) && Condition(ConditionTest::numberOfEnemies, 1) && Condition(ConditionTest::mapSize, 4)); 00261 00262 fourteenNexus.setDefaultBuild(BuildOrderID::CitadelFirst, 24*60*2); 00263 00264 //Units to Produce 00265 fourteenNexus.addProduce(Protoss_Dragoon, 6); 00266 fourteenNexus.addProduce(Protoss_Zealot, 1); 00267 00268 //Army Behaviour 00269 fourteenNexus.setArmyBehaviour(ArmyBehaviour::Defensive); 00270 00271 // Build Order 00272 ID_1 = fourteenNexus.addItem(Protoss_Probe, 4, TaskType::Highest); 00273 ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //Pylon on 8 00274 fourteenNexus.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); 00275 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 5); 00276 ID_1 = fourteenNexus.addItem(Protoss_Nexus, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::Expansion); 00277 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); 00278 ID_1 = fourteenNexus.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 14 00279 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); 00280 ID_1 = fourteenNexus.addItem(Protoss_Assimilator, CB(ID_1, CallBackType::onDispatched)); //Gas on 15 00281 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00282 ID_1 = fourteenNexus.addItem(Protoss_Cybernetics_Core, CB(ID_1, CallBackType::onDispatched)); //core on 17 00283 ID_1 = fourteenNexus.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //gate on 17 00284 ID_1 = fourteenNexus.addItem(Protoss_Zealot, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); //zealot on 17 00285 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00286 ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 21 00287 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 21 00288 ID_1 = fourteenNexus.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched));//range on 25 00289 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00290 ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 27 00291 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 27 00292 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00293 ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 33 00294 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 35 00295 00296 fourteenNexus.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); 00297 fourteenNexus.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); 00298 fourteenNexus.addOrder(Order::MacroArmyProduction, CB(ID_1, CallBackType::onDispatched)); 00299 fourteenNexus.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00300 00301 // Add 00302 mBuildOrders[BuildOrderID::FourteenNexus] = fourteenNexus; 00303 00304 /************************************************************************/ 00305 /* One Gate Core */ 00306 /************************************************************************/ 00307 00308 BuildOrder oneGateCore(Protoss, BuildOrderID::OneGateCore, "1 Gate Core"); 00309 00310 //Starting Conditions 00311 oneGateCore.setStartingCondition(Condition(ConditionTest::isEnemyTerran) || Condition(ConditionTest::isEnemyProtoss)); 00312 00313 //oneGateCore.addNextBuild(buildRoboVsTerran, Condition(ConditionType::isEnemyTerran)); 00314 oneGateCore.addNextBuild(BuildOrderID::AdditionalGateWays, Condition(ConditionTest::isEnemyTerran)); 00315 oneGateCore.addNextBuild(BuildOrderID::RoboVsProtoss, Condition(ConditionTest::isEnemyProtoss)); 00316 00317 //Army Behaviour 00318 oneGateCore.setArmyBehaviour(ArmyBehaviour::Aggresive); 00319 00320 // Build Order 00321 oneGateCore.addItem(Protoss_Probe, 4, TaskType::Highest); 00322 ID_1 = oneGateCore.addItem(Protoss_Pylon, 1); //Pylon on 8 00323 oneGateCore.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); 00324 oneGateCore.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); 00325 ID_1 = oneGateCore.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 10 00326 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); 00327 ID_1 = oneGateCore.addItem(Protoss_Assimilator, CB(ID_1, CallBackType::onDispatched)); //gas on 12 00328 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 1);//build a zealot based on some conditions? gas steal or is pvp 00329 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 1); 00330 ID_1 = oneGateCore.addItem(Protoss_Cybernetics_Core, CB(ID_1, CallBackType::onDispatched)); //core on 14 00331 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); 00332 ID_1 = oneGateCore.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 15 00333 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); 00334 00335 oneGateCore.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); 00336 oneGateCore.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); 00337 00338 // Add 00339 mBuildOrders[BuildOrderID::OneGateCore] = oneGateCore; 00340 00341 /************************************************************************/ 00342 /* Robo First */ 00343 /************************************************************************/ 00344 00345 BuildOrder roboPvT(Protoss, BuildOrderID::RoboVsTerran, "Robotics Facility First"); 00346 00347 // Constants 00348 roboPvT.addOrder(Order::TrainWorkers); 00349 roboPvT.addOrder(Order::RefineryManager); 00350 roboPvT.addOrder(Order::Scout); 00351 00352 roboPvT.setArmyBehaviour(ArmyBehaviour::Defensive); 00353 00354 roboPvT.addNextBuild(BuildOrderID::CitadelFirst, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Reaver, 1) && Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Shuttle, 1)); 00355 00356 // Follow Ups 00357 roboPvT.setDefaultBuild(BuildOrderID::CitadelFirst, 24*60*2); 00358 00359 // Squads 00360 roboPvT.addSquad(SquadType::ReaverDropSquad); 00361 00362 //Units to Produce 00363 roboPvT.addProduce(Protoss_Dragoon, 1); 00364 00365 // Build Order 00366 ID_3 = roboPvT.addItem(Protoss_Dragoon, 4, TaskType::Army); 00367 roboPvT.addOrder(Order::MacroArmyProduction, CB(ID_3, CallBackType::onDispatched)); 00368 ID_1 = roboPvT.addItem(Protoss_Pylon, 1, TaskType::Supply); 00369 ID_1 = roboPvT.addItem(Protoss_Robotics_Facility, CB(ID_1, CallBackType::onStarted)); 00370 roboPvT.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched)); 00371 ID_1 = roboPvT.addItem(Protoss_Observatory, CB(ID_1, CallBackType::onCompleted)); 00372 ID_2 = roboPvT.addItem(Protoss_Observer, CB(ID_1, CallBackType::onStarted)); 00373 ID_1 = roboPvT.addItem(Protoss_Nexus, TaskType::Expansion, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::Expansion); 00374 roboPvT.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00375 roboPvT.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); 00376 ID_2 = roboPvT.addItem(Protoss_Shuttle, CB(ID_2, CallBackType::onDispatched)); 00377 roboPvT.addItem(Protoss_Reaver, CB(ID_2, CallBackType::onDispatched)); 00378 ID_1 = roboPvT.addItem(Protoss_Robotics_Support_Bay, CB(ID_1, CallBackType::onDispatched)); 00379 00380 // Add 00381 mBuildOrders[BuildOrderID::RoboVsTerran] = roboPvT; 00382 00383 /************************************************************************/ 00384 /* Branch 1: Additional Gateways */ 00385 /************************************************************************/ 00386 00387 BuildOrder gateways(Protoss, BuildOrderID::AdditionalGateWays, "Additional Gateways"); 00388 00389 // Constants 00390 gateways.addOrder(Order::TrainWorkers); 00391 gateways.addOrder(Order::SupplyManager); 00392 gateways.addOrder(Order::Scout); 00393 00394 gateways.setArmyBehaviour(ArmyBehaviour::Aggresive); 00395 00396 // Follow Ups 00397 gateways.setDefaultBuild(BuildOrderID::Nexus, 24*60*4); 00398 00399 gateways.addNextBuild(BuildOrderID::Nexus, Condition(ConditionTest::enemyHasResearched, BWAPI::TechTypes::Tank_Siege_Mode)); 00400 00401 //Units to Produce 00402 gateways.addProduce(Protoss_Dragoon, 1); 00403 00404 // Build Order 00405 ID_1 = gateways.addItem(Protoss_Dragoon, 1, TaskType::Army); 00406 gateways.addOrder(Order::MacroArmyProduction, CB(ID_1, CallBackType::onDispatched, CB(ID_1, CallBackType::onDispatched))); 00407 00408 ID_1 = gateways.addItem(Protoss_Gateway, 1, TaskType::MacroExtraProduction); 00409 gateways.addItem(Singularity_Charge, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); 00410 gateways.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00411 00412 // Add 00413 mBuildOrders[BuildOrderID::AdditionalGateWays] = gateways; 00414 00415 /************************************************************************/ 00416 /* Branch 2: Nexus */ 00417 /************************************************************************/ 00418 00419 BuildOrder nexus(Protoss, BuildOrderID::Nexus, "Nexus"); 00420 00421 // Constants 00422 nexus.addOrder(Order::TrainWorkers); 00423 nexus.addOrder(Order::SupplyManager); 00424 nexus.addOrder(Order::MacroArmyProduction); 00425 nexus.addOrder(Order::MacroProductionFacilities); 00426 nexus.addOrder(Order::Scout); 00427 00428 // Follow Ups 00429 nexus.addNextBuild(BuildOrderID::PvPMidGame, Condition(ConditionTest::isEnemyProtoss)); 00430 00431 nexus.setDefaultBuild(BuildOrderID::CitadelFirst, 24*50*2); 00432 00433 //Units to Produce 00434 nexus.addProduce(Protoss_Dragoon, 6); 00435 nexus.addProduce(Protoss_Zealot, 1); 00436 00437 // Build Order 00438 ID_1 = nexus.addItem(Protoss_Nexus, 1, TaskType::Expansion, BuildingLocation::Expansion); 00439 00440 // Add 00441 mBuildOrders[BuildOrderID::Nexus] = nexus; 00442 00443 /************************************************************************/ 00444 /* Citadel First */ 00445 /************************************************************************/ 00446 00447 BuildOrder citadel(Protoss, BuildOrderID::CitadelFirst, "Citadel First"); 00448 00449 // Constants 00450 citadel.addOrder(Order::TrainWorkers); 00451 citadel.addOrder(Order::SupplyManager); 00452 citadel.addOrder(Order::RefineryManager); 00453 citadel.addOrder(Order::MacroArmyProduction); 00454 citadel.addOrder(Order::MacroProductionFacilities); 00455 citadel.addOrder(Order::ExpansionManager); 00456 citadel.addOrder(Order::CanRemoveSquads); 00457 citadel.addOrder(Order::Scout); 00458 00459 // Follow Ups 00460 citadel.setDefaultBuild(BuildOrderID::PvTMidGame, 24*60); 00461 //citadel.addNextBuild(BuildOrderID::PvTCarrierSwitch, Condition(ConditionType::enemyDoesntHasUnit, BWAPI::UnitTypes::Terran_Goliath, 2)); 00462 00463 // Squads 00464 citadel.addSquad(SquadType::ReaverDropSquad); 00465 00466 //Units to Produce 00467 citadel.addProduce(Protoss_Dragoon, 2); 00468 citadel.addProduce(Protoss_Zealot, 6); 00469 00470 // Build Order 00471 ID_1 = citadel.addItem(Protoss_Citadel_of_Adun); 00472 citadel.addItem(Leg_Enhancements, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); 00473 00474 // Add 00475 mBuildOrders[BuildOrderID::CitadelFirst] = citadel; 00476 00477 /************************************************************************/ 00478 /* Mid Game Temp */ 00479 /************************************************************************/ 00480 00481 BuildOrder midGame(Protoss, BuildOrderID::PvTMidGame, "Mid Game"); 00482 00483 // Constants 00484 midGame.addOrder(Order::TrainWorkers); 00485 midGame.addOrder(Order::SupplyManager); 00486 midGame.addOrder(Order::RefineryManager); 00487 midGame.addOrder(Order::MacroArmyProduction); 00488 midGame.addOrder(Order::MacroProductionFacilities); 00489 midGame.addOrder(Order::ExpansionManager); 00490 midGame.addOrder(Order::CanRemoveSquads); 00491 midGame.addOrder(Order::Scout); 00492 00493 // Follow Ups 00494 midGame.setDefaultBuild(BuildOrderID::PvTEndGame, 24*60); 00495 00496 // Squads 00497 midGame.addSquad(SquadType::ReaverDropSquad); 00498 00499 //Units to Produce 00500 midGame.addProduce(Protoss_Dragoon, 14); 00501 midGame.addProduce(Protoss_Zealot, 14); 00502 midGame.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00503 00504 ID_1 = midGame.addItem(Protoss_Templar_Archives); 00505 ID_1 = midGame.addItem(Psionic_Storm, TaskType::MacroUrgent, CB(ID_1, CallBackType::onCompleted)); 00506 00507 midGame.addOrder(Order::MacroCanTech, CB(ID_1, CallBackType::onCompleted)); 00508 00509 // Add 00510 mBuildOrders[BuildOrderID::PvTMidGame] = midGame; 00511 00512 /************************************************************************/ 00513 /* End Game */ 00514 /************************************************************************/ 00515 00516 BuildOrder endGame(Protoss, BuildOrderID::PvTEndGame, "End Game"); 00517 00518 // Constants 00519 endGame.addOrder(Order::TrainWorkers); 00520 endGame.addOrder(Order::SupplyManager); 00521 endGame.addOrder(Order::RefineryManager); 00522 endGame.addOrder(Order::MacroArmyProduction); 00523 endGame.addOrder(Order::MacroProductionFacilities); 00524 endGame.addOrder(Order::ExpansionManager); 00525 endGame.addOrder(Order::MacroCanTech); 00526 endGame.addOrder(Order::CanRemoveSquads); 00527 endGame.addOrder(Order::Scout); 00528 00529 // Squads 00530 endGame.addSquad(SquadType::ReaverDropSquad); 00531 00532 //Units to Produce 00533 endGame.addProduce(Protoss_Dragoon, 14); 00534 endGame.addProduce(Protoss_Zealot, 14); 00535 endGame.addProduce(Protoss_High_Templar, 3, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00536 endGame.addProduce(Protoss_Arbiter, 1); 00537 00538 // Add 00539 mBuildOrders[BuildOrderID::PvTEndGame] = endGame; 00540 00541 /************************************************************************/ 00542 /* Carrier Switch */ 00543 /************************************************************************/ 00544 00545 BuildOrder carriers(Protoss, BuildOrderID::PvTCarrierSwitch, "Carriers"); 00546 00547 // Constants 00548 carriers.addOrder(Order::TrainWorkers); 00549 carriers.addOrder(Order::SupplyManager); 00550 carriers.addOrder(Order::MacroArmyProduction); 00551 carriers.addOrder(Order::RefineryManager); 00552 carriers.addOrder(Order::MacroProductionFacilities); 00553 carriers.addOrder(Order::MacroCanTech); 00554 carriers.addOrder(Order::ExpansionManager); 00555 carriers.addOrder(Order::CanRemoveSquads); 00556 carriers.addOrder(Order::Scout); 00557 00558 // Squads 00559 carriers.addSquad(SquadType::ReaverDropSquad); 00560 00561 //Units to Produce 00562 carriers.addProduce(Protoss_Dragoon, 1); 00563 carriers.addProduce(Protoss_Zealot, 1); 00564 carriers.addProduce(Protoss_Carrier, 12); 00565 00566 // Add 00567 mBuildOrders[BuildOrderID::PvTCarrierSwitch] = carriers; 00568 00569 /************************************************************************/ 00570 /* Four Gate Goon */ 00571 /************************************************************************/ 00572 00573 BuildOrder gatewayGoon(Protoss, BuildOrderID::FourGateGoon, "Four Gate Goon"); 00574 00575 // Constants 00576 gatewayGoon.addOrder(Order::TrainWorkers); 00577 gatewayGoon.addOrder(Order::SupplyManager); 00578 gatewayGoon.addOrder(Order::Scout); 00579 gatewayGoon.addOrder(Order::MacroArmyProduction); 00580 gatewayGoon.addOrder(Order::RefineryManager); 00581 00582 gatewayGoon.setArmyBehaviour(ArmyBehaviour::Default); 00583 00584 // Follow Ups 00585 gatewayGoon.setDefaultBuild(BuildOrderID::Nexus, 24*60*3); 00586 00587 //Units to Produce 00588 gatewayGoon.addProduce(Protoss_Dragoon, 8); 00589 gatewayGoon.addProduce(Protoss_Zealot, 1); 00590 00591 // Build Order 00592 ID_1 = gatewayGoon.addItem(Protoss_Cybernetics_Core); 00593 gatewayGoon.addItem(Singularity_Charge, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); 00594 00595 gatewayGoon.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00596 00597 // Add 00598 mBuildOrders[BuildOrderID::FourGateGoon] = gatewayGoon; 00599 00600 /************************************************************************/ 00601 /* Robo First */ 00602 /************************************************************************/ 00603 00604 BuildOrder robo(Protoss, BuildOrderID::RoboVsProtoss, "Robotics Facility"); 00605 00606 // Constants 00607 robo.addOrder(Order::TrainWorkers); 00608 robo.addOrder(Order::SupplyManager); 00609 robo.addOrder(Order::RefineryManager); 00610 robo.addOrder(Order::MacroArmyProduction); 00611 robo.addOrder(Order::Scout); 00612 00613 robo.setArmyBehaviour(ArmyBehaviour::Defensive); 00614 00615 robo.addNextBuild(BuildOrderID::PvPMidGame, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Reaver, 1) /* && Condition(ConditionType::myUnitCount, Protoss_Shuttle, 1) */); 00616 00617 // Follow Ups 00618 robo.setDefaultBuild(BuildOrderID::PvPMidGame, 24*60); 00619 00620 // Squads 00621 robo.addSquad(SquadType::ReaverDropSquad); 00622 00623 //Units to Produce 00624 robo.addProduce(Protoss_Zealot, 1); 00625 robo.addProduce(Protoss_Dragoon, 14); 00626 robo.addProduce(Protoss_Reaver, 1, 100, Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Reaver, 3), Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Robotics_Facility, 1)); 00627 00628 // Build Order 00629 robo.addItem(Protoss_Dragoon, 4, TaskType::Army); 00630 ID_1 = robo.addItem(Protoss_Gateway, 1, TaskType::MacroExtraProduction); 00631 ID_1 = robo.addItem(Protoss_Robotics_Facility, CB(ID_1, CallBackType::onDispatched)); 00632 robo.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched)); 00633 ID_1 = robo.addItem(Protoss_Observatory, CB(ID_1, CallBackType::onStarted)); 00634 ID_2 = robo.addItem(Protoss_Observer, TaskType::Highest, CB(ID_1, CallBackType::onStarted)); 00635 //ID_2 = robo.addItem(Protoss_Shuttle, TaskType::Highest, CB(ID_2, CallBackType::onStarted)); 00636 ID_2 = robo.addItem(Protoss_Robotics_Support_Bay, TaskType::Highest, CB(ID_2, CallBackType::onDispatched)); 00637 robo.addItem(Protoss_Reaver, TaskType::Highest, CB(ID_2, CallBackType::onDispatched), 2); 00638 00639 ID_1 = robo.addItem(Protoss_Gateway, TaskType::MacroExtraProduction, CB(ID_1, CallBackType::onDispatched)); 00640 robo.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); 00641 00642 // Add 00643 mBuildOrders[BuildOrderID::RoboVsProtoss] = robo; 00644 00645 /************************************************************************/ 00646 /* PvP Mid Game */ 00647 /************************************************************************/ 00648 00649 BuildOrder PvPMid(Protoss, BuildOrderID::PvPMidGame, "Mid Game"); 00650 00651 // Constants 00652 PvPMid.addOrder(Order::TrainWorkers); 00653 PvPMid.addOrder(Order::SupplyManager); 00654 PvPMid.addOrder(Order::ExpansionManager); 00655 PvPMid.addOrder(Order::RefineryManager); 00656 PvPMid.addOrder(Order::MacroArmyProduction); 00657 PvPMid.addOrder(Order::MacroProductionFacilities); 00658 PvPMid.addOrder(Order::MacroCanTech); 00659 PvPMid.addOrder(Order::CanRemoveSquads); 00660 PvPMid.addOrder(Order::Scout); 00661 00662 PvPMid.setArmyBehaviour(ArmyBehaviour::Default); 00663 00664 PvPMid.setDefaultBuild(BuildOrderID::PvPEndGame, 24*60*2); 00665 00666 // Squads 00667 PvPMid.addSquad(SquadType::ReaverDropSquad); 00668 00669 //Units to Produce 00670 PvPMid.addProduce(Protoss_Zealot, 1); 00671 PvPMid.addProduce(Protoss_Dragoon, 14); 00672 PvPMid.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00673 PvPMid.addProduce(Protoss_Reaver, 1, 100, Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Reaver, 3), Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Robotics_Facility, 1)); 00674 00675 // Add 00676 mBuildOrders[BuildOrderID::PvPMidGame] = PvPMid; 00677 00678 /************************************************************************/ 00679 /* PVP End Game */ 00680 /************************************************************************/ 00681 00682 BuildOrder PVPEnd(Protoss, BuildOrderID::PvPEndGame, "End Game"); 00683 00684 // Constants 00685 PVPEnd.addOrder(Order::TrainWorkers); 00686 PVPEnd.addOrder(Order::SupplyManager); 00687 PVPEnd.addOrder(Order::ExpansionManager); 00688 PVPEnd.addOrder(Order::RefineryManager); 00689 PVPEnd.addOrder(Order::MacroArmyProduction); 00690 PVPEnd.addOrder(Order::MacroProductionFacilities); 00691 PVPEnd.addOrder(Order::MacroCanTech); 00692 PVPEnd.addOrder(Order::CanRemoveSquads); 00693 PVPEnd.addOrder(Order::Scout); 00694 00695 PVPEnd.setArmyBehaviour(ArmyBehaviour::Default); 00696 00697 // Squads 00698 PVPEnd.addSquad(SquadType::ReaverDropSquad); 00699 00700 //Units to Produce 00701 PVPEnd.addProduce(Protoss_Zealot, 1); 00702 PVPEnd.addProduce(Protoss_Dragoon, 14); 00703 PVPEnd.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); 00704 PVPEnd.addProduce(Protoss_Arbiter, 1); 00705 00706 // Add 00707 mBuildOrders[BuildOrderID::PvPEndGame] = PVPEnd; 00708 }