BWAPI
|
#include <BuildOrderManager.h>
Public Member Functions | |
BuildOrderManagerClass () | |
void | onBegin () |
void | update () |
bool | BuildOrderFinished () |
bool | getOrder (Order type) const |
const BuildOrder & | getCurrentBuild () |
void | toggleDebugInfo () |
std::string | getOrderName (Order type) |
Private Member Functions | |
void | handleBuildItem (const BuildItem &item) |
void | handleOrderItem (const OrderItem &item) |
void | checkBuildStatus () |
void | LoadProtossBuilds () |
void | LoadTerranBuilds () |
void | LoadZergBuilds () |
void | LoadOtherBuilds () |
void | changeCurrentBuild (BuildOrderID ID) |
void | toggleOrder (Order type) |
void | BuildCallback (int buildID, CallBackType callbackType) |
Private Attributes | |
std::map< CallBackType, std::map< TaskPointer, int > > | mWaitingItems |
std::list< BuildItem > | mItemsWaiting |
std::list< OrderItem > | mOrdersWaiting |
std::map< BuildOrderID, BuildOrder > | mBuildOrders |
BuildOrderID | mCurrentBuild |
std::map< Order, bool > | mControlValues |
bool | mShowDebugInfo |
bool | mFinishedBuild |
int | mBuildFinishTime |
Definition at line 8 of file BuildOrderManager.h.
Definition at line 10 of file BuildOrderManager.cpp.
: mCurrentBuild(BuildOrderID::None) , mFinishedBuild(false) , mBuildFinishTime(0) { }
void BuildOrderManagerClass::BuildCallback | ( | int | buildID, |
CallBackType | callbackType | ||
) | [private] |
Definition at line 92 of file BuildOrderManager.cpp.
References handleBuildItem(), handleOrderItem(), mItemsWaiting, and mOrdersWaiting.
Referenced by checkBuildStatus(), and handleBuildItem().
{ for(std::list<BuildItem>::iterator buildItem = mItemsWaiting.begin(); buildItem != mItemsWaiting.end();) { buildItem->removeCallback(buildID, callbackType); if(buildItem->isFulfilled()) { handleBuildItem(*buildItem); mItemsWaiting.erase(buildItem++); } else ++buildItem; } for(std::list<OrderItem>::iterator orderItem = mOrdersWaiting.begin(); orderItem != mOrdersWaiting.end();) { orderItem->removeCallback(buildID, callbackType); if(orderItem->isFulfilled()) { handleOrderItem(*orderItem); mOrdersWaiting.erase(orderItem++); } else ++orderItem; } }
Definition at line 121 of file BuildOrderManager.cpp.
References mItemsWaiting, and mOrdersWaiting.
Referenced by update().
{ return mItemsWaiting.empty() && mOrdersWaiting.empty(); }
void BuildOrderManagerClass::changeCurrentBuild | ( | BuildOrderID | ID | ) | [private] |
Definition at line 126 of file BuildOrderManager.cpp.
References BWAPI::Broodwar, BuildOrder::getName(), BWAPI::Races::getRace(), handleBuildItem(), handleOrderItem(), Singleton< T >::Instance(), BuildItem::isFulfilled(), OrderItem::isFulfilled(), LOGMESSAGE, LOGMESSAGEWARNING, mBuildOrders, mControlValues, mCurrentBuild, mFinishedBuild, mItemsWaiting, mOrdersWaiting, BuildOrderIDDef::None, BWAPI::Races::Unknown, and BuildOrderIDDef::Unknown.
Referenced by update().
{ if(mBuildOrders.find(ID) == mBuildOrders.end()) { LOGMESSAGEWARNING(String_Builder() << "Couldn't find Build Order"); changeCurrentBuild(BuildOrderID::Unknown); return; } if(mBuildOrders[ID].getRace() != BWAPI::Broodwar->self()->getRace() && mBuildOrders[ID].getRace() != BWAPI::Races::Unknown) { LOGMESSAGE(String_Builder() << "Build " << mBuildOrders[ID].getName() << " is for " << mBuildOrders[ID].getRace().getName()); return; } mFinishedBuild = false; mItemsWaiting.clear(); mOrdersWaiting.clear(); mControlValues.clear(); const BuildOrder &order = mBuildOrders[ID]; if(ID != BuildOrderID::Unknown) LOGMESSAGEWARNING(String_Builder() << ((mCurrentBuild == BuildOrderID::None) ? "Opening with " : "Transitioning to ") << order.getName()); mCurrentBuild = ID; for each(const OrderItem &item in order.getOrderItems()) { if(item.isFulfilled()) handleOrderItem(item); else mOrdersWaiting.push_back(item); } for each(const BuildItem &item in order.getBuildItems()) { if(item.isFulfilled()) handleBuildItem(item); else mItemsWaiting.push_back(item); } MacroManager::Instance().onChangeBuild(); SquadManager::Instance().onChangeBuild(); }
void BuildOrderManagerClass::checkBuildStatus | ( | ) | [private] |
Definition at line 191 of file BuildOrderManager.cpp.
References BuildCallback(), and mWaitingItems.
Referenced by update().
{ for(std::map<CallBackType, std::map<TaskPointer, int>>::iterator i = mWaitingItems.begin(); i != mWaitingItems.end();) { for(std::map<TaskPointer, int>::iterator u = i->second.begin(); u != i->second.end();) { if(i->first == CallBackType::onDispatched && u->first->hasDispatched()) { BuildCallback(u->second, CallBackType::onDispatched); i->second.erase(u++); } else if(i->first == CallBackType::onStarted && u->first->inProgress()) { BuildCallback(u->second, CallBackType::onStarted); i->second.erase(u++); } else if(i->first == CallBackType::onCompleted && u->first->isCompleted()) { BuildCallback(u->second, CallBackType::onCompleted); i->second.erase(u++); } else ++u; } if(i->second.empty()) mWaitingItems.erase(i++); else ++i; } }
const BuildOrder& BuildOrderManagerClass::getCurrentBuild | ( | ) | [inline] |
Definition at line 20 of file BuildOrderManager.h.
References mBuildOrders, and mCurrentBuild.
{ return mBuildOrders[mCurrentBuild]; }
bool BuildOrderManagerClass::getOrder | ( | Order | type | ) | const [inline] |
Definition at line 18 of file BuildOrderManager.h.
References mControlValues.
Referenced by handleOrderItem().
{ return (mControlValues.count(type) != 0 ? mControlValues.find(type)->second : false); }
std::string BuildOrderManagerClass::getOrderName | ( | Order | type | ) |
Definition at line 240 of file BuildOrderManager.cpp.
References OrderDef::CanRemoveSquads, OrderDef::ExpansionManager, OrderDef::MacroArmyProduction, OrderDef::MacroCanTech, OrderDef::MacroProductionFacilities, OrderDef::RefineryManager, OrderDef::Scout, OrderDef::SupplyManager, OrderDef::TrainWorkers, and SafeEnum< def, inner >::underlying().
Referenced by handleOrderItem(), and update().
{ switch(type.underlying()) { case Order::TrainWorkers: return "Train Workers"; case Order::Scout: return "Scout"; case Order::SupplyManager: return "Supply Manager"; case Order::RefineryManager: return "Refinery Manager"; case Order::MacroArmyProduction: return "Army Train Manager"; case Order::CanRemoveSquads: return "Can Remove Squads"; case Order::ExpansionManager: return "Expansion Manager"; case Order::MacroProductionFacilities: return "Macro : Can Produce Production Facilities"; case Order::MacroCanTech: return "Macro : Can Tech"; } return "None"; }
void BuildOrderManagerClass::handleBuildItem | ( | const BuildItem & | item | ) | [private] |
Definition at line 223 of file BuildOrderManager.cpp.
References BuildCallback(), BuildItem::createTask(), BuildItem::getID(), and mWaitingItems.
Referenced by BuildCallback(), and changeCurrentBuild().
{ TaskPointer ptr = item.createTask(); if(ptr) { mWaitingItems[CallBackType::onDispatched][ptr] = item.getID(); mWaitingItems[CallBackType::onStarted][ptr] = item.getID(); mWaitingItems[CallBackType::onCompleted][ptr] = item.getID(); } else { BuildCallback(item.getID(), CallBackType::onDispatched); BuildCallback(item.getID(), CallBackType::onStarted); BuildCallback(item.getID(), CallBackType::onCompleted); } }
void BuildOrderManagerClass::handleOrderItem | ( | const OrderItem & | item | ) | [private] |
Definition at line 173 of file BuildOrderManager.cpp.
References getOrder(), getOrderName(), OrderItem::getType(), LOGMESSAGE, and toggleOrder().
Referenced by BuildCallback(), and changeCurrentBuild().
{ toggleOrder(item.getType()); LOGMESSAGE(String_Builder() << "Handled Order " << getOrderName(item.getType()) << (getOrder(item.getType()) ? ": Set to True" : ": Set to False")); LOGMESSAGE(String_Builder() ); }
void BuildOrderManagerClass::LoadOtherBuilds | ( | ) | [private] |
Definition at line 5 of file LoadOtherBuilds.cpp.
References BWAPI::Broodwar, OrderDef::CanRemoveSquads, ArmyBehaviourDef::Default, OrderDef::ExpansionManager, BWAPI::Races::getRace(), Singleton< T >::Instance(), OrderDef::MacroArmyProduction, OrderDef::MacroCanTech, OrderDef::MacroProductionFacilities, mBuildOrders, BWAPI::BulletTypes::None, BuildOrderIDDef::None, BWAPI::Races::Protoss, BWAPI::UnitTypes::Protoss_Arbiter, BWAPI::UnitTypes::Protoss_Dragoon, BWAPI::UnitTypes::Protoss_High_Templar, BWAPI::UnitTypes::Protoss_Zealot, OrderDef::RefineryManager, OrderDef::Scout, OrderDef::SupplyManager, BWAPI::Races::Terran, BWAPI::UnitTypes::Terran_Firebat, BWAPI::UnitTypes::Terran_Marine, BWAPI::UnitTypes::Terran_Medic, BWAPI::UnitTypes::Terran_Science_Vessel, OrderDef::TrainWorkers, BWAPI::BulletTypes::Unknown, BuildOrderIDDef::Unknown, BWAPI::Races::Zerg, and BWAPI::UnitTypes::Zerg_Zergling.
Referenced by onBegin().
{ using namespace BWAPI::Races; using namespace BWAPI::UnitTypes; using namespace BWAPI::UpgradeTypes; using namespace BWAPI::TechTypes; int ID_1 = 0; int ID_2 = 0; int ID_3 = 0; mBuildOrders[BuildOrderID::Unknown] = BuildOrder(BuildOrderID::Unknown, "Unknown"); mBuildOrders[BuildOrderID::Unknown].setArmyBehaviour(ArmyBehaviour::Default); mBuildOrders[BuildOrderID::Unknown].addSquad(SquadType::DefaultSquad, 1); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::TrainWorkers); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::Scout); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::SupplyManager); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::RefineryManager); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::MacroArmyProduction); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::CanRemoveSquads); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::ExpansionManager); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::MacroProductionFacilities); mBuildOrders[BuildOrderID::Unknown].addOrder(Order::MacroCanTech); if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Protoss) { mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Protoss_Zealot, 2); mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Protoss_Dragoon, 3); mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Protoss_High_Templar, 1); mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Protoss_Arbiter, 1); } else if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Terran) { mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Terran_Marine, 5); mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Terran_Medic, 1); if(PlayerTracker::Instance().isEnemyRace(BWAPI::Races::Zerg)) mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Terran_Firebat, 1); mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Terran_Science_Vessel, 1); } else if(BWAPI::Broodwar->self()->getRace() == BWAPI::Races::Zerg) { mBuildOrders[BuildOrderID::Unknown].addProduce(BWAPI::UnitTypes::Zerg_Zergling, 1); } mBuildOrders[BuildOrderID::None] = BuildOrder(BuildOrderID::None, "None"); // BuildOrder testBuild(Protoss, BuildOrderID::Test, "Test Build"); // // testBuild.addStartingCondition(Condition(ConditionType::defaultCondition)); // // mBuildOrders[BuildOrderID::Test] = testBuild; }
void BuildOrderManagerClass::LoadProtossBuilds | ( | ) | [private] |
Definition at line 3 of file LoadProtossBuilds.cpp.
References BuildOrder::addItem(), BuildOrderIDDef::AdditionalGateWays, BuildOrder::addNextBuild(), BuildOrder::addOrder(), BuildOrder::addProduce(), BuildOrder::addSquad(), ArmyBehaviourDef::Aggresive, BuildOrderIDDef::ArconTiming, TaskTypeDef::Army, BuildingLocationDef::BaseChoke, ConditionTestDef::canForgeExpand, OrderDef::CanRemoveSquads, CB(), BuildOrderIDDef::CitadelFirst, BuildOrderIDDef::CoreIntoStargate, ArmyBehaviourDef::Default, ArmyBehaviourDef::Defensive, ConditionTestDef::enemyHasResearched, ConditionTestDef::enemyUnitCountGreaterEqualThan, TaskTypeDef::Expansion, BuildingLocationDef::Expansion, BuildingLocationDef::ExpansionGas, OrderDef::ExpansionManager, BuildOrderIDDef::ForgeExpand, BuildOrderIDDef::FourGateGoon, BuildOrderIDDef::FourteenNexus, TaskTypeDef::Highest, ConditionTestDef::isEnemyProtoss, ConditionTestDef::isEnemyTerran, ConditionTestDef::isEnemyZerg, ConditionTestDef::isResearching, BWAPI::UpgradeTypes::Leg_Enhancements, OrderDef::MacroArmyProduction, OrderDef::MacroCanTech, TaskTypeDef::MacroExtraProduction, OrderDef::MacroProductionFacilities, TaskTypeDef::MacroUrgent, ConditionTestDef::mapSize, mBuildOrders, ConditionTestDef::myPlannedUnitTotalGreaterEqualThan, ConditionTestDef::myPlannedUnitTotalLessThan, ConditionTestDef::myUnitTotalBuildCountLessThan, BuildOrderIDDef::Nexus, ConditionTestDef::numberOfEnemies, BuildOrderIDDef::OneGateCore, BWAPI::Races::Protoss, BWAPI::UnitTypes::Protoss_Arbiter, BWAPI::UnitTypes::Protoss_Archon, BWAPI::UnitTypes::Protoss_Assimilator, BWAPI::UnitTypes::Protoss_Carrier, BWAPI::UnitTypes::Protoss_Citadel_of_Adun, BWAPI::UnitTypes::Protoss_Corsair, BWAPI::UnitTypes::Protoss_Cybernetics_Core, BWAPI::UnitTypes::Protoss_Dragoon, BWAPI::UnitTypes::Protoss_Forge, BWAPI::UnitTypes::Protoss_Gateway, BWAPI::UpgradeTypes::Protoss_Ground_Weapons, BWAPI::UnitTypes::Protoss_High_Templar, BWAPI::UnitTypes::Protoss_Nexus, BWAPI::UnitTypes::Protoss_Observatory, BWAPI::UnitTypes::Protoss_Observer, BWAPI::UnitTypes::Protoss_Photon_Cannon, BWAPI::UnitTypes::Protoss_Probe, BWAPI::UnitTypes::Protoss_Pylon, BWAPI::UnitTypes::Protoss_Reaver, BWAPI::UnitTypes::Protoss_Robotics_Facility, BWAPI::UnitTypes::Protoss_Robotics_Support_Bay, BWAPI::UnitTypes::Protoss_Shuttle, BWAPI::UnitTypes::Protoss_Stargate, BWAPI::UnitTypes::Protoss_Templar_Archives, BWAPI::UnitTypes::Protoss_Zealot, BWAPI::BulletTypes::Psionic_Storm, BuildOrderIDDef::PvPEndGame, BuildOrderIDDef::PvPMidGame, BuildOrderIDDef::PvTCarrierSwitch, BuildOrderIDDef::PvTEndGame, BuildOrderIDDef::PvTMidGame, BuildOrderIDDef::PvZEndGame, OrderDef::RefineryManager, BuildOrderIDDef::RoboVsProtoss, BuildOrderIDDef::RoboVsTerran, OrderDef::Scout, BuildOrder::setArmyBehaviour(), BuildOrder::setDefaultBuild(), BuildOrder::setStartingCondition(), BWAPI::UpgradeTypes::Singularity_Charge, BuildOrderIDDef::StargateArcon, TaskTypeDef::Supply, OrderDef::SupplyManager, BWAPI::TechTypes::Tank_Siege_Mode, OrderDef::TrainWorkers, BuildOrderIDDef::TwoGate, TaskTypeDef::Worker, and BWAPI::UnitTypes::Zerg_Mutalisk.
Referenced by onBegin().
{ using namespace BWAPI::Races; using namespace BWAPI::UnitTypes; using namespace BWAPI::UpgradeTypes; using namespace BWAPI::TechTypes; int ID_1 = 0; int ID_2 = 0; int ID_3 = 0; /**************************************************************************************************/ /* Against Zerg */ /**************************************************************************************************/ Condition corsairBuildCondition(Condition(ConditionTest::myUnitTotalBuildCountLessThan, Protoss_Corsair, 12) || (Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Corsair, 12) && Condition(ConditionTest::enemyUnitCountGreaterEqualThan, Zerg_Mutalisk, 12))); Condition corsairStargateCondition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Stargate, 2); /************************************************************************/ /* Forge Expand */ /************************************************************************/ BuildOrder forgeExpand(Protoss, BuildOrderID::ForgeExpand, "Forge Expand"); //Starting Conditions forgeExpand.setStartingCondition(Condition(ConditionTest::numberOfEnemies, 1) && Condition(ConditionTest::isEnemyZerg) && Condition(ConditionTest::canForgeExpand)); //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 forgeExpand.setArmyBehaviour(ArmyBehaviour::Defensive); forgeExpand.setDefaultBuild(BuildOrderID::StargateArcon); //Units to Produce forgeExpand.addProduce(Protoss_Zealot, 1); // Build Order forgeExpand.addItem(Protoss_Probe, 4, TaskType::Highest); ID_1 = forgeExpand.addItem(Protoss_Pylon, 1, BuildingLocation::BaseChoke, TaskType::Highest); //Pylon on 8 forgeExpand.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); forgeExpand.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = forgeExpand.addItem(Protoss_Forge, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); //Forge on 10 forgeExpand.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); forgeExpand.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); ID_1 = forgeExpand.addItem(Protoss_Photon_Cannon, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); ID_1 = forgeExpand.addItem(Protoss_Photon_Cannon, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); ID_1 = forgeExpand.addItem(Protoss_Nexus, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::ExpansionGas); ID_1 = forgeExpand.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::BaseChoke); // Add // TODO: don't forge ecpand for competition, doesn't force army / defense at all and if they go mass muta it wont always get // enough anti air out in time //mBuildOrders[BuildOrderID::ForgeExpand] = forgeExpand; /************************************************************************/ /* Stargate Arcon */ /************************************************************************/ BuildOrder starArcon(Protoss, BuildOrderID::StargateArcon, "Stargate into Arcon"); starArcon.addNextBuild(BuildOrderID::ArconTiming, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Archon, 3));//go to timing attack if i have 2 arcons starArcon.setDefaultBuild(BuildOrderID::ArconTiming, 24*60*4);//or 4 mins have passed starArcon.setArmyBehaviour(ArmyBehaviour::Defensive); // Constants starArcon.addOrder(Order::TrainWorkers); starArcon.addOrder(Order::MacroArmyProduction); starArcon.addOrder(Order::SupplyManager); starArcon.addOrder(Order::Scout); // Squads starArcon.addSquad(SquadType::CorsairSquad); //Units to Produce starArcon.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); starArcon.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); starArcon.addProduce(Protoss_Zealot, 1); starArcon.addProduce(Protoss_Dragoon, 1); // Build Order starArcon.addItem(Protoss_Zealot, 6, TaskType::Army); starArcon.addItem(Protoss_Assimilator); ID_1 = starArcon.addItem(Protoss_Cybernetics_Core); starArcon.addItem(Protoss_Stargate, 1, TaskType::Highest); starArcon.addItem(Protoss_Corsair, 2, TaskType::Highest); starArcon.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); starArcon.addItem(Protoss_Ground_Weapons, 1, CB(ID_1, CallBackType::onDispatched)); starArcon.addItem(Protoss_Gateway, TaskType::MacroExtraProduction, CB(ID_1, CallBackType::onDispatched)); ID_1 = starArcon.addItem(Protoss_Citadel_of_Adun, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); starArcon.addItem(Protoss_Photon_Cannon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 4); starArcon.addItem(Leg_Enhancements, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); starArcon.addItem(Protoss_Templar_Archives, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); starArcon.addItem(Psionic_Storm, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); starArcon.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::StargateArcon] = starArcon; /************************************************************************/ /* Arcon Timing */ /************************************************************************/ BuildOrder ArconTiming(Protoss, BuildOrderID::ArconTiming, "Arcon Timing Attack"); // Constants ArconTiming.addOrder(Order::TrainWorkers); ArconTiming.addOrder(Order::SupplyManager); ArconTiming.addOrder(Order::MacroArmyProduction); ArconTiming.addOrder(Order::RefineryManager); ArconTiming.addOrder(Order::MacroProductionFacilities); ArconTiming.addOrder(Order::MacroCanTech); ArconTiming.addOrder(Order::ExpansionManager); ArconTiming.addOrder(Order::Scout); ArconTiming.setDefaultBuild(BuildOrderID::PvZEndGame, 24*60*1); // Squads ArconTiming.addSquad(SquadType::CorsairSquad); //Units to Produce ArconTiming.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); ArconTiming.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); ArconTiming.addProduce(Protoss_Zealot, 1); ArconTiming.addProduce(Protoss_Dragoon, 1); ArconTiming.setArmyBehaviour(ArmyBehaviour::Aggresive); // Add mBuildOrders[BuildOrderID::ArconTiming] = ArconTiming; /************************************************************************/ /* PvZ End Game */ /************************************************************************/ BuildOrder pvzEnd(Protoss, BuildOrderID::PvZEndGame, "PvZ End Game"); // Constants pvzEnd.addOrder(Order::TrainWorkers); pvzEnd.addOrder(Order::SupplyManager); pvzEnd.addOrder(Order::MacroArmyProduction); pvzEnd.addOrder(Order::RefineryManager); pvzEnd.addOrder(Order::MacroProductionFacilities); pvzEnd.addOrder(Order::MacroCanTech); pvzEnd.addOrder(Order::ExpansionManager); pvzEnd.addOrder(Order::Scout); pvzEnd.setArmyBehaviour(ArmyBehaviour::Default); // Squads pvzEnd.addSquad(SquadType::CorsairSquad); //Units to Produce pvzEnd.addProduce(Protoss_High_Templar, 2, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); pvzEnd.addProduce(Protoss_Corsair, 3, 100, corsairBuildCondition, corsairStargateCondition); pvzEnd.addProduce(Protoss_Zealot, 1); pvzEnd.addProduce(Protoss_Dragoon, 1); // Add mBuildOrders[BuildOrderID::PvZEndGame] = pvzEnd; /************************************************************************/ /* Two Gate */ /************************************************************************/ BuildOrder twoGate(Protoss, BuildOrderID::TwoGate, "2 Gate"); //Starting Conditions twoGate.setStartingCondition(Condition(ConditionTest::isEnemyZerg) || Condition(ConditionTest::isEnemyProtoss)); // Follow Ups twoGate.addNextBuild(BuildOrderID::CoreIntoStargate, Condition(ConditionTest::isEnemyZerg)); twoGate.addNextBuild(BuildOrderID::FourGateGoon, Condition(ConditionTest::isEnemyProtoss)); //Units to Produce twoGate.addProduce(Protoss_Zealot, 1); //Army Behaviour twoGate.setArmyBehaviour(ArmyBehaviour::Aggresive); // Build Order ID_1 = twoGate.addItem(Protoss_Probe, 4); ID_1 = twoGate.addItem(Protoss_Pylon, CB(ID_1, CallBackType::onDispatched)); //Pylon on 8 twoGate.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = twoGate.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 10 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = twoGate.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 12 ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched)); ID_1 = twoGate.addItem(Protoss_Zealot, CB(ID_1, CallBackType::onDispatched));//Zealot on 13 ID_1 = twoGate.addItem(Protoss_Pylon, CB(ID_1, CallBackType::onDispatched)); ID_1 = twoGate.addItem(Protoss_Probe, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = twoGate.addItem(Protoss_Zealot, CB(ID_1, CallBackType::onDispatched), 2); twoGate.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); twoGate.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::TwoGate] = twoGate; /************************************************************************/ /* Core into Stargate */ /************************************************************************/ BuildOrder coreStar(Protoss, BuildOrderID::CoreIntoStargate, "Cybernetics Core into Stargate"); // Follow Ups coreStar.setDefaultBuild(BuildOrderID::PvZEndGame, 24*60*1); // Constants coreStar.addOrder(Order::TrainWorkers); coreStar.addOrder(Order::SupplyManager); coreStar.addOrder(Order::MacroArmyProduction); coreStar.addOrder(Order::Scout); // Squads coreStar.addSquad(SquadType::CorsairSquad); //Units to Produce coreStar.addProduce(Protoss_Zealot, 1); coreStar.addProduce(Protoss_Dragoon, 1); coreStar.addProduce(Protoss_Corsair, 2, 100, corsairBuildCondition, corsairStargateCondition); //Army Behaviour coreStar.setArmyBehaviour(ArmyBehaviour::Aggresive); // Build Order ID_1 = coreStar.addItem(Protoss_Assimilator); coreStar.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); ID_1 = coreStar.addItem(Protoss_Cybernetics_Core); coreStar.addItem(Protoss_Stargate, CB(ID_1, CallBackType::onDispatched)); coreStar.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::CoreIntoStargate] = coreStar; /**************************************************************************************************/ /* Against Terran */ /**************************************************************************************************/ /************************************************************************/ /* 14 Nexus */ /************************************************************************/ BuildOrder fourteenNexus(Protoss, BuildOrderID::FourteenNexus, "14 Nexus"); //Starting Conditions fourteenNexus.setStartingCondition(Condition(ConditionTest::isEnemyTerran) && Condition(ConditionTest::numberOfEnemies, 1) && Condition(ConditionTest::mapSize, 4)); fourteenNexus.setDefaultBuild(BuildOrderID::CitadelFirst, 24*60*2); //Units to Produce fourteenNexus.addProduce(Protoss_Dragoon, 6); fourteenNexus.addProduce(Protoss_Zealot, 1); //Army Behaviour fourteenNexus.setArmyBehaviour(ArmyBehaviour::Defensive); // Build Order ID_1 = fourteenNexus.addItem(Protoss_Probe, 4, TaskType::Highest); ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //Pylon on 8 fourteenNexus.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 5); ID_1 = fourteenNexus.addItem(Protoss_Nexus, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::Expansion); ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); ID_1 = fourteenNexus.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 14 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); ID_1 = fourteenNexus.addItem(Protoss_Assimilator, CB(ID_1, CallBackType::onDispatched)); //Gas on 15 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = fourteenNexus.addItem(Protoss_Cybernetics_Core, CB(ID_1, CallBackType::onDispatched)); //core on 17 ID_1 = fourteenNexus.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //gate on 17 ID_1 = fourteenNexus.addItem(Protoss_Zealot, TaskType::Army, CB(ID_1, CallBackType::onDispatched)); //zealot on 17 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 21 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 21 ID_1 = fourteenNexus.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched));//range on 25 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 27 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 27 ID_1 = fourteenNexus.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = fourteenNexus.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 33 ID_1 = fourteenNexus.addItem(Protoss_Dragoon, TaskType::Army, CB(ID_1, CallBackType::onDispatched), 2);//2 Dragoon on 35 fourteenNexus.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); fourteenNexus.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); fourteenNexus.addOrder(Order::MacroArmyProduction, CB(ID_1, CallBackType::onDispatched)); fourteenNexus.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::FourteenNexus] = fourteenNexus; /************************************************************************/ /* One Gate Core */ /************************************************************************/ BuildOrder oneGateCore(Protoss, BuildOrderID::OneGateCore, "1 Gate Core"); //Starting Conditions oneGateCore.setStartingCondition(Condition(ConditionTest::isEnemyTerran) || Condition(ConditionTest::isEnemyProtoss)); //oneGateCore.addNextBuild(buildRoboVsTerran, Condition(ConditionType::isEnemyTerran)); oneGateCore.addNextBuild(BuildOrderID::AdditionalGateWays, Condition(ConditionTest::isEnemyTerran)); oneGateCore.addNextBuild(BuildOrderID::RoboVsProtoss, Condition(ConditionTest::isEnemyProtoss)); //Army Behaviour oneGateCore.setArmyBehaviour(ArmyBehaviour::Aggresive); // Build Order oneGateCore.addItem(Protoss_Probe, 4, TaskType::Highest); ID_1 = oneGateCore.addItem(Protoss_Pylon, 1); //Pylon on 8 oneGateCore.addOrder(Order::TrainWorkers, CB(ID_1, CallBackType::onDispatched)); oneGateCore.addOrder(Order::Scout, CB(ID_1, CallBackType::onStarted)); ID_1 = oneGateCore.addItem(Protoss_Gateway, CB(ID_1, CallBackType::onDispatched)); //Gateway on 10 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 2); ID_1 = oneGateCore.addItem(Protoss_Assimilator, CB(ID_1, CallBackType::onDispatched)); //gas on 12 //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 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched), 1); ID_1 = oneGateCore.addItem(Protoss_Cybernetics_Core, CB(ID_1, CallBackType::onDispatched)); //core on 14 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); ID_1 = oneGateCore.addItem(Protoss_Pylon, TaskType::Supply, CB(ID_1, CallBackType::onDispatched)); //pylon on 15 //ID_1 = oneGateCore.addItem(Protoss_Probe, TaskType::Worker, CB(ID_1, CallBackType::onDispatched)); oneGateCore.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); oneGateCore.addOrder(Order::RefineryManager, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::OneGateCore] = oneGateCore; /************************************************************************/ /* Robo First */ /************************************************************************/ BuildOrder roboPvT(Protoss, BuildOrderID::RoboVsTerran, "Robotics Facility First"); // Constants roboPvT.addOrder(Order::TrainWorkers); roboPvT.addOrder(Order::RefineryManager); roboPvT.addOrder(Order::Scout); roboPvT.setArmyBehaviour(ArmyBehaviour::Defensive); roboPvT.addNextBuild(BuildOrderID::CitadelFirst, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Reaver, 1) && Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Shuttle, 1)); // Follow Ups roboPvT.setDefaultBuild(BuildOrderID::CitadelFirst, 24*60*2); // Squads roboPvT.addSquad(SquadType::ReaverDropSquad); //Units to Produce roboPvT.addProduce(Protoss_Dragoon, 1); // Build Order ID_3 = roboPvT.addItem(Protoss_Dragoon, 4, TaskType::Army); roboPvT.addOrder(Order::MacroArmyProduction, CB(ID_3, CallBackType::onDispatched)); ID_1 = roboPvT.addItem(Protoss_Pylon, 1, TaskType::Supply); ID_1 = roboPvT.addItem(Protoss_Robotics_Facility, CB(ID_1, CallBackType::onStarted)); roboPvT.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched)); ID_1 = roboPvT.addItem(Protoss_Observatory, CB(ID_1, CallBackType::onCompleted)); ID_2 = roboPvT.addItem(Protoss_Observer, CB(ID_1, CallBackType::onStarted)); ID_1 = roboPvT.addItem(Protoss_Nexus, TaskType::Expansion, CB(ID_1, CallBackType::onDispatched), 1, BuildingLocation::Expansion); roboPvT.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); roboPvT.addOrder(Order::SupplyManager, CB(ID_1, CallBackType::onDispatched)); ID_2 = roboPvT.addItem(Protoss_Shuttle, CB(ID_2, CallBackType::onDispatched)); roboPvT.addItem(Protoss_Reaver, CB(ID_2, CallBackType::onDispatched)); ID_1 = roboPvT.addItem(Protoss_Robotics_Support_Bay, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::RoboVsTerran] = roboPvT; /************************************************************************/ /* Branch 1: Additional Gateways */ /************************************************************************/ BuildOrder gateways(Protoss, BuildOrderID::AdditionalGateWays, "Additional Gateways"); // Constants gateways.addOrder(Order::TrainWorkers); gateways.addOrder(Order::SupplyManager); gateways.addOrder(Order::Scout); gateways.setArmyBehaviour(ArmyBehaviour::Aggresive); // Follow Ups gateways.setDefaultBuild(BuildOrderID::Nexus, 24*60*4); gateways.addNextBuild(BuildOrderID::Nexus, Condition(ConditionTest::enemyHasResearched, BWAPI::TechTypes::Tank_Siege_Mode)); //Units to Produce gateways.addProduce(Protoss_Dragoon, 1); // Build Order ID_1 = gateways.addItem(Protoss_Dragoon, 1, TaskType::Army); gateways.addOrder(Order::MacroArmyProduction, CB(ID_1, CallBackType::onDispatched, CB(ID_1, CallBackType::onDispatched))); ID_1 = gateways.addItem(Protoss_Gateway, 1, TaskType::MacroExtraProduction); gateways.addItem(Singularity_Charge, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); gateways.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::AdditionalGateWays] = gateways; /************************************************************************/ /* Branch 2: Nexus */ /************************************************************************/ BuildOrder nexus(Protoss, BuildOrderID::Nexus, "Nexus"); // Constants nexus.addOrder(Order::TrainWorkers); nexus.addOrder(Order::SupplyManager); nexus.addOrder(Order::MacroArmyProduction); nexus.addOrder(Order::MacroProductionFacilities); nexus.addOrder(Order::Scout); // Follow Ups nexus.addNextBuild(BuildOrderID::PvPMidGame, Condition(ConditionTest::isEnemyProtoss)); nexus.setDefaultBuild(BuildOrderID::CitadelFirst, 24*50*2); //Units to Produce nexus.addProduce(Protoss_Dragoon, 6); nexus.addProduce(Protoss_Zealot, 1); // Build Order ID_1 = nexus.addItem(Protoss_Nexus, 1, TaskType::Expansion, BuildingLocation::Expansion); // Add mBuildOrders[BuildOrderID::Nexus] = nexus; /************************************************************************/ /* Citadel First */ /************************************************************************/ BuildOrder citadel(Protoss, BuildOrderID::CitadelFirst, "Citadel First"); // Constants citadel.addOrder(Order::TrainWorkers); citadel.addOrder(Order::SupplyManager); citadel.addOrder(Order::RefineryManager); citadel.addOrder(Order::MacroArmyProduction); citadel.addOrder(Order::MacroProductionFacilities); citadel.addOrder(Order::ExpansionManager); citadel.addOrder(Order::CanRemoveSquads); citadel.addOrder(Order::Scout); // Follow Ups citadel.setDefaultBuild(BuildOrderID::PvTMidGame, 24*60); //citadel.addNextBuild(BuildOrderID::PvTCarrierSwitch, Condition(ConditionType::enemyDoesntHasUnit, BWAPI::UnitTypes::Terran_Goliath, 2)); // Squads citadel.addSquad(SquadType::ReaverDropSquad); //Units to Produce citadel.addProduce(Protoss_Dragoon, 2); citadel.addProduce(Protoss_Zealot, 6); // Build Order ID_1 = citadel.addItem(Protoss_Citadel_of_Adun); citadel.addItem(Leg_Enhancements, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::CitadelFirst] = citadel; /************************************************************************/ /* Mid Game Temp */ /************************************************************************/ BuildOrder midGame(Protoss, BuildOrderID::PvTMidGame, "Mid Game"); // Constants midGame.addOrder(Order::TrainWorkers); midGame.addOrder(Order::SupplyManager); midGame.addOrder(Order::RefineryManager); midGame.addOrder(Order::MacroArmyProduction); midGame.addOrder(Order::MacroProductionFacilities); midGame.addOrder(Order::ExpansionManager); midGame.addOrder(Order::CanRemoveSquads); midGame.addOrder(Order::Scout); // Follow Ups midGame.setDefaultBuild(BuildOrderID::PvTEndGame, 24*60); // Squads midGame.addSquad(SquadType::ReaverDropSquad); //Units to Produce midGame.addProduce(Protoss_Dragoon, 14); midGame.addProduce(Protoss_Zealot, 14); midGame.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); ID_1 = midGame.addItem(Protoss_Templar_Archives); ID_1 = midGame.addItem(Psionic_Storm, TaskType::MacroUrgent, CB(ID_1, CallBackType::onCompleted)); midGame.addOrder(Order::MacroCanTech, CB(ID_1, CallBackType::onCompleted)); // Add mBuildOrders[BuildOrderID::PvTMidGame] = midGame; /************************************************************************/ /* End Game */ /************************************************************************/ BuildOrder endGame(Protoss, BuildOrderID::PvTEndGame, "End Game"); // Constants endGame.addOrder(Order::TrainWorkers); endGame.addOrder(Order::SupplyManager); endGame.addOrder(Order::RefineryManager); endGame.addOrder(Order::MacroArmyProduction); endGame.addOrder(Order::MacroProductionFacilities); endGame.addOrder(Order::ExpansionManager); endGame.addOrder(Order::MacroCanTech); endGame.addOrder(Order::CanRemoveSquads); endGame.addOrder(Order::Scout); // Squads endGame.addSquad(SquadType::ReaverDropSquad); //Units to Produce endGame.addProduce(Protoss_Dragoon, 14); endGame.addProduce(Protoss_Zealot, 14); endGame.addProduce(Protoss_High_Templar, 3, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); endGame.addProduce(Protoss_Arbiter, 1); // Add mBuildOrders[BuildOrderID::PvTEndGame] = endGame; /************************************************************************/ /* Carrier Switch */ /************************************************************************/ BuildOrder carriers(Protoss, BuildOrderID::PvTCarrierSwitch, "Carriers"); // Constants carriers.addOrder(Order::TrainWorkers); carriers.addOrder(Order::SupplyManager); carriers.addOrder(Order::MacroArmyProduction); carriers.addOrder(Order::RefineryManager); carriers.addOrder(Order::MacroProductionFacilities); carriers.addOrder(Order::MacroCanTech); carriers.addOrder(Order::ExpansionManager); carriers.addOrder(Order::CanRemoveSquads); carriers.addOrder(Order::Scout); // Squads carriers.addSquad(SquadType::ReaverDropSquad); //Units to Produce carriers.addProduce(Protoss_Dragoon, 1); carriers.addProduce(Protoss_Zealot, 1); carriers.addProduce(Protoss_Carrier, 12); // Add mBuildOrders[BuildOrderID::PvTCarrierSwitch] = carriers; /************************************************************************/ /* Four Gate Goon */ /************************************************************************/ BuildOrder gatewayGoon(Protoss, BuildOrderID::FourGateGoon, "Four Gate Goon"); // Constants gatewayGoon.addOrder(Order::TrainWorkers); gatewayGoon.addOrder(Order::SupplyManager); gatewayGoon.addOrder(Order::Scout); gatewayGoon.addOrder(Order::MacroArmyProduction); gatewayGoon.addOrder(Order::RefineryManager); gatewayGoon.setArmyBehaviour(ArmyBehaviour::Default); // Follow Ups gatewayGoon.setDefaultBuild(BuildOrderID::Nexus, 24*60*3); //Units to Produce gatewayGoon.addProduce(Protoss_Dragoon, 8); gatewayGoon.addProduce(Protoss_Zealot, 1); // Build Order ID_1 = gatewayGoon.addItem(Protoss_Cybernetics_Core); gatewayGoon.addItem(Singularity_Charge, 1, TaskType::MacroUrgent, CB(ID_1, CallBackType::onDispatched)); gatewayGoon.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::FourGateGoon] = gatewayGoon; /************************************************************************/ /* Robo First */ /************************************************************************/ BuildOrder robo(Protoss, BuildOrderID::RoboVsProtoss, "Robotics Facility"); // Constants robo.addOrder(Order::TrainWorkers); robo.addOrder(Order::SupplyManager); robo.addOrder(Order::RefineryManager); robo.addOrder(Order::MacroArmyProduction); robo.addOrder(Order::Scout); robo.setArmyBehaviour(ArmyBehaviour::Defensive); robo.addNextBuild(BuildOrderID::PvPMidGame, Condition(ConditionTest::myPlannedUnitTotalGreaterEqualThan, Protoss_Reaver, 1) /* && Condition(ConditionType::myUnitCount, Protoss_Shuttle, 1) */); // Follow Ups robo.setDefaultBuild(BuildOrderID::PvPMidGame, 24*60); // Squads robo.addSquad(SquadType::ReaverDropSquad); //Units to Produce robo.addProduce(Protoss_Zealot, 1); robo.addProduce(Protoss_Dragoon, 14); robo.addProduce(Protoss_Reaver, 1, 100, Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Reaver, 3), Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Robotics_Facility, 1)); // Build Order robo.addItem(Protoss_Dragoon, 4, TaskType::Army); ID_1 = robo.addItem(Protoss_Gateway, 1, TaskType::MacroExtraProduction); ID_1 = robo.addItem(Protoss_Robotics_Facility, CB(ID_1, CallBackType::onDispatched)); robo.addItem(Singularity_Charge, 1, CB(ID_1, CallBackType::onDispatched)); ID_1 = robo.addItem(Protoss_Observatory, CB(ID_1, CallBackType::onStarted)); ID_2 = robo.addItem(Protoss_Observer, TaskType::Highest, CB(ID_1, CallBackType::onStarted)); //ID_2 = robo.addItem(Protoss_Shuttle, TaskType::Highest, CB(ID_2, CallBackType::onStarted)); ID_2 = robo.addItem(Protoss_Robotics_Support_Bay, TaskType::Highest, CB(ID_2, CallBackType::onDispatched)); robo.addItem(Protoss_Reaver, TaskType::Highest, CB(ID_2, CallBackType::onDispatched), 2); ID_1 = robo.addItem(Protoss_Gateway, TaskType::MacroExtraProduction, CB(ID_1, CallBackType::onDispatched)); robo.addOrder(Order::MacroProductionFacilities, CB(ID_1, CallBackType::onDispatched)); // Add mBuildOrders[BuildOrderID::RoboVsProtoss] = robo; /************************************************************************/ /* PvP Mid Game */ /************************************************************************/ BuildOrder PvPMid(Protoss, BuildOrderID::PvPMidGame, "Mid Game"); // Constants PvPMid.addOrder(Order::TrainWorkers); PvPMid.addOrder(Order::SupplyManager); PvPMid.addOrder(Order::ExpansionManager); PvPMid.addOrder(Order::RefineryManager); PvPMid.addOrder(Order::MacroArmyProduction); PvPMid.addOrder(Order::MacroProductionFacilities); PvPMid.addOrder(Order::MacroCanTech); PvPMid.addOrder(Order::CanRemoveSquads); PvPMid.addOrder(Order::Scout); PvPMid.setArmyBehaviour(ArmyBehaviour::Default); PvPMid.setDefaultBuild(BuildOrderID::PvPEndGame, 24*60*2); // Squads PvPMid.addSquad(SquadType::ReaverDropSquad); //Units to Produce PvPMid.addProduce(Protoss_Zealot, 1); PvPMid.addProduce(Protoss_Dragoon, 14); PvPMid.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); PvPMid.addProduce(Protoss_Reaver, 1, 100, Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Reaver, 3), Condition(ConditionTest::myPlannedUnitTotalLessThan, Protoss_Robotics_Facility, 1)); // Add mBuildOrders[BuildOrderID::PvPMidGame] = PvPMid; /************************************************************************/ /* PVP End Game */ /************************************************************************/ BuildOrder PVPEnd(Protoss, BuildOrderID::PvPEndGame, "End Game"); // Constants PVPEnd.addOrder(Order::TrainWorkers); PVPEnd.addOrder(Order::SupplyManager); PVPEnd.addOrder(Order::ExpansionManager); PVPEnd.addOrder(Order::RefineryManager); PVPEnd.addOrder(Order::MacroArmyProduction); PVPEnd.addOrder(Order::MacroProductionFacilities); PVPEnd.addOrder(Order::MacroCanTech); PVPEnd.addOrder(Order::CanRemoveSquads); PVPEnd.addOrder(Order::Scout); PVPEnd.setArmyBehaviour(ArmyBehaviour::Default); // Squads PVPEnd.addSquad(SquadType::ReaverDropSquad); //Units to Produce PVPEnd.addProduce(Protoss_Zealot, 1); PVPEnd.addProduce(Protoss_Dragoon, 14); PVPEnd.addProduce(Protoss_High_Templar, 1, 100, Condition(ConditionTest::isResearching, Psionic_Storm)); PVPEnd.addProduce(Protoss_Arbiter, 1); // Add mBuildOrders[BuildOrderID::PvPEndGame] = PVPEnd; }
void BuildOrderManagerClass::LoadTerranBuilds | ( | ) | [private] |
Definition at line 3 of file LoadTerranBuilds.cpp.
Referenced by onBegin().
{ int ID_1 = 0; int ID_2 = 0; int ID_3 = 0; }
void BuildOrderManagerClass::LoadZergBuilds | ( | ) | [private] |
Definition at line 3 of file LoadZergBuilds.cpp.
Referenced by onBegin().
{ int ID_1 = 0; int ID_2 = 0; int ID_3 = 0; }
void BuildOrderManagerClass::onBegin | ( | ) |
Definition at line 17 of file BuildOrderManager.cpp.
References LoadOtherBuilds(), LoadProtossBuilds(), LoadTerranBuilds(), and LoadZergBuilds().
{ LoadOtherBuilds(); LoadProtossBuilds(); LoadTerranBuilds(); LoadZergBuilds(); }
void BuildOrderManagerClass::toggleDebugInfo | ( | ) | [inline] |
Definition at line 22 of file BuildOrderManager.h.
References mShowDebugInfo.
{ mShowDebugInfo = !mShowDebugInfo; }
void BuildOrderManagerClass::toggleOrder | ( | Order | type | ) | [private] |
Definition at line 181 of file BuildOrderManager.cpp.
References mControlValues.
Referenced by handleOrderItem().
{ if(mControlValues.find(type) != mControlValues.end()) { mControlValues[type] = !mControlValues[type]; } else mControlValues[type] = true; }
void BuildOrderManagerClass::update | ( | ) |
Definition at line 37 of file BuildOrderManager.cpp.
References BWAPI::Broodwar, BuildOrderFinished(), changeCurrentBuild(), checkBuildStatus(), BWAPI::Game::drawTextScreen(), BWAPI::Game::getFrameCount(), getOrderName(), BWAPI::Player::getRace(), getRandomBuild(), mBuildFinishTime, mBuildOrders, mControlValues, mCurrentBuild, mFinishedBuild, mShowDebugInfo, BuildOrderIDDef::None, and BWAPI::Game::self().
{ if(mCurrentBuild == BuildOrderID::None) { std::vector<BuildOrderID> viableBuilds; for each(std::pair<BuildOrderID, BuildOrder> build in mBuildOrders) { if(build.second.getRace() != BWAPI::Broodwar->self()->getRace()) continue; if(build.second.isStartBuild()) viableBuilds.push_back(build.first); } changeCurrentBuild(getRandomBuild(viableBuilds)); } if(BuildOrderFinished()) { if(!mFinishedBuild) { mBuildFinishTime = BWAPI::Broodwar->getFrameCount(); mFinishedBuild = true; } std::vector<BuildOrderID> viableBuilds; for(std::map<BuildOrderID, Condition>::const_iterator i = mBuildOrders[mCurrentBuild].getNextBuilds().begin(); i != mBuildOrders[mCurrentBuild].getNextBuilds().end(); ++i) { if(i->second.evauluate()) viableBuilds.push_back(i->first); } if(!viableBuilds.empty()) changeCurrentBuild(getRandomBuild(viableBuilds)); else if(mBuildOrders[mCurrentBuild].getFallbackBuild() != BuildOrderID::None && mBuildOrders[mCurrentBuild].getFallbackTime() < BWAPI::Broodwar->getFrameCount() - mBuildFinishTime) changeCurrentBuild(mBuildOrders[mCurrentBuild].getFallbackBuild()); } checkBuildStatus(); if(mShowDebugInfo) { int y = 25; BWAPI::Broodwar->drawTextScreen(5, 5, "Build: %s", mBuildOrders[mCurrentBuild].getName().c_str()); BWAPI::Broodwar->drawTextScreen(5, 15, "Orders:"); for(std::map<Order, bool>::iterator it = mControlValues.begin(); it != mControlValues.end(); ++it) { if(it->second) { BWAPI::Broodwar->drawTextScreen(5, y, "%s", getOrderName(it->first).c_str()); y += 10; } } } }
int BuildOrderManagerClass::mBuildFinishTime [private] |
Definition at line 56 of file BuildOrderManager.h.
Referenced by update().
std::map<BuildOrderID, BuildOrder> BuildOrderManagerClass::mBuildOrders [private] |
Definition at line 48 of file BuildOrderManager.h.
Referenced by changeCurrentBuild(), getCurrentBuild(), LoadOtherBuilds(), LoadProtossBuilds(), and update().
std::map<Order, bool> BuildOrderManagerClass::mControlValues [private] |
Definition at line 51 of file BuildOrderManager.h.
Referenced by changeCurrentBuild(), getOrder(), toggleOrder(), and update().
Definition at line 49 of file BuildOrderManager.h.
Referenced by changeCurrentBuild(), getCurrentBuild(), and update().
bool BuildOrderManagerClass::mFinishedBuild [private] |
Definition at line 55 of file BuildOrderManager.h.
Referenced by changeCurrentBuild(), and update().
std::list<BuildItem> BuildOrderManagerClass::mItemsWaiting [private] |
Definition at line 45 of file BuildOrderManager.h.
Referenced by BuildCallback(), BuildOrderFinished(), and changeCurrentBuild().
std::list<OrderItem> BuildOrderManagerClass::mOrdersWaiting [private] |
Definition at line 46 of file BuildOrderManager.h.
Referenced by BuildCallback(), BuildOrderFinished(), and changeCurrentBuild().
bool BuildOrderManagerClass::mShowDebugInfo [private] |
Definition at line 53 of file BuildOrderManager.h.
Referenced by toggleDebugInfo(), and update().
std::map<CallBackType, std::map<TaskPointer, int> > BuildOrderManagerClass::mWaitingItems [private] |
Definition at line 43 of file BuildOrderManager.h.
Referenced by checkBuildStatus(), and handleBuildItem().