Bazaar developer reference

CvReligionAIHelpers::GetBestCityFaithUnitPurchase(CvPlayer &, UnitTypes, ReligionTypes)

Defined in
CvReligionClasses.cpp, line 7294
Hook name
CivHooks::CvReligionAIHelpers_GetBestCityFaithUnitPurchase

Hooks

static bool BeforeCvReligionAIHelpers_GetBestCityFaithUnitPurchase(CvPlayer & kPlayer, UnitTypes eUnit, ReligionTypes eReligion, CvCity *& result);static void AfterCvReligionAIHelpers_GetBestCityFaithUnitPurchase(CvPlayer & kPlayer, UnitTypes eUnit, ReligionTypes eReligion, CvCity *& result);static CvCity * ReplaceCvReligionAIHelpers_GetBestCityFaithUnitPurchase(CvCity * (*original)(CvPlayer &, UnitTypes, ReligionTypes), CvPlayer & kPlayer, UnitTypes eUnit, ReligionTypes eReligion);CivRegisterBefore<CivHooks::CvReligionAIHelpers_GetBestCityFaithUnitPurchase>(host, &BeforeCvReligionAIHelpers_GetBestCityFaithUnitPurchase);CivRegisterAfter<CivHooks::CvReligionAIHelpers_GetBestCityFaithUnitPurchase>(host, &AfterCvReligionAIHelpers_GetBestCityFaithUnitPurchase);CivRegisterReplace<CivHooks::CvReligionAIHelpers_GetBestCityFaithUnitPurchase>(host, &ReplaceCvReligionAIHelpers_GetBestCityFaithUnitPurchase);

Code

7294CvCity *CvReligionAIHelpers::GetBestCityFaithUnitPurchase(CvPlayer &kPlayer, UnitTypes eUnit, ReligionTypes eReligion)7295{7296	bool bReligious = false;7297	CvCity *pHolyCity = NULL;7298	SpecialUnitTypes eSpecialUnitGreatPerson = (SpecialUnitTypes) GC.getInfoTypeForString("SPECIALUNIT_PEOPLE");7299	int iLoop;7300	CvCity* pLoopCity;73017302	CvGameReligions* pReligions = GC.getGame().GetGameReligions();7303	const CvReligion* pMyReligion = pReligions->GetReligion(eReligion, kPlayer.GetID());73047305	CvUnitEntry *pkUnitEntry = GC.getUnitInfo(eUnit);7306	if (pkUnitEntry)7307	{7308		// Religious unit?7309		if (pkUnitEntry->IsSpreadReligion() || pkUnitEntry->IsRemoveHeresy())7310		{7311			bReligious = true;7312		}7313	7314		// Great person?7315		else if (pkUnitEntry->GetSpecialUnitType() == eSpecialUnitGreatPerson)7316		{7317			for (pLoopCity = kPlayer.firstCity(&iLoop); pLoopCity != NULL; pLoopCity = kPlayer.nextCity(&iLoop))7318			{7319				if (pLoopCity->IsCanPurchase(true/*bTestPurchaseCost*/, true/*bTestTrainable*/, eUnit, NO_BUILDING, NO_PROJECT, YIELD_FAITH))7320				{7321					return pLoopCity;7322				}7323			}7324			return NULL;7325		}7326	}73277328	// If religious, try to buy in the city with the Great Mosque first if a Missionary7329	if (bReligious && pMyReligion)7330	{7331		for(pLoopCity = kPlayer.firstCity(&iLoop); pLoopCity != NULL; pLoopCity = kPlayer.nextCity(&iLoop))7332		{7333			if (pLoopCity->getOwner() != kPlayer.GetID())7334			{7335				continue;7336			}73377338			if (pLoopCity->GetCityBuildings()->GetMissionaryExtraSpreads() < 1 || pkUnitEntry->GetReligionSpreads() < 1)7339			{7340				continue;7341			}73427343			if (pLoopCity->GetCityReligions()->GetReligiousMajority() == eReligion)7344			{7345				if(pLoopCity->IsCanPurchase(true, true, eUnit, NO_BUILDING, NO_PROJECT, YIELD_FAITH))7346				{7347					return pLoopCity;7348				}7349			}7350		}7351	}73527353	// If religious, next try to buy in the holy city, assuming it hasn't been converted7354	if (bReligious && pMyReligion)7355	{7356		CvPlot* pHolyCityPlot = GC.getMap().plot(pMyReligion->m_iHolyCityX, pMyReligion->m_iHolyCityY);7357		if (pHolyCityPlot)7358		{7359			pHolyCity = pHolyCityPlot->getPlotCity();73607361			if (pHolyCity && (pHolyCity->getOwner() == kPlayer.GetID()))7362			{7363				if (pHolyCity->GetCityReligions()->GetReligiousMajority() == eReligion && pHolyCity->IsCanPurchase(true, true, eUnit, NO_BUILDING, NO_PROJECT, YIELD_FAITH))7364				{7365					return pHolyCity;7366				}7367			}7368		}7369	}73707371	// Now see if there is another city with our majority religion7372	for(pLoopCity = kPlayer.firstCity(&iLoop); pLoopCity != NULL; pLoopCity = kPlayer.nextCity(&iLoop))7373	{7374		if (bReligious && pMyReligion && pLoopCity == pHolyCity)7375		{7376			continue;7377		}73787379		if (pLoopCity->getOwner() != kPlayer.GetID())7380		{7381			continue;7382		}73837384		if (pLoopCity->GetCityReligions()->GetReligiousMajority() == eReligion)7385		{7386			if(pLoopCity->IsCanPurchase(true, true, eUnit, NO_BUILDING, NO_PROJECT, YIELD_FAITH))7387			{7388				return pLoopCity;7389			}7390		}7391	}73927393	return NULL;7394}

Calls

Called by