const MetaPairVector StrategyManager::getProtossZealotRushBuildOrderGoal() const { // the goal to return MetaPairVector goal; int numZealots = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Zealot); int numDragoons = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Dragoon); int numProbes = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Probe); int numNexusCompleted = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numNexusAll = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numCyber = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Cybernetics_Core); int numCannon = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Photon_Cannon); int zealotsWanted = numZealots + 8; int dragoonsWanted = numDragoons; if (InformationManager::Instance().enemyHasCloakedUnits()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Robotics_Facility, 1)); if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } if (numNexusAll >= 2 || BWAPI::Broodwar->getFrameCount() > 9000) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Assimilator, 1)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Cybernetics_Core, 1)); } if (numCyber > 0) { dragoonsWanted = numDragoons + 2; goal.push_back(MetaPair(BWAPI::UpgradeTypes::Singularity_Charge, 1)); } if (numNexusCompleted >= 3) { dragoonsWanted = numDragoons + 6; goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } if (expandProtossZealotRush()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Nexus, numNexusAll + 1)); } goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, dragoonsWanted)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Zealot, zealotsWanted)); return goal; }
void UAlbertaBotModule::onSendText(std::string text) { if (Config::Modules::UsingBuildOrderDemo) { std::stringstream type; std::stringstream numUnitType; size_t numUnits = 0; size_t i=0; for (i=0; i<text.length(); ++i) { if (text[i] == ' ') { i++; break; } type << text[i]; } for (; i<text.length(); ++i) { numUnitType << text[i]; } numUnits = atoi(numUnitType.str().c_str()); BWAPI::UnitType t; for (const BWAPI::UnitType & tt : BWAPI::UnitTypes::allUnitTypes()) { if (tt.getName().compare(type.str()) == 0) { t = tt; break; } } BWAPI::Broodwar->printf("Searching for %d of %s", numUnits, t.getName().c_str()); if (t != BWAPI::UnitType()) { MetaPairVector goal; goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Probe, 8)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Gateway, 2)); goal.push_back(MetaPair(t, numUnits)); ProductionManager::Instance().setSearchGoal(goal); } else { BWAPI::Broodwar->printf("Unknown unit type %s", type.str().c_str()); } } }
const MetaPairVector StrategyManager::getProtossDragoonsBuildOrderGoal() const { // the goal to return MetaPairVector goal; int numDragoons = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Dragoon); int numProbes = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Probe); int numNexusCompleted = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numNexusAll = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numCyber = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Cybernetics_Core); int numCannon = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Photon_Cannon); int dragoonsWanted = numDragoons > 0 ? numDragoons + 6 : 2; if (InformationManager::Instance().enemyHasCloakedUnits()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Robotics_Facility, 1)); if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } else { if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } if (expandProtossZealotRush()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Nexus, numNexusAll + 1)); } goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, dragoonsWanted)); return goal; }
const MetaPairVector StrategyManager::getRandyBuildOrderGoal() const { { // the goal to return MetaPairVector goal; int numDragoons = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Dragoon); int numProbes = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Probe); int numNexusCompleted = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numNexusAll = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numCyber = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Cybernetics_Core); int numCannon = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Photon_Cannon); int amount_wanted = 3; if (numDragoons > 12){ amount_wanted = 4; } else if (numDragoons > 16){ amount_wanted = 6; } else if (numDragoons > 24){ amount_wanted = 8; } int dragoonsWanted = numDragoons > 0 ? numDragoons + amount_wanted : 2; int pylonsWanted = 0; if (BWAPI::Broodwar->self()->supplyUsed() + 8 >= BWAPI::Broodwar->self()->supplyTotal()) { pylonsWanted = dragoonsWanted / 4 + 1; } if (numDragoons > 8){ goal.push_back(MetaPair(BWAPI::UpgradeTypes::Singularity_Charge, 1)); } if (InformationManager::Instance().enemyHasCloakedUnits()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Robotics_Facility, 1)); if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } else { if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } if (expandProtossZealotRush()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Nexus, numNexusAll + 1)); } //goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Pylon, pylonsWanted)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, dragoonsWanted)); return goal; } }
const MetaPairVector StrategyManager::getNotABotBuildOrderGoal() const { { // the goal to return MetaPairVector goal; int numDragoons = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Dragoon); int numProbes = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Probe); int numNexusCompleted = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numPylonAll = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Pylon); int numNexusAll = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numCyber = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Cybernetics_Core); int numCannon = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Photon_Cannon); int numHT = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_High_Templar); int numZealot = BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Protoss_Zealot); int d_wanted = 3; if (numDragoons > 2){ goal.push_back(MetaPair(BWAPI::UpgradeTypes::Singularity_Charge, 1)); } if (numDragoons > 6){ goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Citadel_of_Adun, 1)); } if (numDragoons > 10){ goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Templar_Archives, 1)); } if (numDragoons > 14) { goal.push_back(MetaPair(BWAPI::TechTypes::Psionic_Storm, 1)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_High_Templar, numHT + 2)); } // if we are building too many HT we can't build dragoons, so just make some zealots // get rid of the minerals and call it a day if ((numDragoons > 14) && (numHT < 8)) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_High_Templar, numHT + 2)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Zealot, numZealot + 4)); return goal; } if (numDragoons > 8){ d_wanted = 4; } int dragoonsWanted = numDragoons > 0 ? numDragoons + d_wanted : 2; if (InformationManager::Instance().enemyHasCloakedUnits()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Robotics_Facility, 1)); if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } else { if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } if (expandProtossZealotRush()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Nexus, numNexusAll + 1)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Pylon, numPylonAll + 1)); } goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, dragoonsWanted)); return goal; } }
const MetaPairVector StrategyManager::getProtossBuildOrderGoal() const { // the goal to return MetaPairVector goal; int numZealots = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Zealot); int numPylons = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Pylon); int numDragoons = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Dragoon); int numProbes = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Probe); int numNexusCompleted = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numNexusAll = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Nexus); int numCyber = BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Cybernetics_Core); int numCannon = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Photon_Cannon); int numScout = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Corsair); int numReaver = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Reaver); int numDarkTeplar = UnitUtil::GetAllUnitCount(BWAPI::UnitTypes::Protoss_Dark_Templar); if (Config::Strategy::StrategyName == "Protoss_ZealotRush") { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Zealot, numZealots + 8)); // once we have a 2nd nexus start making dragoons if (numNexusAll >= 2) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, numDragoons + 4)); } } else if (Config::Strategy::StrategyName == "Protoss_DragoonRush") { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, numDragoons + 6)); } else if (Config::Strategy::StrategyName == "Protoss_Drop") { if (numZealots == 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Zealot, numZealots + 4)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Shuttle, 1)); } else { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Zealot, numZealots + 8)); } } else if (Config::Strategy::StrategyName == "Protoss_DTRush") { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dark_Templar, numDarkTeplar + 2)); // if we have a 2nd nexus then get some goons out if (numNexusAll >= 2) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Dragoon, numDragoons + 4)); } } else { UAB_ASSERT_WARNING(false, "Unknown Protoss Strategy Name: %s", Config::Strategy::StrategyName.c_str()); } // if we have 3 nexus, make an observer if (numNexusCompleted >= 3) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } // add observer to the goal if the enemy has cloaked units if (InformationManager::Instance().enemyHasCloakedUnits()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Robotics_Facility, 1)); if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Robotics_Facility) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observatory, 1)); } if (BWAPI::Broodwar->self()->completedUnitCount(BWAPI::UnitTypes::Protoss_Observatory) > 0) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Observer, 1)); } } // if we want to expand, insert a nexus into the build order if (shouldExpandNow()) { goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Nexus, numNexusAll + 1)); } return goal; }
void UAlbertaBotModule::onSendText(std::string text) { if (Options::Modules::USING_REPLAY_VISUALIZER && (text.compare("sim") == 0)) { BWAPI::UnitInterface* selected = NULL; for (BWAPI::UnitInterface* unit : BWAPI::Broodwar->getAllUnits()) { if (unit->isSelected()) { selected = unit; break; } } if (selected) { #ifdef USING_VISUALIZATION_LIBRARIES //ReplayVisualizer rv; //rv.launchSimulation(selected->getPosition(), 1000); #endif } } if (Options::Modules::USING_BUILD_ORDER_DEMO) { std::stringstream type; std::stringstream numUnitType; size_t numUnits = 0; size_t i=0; for (i=0; i<text.length(); ++i) { if (text[i] == ' ') { i++; break; } type << text[i]; } for (; i<text.length(); ++i) { numUnitType << text[i]; } numUnits = atoi(numUnitType.str().c_str()); BWAPI::UnitType t; for (const BWAPI::UnitType & tt : BWAPI::UnitTypes::allUnitTypes()) { if (tt.getName().compare(type.str()) == 0) { t = tt; break; } } BWAPI::Broodwar->printf("Searching for %d of %s", numUnits, t.getName().c_str()); if (t != BWAPI::UnitType()) { MetaPairVector goal; goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Probe, 8)); goal.push_back(MetaPair(BWAPI::UnitTypes::Protoss_Gateway, 2)); goal.push_back(MetaPair(t, numUnits)); ProductionManager::Instance().setSearchGoal(goal); } else { BWAPI::Broodwar->printf("Unknown unit type %s", type.str().c_str()); } } }