Bazaar developer reference

CvPlot::calculateNatureYield(YieldTypes, TeamTypes, bool) const

Defined in
CvPlot.cpp, line 7816
Class
CvPlot
Hook name
CivHooks::CvPlot_calculateNatureYield

Hooks

static bool BeforeCvPlot_calculateNatureYield(const CvPlot* self, YieldTypes eYield, TeamTypes eTeam, bool bIgnoreFeature, int& result);static void AfterCvPlot_calculateNatureYield(const CvPlot* self, YieldTypes eYield, TeamTypes eTeam, bool bIgnoreFeature, int& result);static int ReplaceCvPlot_calculateNatureYield(int (*original)(const CvPlot*, YieldTypes, TeamTypes, bool), const CvPlot* self, YieldTypes eYield, TeamTypes eTeam, bool bIgnoreFeature);CivRegisterBefore<CivHooks::CvPlot_calculateNatureYield>(host, &BeforeCvPlot_calculateNatureYield);CivRegisterAfter<CivHooks::CvPlot_calculateNatureYield>(host, &AfterCvPlot_calculateNatureYield);CivRegisterReplace<CivHooks::CvPlot_calculateNatureYield>(host, &ReplaceCvPlot_calculateNatureYield);

Code

7816int CvPlot::calculateNatureYield(YieldTypes eYield, TeamTypes eTeam, bool bIgnoreFeature) const7817{7818	ResourceTypes eResource;7819	int iYield;7820	ReligionTypes eMajority = NO_RELIGION;7821	BeliefTypes eSecondaryPantheon = NO_BELIEF;78227823#if !defined(MOD_RELIGION_PLOT_YIELDS) && !defined(MOD_API_PLOT_YIELDS)7824	if(isImpassable() || isMountain())7825	{7826		// No Feature, or the Feature isn't a Natural Wonder (which are impassable but allowed to be worked)7827		if(getFeatureType() == NO_FEATURE || !GC.getFeatureInfo(getFeatureType())->IsNaturalWonder())7828		{7829			return 0;7830		}7831	}7832#endif78337834	const CvYieldInfo& kYield = *GC.getYieldInfo(eYield);78357836	CvCity* pWorkingCity = getWorkingCity();7837	if(pWorkingCity)7838	{7839		eMajority = pWorkingCity->GetCityReligions()->GetReligiousMajority();7840		eSecondaryPantheon = pWorkingCity->GetCityReligions()->GetSecondaryReligionPantheonBelief();7841	}78427843	CvAssertMsg(getTerrainType() != NO_TERRAIN, "TerrainType is not assigned a valid value");78447845#if defined(MOD_RELIGION_PLOT_YIELDS) || defined(MOD_API_PLOT_YIELDS)7846	// Impassable terrain and mountains have no base yield7847	if(isImpassable() || isMountain()) {7848		iYield = 0;7849	} else7850#endif7851		iYield = GC.getTerrainInfo(getTerrainType())->getYield(eYield);78527853#if defined(MOD_API_PLOT_YIELDS)7854	if (MOD_API_PLOT_YIELDS) {7855		iYield += GC.getPlotInfo(getPlotType())->getYield(eYield);7856	}7857#endif78587859	// Extra yield for religion on this terrain7860	if(pWorkingCity != NULL && eMajority != NO_RELIGION)7861	{7862		const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, pWorkingCity->getOwner());7863		if(pReligion)7864		{7865			int iReligionChange = pReligion->m_Beliefs.GetTerrainYieldChange(getTerrainType(), eYield);7866			if (eSecondaryPantheon != NO_BELIEF)7867			{7868				iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetTerrainYieldChange(getTerrainType(), eYield);7869			}7870			7871#if defined(MOD_RELIGION_PLOT_YIELDS)7872			if (MOD_RELIGION_PLOT_YIELDS) {7873				iReligionChange += pReligion->m_Beliefs.GetPlotYieldChange(getPlotType(), eYield);7874				if (eSecondaryPantheon != NO_BELIEF)7875				{7876					iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetPlotYieldChange(getPlotType(), eYield);7877				}7878			}7879#endif78807881			iYield += iReligionChange;7882		}7883	}78847885	if(isHills())7886	{7887		iYield += kYield.getHillsChange();7888	}78897890	if(isMountain())7891	{7892		iYield += kYield.getMountainChange();7893	}78947895	if(isLake())7896	{7897		iYield += kYield.getLakeChange();7898	}78997900	if(!bIgnoreFeature)7901	{7902		if(getFeatureType() != NO_FEATURE)7903		{7904			CvFeatureInfo* pFeatureInfo = GC.getFeatureInfo(getFeatureType());79057906			// Some Features REPLACE the Yield of the Plot instead of adding to it7907			int iYieldChange = pFeatureInfo->getYieldChange(eYield);79087909			// Player Trait7910			if(m_eOwner != NO_PLAYER && getImprovementType() == NO_IMPROVEMENT)7911			{7912				iYieldChange +=  GET_PLAYER((PlayerTypes)m_eOwner).GetPlayerTraits()->GetUnimprovedFeatureYieldChange(getFeatureType(), eYield);7913#if defined(MOD_API_UNIFIED_YIELDS)7914				iYieldChange +=  GET_PLAYER((PlayerTypes)m_eOwner).getUnimprovedFeatureYieldChange(getFeatureType(), eYield);79157916				if(pWorkingCity != NULL && eMajority != NO_RELIGION)7917				{7918					const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, pWorkingCity->getOwner());7919					if(pReligion)7920					{7921						int iReligionChange = pReligion->m_Beliefs.GetUnimprovedFeatureYieldChange(getFeatureType(), eYield);7922						if (eSecondaryPantheon != NO_BELIEF)7923						{7924							iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetUnimprovedFeatureYieldChange(getFeatureType(), eYield);7925						}7926						iYieldChange += iReligionChange;7927					}7928				}7929#endif7930			}79317932			// Leagues7933			if(pWorkingCity != NULL)7934			{7935				iYieldChange += GC.getGame().GetGameLeagues()->GetFeatureYieldChange(pWorkingCity->getOwner(), getFeatureType(), eYield);7936			}79377938			// Religion7939			if(pWorkingCity != NULL && eMajority != NO_RELIGION)7940			{7941				const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, pWorkingCity->getOwner());7942				if(pReligion)7943				{7944					int iReligionChange = pReligion->m_Beliefs.GetFeatureYieldChange(getFeatureType(), eYield);7945					if (eSecondaryPantheon != NO_BELIEF)7946					{7947						iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetFeatureYieldChange(getFeatureType(), eYield);7948					}7949					iYieldChange += iReligionChange;7950				}7951			}79527953#if defined(MOD_API_UNIFIED_YIELDS)7954			if(m_eOwner != NO_PLAYER)7955			{7956				iYieldChange += GET_PLAYER((PlayerTypes)m_eOwner).getFeatureYieldChange(getFeatureType(), eYield);7957				iYieldChange += GET_PLAYER((PlayerTypes)m_eOwner).GetPlayerTraits()->GetFeatureYieldChange(getFeatureType(), eYield);7958			}7959#endif79607961			// Natural Wonders7962			if(m_eOwner != NO_PLAYER && pFeatureInfo->IsNaturalWonder())7963			{7964				int iMod = 0;79657966				// Boost from religion in nearby city?7967				if(pWorkingCity && eMajority != NO_RELIGION)7968				{7969					const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, pWorkingCity->getOwner());7970					if(pReligion)7971					{7972						int iReligionChange = pReligion->m_Beliefs.GetYieldChangeNaturalWonder(eYield);7973						if (eSecondaryPantheon != NO_BELIEF)7974						{7975							iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetYieldChangeNaturalWonder(eYield);7976						}7977						iYieldChange += iReligionChange;79787979						int iReligionMod = pReligion->m_Beliefs.GetYieldModifierNaturalWonder(eYield);7980						if (eSecondaryPantheon != NO_BELIEF)7981						{7982							iReligionMod += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetYieldModifierNaturalWonder(eYield);7983						}7984						iMod += iReligionMod;7985					}7986				}79877988				iYieldChange += GET_PLAYER((PlayerTypes)m_eOwner).GetPlayerTraits()->GetYieldChangeNaturalWonder(eYield);7989#if defined(MOD_API_UNIFIED_YIELDS)7990				iYieldChange += GET_PLAYER((PlayerTypes)m_eOwner).GetYieldChangesNaturalWonder(eYield);7991#endif79927993				iMod += GET_PLAYER((PlayerTypes)m_eOwner).GetPlayerTraits()->GetNaturalWonderYieldModifier();7994				if(iMod > 0)7995				{7996					iYieldChange *= (100 + iMod);7997					iYieldChange /= 100;7998				}7999			}80008001			if(pFeatureInfo->isYieldNotAdditive())8002			{8003				iYield = iYieldChange;8004			}8005			else8006			{8007				iYield += iYieldChange;8008			}8009		}8010	}80118012	if(eTeam != NO_TEAM)8013	{8014		eResource = getResourceType(eTeam);80158016		if(eResource != NO_RESOURCE)8017		{8018			iYield += GC.getResourceInfo(eResource)->getYieldChange(eYield);80198020			// Extra yield for religion8021			if(pWorkingCity != NULL && eMajority != NO_RELIGION)8022			{8023				const CvReligion* pReligion = GC.getGame().GetGameReligions()->GetReligion(eMajority, pWorkingCity->getOwner());8024				if(pReligion)8025				{8026					int iReligionChange = pReligion->m_Beliefs.GetResourceYieldChange(eResource, eYield);8027					if (eSecondaryPantheon != NO_BELIEF)8028					{8029						iReligionChange += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetResourceYieldChange(eResource, eYield);8030					}8031					iYield += iReligionChange;8032				}8033			}80348035#if defined(MOD_API_UNIFIED_YIELDS)8036			if(m_eOwner != NO_PLAYER)8037			{8038				iYield += GET_PLAYER((PlayerTypes)m_eOwner).getResourceYieldChange(eResource, eYield);8039				iYield += GET_PLAYER((PlayerTypes)m_eOwner).GetPlayerTraits()->GetResourceYieldChange(eResource, eYield);8040			}8041#endif8042		}8043	}80448045	if(isRiver())8046	{8047		iYield += ((bIgnoreFeature || (getFeatureType() == NO_FEATURE)) ? GC.getTerrainInfo(getTerrainType())->getRiverYieldChange(eYield) : GC.getFeatureInfo(getFeatureType())->getRiverYieldChange(eYield));8048	}80498050	if(isHills())8051	{8052		iYield += ((bIgnoreFeature || (getFeatureType() == NO_FEATURE)) ? GC.getTerrainInfo(getTerrainType())->getHillsYieldChange(eYield) : GC.getFeatureInfo(getFeatureType())->getHillsYieldChange(eYield));8053	}80548055#if defined(MOD_API_UNIFIED_YIELDS)8056	if(isFreshWater())8057	{8058		iYield += ((bIgnoreFeature || (getFeatureType() == NO_FEATURE)) ? GC.getTerrainInfo(getTerrainType())->getFreshWaterYieldChange(eYield) : GC.getFeatureInfo(getFeatureType())->getFreshWaterYieldChange(eYield));8059	}80608061	if(isCoastalLand())8062	{8063		iYield += ((bIgnoreFeature || (getFeatureType() == NO_FEATURE)) ? GC.getTerrainInfo(getTerrainType())->getCoastalLandYieldChange(eYield) : GC.getFeatureInfo(getFeatureType())->getCoastalLandYieldChange(eYield));8064	}80658066	if(eTeam != NO_TEAM)8067	{8068		iYield += ((bIgnoreFeature || (getFeatureType() == NO_FEATURE)) ? GET_TEAM(eTeam).getTerrainYieldChange(getTerrainType(), eYield) : GET_TEAM(eTeam).getFeatureYieldChange(getFeatureType(), eYield));8069	}8070#endif80718072	return std::max(0, iYield);8073}

Calls

Called by