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}