Bazaar developer reference

CvBuildingEntry::CacheResults(Database::Results &, CvDatabaseUtility &)

Defined in
CvBuildingClasses.cpp, line 265
Class
CvBuildingEntry
Hook name
CivHooks::CvBuildingEntry_CacheResults
Overrides
CvBaseInfo::CacheResults(Database::Results &, CvDatabaseUtility &)

Hooks

static bool BeforeCvBuildingEntry_CacheResults(CvBuildingEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvBuildingEntry_CacheResults(CvBuildingEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvBuildingEntry_CacheResults(bool (*original)(CvBuildingEntry*, Database::Results&, CvDatabaseUtility&), CvBuildingEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvBuildingEntry_CacheResults>(host, &BeforeCvBuildingEntry_CacheResults);CivRegisterAfter<CivHooks::CvBuildingEntry_CacheResults>(host, &AfterCvBuildingEntry_CacheResults);CivRegisterReplace<CivHooks::CvBuildingEntry_CacheResults>(host, &ReplaceCvBuildingEntry_CacheResults);

Code

264/// Read from XML file265bool CvBuildingEntry::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)266{267	if(!CvBaseInfo::CacheResults(kResults, kUtility))268		return false;269270	//Basic Properties271	m_iGoldMaintenance = kResults.GetInt("GoldMaintenance");272	m_iMutuallyExclusiveGroup = kResults.GetInt("MutuallyExclusiveGroup");273	m_bTeamShare = kResults.GetBool("TeamShare");274	m_bWater = kResults.GetBool("Water");275	m_bRiver = kResults.GetBool("River");276	m_bFreshWater = kResults.GetBool("FreshWater");277#if defined(MOD_API_EXTENSIONS)278	if (MOD_API_EXTENSIONS) {279		m_bAddsFreshWater = kResults.GetBool("AddsFreshWater");280		m_bPurchaseOnly = kResults.GetBool("PurchaseOnly");281	}282#endif283	m_bMountain = kResults.GetBool("Mountain");284	m_bHill = kResults.GetBool("Hill");285	m_bFlat = kResults.GetBool("Flat");286	m_bFoundsReligion = kResults.GetBool("FoundsReligion");287	m_bIsReligious = kResults.GetBool("IsReligious");288	m_bBorderObstacle = kResults.GetBool("BorderObstacle");289	m_bPlayerBorderObstacle = kResults.GetBool("PlayerBorderObstacle");290	m_bCapital = kResults.GetBool("Capital");291	m_bGoldenAge = kResults.GetBool("GoldenAge");292	m_bMapCentering = kResults.GetBool("MapCentering");293	m_bNeverCapture = kResults.GetBool("NeverCapture");294	m_bNukeImmune = kResults.GetBool("NukeImmune");295	m_bCityWall = kResults.GetBool("CityWall");296	m_bExtraLuxuries = kResults.GetBool("ExtraLuxuries");297	m_bDiplomaticVoting = kResults.GetBool("DiplomaticVoting");298	m_bAllowsWaterRoutes = kResults.GetBool("AllowsWaterRoutes");299	m_iProductionCost = kResults.GetInt("Cost");300	m_iFaithCost = kResults.GetInt("FaithCost");301	m_iLeagueCost = kResults.GetInt("LeagueCost");302	m_bUnlockedByBelief = kResults.GetBool("UnlockedByBelief");303	m_bUnlockedByLeague = kResults.GetBool("UnlockedByLeague");304	m_bRequiresHolyCity = kResults.GetBool("HolyCity");305	m_bAffectSpiesNow = kResults.GetBool("AffectSpiesNow");306	m_bEspionage = kResults.GetBool("Espionage");307	m_bAllowsFoodTradeRoutes = kResults.GetBool("AllowsFoodTradeRoutes");308	m_bAllowsProductionTradeRoutes = kResults.GetBool("AllowsProductionTradeRoutes");309	m_bNullifyInfluenceModifier = kResults.GetBool("NullifyInfluenceModifier");310	m_iNumCityCostMod = kResults.GetInt("NumCityCostMod");311	m_iHurryCostModifier = kResults.GetInt("HurryCostModifier");312	m_iMinAreaSize = kResults.GetInt("MinAreaSize");313	m_iConquestProbability = kResults.GetInt("ConquestProb");314	m_iNumCitiesPrereq = kResults.GetInt("CitiesPrereq");315	m_iUnitLevelPrereq = kResults.GetInt("LevelPrereq");316	m_iCultureRateModifier = kResults.GetInt("CultureRateModifier");317	m_iGlobalCultureRateModifier = kResults.GetInt("GlobalCultureRateModifier");318	m_iGreatPeopleRateModifier = kResults.GetInt("GreatPeopleRateModifier");319	m_iGlobalGreatPeopleRateModifier = kResults.GetInt("GlobalGreatPeopleRateModifier");320	m_iGreatGeneralRateModifier = kResults.GetInt("GreatGeneralRateModifier");321	m_iGreatPersonExpendGold = kResults.GetInt("GreatPersonExpendGold");322	m_iUnitUpgradeCostMod = kResults.GetInt("UnitUpgradeCostMod");323	m_iGoldenAgeModifier = kResults.GetInt("GoldenAgeModifier");324	m_iFreeExperience = kResults.GetInt("Experience");325	m_iGlobalFreeExperience = kResults.GetInt("GlobalExperience");326	m_iFoodKept = kResults.GetInt("FoodKept");327	m_bAirlift = kResults.GetBool("Airlift");328	m_iAirModifier = kResults.GetInt("AirModifier");329	m_iNukeModifier = kResults.GetInt("NukeModifier");330	m_iNukeExplosionRand = kResults.GetInt("NukeExplosionRand");331	m_iHealRateChange = kResults.GetInt("HealRateChange");332	m_iHappiness = kResults.GetInt("Happiness");333	m_iUnmoddedHappiness = kResults.GetInt("UnmoddedHappiness");334	m_iUnhappinessModifier = kResults.GetInt("UnhappinessModifier");335	m_iHappinessPerCity = kResults.GetInt("HappinessPerCity");336	m_iHappinessPerXPolicies = kResults.GetInt("HappinessPerXPolicies");337	m_iCityCountUnhappinessMod = kResults.GetInt("CityCountUnhappinessMod");338	m_bNoOccupiedUnhappiness = kResults.GetBool("NoOccupiedUnhappiness");339	m_iWorkerSpeedModifier = kResults.GetInt("WorkerSpeedModifier");340	m_iMilitaryProductionModifier = kResults.GetInt("MilitaryProductionModifier");341	m_iSpaceProductionModifier = kResults.GetInt("SpaceProductionModifier");342	m_iGlobalSpaceProductionModifier = kResults.GetInt("GlobalSpaceProductionModifier");343	m_iBuildingProductionModifier = kResults.GetInt("BuildingProductionModifier");344	m_iWonderProductionModifier = kResults.GetInt("WonderProductionModifier");345	m_iCityConnectionTradeRouteModifier = kResults.GetInt("CityConnectionTradeRouteModifier");346	m_iCapturePlunderModifier = kResults.GetInt("CapturePlunderModifier");347	m_iPolicyCostModifier = kResults.GetInt("PolicyCostModifier");348	m_iPlotCultureCostModifier = kResults.GetInt("PlotCultureCostModifier");349	m_iGlobalPlotCultureCostModifier = kResults.GetInt("GlobalPlotCultureCostModifier");350	m_iPlotBuyCostModifier = kResults.GetInt("PlotBuyCostModifier");351	m_iGlobalPlotBuyCostModifier = kResults.GetInt("GlobalPlotBuyCostModifier");352#if defined(MOD_BUILDINGS_CITY_WORKING)353	m_iCityWorkingChange = kResults.GetInt("CityWorkingChange");354	m_iGlobalCityWorkingChange = kResults.GetInt("GlobalCityWorkingChange");355#endif356#if defined(MOD_BUILDINGS_CITY_AUTOMATON_WORKERS)357	m_iCityAutomatonWorkersChange = kResults.GetInt("CityAutomatonWorkersChange");358	m_iGlobalCityAutomatonWorkersChange = kResults.GetInt("GlobalCityAutomatonWorkersChange");359#endif360	m_iGlobalPopulationChange = kResults.GetInt("GlobalPopulationChange");361	m_iTechShare = kResults.GetInt("TechShare");362	m_iFreeTechs = kResults.GetInt("FreeTechs");363	m_iFreePolicies = kResults.GetInt("FreePolicies");364	m_iFreeGreatPeople = kResults.GetInt("FreeGreatPeople");365	m_iMedianTechPercentChange = kResults.GetInt("MedianTechPercentChange");366	m_iGold = kResults.GetInt("Gold");367	m_bNearbyMountainRequired = kResults.GetInt("NearbyMountainRequired");368	m_bAllowsRangeStrike = kResults.GetInt("AllowsRangeStrike");369	m_iDefenseModifier = kResults.GetInt("Defense");370	m_iGlobalDefenseModifier = kResults.GetInt("GlobalDefenseMod");371	m_iExtraCityHitPoints = kResults.GetInt("ExtraCityHitPoints");372	m_iMinorFriendshipChange = kResults.GetInt("MinorFriendshipChange");373	m_iVictoryPoints = kResults.GetInt("VictoryPoints");374	m_iExtraMissionarySpreads = kResults.GetInt("ExtraMissionarySpreads");375	m_iReligiousPressureModifier = kResults.GetInt("ReligiousPressureModifier");376	m_iEspionageModifier = kResults.GetInt("EspionageModifier");377	m_iGlobalEspionageModifier = kResults.GetInt("GlobalEspionageModifier");378	m_iExtraSpies = kResults.GetInt("ExtraSpies");379	m_iSpyRankChange = kResults.GetInt("SpyRankChange");380	m_iTradeRouteRecipientBonus = kResults.GetInt("TradeRouteRecipientBonus");381	m_iTradeRouteTargetBonus = kResults.GetInt("TradeRouteTargetBonus");382	m_iNumTradeRouteBonus = kResults.GetInt("NumTradeRouteBonus");383	m_iTradeRouteSeaDistanceModifier = kResults.GetInt("TradeRouteSeaDistanceModifier");384	m_iTradeRouteSeaGoldBonus = kResults.GetInt("TradeRouteSeaGoldBonus");385	m_iTradeRouteLandDistanceModifier = kResults.GetInt("TradeRouteLandDistanceModifier");386	m_iTradeRouteLandGoldBonus = kResults.GetInt("TradeRouteLandGoldBonus");387	m_iCityStateTradeRouteProductionModifier = kResults.GetInt("CityStateTradeRouteProductionModifier");388#if defined(MOD_RELIGION_CONVERSION_MODIFIERS)389	m_iConversionModifier = kResults.GetInt("ConversionModifier");390	m_iGlobalConversionModifier = kResults.GetInt("GlobalConversionModifier");391#endif392	m_iInstantSpyRankChange = kResults.GetInt("InstantSpyRankChange");393	m_iLandmarksTourismPercent = kResults.GetInt("LandmarksTourismPercent");394	m_iInstantMilitaryIncrease = kResults.GetInt("InstantMilitaryIncrease");395	m_iGreatWorksTourismModifier = kResults.GetInt("GreatWorksTourismModifier");396	m_iXBuiltTriggersIdeologyChoice = kResults.GetInt("XBuiltTriggersIdeologyChoice");397	m_iGreatScientistBeakerModifier = kResults.GetInt("GreatScientistBeakerModifier");398	m_iExtraLeagueVotes = kResults.GetInt("ExtraLeagueVotes");399	m_iPreferredDisplayPosition = kResults.GetInt("DisplayPosition");400	m_iPortraitIndex = kResults.GetInt("PortraitIndex");401402	m_bArtInfoCulturalVariation = kResults.GetBool("ArtInfoCulturalVariation");403	m_bArtInfoEraVariation = kResults.GetBool("ArtInfoEraVariation");404	m_bArtInfoRandomVariation = kResults.GetBool("ArtInfoRandomVariation");405406	//References407	const char* szTextVal;408	szTextVal = kResults.GetText("BuildingClass");409	m_iBuildingClassType = GC.getInfoTypeForString(szTextVal, true);410411	//This may need to be deferred to a routine that is called AFTER pre-fetch has been called for all infos.412	m_pkBuildingClassInfo = GC.getBuildingClassInfo(static_cast<BuildingClassTypes>(m_iBuildingClassType));413	CvAssertMsg(m_pkBuildingClassInfo, "Could not find BuildingClassInfo for BuildingType. Have BuildingClasses been prefetched yet?");414415	szTextVal = kResults.GetText("ArtDefineTag");416	SetArtDefineTag(szTextVal);417418	szTextVal = kResults.GetText("WonderSplashAudio");419	m_strWonderSplashAudio = szTextVal;420421	szTextVal = kResults.GetText("ThemingBonusHelp");422	m_strThemingBonusHelp = szTextVal;423424	szTextVal = kResults.GetText("NearbyTerrainRequired");425	m_iNearbyTerrainRequired = GC.getInfoTypeForString(szTextVal, true);426427	szTextVal = kResults.GetText("ProhibitedCityTerrain");428	m_iProhibitedCityTerrain = GC.getInfoTypeForString(szTextVal, true);429430	szTextVal = kResults.GetText("VictoryPrereq");431	m_iVictoryPrereq = GC.getInfoTypeForString(szTextVal, true);432433	szTextVal = kResults.GetText("FreeStartEra");434	m_iFreeStartEra = GC.getInfoTypeForString(szTextVal, true);435436	szTextVal = kResults.GetText("MaxStartEra");437	m_iMaxStartEra = GC.getInfoTypeForString(szTextVal, true);438439	szTextVal = kResults.GetText("ObsoleteTech");440	m_iObsoleteTech = GC.getInfoTypeForString(szTextVal, true);441442	szTextVal = kResults.GetText("EnhancedYieldTech");443	m_iEnhancedYieldTech = GC.getInfoTypeForString(szTextVal, true);444445	m_iTechEnhancedTourism = kResults.GetInt("TechEnhancedTourism");446447	szTextVal = kResults.GetText("FreeBuilding");448	m_iFreeBuildingClass = GC.getInfoTypeForString(szTextVal, true);449450	szTextVal = kResults.GetText("FreeBuildingThisCity");451	m_iFreeBuildingThisCity = GC.getInfoTypeForString(szTextVal, true);452453	szTextVal = kResults.GetText("FreePromotion");454	m_iFreePromotion = GC.getInfoTypeForString(szTextVal, true);455456	szTextVal = kResults.GetText("TrainedFreePromotion");457	m_iTrainedFreePromotion = GC.getInfoTypeForString(szTextVal, true);458459	szTextVal = kResults.GetText("FreePromotionRemoved");460	m_iFreePromotionRemoved = GC.getInfoTypeForString(szTextVal, true);461462	szTextVal = kResults.GetText("ReplacementBuildingClass");463	m_iReplacementBuildingClass= GC.getInfoTypeForString(szTextVal, true);464465	szTextVal = kResults.GetText("PrereqTech");466	m_iPrereqAndTech = GC.getInfoTypeForString(szTextVal, true);467468	szTextVal = kResults.GetText("PolicyBranchType");469	m_iPolicyBranchType = GC.getInfoTypeForString(szTextVal, true);470471	szTextVal = kResults.GetText("SpecialistType");472	m_iSpecialistType = GC.getInfoTypeForString(szTextVal, true);473	m_iSpecialistCount = kResults.GetInt("SpecialistCount");474	m_iSpecialistExtraCulture = kResults.GetInt("SpecialistExtraCulture");475	m_iGreatPeopleRateChange= kResults.GetInt("GreatPeopleRateChange");476477	szTextVal = kResults.GetText("GreatWorkSlotType");478	m_eGreatWorkSlotType = (GreatWorkSlotType)GC.getInfoTypeForString(szTextVal, true);479#if defined(MOD_GLOBAL_GREATWORK_YIELDTYPES)480	szTextVal = kResults.GetText("GreatWorkYieldType");481	m_eGreatWorkYieldType = (YieldTypes)GC.getInfoTypeForString(szTextVal, true);482#endif483	m_iGreatWorkCount = kResults.GetInt("GreatWorkCount");484	szTextVal = kResults.GetText("FreeGreatWork");485	m_eFreeGreatWork = (GreatWorkType)GC.getInfoTypeForString(szTextVal, true);486487	//Arrays488	const char* szBuildingType = GetType();489490	kUtility.SetFlavors(m_piFlavorValue, "Building_Flavors", "BuildingType", szBuildingType);491492	kUtility.SetYields(m_piSeaPlotYieldChange, "Building_SeaPlotYieldChanges", "BuildingType", szBuildingType);493	kUtility.SetYields(m_piRiverPlotYieldChange, "Building_RiverPlotYieldChanges", "BuildingType", szBuildingType);494	kUtility.SetYields(m_piLakePlotYieldChange, "Building_LakePlotYieldChanges", "BuildingType", szBuildingType);495	kUtility.SetYields(m_piSeaResourceYieldChange, "Building_SeaResourceYieldChanges", "BuildingType", szBuildingType);496	kUtility.SetYields(m_piYieldChange, "Building_YieldChanges", "BuildingType", szBuildingType);497	kUtility.SetYields(m_piYieldChangePerPop, "Building_YieldChangesPerPop", "BuildingType", szBuildingType);498	kUtility.SetYields(m_piYieldChangePerReligion, "Building_YieldChangesPerReligion", "BuildingType", szBuildingType);499	kUtility.SetYields(m_piYieldModifier, "Building_YieldModifiers", "BuildingType", szBuildingType);500	kUtility.SetYields(m_piAreaYieldModifier, "Building_AreaYieldModifiers", "BuildingType", szBuildingType);501	kUtility.SetYields(m_piGlobalYieldModifier, "Building_GlobalYieldModifiers", "BuildingType", szBuildingType);502	kUtility.SetYields(m_piTechEnhancedYieldChange, "Building_TechEnhancedYieldChanges", "BuildingType", szBuildingType);503504	kUtility.PopulateArrayByValue(m_piResourceQuantityRequirements, "Resources", "Building_ResourceQuantityRequirements", "ResourceType", "BuildingType", szBuildingType, "Cost");505	kUtility.PopulateArrayByValue(m_piResourceQuantity, "Resources", "Building_ResourceQuantity", "ResourceType", "BuildingType", szBuildingType, "Quantity");506	kUtility.PopulateArrayByValue(m_piResourceCultureChanges, "Resources", "Building_ResourceCultureChanges", "ResourceType", "BuildingType", szBuildingType, "CultureChange");507	kUtility.PopulateArrayByValue(m_piResourceFaithChanges, "Resources", "Building_ResourceFaithChanges", "ResourceType", "BuildingType", szBuildingType, "FaithChange");508509	kUtility.PopulateArrayByValue(m_paiHurryModifier, "HurryInfos", "Building_HurryModifiers", "HurryType", "BuildingType", szBuildingType, "HurryCostModifier");510511	//kUtility.PopulateArrayByValue(m_piProductionTraits, "Traits", "Building_ProductionTraits", "TraitType", "BuildingType", szBuildingType, "Trait");512513	kUtility.PopulateArrayByValue(m_piUnitCombatFreeExperience, "UnitCombatInfos", "Building_UnitCombatFreeExperiences", "UnitCombatType", "BuildingType", szBuildingType, "Experience");514	kUtility.PopulateArrayByValue(m_piUnitCombatProductionModifiers, "UnitCombatInfos", "Building_UnitCombatProductionModifiers", "UnitCombatType", "BuildingType", szBuildingType, "Modifier");515	kUtility.PopulateArrayByValue(m_piDomainFreeExperience, "Domains", "Building_DomainFreeExperiences", "DomainType", "BuildingType", szBuildingType, "Experience", 0, NUM_DOMAIN_TYPES);516	kUtility.PopulateArrayByValue(m_piDomainFreeExperiencePerGreatWork, "Domains", "Building_DomainFreeExperiencePerGreatWork", "DomainType", "BuildingType", szBuildingType, "Experience", 0, NUM_DOMAIN_TYPES);517	kUtility.PopulateArrayByValue(m_piDomainProductionModifier, "Domains", "Building_DomainProductionModifiers", "DomainType", "BuildingType", szBuildingType, "Modifier", 0, NUM_DOMAIN_TYPES);518519	kUtility.PopulateArrayByValue(m_piPrereqNumOfBuildingClass, "BuildingClasses", "Building_PrereqBuildingClasses", "BuildingClassType", "BuildingType", szBuildingType, "NumBuildingNeeded");520	kUtility.PopulateArrayByExistence(m_pbBuildingClassNeededInCity, "BuildingClasses", "Building_ClassesNeededInCity", "BuildingClassType", "BuildingType", szBuildingType);521	//kUtility.PopulateArrayByExistence(m_piNumFreeUnits, "Units", "Building_FreeUnits", "UnitType", "BuildingType", szBuildingType);522	kUtility.PopulateArrayByValue(m_piNumFreeUnits, "Units", "Building_FreeUnits", "UnitType", "BuildingType", szBuildingType, "NumUnits");523	kUtility.PopulateArrayByValue(m_paiBuildingClassHappiness, "BuildingClasses", "Building_BuildingClassHappiness", "BuildingClassType", "BuildingType", szBuildingType, "Happiness");524525	kUtility.PopulateArrayByExistence(m_piLockedBuildingClasses, "BuildingClasses", "Building_LockedBuildingClasses", "BuildingClassType", "BuildingType", szBuildingType);526	kUtility.PopulateArrayByExistence(m_piPrereqAndTechs, "Technologies", "Building_TechAndPrereqs", "TechType", "BuildingType", szBuildingType);527	kUtility.PopulateArrayByExistence(m_piLocalResourceAnds, "Resources", "Building_LocalResourceAnds", "ResourceType", "BuildingType", szBuildingType);528	kUtility.PopulateArrayByExistence(m_piLocalResourceOrs, "Resources", "Building_LocalResourceOrs", "ResourceType", "BuildingType", szBuildingType);529530	//ResourceYieldChanges531	{532		kUtility.Initialize2DArray(m_ppaiResourceYieldChange, "Resources", "Yields");533534		std::string strKey("Building_ResourceYieldChanges");535		Database::Results* pResults = kUtility.GetResults(strKey);536		if(pResults == NULL)537		{538			pResults = kUtility.PrepareResults(strKey, "select Resources.ID as ResourceID, Yields.ID as YieldID, Yield from Building_ResourceYieldChanges inner join Resources on Resources.Type = ResourceType inner join Yields on Yields.Type = YieldType where BuildingType = ?");539		}540541		pResults->Bind(1, szBuildingType);542543		while(pResults->Step())544		{545			const int ResourceID = pResults->GetInt(0);546			const int YieldID = pResults->GetInt(1);547			const int yield = pResults->GetInt(2);548549			m_ppaiResourceYieldChange[ResourceID][YieldID] = yield;550		}551	}552553	//FeatureYieldChanges554	{555		kUtility.Initialize2DArray(m_ppaiFeatureYieldChange, "Features", "Yields");556557		std::string strKey("Building_FeatureYieldChanges");558		Database::Results* pResults = kUtility.GetResults(strKey);559		if(pResults == NULL)560		{561			pResults = kUtility.PrepareResults(strKey, "select Features.ID as FeatureID, Yields.ID as YieldID, Yield from Building_FeatureYieldChanges inner join Features on Features.Type = FeatureType inner join Yields on Yields.Type = YieldType where BuildingType = ?");562		}563564		pResults->Bind(1, szBuildingType);565566		while(pResults->Step())567		{568			const int FeatureID = pResults->GetInt(0);569			const int YieldID = pResults->GetInt(1);570			const int yield = pResults->GetInt(2);571572			m_ppaiFeatureYieldChange[FeatureID][YieldID] = yield;573		}574	}575576	//TerrainYieldChanges577	{578		kUtility.Initialize2DArray(m_ppaiTerrainYieldChange, "Terrains", "Yields");579580		std::string strKey("Building_TerrainYieldChanges");581		Database::Results* pResults = kUtility.GetResults(strKey);582		if(pResults == NULL)583		{584			pResults = kUtility.PrepareResults(strKey, "select Terrains.ID as TerrainID, Yields.ID as YieldID, Yield from Building_TerrainYieldChanges inner join Terrains on Terrains.Type = TerrainType inner join Yields on Yields.Type = YieldType where BuildingType = ?");585		}586587		pResults->Bind(1, szBuildingType);588589		while(pResults->Step())590		{591			const int TerrainID = pResults->GetInt(0);592			const int YieldID = pResults->GetInt(1);593			const int yield = pResults->GetInt(2);594595			m_ppaiTerrainYieldChange[TerrainID][YieldID] = yield;596		}597	}598	599#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)600	//PlotYieldChanges601	if (MOD_API_UNIFIED_YIELDS && MOD_API_PLOT_YIELDS)602	{603		kUtility.Initialize2DArray(m_ppaiPlotYieldChange, "Plots", "Yields");604605		std::string strKey("Building_PlotYieldChanges");606		Database::Results* pResults = kUtility.GetResults(strKey);607		if(pResults == NULL)608		{609			pResults = kUtility.PrepareResults(strKey, "select Plots.ID as PlotID, Yields.ID as YieldID, Yield from Building_PlotYieldChanges inner join Plots on Plots.Type = PlotType inner join Yields on Yields.Type = YieldType where BuildingType = ?");610		}611612		pResults->Bind(1, szBuildingType);613614		while(pResults->Step())615		{616			const int PlotID = pResults->GetInt(0);617			const int YieldID = pResults->GetInt(1);618			const int yield = pResults->GetInt(2);619620			m_ppaiPlotYieldChange[PlotID][YieldID] = yield;621		}622	}623#endif624625	//SpecialistYieldChanges626	{627		kUtility.Initialize2DArray(m_ppaiSpecialistYieldChange, "Specialists", "Yields");628629		std::string strKey("Building_SpecialistYieldChanges");630		Database::Results* pResults = kUtility.GetResults(strKey);631		if(pResults == NULL)632		{633			pResults = kUtility.PrepareResults(strKey, "select Specialists.ID as SpecialistID, Yields.ID as YieldID, Yield from Building_SpecialistYieldChanges inner join Specialists on Specialists.Type = SpecialistType inner join Yields on Yields.Type = YieldType where BuildingType = ?");634		}635636		pResults->Bind(1, szBuildingType);637638		while(pResults->Step())639		{640			const int SpecialistID = pResults->GetInt(0);641			const int YieldID = pResults->GetInt(1);642			const int yield = pResults->GetInt(2);643644			m_ppaiSpecialistYieldChange[SpecialistID][YieldID] = yield;645		}646	}647648	//ResourceYieldModifiers649	{650		kUtility.Initialize2DArray(m_ppaiResourceYieldModifier, "Resources", "Yields");651652		std::string strKey("Building_ResourceYieldModifiers");653		Database::Results* pResults = kUtility.GetResults(strKey);654		if(pResults == NULL)655		{656			pResults = kUtility.PrepareResults(strKey, "select Resources.ID as ResourceID, Yields.ID as YieldID, Yield from Building_ResourceYieldModifiers inner join Resources on Resources.Type = ResourceType inner join Yields on Yields.Type = YieldType where BuildingType = ?");657		}658659		pResults->Bind(1, szBuildingType);660661		while(pResults->Step())662		{663			const int ResourceID = pResults->GetInt(0);664			const int YieldID = pResults->GetInt(1);665			const int yield = pResults->GetInt(2);666667			m_ppaiResourceYieldModifier[ResourceID][YieldID] = yield;668		}669	}670671	//BuildingClassYieldChanges672	{673		kUtility.Initialize2DArray(m_ppiBuildingClassYieldChanges, "BuildingClasses", "Yields");674675		std::string strKey("Building_BuildingClassYieldChanges");676		Database::Results* pResults = kUtility.GetResults(strKey);677		if(pResults == NULL)678		{679			pResults = kUtility.PrepareResults(strKey, "select BuildingClasses.ID as BuildingClassID, Yields.ID as YieldID, YieldChange from Building_BuildingClassYieldChanges inner join BuildingClasses on BuildingClasses.Type = BuildingClassType inner join Yields on Yields.Type = YieldType where BuildingType = ?");680		}681682		pResults->Bind(1, szBuildingType);683684		while(pResults->Step())685		{686			const int BuildingClassID = pResults->GetInt(0);687			const int iYieldID = pResults->GetInt(1);688			const int iYieldChange = pResults->GetInt(2);689690			m_ppiBuildingClassYieldChanges[BuildingClassID][iYieldID] = iYieldChange;691		}692	}693694	{695		//Initialize Theming Bonuses696		const int iNumThemes = MAX_THEMING_BONUSES; /* 12 */697		m_paThemingBonusInfo = FNEW(CvThemingBonusInfo[iNumThemes], c_eCiv5GameplayDLL, 0);698		int idx = 0;699700		std::string strResourceTypesKey = "Building_ThemingBonuses";701		Database::Results* pResourceTypes = kUtility.GetResults(strResourceTypesKey);702		if(pResourceTypes == NULL)703		{704#if defined(MOD_API_EXTENSIONS)705			pResourceTypes = kUtility.PrepareResults(strResourceTypesKey, "select Bonus, Description, SameEra, UniqueEras, ConsecutiveEras, MustBeArt, MustBeArtifact, MustBeEqualArtArtifact, RequiresOwner, RequiresAnyButOwner, RequiresSamePlayer, RequiresUniquePlayers, AIPriority from Building_ThemingBonuses where BuildingType = ?");706#else707			pResourceTypes = kUtility.PrepareResults(strResourceTypesKey, "select Bonus, Description, SameEra, UniqueEras, MustBeArt, MustBeArtifact, MustBeEqualArtArtifact, RequiresOwner, RequiresAnyButOwner, RequiresSamePlayer, RequiresUniquePlayers, AIPriority from Building_ThemingBonuses where BuildingType = ?");708#endif709		}710711		const size_t lenBuildingType = strlen(szBuildingType);712		pResourceTypes->Bind(1, szBuildingType, lenBuildingType, false);713714		while(pResourceTypes->Step())715		{716			CvThemingBonusInfo& pThemingInfo = m_paThemingBonusInfo[idx];717718			pThemingInfo.m_iBonus = pResourceTypes->GetInt("Bonus");719			pThemingInfo.m_strDescription = pResourceTypes->GetText("Description");720			pThemingInfo.m_bSameEra = pResourceTypes->GetBool("SameEra");721			pThemingInfo.m_bUniqueEras = pResourceTypes->GetBool("UniqueEras");722#if defined(MOD_API_EXTENSIONS)723			pThemingInfo.m_bConsecutiveEras = pResourceTypes->GetBool("ConsecutiveEras");724#endif725			pThemingInfo.m_bMustBeArt = pResourceTypes->GetBool("MustBeArt");726			pThemingInfo.m_bMustBeArtifact = pResourceTypes->GetBool("MustBeArtifact");727			pThemingInfo.m_bMustBeEqualArtArtifact = pResourceTypes->GetBool("MustBeEqualArtArtifact");728			pThemingInfo.m_bRequiresOwner = pResourceTypes->GetBool("RequiresOwner");729			pThemingInfo.m_bRequiresAnyButOwner = pResourceTypes->GetBool("RequiresAnyButOwner");730			pThemingInfo.m_bRequiresSamePlayer = pResourceTypes->GetBool("RequiresSamePlayer");731			pThemingInfo.m_bRequiresUniquePlayers = pResourceTypes->GetBool("RequiresUniquePlayers");732			pThemingInfo.m_iAIPriority = pResourceTypes->GetInt("AIPriority");733734			idx++;735		}736737		m_iNumThemingBonuses = idx;738		pResourceTypes->Reset();739	}740741	return true;742}

Calls