Hooks
static bool BeforeCvTerrainInfo_CacheResults(CvTerrainInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvTerrainInfo_CacheResults(CvTerrainInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvTerrainInfo_CacheResults(bool (*original)(CvTerrainInfo*, Database::Results&, CvDatabaseUtility&), CvTerrainInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvTerrainInfo_CacheResults>(host, &BeforeCvTerrainInfo_CacheResults);CivRegisterAfter<CivHooks::CvTerrainInfo_CacheResults>(host, &AfterCvTerrainInfo_CacheResults);CivRegisterReplace<CivHooks::CvTerrainInfo_CacheResults>(host, &ReplaceCvTerrainInfo_CacheResults);
Code
5589bool CvTerrainInfo::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)5590{5591 if(!CvBaseInfo::CacheResults(kResults, kUtility))5592 return false;55935594 setArtDefineTag(kResults.GetText("ArtDefineTag"));55955596 m_bWater = kResults.GetBool("Water");5597 m_bImpassable = kResults.GetBool("Impassable");5598 m_bFound = kResults.GetBool("Found");5599 m_bFoundCoast = kResults.GetBool("FoundCoast");5600 m_bFoundFreshWater = kResults.GetBool("FoundFreshWater");56015602 m_iMovementCost = kResults.GetInt("Movement");5603 m_iSeeFromLevel = kResults.GetInt("SeeFrom");5604 m_iSeeThroughLevel = kResults.GetInt("SeeThrough");5605 m_iBuildModifier = kResults.GetInt("BuildModifier");5606 m_iDefenseModifier = kResults.GetInt("Defense");5607 m_iInfluenceCost = kResults.GetInt("InfluenceCost");5608#if defined(MOD_API_PLOT_BASED_DAMAGE)5609 m_iTurnDamage = MOD_API_PLOT_BASED_DAMAGE ? kResults.GetInt("TurnDamage") : 0;5610 m_iExtraTurnDamage = MOD_API_PLOT_BASED_DAMAGE ? kResults.GetInt("ExtraTurnDamage") : 0;5611#endif56125613 const char* szTextVal = kResults.GetText("WorldSoundscapeAudioScript");5614 if(szTextVal != NULL)5615 {5616 m_iWorldSoundscapeScriptId = gDLL->GetAudioTagIndex(szTextVal, AUDIOTAG_SOUNDSCAPE);5617 }5618 else5619 {5620 m_iWorldSoundscapeScriptId = -1;5621 Remark(1, "Warning: Missing soundscape definition in XML for feature: '%s'", GetType());5622 }56235624 //Arrays5625 const char* szTerrainType = GetType();5626 kUtility.SetYields(m_piYields, "Terrain_Yields", "TerrainType", szTerrainType);5627 kUtility.SetYields(m_piRiverYieldChange, "Terrain_RiverYieldChanges", "TerrainType", szTerrainType);5628 kUtility.SetYields(m_piHillsYieldChange, "Terrain_HillsYieldChanges", "TerrainType", szTerrainType);5629#if defined(MOD_API_UNIFIED_YIELDS)5630 kUtility.SetYields(m_piCoastalLandYieldChange, "Terrain_CoastalLandYields", "TerrainType", szTerrainType);5631 kUtility.SetYields(m_piFreshWaterChange, "Terrain_FreshWaterYields", "TerrainType", szTerrainType);56325633 const int iNumYields = kUtility.MaxRows("Yields");5634 const int iNumTechs = GC.getNumTechInfos();5635 CvAssertMsg(iNumTechs > 0, "Num Tech Infos <= 0");56365637 //TechYieldChanges5638 if (MOD_API_UNIFIED_YIELDS) {5639 kUtility.Initialize2DArray(m_ppiTechYieldChanges, iNumTechs, iNumYields);56405641 std::string strKey = "Terrains - TechYieldChanges";5642 Database::Results* pResults = kUtility.GetResults(strKey);5643 if(pResults == NULL)5644 {5645 pResults = kUtility.PrepareResults(strKey, "select Yields.ID as YieldID, Technologies.ID as TechID, Yield from Terrain_TechYieldChanges inner join Yields on YieldType = Yields.Type inner join Technologies on TechType = Technologies.Type where TerrainType = ?");5646 }56475648 pResults->Bind(1, szTerrainType, strlen(szTerrainType), false);56495650 while(pResults->Step())5651 {5652 const int yield_idx = pResults->GetInt(0);5653 CvAssert(yield_idx > -1);56545655 const int tech_idx = pResults->GetInt(1);5656 CvAssert(tech_idx > -1);56575658 const int yield = pResults->GetInt(2);56595660 m_ppiTechYieldChanges[tech_idx][yield_idx] = yield;5661 }5662 }5663#endif56645665 m_strEffectTypeTag = kResults.GetText("EffectTypeTag");56665667 return true;5668}