Hooks
static bool BeforeCvCivilizationInfo_CacheResults(CvCivilizationInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static void AfterCvCivilizationInfo_CacheResults(CvCivilizationInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility, bool& result);static bool ReplaceCvCivilizationInfo_CacheResults(bool (*original)(CvCivilizationInfo*, Database::Results&, CvDatabaseUtility&), CvCivilizationInfo* self, Database::Results& kResults, CvDatabaseUtility& kUtility);CivRegisterBefore<CivHooks::CvCivilizationInfo_CacheResults>(host, &BeforeCvCivilizationInfo_CacheResults);CivRegisterAfter<CivHooks::CvCivilizationInfo_CacheResults>(host, &AfterCvCivilizationInfo_CacheResults);CivRegisterReplace<CivHooks::CvCivilizationInfo_CacheResults>(host, &ReplaceCvCivilizationInfo_CacheResults);
Code
2251bool CvCivilizationInfo::CacheResults(Database::Results& kResults, CvDatabaseUtility& kUtility)2252{2253 if(!CvCivilizationBaseInfo::CacheResults(kResults, kUtility))2254 return false;22552256 const size_t maxUnitClasses = kUtility.MaxRows("UnitClasses");2257 const size_t maxBuildingClasses = kUtility.MaxRows("BuildingClasses");22582259 const char* szTextVal = NULL; //! temporary val22602261 //Basic Properties2262 szTextVal = kResults.GetText("Adjective");2263 setAdjectiveKey(szTextVal);22642265 //References2266 szTextVal = kResults.GetText("DefaultPlayerColor");2267 m_iDefaultPlayerColor = GC.getInfoTypeForString(szTextVal, true);22682269 szTextVal = kResults.GetText("ArtDefineTag");2270 setArtDefineTag(szTextVal);22712272 szTextVal = kResults.GetText("ArtStyleType");2273 m_iArtStyleType = GC.getInfoTypeForString(szTextVal, true);22742275 szTextVal = kResults.GetText("ArtStylePrefix");2276 setArtStylePrefix(szTextVal);22772278 szTextVal = kResults.GetText("ArtStyleSuffix");2279 setArtStyleSuffix(szTextVal);22802281 szTextVal = kResults.GetText("DawnOfManAudio");2282 m_strDawnOfManAudio = szTextVal;22832284 szTextVal = kResults.GetText("SoundtrackTag");2285 m_strSoundtrackKey = szTextVal;22862287 const char* szType = GetType();22882289 //coastal start2290 {2291 m_bCoastalCiv = false;22922293 std::string strKey = "Civilization_Start_Along_Ocean";2294 Database::Results* pResults = kUtility.GetResults(strKey);2295 if(pResults == NULL)2296 {2297 pResults = kUtility.PrepareResults(strKey, "select StartAlongOcean from Civilization_Start_Along_Ocean where CivilizationType = ?");2298 }22992300 pResults->Bind(1, szType, -1, false);23012302 while(pResults->Step())2303 {2304 m_bCoastalCiv = pResults->GetBool(0);2305 }23062307 pResults->Reset();2308 }23092310 //place first2311 {2312 m_bPlaceFirst = false;23132314 std::string strKey = "Civilization_Start_Place_First";2315 Database::Results* pResults = kUtility.GetResults(strKey);2316 if(pResults == NULL)2317 {2318 pResults = kUtility.PrepareResults(strKey, "select PlaceFirst from Civilization_Start_Place_First_Along_Ocean where CivilizationType = ?");2319 }23202321 pResults->Bind(1, szType, -1, false);23222323 while(pResults->Step())2324 {2325 m_bPlaceFirst = pResults->GetBool(0);2326 }23272328 pResults->Reset();2329 }23302331 //Arrays23322333 //City Names2334 {2335 m_vCityNames.clear();23362337 std::string strKey = "Civilization - CityNames";2338 Database::Results* pResults = kUtility.GetResults(strKey);2339 if(pResults == NULL)2340 {2341 pResults = kUtility.PrepareResults(strKey, "select CityName from Civilization_CityNames where CivilizationType = ?");2342 }23432344 pResults->Bind(1, szType, -1, false);23452346 while(pResults->Step())2347 {2348 m_vCityNames.push_back(pResults->GetText(0));2349 }23502351 pResults->Reset();2352 }23532354 //Building Types2355 {2356 // call the function that sets the default civilization buildings2357 InitBuildingDefaults(m_piCivilizationBuildings, kUtility);23582359 m_CivilizationBuildingOverridden.reserve(maxBuildingClasses);2360 m_CivilizationBuildingOverridden.clear();2361 m_CivilizationBuildingOverridden.resize(maxBuildingClasses, false);23622363 std::string key = "Civilization_BuildingClassOverrides";2364 Database::Results* pResults = kUtility.GetResults(key);2365 if(pResults == NULL)2366 {2367 pResults = kUtility.PrepareResults(key, "select BuildingClasses.ID, coalesce(Buildings.ID, -1) from Civilization_BuildingClassOverrides inner join BuildingClasses on BuildingClassType = BuildingClasses.Type left outer join Buildings on BuildingType = Buildings.Type where CivilizationType = ?");23682369 }23702371 pResults->Bind(1, szType);23722373 while(pResults->Step())2374 {2375 const int idx = pResults->GetInt(0);2376 const int buildingID = pResults->GetInt(1);23772378 m_piCivilizationBuildings[idx] = buildingID;2379 m_CivilizationBuildingOverridden[idx] = true;2380 }23812382 pResults->Reset();2383 }23842385 //Unit Types2386 {2387 // call the function that sets the default civilization units2388 InitUnitDefaults(m_piCivilizationUnits, kUtility);23892390 m_CivilizationUnitOverridden.reserve(maxUnitClasses);2391 m_CivilizationUnitOverridden.clear();2392 m_CivilizationUnitOverridden.resize(maxUnitClasses,false);23932394 std::string key = "Civilization_UnitClassOverrides";2395 Database::Results* pResults = kUtility.GetResults(key);2396 if(pResults == NULL)2397 {2398 pResults = kUtility.PrepareResults(key, "select UnitClasses.ID, coalesce(Units.ID, -1) from Civilization_UnitClassOverrides inner join UnitClasses on UnitClassType = UnitClasses.Type left outer join Units on UnitType = Units.Type where CivilizationType = ?");2399 }24002401 pResults->Bind(1, szType);24022403 while(pResults->Step())2404 {2405 const int idx = pResults->GetInt(0);2406 const int unitID = pResults->GetInt(1);24072408 m_piCivilizationUnits[idx] = unitID;2409 m_CivilizationUnitOverridden[idx] = true;2410 }24112412 pResults->Reset();24132414 }24152416 //FreeUnits2417 {2418 kUtility.InitializeArray(m_piCivilizationFreeUnitsClass, maxUnitClasses, -1);2419 kUtility.InitializeArray(m_piCivilizationFreeUnitsDefaultUnitAI, maxUnitClasses, -1);24202421 std::string strKey = "Civilizations - FreeUnits";2422 Database::Results* pResults = kUtility.GetResults(strKey);2423 if(pResults == NULL)2424 {2425 pResults = kUtility.PrepareResults(strKey, "select UnitClasses.ID as UnitClassID, UnitAIInfos.ID as UnitAITypeID, Count from Civilization_FreeUnits inner join UnitClasses on UnitClassType = UnitClasses.Type inner join UnitAIInfos on UnitAIType = UnitAIInfos.Type where CivilizationType = ?");2426 }24272428 pResults->Bind(1, szType, -1, false);24292430 while(pResults->Step())2431 {2432 const int iUnitClassID = pResults->GetInt(0);2433 const int iUnitAITypeID = pResults->GetInt(1);2434 const int iCount = pResults->GetInt(2);24352436 m_piCivilizationFreeUnitsClass[iUnitClassID] = iCount;2437 m_piCivilizationFreeUnitsDefaultUnitAI[iUnitClassID] = iUnitAITypeID;2438 }24392440 pResults->Reset();24412442 }24432444 kUtility.PopulateArrayByExistence(m_pbCivilizationFreeBuildingClass,2445 "BuildingClasses", "Civilization_FreeBuildingClasses",2446 "BuildingClassType", "CivilizationType", szType);244724482449 kUtility.PopulateArrayByExistence(m_pbCivilizationFreeTechs, "Technologies",2450 "Civilization_FreeTechs", "TechType",2451 "CivilizationType", szType);245224532454 kUtility.PopulateArrayByExistence(m_pbCivilizationDisableTechs, "Technologies",2455 "Civilization_DisableTechs", "TechType",2456 "CivilizationType", szType);245724582459 kUtility.PopulateArrayByExistence(m_pbLeaders, "Leaders", "Civilization_Leaders",2460 "LeaderheadType", "CivilizationType", szType);24612462 kUtility.PopulateArrayByExistence(m_pbReligions, "Religions", "Civilization_Religions",2463 "ReligionType", "CivilizationType", szType);24642465 //Spy Names2466 {2467 m_vSpyNames.clear();24682469 std::string strKey = "Civilization - SpyNames";2470 Database::Results* pResults = kUtility.GetResults(strKey);2471 if(pResults == NULL)2472 {2473 pResults = kUtility.PrepareResults(strKey, "select SpyName from Civilization_SpyNames where CivilizationType = ?");2474 }24752476 pResults->Bind(1, szType, -1, false);24772478 while(pResults->Step())2479 {2480 m_vSpyNames.push_back(pResults->GetText(0));2481 }24822483 pResults->Reset();2484 }24852486 return true;2487}