void FactoryAgent::computeActions() { if (hasMachineShop < 2) { if (AgentManager::getInstance()->countNoUnits(UnitTypes::Terran_Machine_Shop) > 0) { hasMachineShop = 2; } } if (hasMachineShop == 1) { if (AgentManager::getInstance()->countNoUnits(UnitTypes::Terran_Machine_Shop) == 0) { //Broodwar->printf("MachineShop addon failed. Trying again"); unit->buildAddon(UnitTypes::Terran_Machine_Shop); } } if (hasMachineShop == 2) { if (Commander::getInstance()->needUnit(UnitTypes::Terran_Siege_Tank_Tank_Mode)) { if (canBuild(UnitTypes::Terran_Siege_Tank_Tank_Mode)) { unit->train(UnitTypes::Terran_Siege_Tank_Tank_Mode); return; } } if (Commander::getInstance()->needUnit(UnitTypes::Terran_Vulture)) { if (canBuild(UnitTypes::Terran_Vulture)) { unit->train(UnitTypes::Terran_Vulture); return; } } } }
void LairAgent::computeActions() { doResearch(); if ((int)researchOrder.size() == 0) { doUpgrades(); } int level = ((ZergCommander*)Commander::getInstance())->getLevel(); if (level >= 5) { if (canUpgrade(UpgradeTypes::Ventral_Sacs)) unit->upgrade(UpgradeTypes::Ventral_Sacs); else if (canUpgrade(UpgradeTypes::Antennae)) unit->upgrade(UpgradeTypes::Antennae); else if (canUpgrade(UpgradeTypes::Pneumatized_Carapace)) unit->upgrade(UpgradeTypes::Pneumatized_Carapace); return; } //// upgrade to lair if level 5 //int level = ((ZergCommander*)Commander::getInstance())->getLevel(); //if (level >= 5 && unit->getType() != UnitTypes::Zerg_Lair) //{ // unit->upgrade(UpgradeTypes::Zer); //} // build drones ZergCommander* zc = ((ZergCommander*)Commander::getInstance()); UnitType worker = Broodwar->self()->getRace().getWorker(); while (zc->getWorkersNeeded() > 0 && canBuild(worker)) { unit->train(worker); zc->setWorkersNeeded(zc->getWorkersNeeded()-1); } // build hydralisks UnitType hydralisk = UnitTypes::Zerg_Hydralisk; if (Commander::getInstance()->needUnit(hydralisk)) { if (canBuild(hydralisk)) { unit->train(hydralisk); return; } } // build zerglings UnitType zergling = UnitTypes::Zerg_Zergling; if (Commander::getInstance()->needUnit(zergling)) { if (canBuild(zergling)) { unit->train(zergling); return; } } }
QVector<Buildable*> Colony::buildableItems() const { QVector<Buildable*> items; for (ShipType* shipType : entityManager().shipTypes()) { if (canBuild(shipType)) { items.append(shipType); } } for (BuildingType* buildingType : entityManager().buildingTypes()) { if (canBuild(buildingType)) { items.append(buildingType); } } return items; }
bool CoverMap::canBuildAt(UnitType toBuild, TilePosition pos) { int maxW = w - toBuild.tileWidth() - 1; int maxH = h - toBuild.tileHeight() - 1; //Out of bounds check if (pos.x() >= 0 && pos.x() < maxW && pos.y() >= 0 && pos.y() < maxH) { if (canBuild(toBuild, pos)) { return true; } } return false; }
void CommandCenterAgent::computeActions() { if (!hasSentWorkers) { if (!unit->isBeingConstructed()) { sendWorkers(); hasSentWorkers = true; BuildPlanner::getInstance()->addRefinery(); if (AgentManager::getInstance()->countNoUnits(UnitTypes::Terran_Barracks) > 0) { BuildPlanner::getInstance()->addBuildingFirst(UnitTypes::Terran_Bunker); } if (AgentManager::getInstance()->countNoUnits(UnitTypes::Terran_Engineering_Bay) > 0) { BuildPlanner::getInstance()->addBuildingFirst(UnitTypes::Terran_Missile_Turret); } } } if (!unit->isIdle()) { //Already doing something return; } //Build comsat addon if (unit->getAddon() == NULL) { if (Broodwar->canMake(unit, UnitTypes::Terran_Comsat_Station)) { unit->buildAddon(UnitTypes::Terran_Comsat_Station); return; } } if (ResourceManager::getInstance()->needWorker()) { UnitType worker = Broodwar->self()->getRace().getWorker(); if (canBuild(worker)) { unit->train(worker); } } }
bool Citadel::Player::build(Citadel::Building *b, int turn) { int oldTreasure = _treasure; if (!canBuild(b)) { return false; } modifyTreasure(b->price()*-1); _hand.take(b); _built.pushBack(b); b->setValue(b->price()); b->setBuiltAtTurn(turn); return true; }
bool OnGossipHello(Player* player, Creature* creature) { if (creature->isQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); if (canBuild(creature)) { if (player->HasAura(SPELL_CORPORAL)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); else if (player->HasAura(SPELL_LIEUTENANT)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); } } else player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); return true; }
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender */ , uint32 action) { player->CLOSE_GOSSIP_MENU(); if (canBuild(creature)) { switch (action - GOSSIP_ACTION_INFO_DEF) { case 0: creature->CastSpell(player, SPELL_BUILD_CATAPULT_FORCE, true); break; case 1: creature->CastSpell(player, SPELL_BUILD_DEMOLISHER_FORCE, true); break; case 2: creature->CastSpell(player, player->GetTeamId() == TEAM_ALLIANCE ? SPELL_BUILD_SIEGE_VEHICLE_FORCE_ALLIANCE : SPELL_BUILD_SIEGE_VEHICLE_FORCE_HORDE, true); break; } creature->CastSpell(creature, SPELL_ACTIVATE_CONTROL_ARMS, true); } return true; }