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}