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}