Bazaar developer reference

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

Defined in
CvPolicyClasses.cpp, line 278
Class
CvPolicyEntry
Hook name
CivHooks::CvPolicyEntry_CacheResults
Overrides
CvBaseInfo::CacheResults(Database::Results &, CvDatabaseUtility &)

Hooks

static bool BeforeCvPolicyEntry_CacheResults(CvPolicyEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvPolicyEntry_CacheResults(CvPolicyEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvPolicyEntry_CacheResults(bool (*original)(CvPolicyEntry*, Database::Results&, CvDatabaseUtility&), CvPolicyEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvPolicyEntry_CacheResults>(host, &BeforeCvPolicyEntry_CacheResults);CivRegisterAfter<CivHooks::CvPolicyEntry_CacheResults>(host, &AfterCvPolicyEntry_CacheResults);CivRegisterReplace<CivHooks::CvPolicyEntry_CacheResults>(host, &ReplaceCvPolicyEntry_CacheResults);

Code

277/// Read from XML file (pass 1)278bool CvPolicyEntry::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)279{280	if(!CvBaseInfo::CacheResults(kResults, kUtility))281		return false;282283	//Basic Properties284	m_iCultureCost = kResults.GetInt("CultureCost");285	m_iGridX = kResults.GetInt("GridX");286	m_iGridY = kResults.GetInt("GridY");287	m_iLevel = kResults.GetInt("Level");288	m_iPolicyCostModifier = kResults.GetInt("PolicyCostModifier");289	m_iCulturePerCity = kResults.GetInt("CulturePerCity");290	m_iCulturePerWonder = kResults.GetInt("CulturePerWonder");291	m_iCultureWonderMultiplier = kResults.GetInt("CultureWonderMultiplier");292	m_iCulturePerTechResearched = kResults.GetInt("CulturePerTechResearched");293	m_iCultureImprovementChange = kResults.GetInt("CultureImprovementChange");294	m_iCultureFromKills = kResults.GetInt("CultureFromKills");295	m_iCultureFromBarbarianKills = kResults.GetInt("CultureFromBarbarianKills");296	m_iGoldFromKills = kResults.GetInt("GoldFromKills");297	m_iEmbarkedExtraMoves = kResults.GetInt("EmbarkedExtraMoves");298	m_iAttackBonusTurns = kResults.GetInt("AttackBonusTurns");299	m_iGoldenAgeTurns = kResults.GetInt("GoldenAgeTurns");300	m_iGoldenAgeMeterMod = kResults.GetInt("GoldenAgeMeterMod");301	m_iGoldenAgeDurationMod = kResults.GetInt("GoldenAgeDurationMod");302	m_iNumFreeTechs = kResults.GetInt("NumFreeTechs");303	m_iNumFreePolicies = kResults.GetInt("NumFreePolicies");304	m_iNumFreeGreatPeople = kResults.GetInt("NumFreeGreatPeople");305	m_iMedianTechPercentChange = kResults.GetInt("MedianTechPercentChange");306	m_iStrategicResourceMod = kResults.GetInt("StrategicResourceMod");307	m_iWonderProductionModifier = kResults.GetInt("WonderProductionModifier");308	m_iBuildingProductionModifier = kResults.GetInt("BuildingProductionModifier");309	m_iGreatPeopleRateModifier = kResults.GetInt("GreatPeopleRateModifier");310	m_iGreatGeneralRateModifier = kResults.GetInt("GreatGeneralRateModifier");311	m_iGreatAdmiralRateModifier = kResults.GetInt("GreatAdmiralRateModifier");312	m_iGreatWriterRateModifier = kResults.GetInt("GreatWriterRateModifier");313	m_iGreatArtistRateModifier = kResults.GetInt("GreatArtistRateModifier");314	m_iGreatMusicianRateModifier = kResults.GetInt("GreatMusicianRateModifier");315	m_iGreatMerchantRateModifier = kResults.GetInt("GreatMerchantRateModifier");316	m_iGreatScientistRateModifier = kResults.GetInt("GreatScientistRateModifier");317	m_iDomesticGreatGeneralRateModifier = kResults.GetInt("DomesticGreatGeneralRateModifier");318	m_iExtraHappiness = kResults.GetInt("ExtraHappiness");319	m_iExtraHappinessPerCity = kResults.GetInt("ExtraHappinessPerCity");320	m_iUnhappinessMod = kResults.GetInt("UnhappinessMod");321	m_iCityCountUnhappinessMod = kResults.GetInt("CityCountUnhappinessMod");322	m_iOccupiedPopulationUnhappinessMod = kResults.GetInt("OccupiedPopulationUnhappinessMod");323	m_iCapitalUnhappinessMod = kResults.GetInt("CapitalUnhappinessMod");324	m_iFreeExperience = kResults.GetInt("FreeExperience");325	m_iWorkerSpeedModifier = kResults.GetInt("WorkerSpeedModifier");326	m_iAllFeatureProduction = kResults.GetInt("AllFeatureProduction");327	m_iImprovementCostModifier = kResults.GetInt("ImprovementCostModifier");328	m_iImprovementUpgradeRateModifier = kResults.GetInt("ImprovementUpgradeRateModifier");329	m_iSpecialistProductionModifier = kResults.GetInt("SpecialistProductionModifier");330	m_iSpecialistUpgradeModifier = kResults.GetInt("SpecialistUpgradeModifier");331	m_iMilitaryProductionModifier = kResults.GetInt("MilitaryProductionModifier");332	m_iBaseFreeUnits = kResults.GetInt("BaseFreeUnits");333	m_iBaseFreeMilitaryUnits = kResults.GetInt("BaseFreeMilitaryUnits");334	m_iFreeUnitsPopulationPercent = kResults.GetInt("FreeUnitsPopulationPercent");335	m_iFreeMilitaryUnitsPopulationPercent = kResults.GetInt("FreeMilitaryUnitsPopulationPercent");336	m_iHappinessPerGarrisonedUnit = kResults.GetInt("HappinessPerGarrisonedUnit");337	m_iCulturePerGarrisonedUnit = kResults.GetInt("CulturePerGarrisonedUnit");338	m_iHappinessPerTradeRoute = kResults.GetInt("HappinessPerTradeRoute");339	m_iHappinessPerXPopulation = kResults.GetInt("HappinessPerXPopulation");340	m_iExtraHappinessPerLuxury = kResults.GetInt("ExtraHappinessPerLuxury");341	m_iUnhappinessFromUnitsMod = kResults.GetInt("UnhappinessFromUnitsMod");342	m_iNumExtraBuilders = kResults.GetInt("NumExtraBuilders");343	m_iPlotGoldCostMod = kResults.GetInt("PlotGoldCostMod");344#if defined(MOD_POLICIES_CITY_WORKING)345	m_iCityWorkingChange = kResults.GetInt("CityWorkingChange");346#endif347#if defined(MOD_POLICIES_CITY_AUTOMATON_WORKERS)348	m_iCityAutomatonWorkersChange = kResults.GetInt("CityAutomatonWorkersChange");349#endif350	m_iPlotCultureCostModifier = kResults.GetInt("PlotCultureCostModifier");351	m_iPlotCultureExponentModifier = kResults.GetInt("PlotCultureExponentModifier");352	m_iNumCitiesPolicyCostDiscount = kResults.GetInt("NumCitiesPolicyCostDiscount");353	m_iGarrisonedCityRangeStrikeModifier = kResults.GetInt("GarrisonedCityRangeStrikeModifier");354	m_iUnitPurchaseCostModifier = kResults.GetInt("UnitPurchaseCostModifier");355	m_iBuildingPurchaseCostModifier = kResults.GetInt("BuildingPurchaseCostModifier");356	m_iCityConnectionTradeRouteGoldModifier = kResults.GetInt("CityConnectionTradeRouteGoldModifier");357	m_iTradeMissionGoldModifier = kResults.GetInt("TradeMissionGoldModifier");358	m_iFaithCostModifier = kResults.GetInt("FaithCostModifier");359	m_iCulturalPlunderMultiplier = kResults.GetInt("CulturalPlunderMultiplier");360	m_iStealTechSlowerModifier = kResults.GetInt("StealTechSlowerModifier");361	m_iStealTechFasterModifier = kResults.GetInt("StealTechFasterModifier");362	m_iCatchSpiesModifier = kResults.GetInt("CatchSpiesModifier");363#if defined(MOD_RELIGION_CONVERSION_MODIFIERS)364	m_iConversionModifier = kResults.GetInt("ConversionModifier");365#endif366	m_iGoldPerUnit = kResults.GetInt("GoldPerUnit");367	m_iGoldPerMilitaryUnit = kResults.GetInt("GoldPerMilitaryUnit");368	m_iCityStrengthMod = kResults.GetInt("CityStrengthMod");369	m_iCityGrowthMod = kResults.GetInt("CityGrowthMod");370	m_iCapitalGrowthMod = kResults.GetInt("CapitalGrowthMod");371	m_iSettlerProductionModifier = kResults.GetInt("SettlerProductionModifier");372	m_iCapitalSettlerProductionModifier = kResults.GetInt("CapitalSettlerProductionModifier");373	m_iNewCityExtraPopulation = kResults.GetInt("NewCityExtraPopulation");374	m_iFreeFoodBox = kResults.GetInt("FreeFoodBox");375	m_iRouteGoldMaintenanceMod = kResults.GetInt("RouteGoldMaintenanceMod");376	m_iBuildingGoldMaintenanceMod = kResults.GetInt("BuildingGoldMaintenanceMod");377	m_iUnitGoldMaintenanceMod = kResults.GetInt("UnitGoldMaintenanceMod");378	m_iUnitSupplyMod = kResults.GetInt("UnitSupplyMod");379	m_iHappyPerMilitaryUnit = kResults.GetInt("HappyPerMilitaryUnit");380	m_iHappinessToCulture = kResults.GetInt("HappinessToCulture");381	m_iHappinessToScience = kResults.GetInt("HappinessToScience");382	m_iNumCitiesFreeCultureBuilding = kResults.GetInt("NumCitiesFreeCultureBuilding");383	m_iNumCitiesFreeFoodBuilding = kResults.GetInt("NumCitiesFreeFoodBuilding");384	m_bHalfSpecialistUnhappiness = kResults.GetBool("HalfSpecialistUnhappiness");385	m_bHalfSpecialistFood = kResults.GetBool("HalfSpecialistFood");386	m_bMilitaryFoodProduction = kResults.GetBool("MilitaryFoodProduction");387	m_iMaxConscript = kResults.GetInt("MaxConscript");388	m_iWoundedUnitDamageMod = kResults.GetInt("WoundedUnitDamageMod");389	m_iUnitUpgradeCostMod = kResults.GetInt("UnitUpgradeCostMod");390	m_iBarbarianCombatBonus = kResults.GetInt("BarbarianCombatBonus");391	m_bAlwaysSeeBarbCamps = kResults.GetBool("AlwaysSeeBarbCamps");392	m_bRevealAllCapitals = kResults.GetBool("RevealAllCapitals");393	m_bGarrisonFreeMaintenance = kResults.GetBool("GarrisonFreeMaintenance");394	m_iFreeSpecialist = kResults.GetInt("FreeSpecialist");395	m_iExpModifier = kResults.GetInt("ExpModifier");396	m_iExpInBorderModifier = kResults.GetInt("ExpInBorderModifier");397	m_iMinorQuestFriendshipMod = kResults.GetInt("MinorQuestFriendshipMod");398	m_iMinorGoldFriendshipMod = kResults.GetInt("MinorGoldFriendshipMod");399	m_iMinorFriendshipMinimum = kResults.GetInt("MinorFriendshipMinimum");400	m_iMinorFriendshipDecayMod = kResults.GetInt("MinorFriendshipDecayMod");401	m_iOtherPlayersMinorFriendshipDecayMod = kResults.GetInt("OtherPlayersMinorFriendshipDecayMod");402	m_iCityStateUnitFrequencyModifier = kResults.GetInt("CityStateUnitFrequencyModifier");403	m_iCommonFoeTourismModifier = kResults.GetInt("CommonFoeTourismModifier");404	m_iLessHappyTourismModifier = kResults.GetInt("LessHappyTourismModifier");405	m_iSharedIdeologyTourismModifier = kResults.GetInt("SharedIdeologyTourismModifier");406	m_iLandTradeRouteGoldChange = kResults.GetInt("LandTradeRouteGoldChange");407	m_iSeaTradeRouteGoldChange = kResults.GetInt("SeaTradeRouteGoldChange");408	m_iSharedIdeologyTradeGoldChange = kResults.GetInt("SharedIdeologyTradeGoldChange");409410	m_iRiggingElectionModifier = kResults.GetInt("RiggingElectionModifier");411	m_iMilitaryUnitGiftExtraInfluence = kResults.GetInt("MilitaryUnitGiftExtraInfluence");412	m_iProtectedMinorPerTurnInfluence = kResults.GetInt("ProtectedMinorPerTurnInfluence");413	m_iAfraidMinorPerTurnInfluence = kResults.GetInt("AfraidMinorPerTurnInfluence");414	m_iMinorBullyScoreModifier = kResults.GetInt("MinorBullyScoreModifier");415	m_iThemingBonusMultiplier = kResults.GetInt("ThemingBonusMultiplier");416	m_iInternalTradeRouteYieldModifier = kResults.GetInt("InternalTradeRouteYieldModifier");417	m_iSharedReligionTourismModifier = kResults.GetInt("SharedReligionTourismModifier");418	m_iTradeRouteTourismModifier = kResults.GetInt("TradeRouteTourismModifier");419	m_iOpenBordersTourismModifier = kResults.GetInt("OpenBordersTourismModifier");420	m_iCityStateTradeChange = kResults.GetInt("CityStateTradeChange");421	m_bMinorGreatPeopleAllies = kResults.GetBool("MinorGreatPeopleAllies");422	m_bMinorScienceAllies = kResults.GetBool("MinorScienceAllies");423	m_bMinorResourceBonus = kResults.GetBool("MinorResourceBonus");424	m_bGoldenAgeCultureBonusDisabled = kResults.GetBool("GoldenAgeCultureBonusDisabled");425	m_bSecondReligionPantheon = kResults.GetBool("SecondReligionPantheon");426	m_bAddReformationBelief = kResults.GetBool("AddReformationBelief");427	m_bEnablesSSPartHurry = kResults.GetBool("EnablesSSPartHurry");428	m_bEnablesSSPartPurchase = kResults.GetBool("EnablesSSPartPurchase");429	m_bAbleToAnnexCityStates = kResults.GetBool("AbleToAnnexCityStates");430#if defined(MOD_BUGFIX_DUMMY_POLICIES)431	if (MOD_BUGFIX_DUMMY_POLICIES) {432		m_bDummy = kResults.GetBool("Dummy");433	}434#endif435	m_bOneShot = kResults.GetBool("OneShot");436	m_bIncludesOneShotFreeUnits = kResults.GetBool("IncludesOneShotFreeUnits");437438	m_strWeLoveTheKingKey = kResults.GetText("WeLoveTheKing");439	m_wstrWeLoveTheKing = GetLocalizedText(m_strWeLoveTheKingKey);440441	//References442	const char* szTechPrereq = kResults.GetText("TechPrereq");443	m_iTechPrereq = GC.getInfoTypeForString(szTechPrereq, true);444445	const char* szPolicyBranchType = kResults.GetText("PolicyBranchType");446	m_iPolicyBranchType = GC.getInfoTypeForString(szPolicyBranchType, true);447448	m_iNumExtraBranches = kResults.GetInt("NumExtraBranches");449450	const char* szFreeBuilding = kResults.GetText("FreeBuildingOnConquest");451	if(szFreeBuilding)452	{453		m_eFreeBuildingOnConquest = (BuildingTypes)GC.getInfoTypeForString(szFreeBuilding, true);454	}455456	//Arrays457	const char* szPolicyType = GetType();458	kUtility.SetYields(m_piYieldModifier, "Policy_YieldModifiers", "PolicyType", szPolicyType);459	kUtility.SetYields(m_piCityYieldChange, "Policy_CityYieldChanges", "PolicyType", szPolicyType);460	kUtility.SetYields(m_piCoastalCityYieldChange, "Policy_CoastalCityYieldChanges", "PolicyType", szPolicyType);461	kUtility.SetYields(m_piCapitalYieldChange, "Policy_CapitalYieldChanges", "PolicyType", szPolicyType);462	kUtility.SetYields(m_piCapitalYieldPerPopChange, "Policy_CapitalYieldPerPopChanges", "PolicyType", szPolicyType);463	kUtility.SetYields(m_piCapitalYieldModifier, "Policy_CapitalYieldModifiers", "PolicyType", szPolicyType);464	kUtility.SetYields(m_piGreatWorkYieldChange, "Policy_GreatWorkYieldChanges", "PolicyType", szPolicyType);465	kUtility.SetYields(m_piSpecialistExtraYield, "Policy_SpecialistExtraYields", "PolicyType", szPolicyType);466467	kUtility.SetFlavors(m_piFlavorValue, "Policy_Flavors", "PolicyType", szPolicyType);468469	kUtility.PopulateArrayByValue(m_paiHurryModifier, "HurryInfos", "Policy_HurryModifiers", "HurryType", "PolicyType", szPolicyType, "HurryCostModifier");470471	kUtility.PopulateArrayByExistence(m_pabSpecialistValid, "Specialists", "Policy_ValidSpecialists", "SpecialistType", "PolicyType", szPolicyType);472473	kUtility.PopulateArrayByExistence(m_pabFreePromotion, "UnitPromotions", "Policy_FreePromotions", "PromotionType", "PolicyType", szPolicyType);474	kUtility.PopulateArrayByValue(m_paiUnitCombatFreeExperiences, "UnitCombatInfos", "Policy_UnitCombatFreeExperiences", "UnitCombatType", "PolicyType", szPolicyType, "FreeExperience");475	kUtility.PopulateArrayByValue(m_paiUnitCombatProductionModifiers, "UnitCombatInfos", "Policy_UnitCombatProductionModifiers", "UnitCombatType", "PolicyType", szPolicyType, "ProductionModifier");476477	kUtility.PopulateArrayByValue(m_paiBuildingClassCultureChanges, "BuildingClasses", "Policy_BuildingClassCultureChanges", "BuildingClassType", "PolicyType", szPolicyType, "CultureChange");478	kUtility.PopulateArrayByValue(m_paiBuildingClassProductionModifiers, "BuildingClasses", "Policy_BuildingClassProductionModifiers", "BuildingClassType", "PolicyType", szPolicyType, "ProductionModifier");479	kUtility.PopulateArrayByValue(m_paiBuildingClassTourismModifiers, "BuildingClasses", "Policy_BuildingClassTourismModifiers", "BuildingClassType", "PolicyType", szPolicyType, "TourismModifier");480	kUtility.PopulateArrayByValue(m_paiBuildingClassHappiness, "BuildingClasses", "Policy_BuildingClassHappiness", "BuildingClassType", "PolicyType", szPolicyType, "Happiness");481482	kUtility.PopulateArrayByValue(m_paiFreeUnitClasses, "UnitClasses", "Policy_FreeUnitClasses", "UnitClassType", "PolicyType", szPolicyType, "Count");483	kUtility.PopulateArrayByValue(m_paiTourismOnUnitCreation, "UnitClasses", "Policy_TourismOnUnitCreation", "UnitClassType", "PolicyType", szPolicyType, "Tourism");484485	//BuildingYieldModifiers486	{487		kUtility.Initialize2DArray(m_ppiBuildingClassYieldModifiers, "BuildingClasses", "Yields");488489		std::string strKey("Policy_BuildingClassYieldModifiers");490		Database::Results* pResults = kUtility.GetResults(strKey);491		if(pResults == NULL)492		{493			pResults = kUtility.PrepareResults(strKey, "select BuildingClasses.ID as BuildingClassID, Yields.ID as YieldID, YieldMod from Policy_BuildingClassYieldModifiers inner join BuildingClasses on BuildingClasses.Type = BuildingClassType inner join Yields on Yields.Type = YieldType where PolicyType = ?");494		}495496		pResults->Bind(1, szPolicyType);497498		while(pResults->Step())499		{500			const int BuildingClassID = pResults->GetInt(0);501			const int iYieldID = pResults->GetInt(1);502			const int iYieldMod = pResults->GetInt(2);503504			m_ppiBuildingClassYieldModifiers[BuildingClassID][iYieldID] = iYieldMod;505		}506	}507508	//BuildingYieldChanges509	{510		kUtility.Initialize2DArray(m_ppiBuildingClassYieldChanges, "BuildingClasses", "Yields");511512		std::string strKey("Policy_BuildingClassYieldChanges");513		Database::Results* pResults = kUtility.GetResults(strKey);514		if(pResults == NULL)515		{516			pResults = kUtility.PrepareResults(strKey, "select BuildingClasses.ID as BuildingClassID, Yields.ID as YieldID, YieldChange from Policy_BuildingClassYieldChanges inner join BuildingClasses on BuildingClasses.Type = BuildingClassType inner join Yields on Yields.Type = YieldType where PolicyType = ?");517		}518519		pResults->Bind(1, szPolicyType);520521		while(pResults->Step())522		{523			const int BuildingClassID = pResults->GetInt(0);524			const int iYieldID = pResults->GetInt(1);525			const int iYieldChange = pResults->GetInt(2);526527			m_ppiBuildingClassYieldChanges[BuildingClassID][iYieldID] = iYieldChange;528		}529	}530531	//ImprovementYieldChanges532	{533		kUtility.Initialize2DArray(m_ppiImprovementYieldChanges, "Improvements", "Yields");534535		std::string strKey("Policy_ImprovementYieldChanges");536		Database::Results* pResults = kUtility.GetResults(strKey);537		if(pResults == NULL)538		{539			pResults = kUtility.PrepareResults(strKey, "select Improvements.ID as ImprovementID, Yields.ID as YieldID, Yield from Policy_ImprovementYieldChanges inner join Improvements on Improvements.Type = ImprovementType inner join Yields on Yields.Type = YieldType where PolicyType = ?");540		}541542		pResults->Bind(1, szPolicyType);543544		while(pResults->Step())545		{546			const int ImprovementID = pResults->GetInt(0);547			const int YieldID = pResults->GetInt(1);548			const int yield = pResults->GetInt(2);549550			m_ppiImprovementYieldChanges[ImprovementID][YieldID] = yield;551		}552	}553554#if defined(MOD_API_UNIFIED_YIELDS) && defined(MOD_API_PLOT_YIELDS)555	//PlotYieldChanges556	if (MOD_API_UNIFIED_YIELDS && MOD_API_PLOT_YIELDS)557	{558		kUtility.Initialize2DArray(m_ppiPlotYieldChanges, "Plots", "Yields");559560		std::string strKey("Policy_PlotYieldChanges");561		Database::Results* pResults = kUtility.GetResults(strKey);562		if(pResults == NULL)563		{564			pResults = kUtility.PrepareResults(strKey, "select Plots.ID as PlotID, Yields.ID as YieldID, Yield from Policy_PlotYieldChanges inner join Plots on Plots.Type = PlotType inner join Yields on Yields.Type = YieldType where PolicyType = ?");565		}566567		pResults->Bind(1, szPolicyType);568569		while(pResults->Step())570		{571			const int PlotID = pResults->GetInt(0);572			const int YieldID = pResults->GetInt(1);573			const int yield = pResults->GetInt(2);574575			m_ppiPlotYieldChanges[PlotID][YieldID] = yield;576		}577	}578#endif579580#if defined(MOD_API_UNIFIED_YIELDS)581	//FeatureYieldChanges582	if (MOD_API_UNIFIED_YIELDS)583	{584		kUtility.Initialize2DArray(m_ppiFeatureYieldChanges, "Features", "Yields");585586		std::string strKey("Policy_FeatureYieldChanges");587		Database::Results* pResults = kUtility.GetResults(strKey);588		if(pResults == NULL)589		{590			pResults = kUtility.PrepareResults(strKey, "select Features.ID as FeatureID, Yields.ID as YieldID, Yield from Policy_FeatureYieldChanges inner join Features on Features.Type = FeatureType inner join Yields on Yields.Type = YieldType where PolicyType = ?");591		}592593		pResults->Bind(1, szPolicyType);594595		while(pResults->Step())596		{597			const int FeatureID = pResults->GetInt(0);598			const int YieldID = pResults->GetInt(1);599			const int yield = pResults->GetInt(2);600601			m_ppiFeatureYieldChanges[FeatureID][YieldID] = yield;602		}603	}604	605	//CityYieldFromUnimprovedFeature606	if (MOD_API_UNIFIED_YIELDS)607	{608		kUtility.Initialize2DArray(m_ppiCityYieldFromUnimprovedFeature, "Features", "Yields");609610		std::string strKey("Policy_CityYieldFromUnimprovedFeature");611		Database::Results* pResults = kUtility.GetResults(strKey);612		if(pResults == NULL)613		{614			pResults = kUtility.PrepareResults(strKey, "select Features.ID as FeatureID, Yields.ID as YieldID, Yield from Policy_CityYieldFromUnimprovedFeature inner join Features on Features.Type = FeatureType inner join Yields on Yields.Type = YieldType where PolicyType = ?");615		}616617		pResults->Bind(1, szPolicyType);618619		while(pResults->Step())620		{621			const int FeatureID = pResults->GetInt(0);622			const int YieldID = pResults->GetInt(1);623			const int yield = pResults->GetInt(2);624625			m_ppiCityYieldFromUnimprovedFeature[FeatureID][YieldID] = yield;626		}627	}628	629	//UnimprovedFeatureYieldChanges630	if (MOD_API_UNIFIED_YIELDS)631	{632		kUtility.Initialize2DArray(m_ppiUnimprovedFeatureYieldChanges, "Features", "Yields");633634		std::string strKey("Policy_UnimprovedFeatureYieldChanges");635		Database::Results* pResults = kUtility.GetResults(strKey);636		if(pResults == NULL)637		{638			pResults = kUtility.PrepareResults(strKey, "select Features.ID as FeatureID, Yields.ID as YieldID, Yield from Policy_UnimprovedFeatureYieldChanges inner join Features on Features.Type = FeatureType inner join Yields on Yields.Type = YieldType where PolicyType = ?");639		}640641		pResults->Bind(1, szPolicyType);642643		while(pResults->Step())644		{645			const int FeatureID = pResults->GetInt(0);646			const int YieldID = pResults->GetInt(1);647			const int yield = pResults->GetInt(2);648649			m_ppiUnimprovedFeatureYieldChanges[FeatureID][YieldID] = yield;650		}651	}652	653	//ResourceYieldChanges654	if (MOD_API_UNIFIED_YIELDS)655	{656		kUtility.Initialize2DArray(m_ppiResourceYieldChanges, "Resources", "Yields");657658		std::string strKey("Policy_ResourceYieldChanges");659		Database::Results* pResults = kUtility.GetResults(strKey);660		if(pResults == NULL)661		{662			pResults = kUtility.PrepareResults(strKey, "select Resources.ID as ResourceID, Yields.ID as YieldID, Yield from Policy_ResourceYieldChanges inner join Resources on Resources.Type = ResourceType inner join Yields on Yields.Type = YieldType where PolicyType = ?");663		}664665		pResults->Bind(1, szPolicyType);666667		while(pResults->Step())668		{669			const int ResourceID = pResults->GetInt(0);670			const int YieldID = pResults->GetInt(1);671			const int yield = pResults->GetInt(2);672673			m_ppiResourceYieldChanges[ResourceID][YieldID] = yield;674		}675	}676	677	//TerrainYieldChanges678	if (MOD_API_UNIFIED_YIELDS)679	{680		kUtility.Initialize2DArray(m_ppiTerrainYieldChanges, "Terrains", "Yields");681682		std::string strKey("Policy_TerrainYieldChanges");683		Database::Results* pResults = kUtility.GetResults(strKey);684		if(pResults == NULL)685		{686			pResults = kUtility.PrepareResults(strKey, "select Terrains.ID as TerrainID, Yields.ID as YieldID, Yield from Policy_TerrainYieldChanges inner join Terrains on Terrains.Type = TerrainType inner join Yields on Yields.Type = YieldType where PolicyType = ?");687		}688689		pResults->Bind(1, szPolicyType);690691		while(pResults->Step())692		{693			const int TerrainID = pResults->GetInt(0);694			const int YieldID = pResults->GetInt(1);695			const int yield = pResults->GetInt(2);696697			m_ppiTerrainYieldChanges[TerrainID][YieldID] = yield;698		}699	}700	701	//TradeRouteYieldChange702	if (MOD_API_UNIFIED_YIELDS)703	{704		kUtility.Initialize2DArray(m_ppiTradeRouteYieldChange, "Domains", "Yields");705706		std::string strKey("Policy_TradeRouteYieldChange");707		Database::Results* pResults = kUtility.GetResults(strKey);708		if(pResults == NULL)709		{710			pResults = kUtility.PrepareResults(strKey, "select Domains.ID as DomainID, Yields.ID as YieldID, Yield from Policy_TradeRouteYieldChange inner join Domains on Domains.Type = DomainType inner join Yields on Yields.Type = YieldType where PolicyType = ?");711		}712713		pResults->Bind(1, szPolicyType);714715		while(pResults->Step())716		{717			const int DomainID = pResults->GetInt(0);718			const int YieldID = pResults->GetInt(1);719			const int yield = pResults->GetInt(2);720721			m_ppiTradeRouteYieldChange[DomainID][YieldID] = yield;722		}723	}724	725	//SpecialistYieldChanges726	if (MOD_API_UNIFIED_YIELDS)727	{728		kUtility.Initialize2DArray(m_ppiSpecialistYieldChanges, "Specialists", "Yields");729730		std::string strKey("Policy_SpecialistYieldChanges");731		Database::Results* pResults = kUtility.GetResults(strKey);732		if(pResults == NULL)733		{734			pResults = kUtility.PrepareResults(strKey, "select Specialists.ID as SpecialistID, Yields.ID as YieldID, Yield from Policy_SpecialistYieldChanges inner join Specialists on Specialists.Type = SpecialistType inner join Yields on Yields.Type = YieldType where PolicyType = ?");735		}736737		pResults->Bind(1, szPolicyType);738739		while(pResults->Step())740		{741			const int SpecialistID = pResults->GetInt(0);742			const int YieldID = pResults->GetInt(1);743			const int yield = pResults->GetInt(2);744745			m_ppiSpecialistYieldChanges[SpecialistID][YieldID] = yield;746		}747	}748	749	//GreatPersonExpendedYield750	if (MOD_API_UNIFIED_YIELDS)751	{752		kUtility.Initialize2DArray(m_ppiGreatPersonExpendedYield, "GreatPersons", "Yields");753754		std::string strKey("Policy_GreatPersonExpendedYield");755		Database::Results* pResults = kUtility.GetResults(strKey);756		if(pResults == NULL)757		{758			pResults = kUtility.PrepareResults(strKey, "select GreatPersons.ID as GreatPersonID, Yields.ID as YieldID, Yield from Policy_GreatPersonExpendedYield inner join GreatPersons on GreatPersons.Type = GreatPersonType inner join Yields on Yields.Type = YieldType where PolicyType = ?");759		}760761		pResults->Bind(1, szPolicyType);762763		while(pResults->Step())764		{765			const int GreatPersonID = pResults->GetInt(0);766			const int YieldID = pResults->GetInt(1);767			const int yield = pResults->GetInt(2);768769			m_ppiGreatPersonExpendedYield[GreatPersonID][YieldID] = yield;770		}771	}772	773	kUtility.PopulateArrayByValue(m_piGoldenAgeGreatPersonRateModifier, "GreatPersons", "Policy_GoldenAgeGreatPersonRateModifier", "GreatPersonType", "PolicyType", szPolicyType, "Modifier");774	kUtility.SetYields(m_piYieldFromKills, "Policy_YieldFromKills", "PolicyType", szPolicyType);775	kUtility.SetYields(m_piYieldFromBarbarianKills, "Policy_YieldFromBarbarianKills", "PolicyType", szPolicyType);776	kUtility.SetYields(m_piYieldChangeTradeRoute, "Policy_YieldChangeTradeRoute", "PolicyType", szPolicyType);777	kUtility.SetYields(m_piYieldChangesNaturalWonder, "Policy_YieldChangesNaturalWonder", "PolicyType", szPolicyType);778	kUtility.SetYields(m_piYieldChangeWorldWonder, "Policy_YieldChangeWorldWonder", "PolicyType", szPolicyType);779#endif780781	//ImprovementCultureChanges782	kUtility.PopulateArrayByValue(m_piImprovementCultureChange, "Improvements", "Policy_ImprovementCultureChanges", "ImprovementType", "PolicyType", szPolicyType, "CultureChange");783784	//OrPreReqs785	{786		kUtility.InitializeArray(m_piPrereqOrPolicies, "Policies", (int)NO_POLICY);787788		std::string sqlKey = "m_piPrereqOrPolicies";789		Database::Results* pResults = kUtility.GetResults(sqlKey);790		if(pResults == NULL)791		{792			const char* szSQL = "select Policies.ID from Policy_PrereqORPolicies inner join Policies on Policies.Type = PrereqPolicy where PolicyType = ?";793			pResults = kUtility.PrepareResults(sqlKey, szSQL);794		}795796		pResults->Bind(1, szPolicyType, false);797798		int i = 0;799		while(pResults->Step())800		{801			m_piPrereqOrPolicies[i++] = pResults->GetInt(0);802		}803804		pResults->Reset();805	}806807	//AndPreReqs808	{809		kUtility.InitializeArray(m_piPrereqAndPolicies, "Policies", (int)NO_POLICY);810		std::string sqlKey = "m_piPrereqAndPolicies";811812		Database::Results* pResults = kUtility.GetResults(sqlKey);813		if(pResults == NULL)814		{815			const char* szSQL = "select Policies.ID from Policy_PrereqPolicies inner join Policies on Policies.Type = PrereqPolicy where PolicyType = ?";816			pResults = kUtility.PrepareResults(sqlKey, szSQL);817		}818819		pResults->Bind(1, szPolicyType, false);820821		int i = 0;822		while(pResults->Step())823		{824			m_piPrereqAndPolicies[i++] = pResults->GetInt(0);825		}826827		pResults->Reset();828	}829830	//Policy_Disables831	{832		kUtility.InitializeArray(m_piPolicyDisables, "Policies", (int)NO_POLICY);833834		std::string sqlKey = "m_piPolicyDisables";835		Database::Results* pResults = kUtility.GetResults(sqlKey);836		if(pResults == NULL)837		{838			const char* szSQL = "select Policies.ID from Policy_Disables inner join Policies on Policies.Type = PolicyDisable where PolicyType = ?";839			pResults = kUtility.PrepareResults(sqlKey, szSQL);840		}841842		pResults->Bind(1, szPolicyType, false);843844		int i = 0;845		while(pResults->Step())846		{847			m_piPolicyDisables[i++] = pResults->GetInt(0);848		}849850		pResults->Reset();851	}852853	//UnitCombatFreePromotions854	{855		m_FreePromotionUnitCombats.clear();856		std::string sqlKey = "m_FreePromotionsUnitCombats";857		Database::Results* pResults = kUtility.GetResults(sqlKey);858		if(pResults == NULL)859		{860			const char* szSQL = "select UnitPromotions.ID, UnitCombatInfos.ID  from Policy_FreePromotionUnitCombats, UnitPromotions, UnitCombatInfos where PolicyType = ? and PromotionType = UnitPromotions.ID and UnitCombatType = UnitCombatInfos.ID";861			pResults = kUtility.PrepareResults(sqlKey, szSQL);862		}863864		pResults->Bind(1, szPolicyType, false);865866		while(pResults->Step())867		{868			const int UnitPromotionID = pResults->GetInt(0);869			const int UnitCombatInfoID = pResults->GetInt(1);870871			m_FreePromotionUnitCombats.insert(std::pair<int, int>(UnitPromotionID, UnitCombatInfoID));872		}873874		//Trim capacity875		std::multimap<int, int>(m_FreePromotionUnitCombats).swap(m_FreePromotionUnitCombats);876877		pResults->Reset();878	}879880#if defined(MOD_RELIGION_POLICY_BRANCH_FAITH_GP)881	//FaithPurchaseUnitClasses882	if (MOD_RELIGION_POLICY_BRANCH_FAITH_GP)883	{884		m_FaithPurchaseUnitClasses.clear();885886		std::string sqlKey1 = "m_FaithPurchaseUnitClasses1";887		Database::Results* pResults1 = kUtility.GetResults(sqlKey1);888		if(pResults1 == NULL)889		{890			const char* szSQL = "select u.ID, -1 from Policy_FaithPurchaseUnitClasses p, UnitClasses u where p.PolicyType = ? and p.UnitClassType = u.Type and p.EraType is null;";891			pResults1 = kUtility.PrepareResults(sqlKey1, szSQL);892		}893894		pResults1->Bind(1, szPolicyType, false);895896		while(pResults1->Step())897		{898			const int UnitClassID = pResults1->GetInt(0);899			const int EraID = pResults1->GetInt(1);900901			m_FaithPurchaseUnitClasses.insert(std::pair<int, int>(UnitClassID, EraID));902		}903904		std::string sqlKey2 = "m_FaithPurchaseUnitClasses2";905		Database::Results* pResults2 = kUtility.GetResults(sqlKey2);906		if(pResults2 == NULL)907		{908			const char* szSQL = "select u.ID, e.ID from Policy_FaithPurchaseUnitClasses p, UnitClasses u, Eras e where p.PolicyType = ? and p.UnitClassType = u.Type and p.EraType = e.Type;";909			pResults2 = kUtility.PrepareResults(sqlKey2, szSQL);910		}911912		pResults2->Bind(1, szPolicyType, false);913914		while(pResults2->Step())915		{916			const int UnitClassID = pResults2->GetInt(0);917			const int EraID = pResults2->GetInt(1);918919			m_FaithPurchaseUnitClasses.insert(std::pair<int, int>(UnitClassID, EraID));920		}921922		//Trim capacity923		std::multimap<int, int>(m_FaithPurchaseUnitClasses).swap(m_FaithPurchaseUnitClasses);924925		pResults1->Reset();926		pResults2->Reset();927	}928#endif929930	return true;931}

Calls