Hooks
static bool BeforeCvBuildInfo_CacheResults(CvBuildInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvBuildInfo_CacheResults(CvBuildInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvBuildInfo_CacheResults(bool (*original)(CvBuildInfo*, Database::Results&, CvDatabaseUtility&), CvBuildInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvBuildInfo_CacheResults>(host, &BeforeCvBuildInfo_CacheResults);CivRegisterAfter<CivHooks::CvBuildInfo_CacheResults>(host, &AfterCvBuildInfo_CacheResults);CivRegisterReplace<CivHooks::CvBuildInfo_CacheResults>(host, &ReplaceCvBuildInfo_CacheResults);
Code
3910bool CvBuildInfo::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)3911{3912 if(!CvHotKeyInfo::CacheResults(kResults, kUtility))3913 return false;39143915 m_iTime = kResults.GetInt("Time");3916 m_iCost = kResults.GetInt("Cost");3917 m_iCostIncreasePerImprovement = kResults.GetInt("CostIncreasePerImprovement");3918 m_bKill = kResults.GetBool("Kill");3919 m_bRepair = kResults.GetBool("Repair");3920 m_bRemoveRoute = kResults.GetBool("RemoveRoute");3921 m_bWater = kResults.GetBool("Water");3922 m_bCanBeEmbarked = kResults.GetBool("CanBeEmbarked");39233924 const char* szPrereqTech = kResults.GetText("PrereqTech");3925 m_iTechPrereq = GC.getInfoTypeForString(szPrereqTech, true);39263927 const char* szImprovementType = kResults.GetText("ImprovementType");3928 m_iImprovement = GC.getInfoTypeForString(szImprovementType, true);39293930 const char* szRouteType = kResults.GetText("RouteType");3931 m_iRoute = GC.getInfoTypeForString(szRouteType, true);39323933 const char* szEntityEvent = kResults.GetText("EntityEvent");3934 m_iEntityEvent = GC.getInfoTypeForString(szEntityEvent, true);39353936 //NOTE: Why isn't this really a struct? o_O3937 //HACK: Temporary until the stored proc system is finished3938 //FeatureStructs3939 {3940 kUtility.InitializeArray(m_paiFeatureTech, "Features");3941 kUtility.InitializeArray(m_paiFeatureTime, "Features");3942 kUtility.InitializeArray(m_paiFeatureProduction, "Features");3943 kUtility.InitializeArray(m_paiFeatureCost, "Features");3944 kUtility.InitializeArray(m_pabFeatureRemove, "Features");3945#if defined(MOD_BUGFIX_FEATURE_REMOVAL)3946 kUtility.InitializeArray(m_paiFeatureObsoleteTech, "Features");3947 kUtility.InitializeArray(m_pabFeatureRemoveOnly, "Features");3948#endif39493950 char szQuery[512];3951 const char* szFeatureQuery = "select * from BuildFeatures where BuildType = '%s'";3952 sprintf_s(szQuery, 512, szFeatureQuery, GetType());39533954 Database::Results kArrayResults;3955 if(DB.Execute(kArrayResults, szQuery))3956 {3957 while(kArrayResults.Step())3958 {3959 const char* szFeatureType = kArrayResults.GetText("FeatureType");3960 const int iFeatureIdx = GC.getInfoTypeForString(szFeatureType, true);39613962 const char* szFeatureTech = kArrayResults.GetText("PrereqTech");39633964 CvAssert(iFeatureIdx > -1);3965 m_paiFeatureTech[iFeatureIdx] = GC.getInfoTypeForString(szFeatureTech, true);3966 m_paiFeatureTime[iFeatureIdx] = kArrayResults.GetInt("Time");3967 m_paiFeatureProduction[iFeatureIdx] = kArrayResults.GetInt("Production");3968 m_paiFeatureCost[iFeatureIdx] = kArrayResults.GetInt("Cost");3969 m_pabFeatureRemove[iFeatureIdx] = kArrayResults.GetBool("Remove");3970#if defined(MOD_BUGFIX_FEATURE_REMOVAL)3971 m_paiFeatureObsoleteTech[iFeatureIdx]= GC.getInfoTypeForString(kArrayResults.GetText("ObsoleteTech"), true);3972 m_pabFeatureRemoveOnly[iFeatureIdx] = kArrayResults.GetBool("RemoveOnly");3973#endif3974 }3975 }3976 }3977 3978 const char* szBuildType = GetType();3979 kUtility.PopulateArrayByValue(m_paiTechTimeChange, "Technologies", "Build_TechTimeChanges", "TechType", "BuildType", szBuildType, "TimeChange");39803981 return true;3982}