Bazaar developer reference

CvMilitaryAI::BuyEmergencyBuilding(CvCity *)

Defined in
CvMilitaryAI.cpp, line 944
Class
CvMilitaryAI
Hook name
CivHooks::CvMilitaryAI_BuyEmergencyBuilding

Hooks

static bool BeforeCvMilitaryAI_BuyEmergencyBuilding(CvMilitaryAI* self, CvCity* pCity, bool& result);static void AfterCvMilitaryAI_BuyEmergencyBuilding(CvMilitaryAI* self, CvCity* pCity, bool& result);static bool ReplaceCvMilitaryAI_BuyEmergencyBuilding(bool (*original)(CvMilitaryAI*, CvCity*), CvMilitaryAI* self, CvCity* pCity);CivRegisterBefore<CivHooks::CvMilitaryAI_BuyEmergencyBuilding>(host, &BeforeCvMilitaryAI_BuyEmergencyBuilding);CivRegisterAfter<CivHooks::CvMilitaryAI_BuyEmergencyBuilding>(host, &AfterCvMilitaryAI_BuyEmergencyBuilding);CivRegisterReplace<CivHooks::CvMilitaryAI_BuyEmergencyBuilding>(host, &ReplaceCvMilitaryAI_BuyEmergencyBuilding);

Code

943/// Spend money to quickly add a defensive building to a city944bool CvMilitaryAI::BuyEmergencyBuilding(CvCity* pCity)945{946	// Loop through adding the available buildings947	for(int iBldgLoop = 0; iBldgLoop < GC.GetGameBuildings()->GetNumBuildings(); iBldgLoop++)948	{949		const BuildingTypes eBldg = static_cast<BuildingTypes>(iBldgLoop);950		CvBuildingEntry* pkBuildingInfo = GC.GetGameBuildings()->GetEntry(eBldg);951		if(pkBuildingInfo)952		{953			// Make sure this building can be built now954			if(pCity->canConstruct(eBldg) && pkBuildingInfo->GetDefenseModifier() > 0)955			{956				if(pCity->IsCanPurchase(/*bTestPurchaseCost*/ true, /*bTestTrainable*/ true, NO_UNIT, eBldg, NO_PROJECT, YIELD_GOLD))957				{958					int iGoldCost = pCity->GetPurchaseCost(eBldg);959					int iPriority = GC.getAI_GOLD_PRIORITY_DEFENSIVE_BUILDING();960					if(m_pPlayer->GetEconomicAI()->CanWithdrawMoneyForPurchase(PURCHASE_TYPE_BUILDING, iGoldCost, iPriority))961					{962						m_pPlayer->GetTreasury()->LogExpenditure((CvString)pkBuildingInfo->GetText(), iGoldCost, 8);963						m_pPlayer->GetTreasury()->ChangeGold(-iGoldCost);964						int iResult = pCity->CreateBuilding(eBldg);965966						DEBUG_VARIABLE(iResult);967						CvAssertMsg(iResult != FFreeList::INVALID_INDEX, "Unable to create building");968969						CvString szMsg;970						szMsg.Format("Emergency Building Purchased: %s, ", pkBuildingInfo->GetDescription());971						szMsg += pCity->getName();972						m_pPlayer->GetTacticalAI()->LogTacticalMessage(szMsg);973					}974				}975			}976		}977	}978	return false;979}

Calls

Called by