Bazaar developer reference

CvReligionAI::ScoreBeliefAtCity(CvBeliefEntry *, CvCity *)

Defined in
CvReligionClasses.cpp, line 6252
Class
CvReligionAI
Hook name
CivHooks::CvReligionAI_ScoreBeliefAtCity

Hooks

static bool BeforeCvReligionAI_ScoreBeliefAtCity(CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity, int& result);static void AfterCvReligionAI_ScoreBeliefAtCity(CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity, int& result);static int ReplaceCvReligionAI_ScoreBeliefAtCity(int (*original)(CvReligionAI*, CvBeliefEntry*, CvCity*), CvReligionAI* self, CvBeliefEntry* pEntry, CvCity* pCity);CivRegisterBefore<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &BeforeCvReligionAI_ScoreBeliefAtCity);CivRegisterAfter<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &AfterCvReligionAI_ScoreBeliefAtCity);CivRegisterReplace<CivHooks::CvReligionAI_ScoreBeliefAtCity>(host, &ReplaceCvReligionAI_ScoreBeliefAtCity);

Code

6251/// AI's evaluation of this belief's usefulness at this one plot6252int CvReligionAI::ScoreBeliefAtCity(CvBeliefEntry* pEntry, CvCity* pCity)6253{6254	int iRtnValue = 0;6255	int iTempValue;6256	int iMinPop;6257	int iMinFollowers;6258	int iHappinessMultiplier = 2;62596260	CvFlavorManager* pFlavorManager = m_pPlayer->GetFlavorManager();6261	int iFlavorOffense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_OFFENSE"));6262	int iFlavorDefense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_DEFENSE"));6263	int iFlavorCityDefense = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_CITY_DEFENSE"));6264	int iFlavorHappiness = pFlavorManager->GetPersonalityIndividualFlavor((FlavorTypes)GC.getInfoTypeForString("FLAVOR_HAPPINESS"));62656266	int iHappinessNeedFactor = iFlavorOffense * 2 + iFlavorHappiness - iFlavorDefense;6267	if (iHappinessNeedFactor > 15)6268	{6269		iHappinessMultiplier = 3;6270	}6271	else if (iHappinessNeedFactor < 6)6272	{6273		iHappinessMultiplier = 1;6274	}62756276	iMinPop = pEntry->GetMinPopulation();6277	iMinFollowers = pEntry->GetMinFollowers();62786279	// Simple ones6280	iRtnValue += pEntry->GetCityGrowthModifier() / 3;6281	if(pEntry->RequiresPeace())6282	{6283		iRtnValue /= 2;6284	}6285	iRtnValue += (-pEntry->GetPlotCultureCostModifier() * 2) / 10;6286	iRtnValue += (pEntry->GetCityRangeStrikeModifier() / 10) * MAX(iFlavorDefense,iFlavorCityDefense);6287	iRtnValue += pEntry->GetFriendlyHealChange() / 10;62886289	// Wonder production multiplier6290	if(pEntry->GetObsoleteEra() > 0)6291	{	6292		if (pEntry->GetObsoleteEra() > GC.getGame().getCurrentEra())6293		{6294			iRtnValue += (pEntry->GetWonderProductionModifier() * pEntry->GetObsoleteEra()) / 10;6295		}6296	}6297	else6298	{6299		iRtnValue += pEntry->GetWonderProductionModifier() / 3;6300	}63016302	// River happiness6303	iTempValue = pEntry->GetRiverHappiness() * iHappinessMultiplier;6304	if(iMinPop > 0)6305	{6306		if(pCity->getPopulation() >= iMinPop)6307		{6308			iTempValue *= 2;6309		}6310	}6311	iRtnValue += iTempValue;63126313	// Happiness per city6314	iTempValue = pEntry->GetHappinessPerCity() * iHappinessMultiplier;6315	if(iMinPop > 0)6316	{6317		if(pCity->getPopulation() >= iMinPop)6318		{6319			iTempValue *= 2;6320		}6321	}6322	iRtnValue += iTempValue;63236324	// Building class happiness6325	for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)6326	{6327		iTempValue = pEntry->GetBuildingClassHappiness(jJ) * iHappinessMultiplier;6328		if(iMinFollowers > 0)6329		{6330			if(pCity->getPopulation() >= iMinFollowers)6331			{6332				iTempValue *= 2;6333			}6334		}6335		iRtnValue += iTempValue;6336	}63376338	for(int iI = 0; iI < NUM_YIELD_TYPES; iI++)6339	{6340		// City yield change6341		iTempValue = pEntry->GetCityYieldChange(iI);6342		if(iMinPop > 0)6343		{6344			if(pCity->getPopulation() >= iMinPop)6345			{6346				iTempValue *= 2;6347			}6348		}6349		iRtnValue += iTempValue;63506351#if defined(MOD_API_UNIFIED_YIELDS)6352		if (pCity->isCapital()) {6353			iTempValue = pEntry->GetCapitalYieldChange(iI);6354			if(iMinPop > 0)6355			{6356				if(pCity->getPopulation() >= iMinPop)6357				{6358					iTempValue *= 2;6359				}6360			}6361			iRtnValue += iTempValue;6362		}63636364		if (pCity->isCoastal()) {6365			iTempValue = pEntry->GetCoastalCityYieldChange(iI);6366			if(iMinPop > 0)6367			{6368				if(pCity->getPopulation() >= iMinPop)6369				{6370					iTempValue *= 2;6371				}6372			}6373			iRtnValue += iTempValue;6374		}6375#endif63766377		// Trade route yield change6378		iTempValue = pEntry->GetYieldChangeTradeRoute(iI);6379		if(iMinPop > 0)6380		{6381			if(pCity->getPopulation() >= iMinPop)6382			{6383				iTempValue *= 2;6384			}6385		}6386		if(pCity->IsRouteToCapitalConnected())6387		{6388			iTempValue *= 2;6389		}6390		iRtnValue += iTempValue;63916392		// Specialist yield change6393		iTempValue = pEntry->GetYieldChangeAnySpecialist(iI);6394		if(pCity->getPopulation() >= 8)  // Like it more with large cities6395		{6396			iTempValue *= 3;6397		}6398		iRtnValue += iTempValue;63996400		// Building class yield change6401		for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)6402		{6403			CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo((BuildingClassTypes)jJ);6404			if(!pkBuildingClassInfo)6405			{6406				continue;6407			}64086409			iTempValue = pEntry->GetBuildingClassYieldChange(jJ, iI);6410			if(iMinFollowers > 0)6411			{6412				if(pCity->getPopulation() < iMinFollowers)6413				{6414					iTempValue /= 2;6415				}6416			}64176418			BuildingTypes eBuilding = (BuildingTypes)m_pPlayer->getCivilizationInfo().getCivilizationBuildings(jJ);6419			if (eBuilding != NO_BUILDING)6420			{6421				if(pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)6422				{6423					iTempValue *= 2;6424				}6425			}64266427			if(pkBuildingClassInfo->getMaxPlayerInstances() == 1)6428			{6429				iTempValue /= 2;6430			}64316432			iRtnValue += iTempValue;6433		}64346435		// World wonder change6436		iRtnValue += pEntry->GetYieldChangeWorldWonder(iI) * 3 / 2;64376438		// Production per follower6439		if (pEntry->GetMaxYieldModifierPerFollower(iI) > 0)6440		{6441			iTempValue = min(pEntry->GetMaxYieldModifierPerFollower(iI), pCity->getPopulation());6442			iTempValue /= 2;6443			iRtnValue += iTempValue;6444		}6445	}64466447	return iRtnValue;6448}

Calls

Called by