Bazaar developer reference

CvCityBuildings::SetBuildingYieldChange(BuildingClassTypes, YieldTypes, int)

Defined in
CvBuildingClasses.cpp, line 2995
Class
CvCityBuildings
Hook name
CivHooks::CvCityBuildings_SetBuildingYieldChange

Hooks

static bool BeforeCvCityBuildings_SetBuildingYieldChange(CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);static void AfterCvCityBuildings_SetBuildingYieldChange(CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);static void ReplaceCvCityBuildings_SetBuildingYieldChange(void (*original)(CvCityBuildings*, BuildingClassTypes, YieldTypes, int), CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);CivRegisterBefore<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &BeforeCvCityBuildings_SetBuildingYieldChange);CivRegisterAfter<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &AfterCvCityBuildings_SetBuildingYieldChange);CivRegisterReplace<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &ReplaceCvCityBuildings_SetBuildingYieldChange);

Code

2994/// Accessor: Set yield boost for a specific building by yield type2995void CvCityBuildings::SetBuildingYieldChange(BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange)2996{2997	for(std::vector<BuildingYieldChange>::iterator it = m_aBuildingYieldChange.begin(); it != m_aBuildingYieldChange.end(); ++it)2998	{2999		if((*it).eBuildingClass == eBuildingClass && (*it).eYield == eYield)3000		{3001			int iOldChange = (*it).iChange;3002			if(iOldChange != iChange)3003			{30043005				if(iChange == 0)3006				{3007					m_aBuildingYieldChange.erase(it);3008				}3009				else3010				{3011					(*it).iChange = iChange;3012				}30133014				BuildingTypes eBuilding = (BuildingTypes)GC.getCivilizationInfo(m_pCity->getCivilizationType())->getCivilizationBuildings(eBuildingClass);3015				if(NO_BUILDING != eBuilding)3016				{3017					if(GetNumActiveBuilding(eBuilding) > 0)3018					{3019						m_pCity->ChangeBaseYieldRateFromBuildings(eYield, (iChange - iOldChange) * GetNumActiveBuilding(eBuilding));3020					}3021				}3022			}30233024			return;3025		}3026	}30273028	if(0 != iChange)3029	{3030		BuildingYieldChange kChange;3031		kChange.eBuildingClass = eBuildingClass;3032		kChange.eYield = eYield;3033		kChange.iChange = iChange;3034		m_aBuildingYieldChange.push_back(kChange);30353036		BuildingTypes eBuilding = (BuildingTypes)m_pCity->getCivilizationInfo().getCivilizationBuildings(eBuildingClass);3037		if(NO_BUILDING != eBuilding)3038		{3039			if(GetNumActiveBuilding(eBuilding) > 0)3040			{3041				m_pCity->ChangeBaseYieldRateFromBuildings(eYield, iChange * GetNumActiveBuilding(eBuilding));3042			}3043		}3044	}3045}

Calls

Called by