Ejemplo n.º 1
0
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;
			}
		}
	}
}
Ejemplo n.º 2
0
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;
		}
	}
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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);
		}
	}
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
        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;
        }