Hooks
static bool BeforeCvPreGame_bindCivilizationKeys(PlayerTypes p, bool& result);static void AfterCvPreGame_bindCivilizationKeys(PlayerTypes p, bool& result);static bool ReplaceCvPreGame_bindCivilizationKeys(bool (*original)(PlayerTypes), PlayerTypes p);CivRegisterBefore<CivHooks::CvPreGame_bindCivilizationKeys>(host, &BeforeCvPreGame_bindCivilizationKeys);CivRegisterAfter<CivHooks::CvPreGame_bindCivilizationKeys>(host, &AfterCvPreGame_bindCivilizationKeys);CivRegisterReplace<CivHooks::CvPreGame_bindCivilizationKeys>(host, &ReplaceCvPreGame_bindCivilizationKeys);
Code
360// Set the unique key value for the civilization361bool bindCivilizationKeys(PlayerTypes p)362{363 bool bFailed = false;364 CivilizationTypes c = civilization(p);365 if(c != NO_CIVILIZATION)366 {367 // During the pre-game, we can't be sure the cached *Infos are current, so query the database368 Database::Connection* pDB = GC.GetGameDatabase();369 if(pDB)370 {371 Database::Results kResults;372 if(pDB->Execute(kResults, "SELECT Type, PackageID, Playable from Civilizations where ID = ? LIMIT 1"))373 {374 kResults.Bind(1, c);375 if(kResults.Step())376 {377 s_civilizationKeys[p] = kResults.GetText(0);378 if(!ExtractGUID(kResults.GetText(1), s_civilizationPackageID[p]))379 ClearGUID(s_civilizationPackageID[p]);380381 s_civilizationKeysAvailable[p] = true;382 s_civilizationKeysPlayable[p] = kResults.GetBool(2);383 }384 else385 bFailed = true;386 }387 else388 bFailed = true;389 }390 }391 else392 bFailed = true;393394 if(bFailed)395 {396 s_civilizationKeys[p].clear();397 ClearGUID(s_civilizationPackageID[p]);398 s_civilizationKeysAvailable[p] = false;399 s_civilizationKeysPlayable[p] = false;400 }401 return bFailed;402}