Hooks
static bool BeforeCvProjectEntry_CacheResults(CvProjectEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvProjectEntry_CacheResults(CvProjectEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvProjectEntry_CacheResults(bool (*original)(CvProjectEntry*, Database::Results&, CvDatabaseUtility&), CvProjectEntry* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvProjectEntry_CacheResults>(host, &BeforeCvProjectEntry_CacheResults);CivRegisterAfter<CivHooks::CvProjectEntry_CacheResults>(host, &AfterCvProjectEntry_CacheResults);CivRegisterReplace<CivHooks::CvProjectEntry_CacheResults>(host, &ReplaceCvProjectEntry_CacheResults);
Code
33bool CvProjectEntry::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)34{35 if(!CvBaseInfo::CacheResults(kResults, kUtility))36 return false;3738 m_iMaxGlobalInstances = kResults.GetInt("MaxGlobalInstances");39 m_iMaxTeamInstances = kResults.GetInt("MaxTeamInstances");40 m_iProductionCost = kResults.GetInt("Cost");41 m_iNukeInterception = kResults.GetInt("NukeInterception");42 m_iCultureBranchesRequired = kResults.GetInt("CultureBranchesRequired");43 m_iTechShare = kResults.GetInt("TechShare");44 m_iVictoryDelayPercent = kResults.GetInt("VictoryDelayPercent");4546 m_bSpaceship = kResults.GetBool("Spaceship");47 m_bAllowsNukes = kResults.GetBool("AllowsNukes");4849 m_strMovieArtDef = kResults.GetText("MovieDefineTag");5051 const char* szVictoryPrereq = kResults.GetText("VictoryPrereq");52 m_iVictoryPrereq = GC.getInfoTypeForString(szVictoryPrereq, true);5354 const char* szTechPrereq = kResults.GetText("TechPrereq");55 m_iTechPrereq = GC.getInfoTypeForString(szTechPrereq, true);5657 const char* szEveryoneSpecialUnit = kResults.GetText("EveryoneSpecialUnit");58 m_iEveryoneSpecialUnit = GC.getInfoTypeForString(szEveryoneSpecialUnit, true);5960 const char* szCreateSound = kResults.GetText("CreateSound");61 SetCreateSound(szCreateSound);6263 const char* szAnyonePrereqProject = kResults.GetText("AnyonePrereqProject");64 m_iAnyoneProjectPrereq = GC.getInfoTypeForString(szAnyonePrereqProject, true);6566 //Arrays67 const char* szProjectType = GetType();68 kUtility.PopulateArrayByValue(m_piResourceQuantityRequirements, "Resources", "Project_ResourceQuantityRequirements", "ResourceType", "ProjectType", szProjectType, "Quantity");6970 //Victory Thresholds71 {72 const int iNumVictories = kUtility.MaxRows("Victories");7374 kUtility.InitializeArray(m_piVictoryThreshold, iNumVictories);75 kUtility.InitializeArray(m_piVictoryMinThreshold, iNumVictories);7677 Database::Results kDBResults;78 char szQuery[512] = {0};79 sprintf_s(szQuery, "select VictoryType, Threshold, MinThreshold from Project_VictoryThresholds where ProjectType = '%s';", szProjectType);80 if(DB.Execute(kDBResults, szQuery))81 {82 while(kDBResults.Step())83 {84 const char* szVictoryType = kDBResults.GetText("VictoryType");85 const int idx = GC.getInfoTypeForString(szVictoryType, true);8687 const int iThreshold = kDBResults.GetInt("Threshold");88 const int iMinThreshold = kDBResults.GetInt("MinThreshold");8990 m_piVictoryThreshold[idx] = iThreshold;91 m_piVictoryMinThreshold[idx] = iMinThreshold;92 }93 }94 }9596 kUtility.SetFlavors(m_piFlavorValue, "Project_Flavors", "ProjectType", szProjectType);97 kUtility.PopulateArrayByValue(m_piProjectsNeeded, "Projects", "Project_Prereqs", "PrereqProjectType", "ProjectType", szProjectType, "AmountNeeded");9899 return true;100}