Hooks
static bool BeforeCvGameLeagues_FoundLeague(CvGameLeagues* self, PlayerTypes eFounder);static void AfterCvGameLeagues_FoundLeague(CvGameLeagues* self, PlayerTypes eFounder);static void ReplaceCvGameLeagues_FoundLeague(void (*original)(CvGameLeagues*, PlayerTypes), CvGameLeagues* self, PlayerTypes eFounder);CivRegisterBefore<CivHooks::CvGameLeagues_FoundLeague>(host, &BeforeCvGameLeagues_FoundLeague);CivRegisterAfter<CivHooks::CvGameLeagues_FoundLeague>(host, &AfterCvGameLeagues_FoundLeague);CivRegisterReplace<CivHooks::CvGameLeagues_FoundLeague>(host, &ReplaceCvGameLeagues_FoundLeague);
Code
6962void CvGameLeagues::FoundLeague(PlayerTypes eFounder)6963{6964 if (!GC.getGame().isOption(GAMEOPTION_NO_LEAGUES))6965 {6966 CvAssertMsg(GetNumActiveLeagues() == 0, "Trying to found a second league when one is already active. Please send Anton your save file and version.");6967 if (GetNumActiveLeagues() == 0)6968 {6969 CvLeague league((LeagueTypes)m_iNumLeaguesEverFounded++);6970 6971 // Add all living players as members6972 for (int i = 0; i < MAX_CIV_PLAYERS; i++)6973 {6974 PlayerTypes ePlayer = (PlayerTypes) i;6975 if (GET_PLAYER(ePlayer).isAlive())6976 {6977 league.AddMember(ePlayer);6978 }6979 }6980 6981 // Optional: Set initial host6982 if (eFounder != NO_PLAYER)6983 {6984 league.SetHostMember(eFounder);6985 }69866987 // Find which game era trigger this league begins at (must match with a special session)6988 EraTypes eEarliestEraTrigger = NO_ERA;6989 EraTypes eLatestEraTrigger = NO_ERA;6990 for (int i = 0; i < GC.getNumLeagueSpecialSessionInfos(); i++)6991 {6992 CvLeagueSpecialSessionEntry* pInfo = GC.getLeagueSpecialSessionInfo((LeagueSpecialSessionTypes)i);6993 if (pInfo != NULL)6994 {6995 if (eEarliestEraTrigger == NO_ERA || (int)pInfo->GetEraTrigger() < (int)eEarliestEraTrigger)6996 {6997 eEarliestEraTrigger = pInfo->GetEraTrigger();6998 }6999 if ((int)pInfo->GetEraTrigger() > (int)eLatestEraTrigger)7000 {7001 eLatestEraTrigger = pInfo->GetEraTrigger();7002 }7003 }7004 }7005 // In case the game era is actually before or after the triggers in the database7006 EraTypes eGoverningEraTrigger = (EraTypes) MAX((int)LeagueHelpers::GetGameEraForTrigger(), (int)eEarliestEraTrigger);7007 eGoverningEraTrigger = (EraTypes) MIN((int)eGoverningEraTrigger, (int)eLatestEraTrigger);70087009 // Find which special session info this league begins at7010 LeagueSpecialSessionTypes eGoverningSpecialSession = NO_LEAGUE_SPECIAL_SESSION;7011 bool bBeginAsUnitedNations = false;7012 for (int i = 0; i < GC.getNumLeagueSpecialSessionInfos(); i++)7013 {7014 LeagueSpecialSessionTypes e = (LeagueSpecialSessionTypes)i;7015 CvLeagueSpecialSessionEntry* pInfo = GC.getLeagueSpecialSessionInfo(e);7016 if (pInfo != NULL)7017 {7018 if (pInfo->GetEraTrigger() == eGoverningEraTrigger)7019 {7020 eGoverningSpecialSession = e;7021 bBeginAsUnitedNations = pInfo->IsUnitedNations();7022 break;7023 }7024 }7025 }7026 CvAssertMsg(eGoverningSpecialSession != NO_LEAGUE_SPECIAL_SESSION, "Trying to found a league but could not determine a correct governing special session. Do the World Congress prerequisite tech and the special session era triggers in the database match? Please send Anton your save file and version.");7027 CvAssertMsg(eGoverningEraTrigger != NO_ERA, "Trying to found a league but could not determine a correct governing era trigger. Do the World Congress prerequisite tech and the special session era triggers in the database match? Please send Anton your save file and version.");7028 league.Init(eGoverningSpecialSession);7029 SetLastEraTrigger(eGoverningEraTrigger);70307031 CvGame& kGame = GC.getGame();7032 CvPlayer& kActivePlayer = GET_PLAYER(kGame.getActivePlayer());70337034#if defined(MOD_API_EXTENSIONS)7035 if(!kGame.isReallyNetworkMultiPlayer() && !kActivePlayer.isObserver()){7036#else7037 if(!kGame.isNetworkMultiPlayer() && !kActivePlayer.isObserver()){7038#endif7039 // Show splash screen7040 CvPopupInfo kPopup(BUTTONPOPUP_LEAGUE_SPLASH, league.GetID(), league.GetHostMember(), eGoverningSpecialSession, 0, /*bJustFounded*/ true);7041 GC.GetEngineUserInterface()->AddPopup(kPopup);7042 }70437044 DLLUI->AddMessage(0, GC.getGame().getActivePlayer(), false, GC.getEVENT_MESSAGE_TIME(), 7045 GetLocalizedText("TXT_KEY_LEAGUE_SPECIAL_SESSION_START_WORLD_CONGRESS").GetCString());70467047 // Begins as United Nations?7048 if (bBeginAsUnitedNations)7049 {7050 league.SetUnitedNations(true);7051 }70527053 m_vActiveLeagues.push_back(league);70547055 LogLeagueFounded(eFounder);7056 }7057 }7058}