Bazaar developer reference

CvGame::Write(FDataStream &) const

Defined in
CvGame.cpp, line 9751
Class
CvGame
Hook name
CivHooks::CvGame_Write

Hooks

static bool BeforeCvGame_Write(const CvGame* self, FDataStream& kStream);static void AfterCvGame_Write(const CvGame* self, FDataStream& kStream);static void ReplaceCvGame_Write(void (*original)(const CvGame*, FDataStream&), const CvGame* self, FDataStream& kStream);CivRegisterBefore<CivHooks::CvGame_Write>(host, &BeforeCvGame_Write);CivRegisterAfter<CivHooks::CvGame_Write>(host, &AfterCvGame_Write);CivRegisterReplace<CivHooks::CvGame_Write>(host, &ReplaceCvGame_Write);

Code

9751void CvGame::Write(FDataStream& kStream) const9752{9753	// Current version number9754	kStream << g_CurrentCvGameVersion;9755	MOD_SERIALIZE_INIT_WRITE(kStream);97569757	kStream << m_iEndTurnMessagesSent;9758	kStream << m_iElapsedGameTurns;9759	kStream << m_iStartTurn;9760	kStream << m_iWinningTurn;9761	kStream << m_iStartYear;9762	kStream << m_iEstimateEndTurn;9763	kStream << m_iDefaultEstimateEndTurn;9764	kStream << m_iTurnSlice;9765	kStream << m_iCutoffSlice;9766	kStream << m_iNumCities;9767	kStream << m_iTotalPopulation;9768	kStream << m_iNoNukesCount;9769	kStream << m_iNukesExploded;9770	kStream << m_iMaxPopulation;9771	kStream << m_iUnused1;9772	kStream << m_iUnused2;9773	kStream << m_iUnused3;9774	kStream << m_iInitPopulation;9775	kStream << m_iInitLand;9776	kStream << m_iInitTech;9777	kStream << m_iInitWonders;9778	kStream << m_iAIAutoPlay;9779	kStream << m_iTotalReligionTechCost;9780	kStream << m_iCachedWorldReligionTechProgress;9781	kStream << m_iUnitedNationsCountdown;9782	kStream << m_iNumVictoryVotesTallied;9783	kStream << m_iNumVictoryVotesExpected;9784	kStream << m_iVotesNeededForDiploVictory;9785	kStream << m_iMapScoreMod;97869787	// m_uiInitialTime not saved97889789	kStream << m_bScoreDirty;9790	kStream << m_bCircumnavigated;9791	// m_bDebugMode not saved9792	kStream << m_bFinalInitialized;9793	// m_bPbemTurnSent not saved9794	kStream << m_bHotPbemBetweenTurns;9795	// m_bPlayerOptionsSent not saved9796	kStream << m_bNukesValid;9797	kStream << m_bEndGameTechResearched;9798	kStream << TunerEverConnected();9799	kStream << m_bTutorialEverAttacked;9800	kStream << m_bStaticTutorialActive;9801	kStream << m_bEverRightClickMoved;9802	kStream << m_AdvisorMessagesViewed;98039804	kStream << m_eHandicap;9805	kStream << m_ePausePlayer;9806	kStream << m_eAIAutoPlayReturnPlayer;9807	kStream << m_eBestLandUnit;9808	kStream << m_eWinner;9809	kStream << m_eVictory;9810	kStream << m_eGameState;9811	kStream << m_eBestWondersPlayer;9812	kStream << m_eBestPoliciesPlayer;9813	kStream << m_eBestGreatPeoplePlayer;9814	kStream << m_eReligionTech;9815	kStream << m_eIndustrialRoute;98169817	kStream << m_strScriptData;98189819	kStream << ArrayWrapper<int>(MAX_PLAYERS, m_aiEndTurnMessagesReceived);9820	kStream << ArrayWrapper<int>(MAX_PLAYERS, m_aiRankPlayer);9821	kStream << ArrayWrapper<int>(MAX_PLAYERS, m_aiPlayerRank);9822	kStream << ArrayWrapper<int>(MAX_PLAYERS, m_aiPlayerScore);9823	kStream << ArrayWrapper<int>(MAX_TEAMS, m_aiRankTeam);9824	kStream << ArrayWrapper<int>(MAX_TEAMS, m_aiTeamRank);9825	kStream << ArrayWrapper<int>(MAX_TEAMS, m_aiTeamScore);98269827	UnitArrayHelpers::Write(kStream, m_paiUnitCreatedCount, GC.getNumUnitInfos());98289829	UnitClassArrayHelpers::Write(kStream, m_paiUnitClassCreatedCount, GC.getNumUnitClassInfos());9830	BuildingClassArrayHelpers::Write(kStream, m_paiBuildingClassCreatedCount, GC.getNumBuildingClassInfos());98319832	CvInfosSerializationHelper::WriteHashedDataArray<ProjectTypes, int>(kStream, m_paiProjectCreatedCount, GC.getNumProjectInfos());9833	CvInfosSerializationHelper::WriteHashedDataArray<VoteTypes, PlayerVoteTypes>(kStream, m_paiVoteOutcome, GC.getNumVoteInfos());98349835	CvInfosSerializationHelper::WriteHashedDataArray<VoteSourceTypes, int>(kStream, m_aiSecretaryGeneralTimer, GC.getNumVoteSourceInfos());9836	CvInfosSerializationHelper::WriteHashedDataArray<VoteSourceTypes, int>(kStream, m_aiVoteTimer, GC.getNumVoteSourceInfos());9837	CvInfosSerializationHelper::WriteHashedDataArray<VoteSourceTypes, int>(kStream, m_aiDiploVote, GC.getNumVoteSourceInfos());98389839	kStream << ArrayWrapper<int>(MAX_CIV_TEAMS, m_aiVotesCast);9840	kStream << ArrayWrapper<int>(MAX_CIV_TEAMS, m_aiPreviousVotesCast);9841	kStream << ArrayWrapper<int>(MAX_CIV_TEAMS, m_aiNumVotesForTeam);98429843	CvInfosSerializationHelper::WriteHashedDataArray<SpecialUnitTypes, bool>(kStream, m_pabSpecialUnitValid, GC.getNumSpecialUnitInfos());98449845	CvInfosSerializationHelper::WriteHashedDataArray<VictoryTypes, int>(kStream, m_ppaaiTeamVictoryRank, GC.getNUM_VICTORY_POINT_AWARDS(), GC.getNumSpecialUnitInfos());98469847	kStream << m_aszDestroyedCities;9848	kStream << m_aszGreatPeopleBorn;9849	kStream << m_voteSelections;9850	kStream << m_votesTriggered;98519852	m_mapRand.write(kStream);9853	m_jonRand.write(kStream);98549855	const int iSize = m_listReplayMessages.size();9856	kStream << CvReplayMessage::Version();9857	kStream << iSize;98589859	ReplayMessageList::const_iterator it;9860	for(it = m_listReplayMessages.begin(); it != m_listReplayMessages.end(); ++it)9861	{9862		(*it).write(kStream);9863	}98649865	kStream << m_iNumSessions;98669867	kStream << m_aPlotExtraYields;9868	kStream << m_aPlotExtraCosts;98699870	kStream << m_bArchaeologyTriggered;98719872	kStream << m_iEarliestBarbarianReleaseTurn;98739874	kStream << m_kGameDeals;9875	kStream << *m_pGameReligions;9876	kStream << *m_pGameCulture;9877	kStream << *m_pGameLeagues;9878	kStream << *m_pGameTrade;98799880	//In Version 8, Serialize Saved Game database9881	CvString strPath = gDLL->GetCacheFolderPath();9882	strPath += "Civ5SavedGameDatabase.db";98839884	//Need to Convert the UTF-8 string into a wide character string so windows can open this file.9885	wchar_t savePath[MAX_PATH] = {0};9886	MultiByteToWideChar(CP_UTF8, 0, strPath.c_str(), -1, savePath, MAX_PATH);98879888	HANDLE hFile = CreateFileW(savePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);9889	if(hFile != INVALID_HANDLE_VALUE)9890	{9891		DWORD dwSize = GetFileSize(hFile, NULL);9892		if(dwSize != INVALID_FILE_SIZE)9893		{9894			byte* szBuffer = GetTempHeap()->Allocate(sizeof(char) * dwSize);9895			ZeroMemory((void*)szBuffer, dwSize);98969897			DWORD dwBytesRead = 0;9898			if(ReadFile(hFile, szBuffer, dwSize, &dwBytesRead, NULL) == TRUE)9899			{9900				//Serialize out the file size first.9901				kStream << dwBytesRead;9902				kStream.WriteIt(dwBytesRead, szBuffer);9903			}99049905			GetTempHeap()->DeAllocate(szBuffer);9906		}9907		else9908		{9909			CvAssertMsg(false, "Saved game database exists, but could not get file size???");9910		}9911	9912		if(CloseHandle(hFile) == FALSE)9913		{9914			CvAssertMsg(false, "Could not close file handle to saved game database!");9915		}9916	}9917	else9918	{9919		WIN32_FILE_ATTRIBUTE_DATA fileAttributes;9920		if(GetFileAttributesExW(savePath, GetFileExInfoStandard, &fileAttributes) != INVALID_FILE_ATTRIBUTES)9921		{9922			CvAssertMsg(false,"Saved game database exists, but could not open it!");9923		}99249925		long nilSize = 0;9926		kStream << nilSize;9927	}9928}

Calls

Called by