Bazaar developer reference

CvGame::setGameState(GameStateTypes)

Defined in
CvGame.cpp, line 6976
Class
CvGame
Hook name
CivHooks::CvGame_setGameState

Hooks

static bool BeforeCvGame_setGameState(CvGame* self, GameStateTypes eNewValue);static void AfterCvGame_setGameState(CvGame* self, GameStateTypes eNewValue);static void ReplaceCvGame_setGameState(void (*original)(CvGame*, GameStateTypes), CvGame* self, GameStateTypes eNewValue);CivRegisterBefore<CivHooks::CvGame_setGameState>(host, &BeforeCvGame_setGameState);CivRegisterAfter<CivHooks::CvGame_setGameState>(host, &AfterCvGame_setGameState);CivRegisterReplace<CivHooks::CvGame_setGameState>(host, &ReplaceCvGame_setGameState);

Code

6976void CvGame::setGameState(GameStateTypes eNewValue)6977{6978	if(getGameState() != eNewValue)6979	{6980		m_eGameState = eNewValue;69816982#if !defined(NO_ACHIEVEMENTS)6983		if(eNewValue == GAMESTATE_OVER || eNewValue == GAMESTATE_EXTENDED)6984		{6985			if (!isGameMultiPlayer())6986			{6987				if (GetGameLeagues()->GetNumActiveLeagues() > 0)6988				{6989					CvLeague* pLeague = GetGameLeagues()->GetActiveLeague();6990					if (pLeague)6991					{6992						if (pLeague->HasMemberAlwaysBeenHost(getActivePlayer()))6993						{6994							gDLL->UnlockAchievement(ACHIEVEMENT_XP2_41);6995						}6996					}6997				}6998			}6999		}7000#endif70017002		if(eNewValue == GAMESTATE_OVER)7003		{70047005#if !defined(NO_ACHIEVEMENTS)7006			if(!isGameMultiPlayer())7007			{7008				bool bLocalPlayerLost = true;70097010				const TeamTypes eWinningTeam = getWinner();7011				if(eWinningTeam != NO_TEAM)7012				{7013					CvPlayerAI& kLocalPlayer = GET_PLAYER(getActivePlayer());7014					if(eWinningTeam == kLocalPlayer.getTeam())7015						bLocalPlayerLost = false;7016				}7017				if(bLocalPlayerLost)7018				{7019					//Handle any local losing achievements here.70207021					//Are we playing DLC_01 - Mongol Scenario??7022					bool bUsingDLC1MongolScenario = gDLL->IsModActivated(CIV5_DLC_01_SCENARIO_MODID);7023					if(bUsingDLC1MongolScenario && getGameTurn() == 100)7024					{7025						gDLL->UnlockAchievement(ACHIEVEMENT_LOSE_SCENARIO_01);7026					}70277028					//DLC_05 - Achievement for losing Invasion of Korea Scenario as Korea7029					bool bUsingDLC5Scenario = gDLL->IsModActivated(CIV5_DLC_05_SCENARIO_MODID);7030					if(bUsingDLC5Scenario) // && getGameTurn() == 100)7031					{7032						CvPlayerAI& kLocalPlayer = GET_PLAYER(getActivePlayer());7033						CvString strCivType = kLocalPlayer.getCivilizationInfo().GetType();7034						if(strCivType == "CIVILIZATION_KOREA")7035						{7036							gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_LOSE_KOREA);7037						}7038					}7039				}7040			}7041#endif70427043			//Write out time spent playing.7044			long iHours = getMinutesPlayed() / 60;7045			long iMinutes = getMinutesPlayed() % 60;70467047			for(int iI = 0; iI < MAX_CIV_PLAYERS; iI++)7048			{7049				CvPlayer& player = GET_PLAYER((PlayerTypes)iI);7050				if(player.isHuman())7051				{7052					addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, (PlayerTypes)iI, GetLocalizedText("TXT_KEY_MISC_TIME_SPENT", iHours, iMinutes));70537054				}7055			}70567057			saveReplay();7058			showEndGameSequence();7059		}70607061		GC.GetEngineUserInterface()->setDirty(Cursor_DIRTY_BIT, true);7062		GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);7063	}7064}

Calls

Called by