bool CvReplayInfo::read(FDataStream& kStream) { bool bSuccess = true; int iVersion; kStream >> iVersion; MOD_SERIALIZE_INIT_READ(kStream); //mod00 kStream >> m_iActivePlayer; kStream >> m_strMapScriptName; kStream >> m_eWorldSize; kStream >> m_eClimate; kStream >> m_eSeaLevel; kStream >> m_eEra; kStream >> m_eGameSpeed; kStream >> m_listGameOptions; kStream >> m_listVictoryTypes; kStream >> m_eVictoryType; kStream >> m_eGameType; kStream >> m_iInitialTurn; kStream >> m_iStartYear; kStream >> m_iFinalTurn; kStream >> m_strFinalDate; kStream >> m_eCalendar; kStream >> m_iNormalizedScore; kStream >> m_listPlayerInfo; kStream >> m_dataSetMap; kStream >> m_listPlayerDataSets; unsigned int uiReplayMessageVersion = 2; kStream >> uiReplayMessageVersion; unsigned int uiReplayMessageCount = 0; kStream >> uiReplayMessageCount; m_listReplayMessages.clear(); m_listReplayMessages.reserve(uiReplayMessageCount); for(unsigned int ui = 0; ui < uiReplayMessageCount; ++ui) { CvReplayMessage message; message.read(kStream, uiReplayMessageVersion); m_listReplayMessages.push_back(message); } kStream >> m_iMapWidth; kStream >> m_iMapHeight; kStream >> m_listPlots; return bSuccess; }
void CvReplayInfo::createInfo() { CvGame& game = GC.getGame(); const PlayerTypes eActivePlayer = game.getActivePlayer(); m_strMapScriptName = CvPreGame::mapScriptName(); m_eWorldSize = CvPreGame::worldSize(); m_eClimate = CvPreGame::climate(); m_eSeaLevel = CvPreGame::seaLevel(); m_eEra = CvPreGame::era(); m_eGameSpeed = game.getGameSpeedType(); m_listGameOptions.clear(); for(int i = 0; i < NUM_GAMEOPTION_TYPES; i++) { GameOptionTypes eOption = (GameOptionTypes)i; if(game.isOption(eOption)) { m_listGameOptions.push_back(eOption); } } m_listVictoryTypes.clear(); for(int i = 0; i < GC.getNumVictoryInfos(); i++) { VictoryTypes eVictory = (VictoryTypes)i; if(game.isVictoryValid(eVictory)) { m_listVictoryTypes.push_back(eVictory); } } m_eVictoryType = NO_VICTORY; m_iNormalizedScore = 0; if(NO_PLAYER != eActivePlayer) { CvPlayer& player = GET_PLAYER(eActivePlayer); if(game.getWinner() == player.getTeam()) { m_eVictoryType = game.getVictory(); } m_iNormalizedScore = player.GetScore(true, player.getTeam() == game.getWinner()); } //m_eGameType = CvPreGame::getGameType(); m_iInitialTurn = game.getStartTurn(); m_iStartYear = game.getStartYear(); m_iFinalTurn = game.getGameTurn(); CvGameTextMgr::setYearStr(m_strFinalDate, m_iFinalTurn, false, game.getCalendar(), game.getStartYear(), game.getGameSpeedType()); m_eCalendar = game.getCalendar(); m_dataSetMap.clear(); m_listPlayerDataSets.clear(); m_listPlayerInfo.clear(); m_listPlots.clear(); std::map<int, int> mapPlayers; mapPlayers[-1] = -1; //account for NO_PLAYER. m_iActivePlayer = -1; int iPlayerIndex = 0; for(int iPlayer = 0; iPlayer < MAX_CIV_PLAYERS; iPlayer++) { CvPlayer& player = GET_PLAYER((PlayerTypes)iPlayer); if(player.isEverAlive()) { //Ensure that final turn is stored. player.GatherPerTurnReplayStats(m_iFinalTurn); mapPlayers[iPlayer] = iPlayerIndex; if(iPlayer == game.getActivePlayer()) { m_iActivePlayer = iPlayerIndex; } ++iPlayerIndex; PlayerInfo playerInfo; playerInfo.m_eLeader = player.getLeaderType(); playerInfo.m_eCivilization = player.getCivilizationType(); playerInfo.m_eDifficulty = player.getHandicapType(); playerInfo.m_strCustomLeaderName = player.getName(); playerInfo.m_strCustomCivilizationName = player.getCivilizationDescription(); playerInfo.m_strCustomCivilizationShortName = player.getCivilizationShortDescription(); playerInfo.m_strCustomCivilizationAdjective = player.getCivilizationAdjective(); playerInfo.m_ePlayerColor = player.getPlayerColor(); TurnDataSets dataSet(m_dataSetMap.size()); unsigned int uiNumDataSets = player.getNumReplayDataSets(); for(unsigned int uiPlayerDataSet = 0; uiPlayerDataSet < uiNumDataSets; ++uiPlayerDataSet) { // First, Locate the index of the dataset std::string playerDataSetName = player.getReplayDataSetName(uiPlayerDataSet); unsigned int uiDataSet = 0; bool bFound = false; for(uiDataSet = 0; uiDataSet < m_dataSetMap.size(); ++uiDataSet) { const std::string& dataSetName = m_dataSetMap[uiDataSet]; if(dataSetName == playerDataSetName) { bFound = true; break; } } // Add a new index if one doesn't exist. if(!bFound) { m_dataSetMap.push_back(playerDataSetName); dataSet.push_back(TurnData()); uiDataSet = m_dataSetMap.size() - 1; } CvPlayer::TurnData playerData = player.getReplayDataHistory(uiPlayerDataSet); TurnData turnData; for(CvPlayer::TurnData::iterator it = playerData.begin(); it != playerData.end(); ++it) { turnData[(*it).first - m_iInitialTurn] = (*it).second; } dataSet[uiDataSet] = turnData; } m_listPlayerDataSets.push_back(dataSet); m_listPlayerInfo.push_back(playerInfo); } } m_listReplayMessages.clear(); const uint nMessages = game.getNumReplayMessages(); m_listReplayMessages.reserve(nMessages); for(uint i = 0; i < nMessages; ++i) { const CvReplayMessage* pMessage = game.getReplayMessage(i); if(pMessage) { CvReplayMessage modifiedMessage = (*pMessage); modifiedMessage.setPlayer((PlayerTypes)mapPlayers[modifiedMessage.getPlayer()]); m_listReplayMessages.push_back(modifiedMessage); } } CvMap& kMap = GC.getMap(); m_iMapWidth = kMap.getGridWidth(); m_iMapHeight = kMap.getGridHeight(); int numPlots = kMap.numPlots(); m_listPlots.clear(); m_listPlots.reserve(numPlots); for(int i = 0; i < numPlots; i++) { PlotState plotState; CvPlot* pkPlot = kMap.plotByIndexUnchecked(i); plotState.m_ePlotType = pkPlot->getPlotType(); plotState.m_eTerrain = pkPlot->getTerrainType(); plotState.m_eFeature = pkPlot->getFeatureType(); plotState.m_bNEOfRiver = pkPlot->isNEOfRiver(); plotState.m_bWOfRiver = pkPlot->isWOfRiver(); plotState.m_bNWOfRiver = pkPlot->isNWOfRiver(); PlotStatePerTurn plotStatePerTurn; plotStatePerTurn[m_iFinalTurn] = plotState; m_listPlots.push_back(plotStatePerTurn); } }
bool CvReplayInfo::read(FDataStream& kStream) { bool bSuccess = true; int iVersion; kStream >> iVersion; if(iVersion < 2) { return false; } kStream >> m_iActivePlayer; kStream >> m_strMapScriptName; kStream >> m_eWorldSize; kStream >> m_eClimate; kStream >> m_eSeaLevel; kStream >> m_eEra; kStream >> m_eGameSpeed; kStream >> m_listGameOptions; kStream >> m_listVictoryTypes; kStream >> m_eVictoryType; kStream >> m_eGameType; kStream >> m_iInitialTurn; kStream >> m_iStartYear; kStream >> m_iFinalTurn; kStream >> m_strFinalDate; kStream >> m_eCalendar; kStream >> m_iNormalizedScore; kStream >> m_listPlayerInfo; kStream >> m_dataSetMap; kStream >> m_listPlayerDataSets; unsigned int uiReplayMessageVersion = 2; kStream >> uiReplayMessageVersion; unsigned int uiReplayMessageCount = 0; kStream >> uiReplayMessageCount; m_listReplayMessages.clear(); m_listReplayMessages.reserve(uiReplayMessageCount); for(unsigned int ui = 0; ui < uiReplayMessageCount; ++ui) { CvReplayMessage message; message.read(kStream, uiReplayMessageVersion); m_listReplayMessages.push_back(message); } kStream >> m_iMapWidth; kStream >> m_iMapHeight; if(iVersion <= 2) { struct PlotInfo { TerrainTypes m_eTerrain; FeatureTypes m_eFeature; bool m_bNEOfRiver; bool m_bWOfRiver; bool m_bNWOfRiver; }; std::vector<OldPlotState> plotList; kStream >> plotList; m_listPlots.reserve(plotList.size()); for(std::vector<OldPlotState>::iterator it = plotList.begin(); it != plotList.end(); ++it) { const OldPlotState& oldPlotState = (*it); PlotState plotState; plotState.m_ePlotType = PLOT_LAND; plotState.m_eTerrain = oldPlotState.m_eTerrain; plotState.m_eFeature = oldPlotState.m_eFeature; plotState.m_bNEOfRiver = oldPlotState.m_bNEOfRiver; plotState.m_bNWOfRiver = oldPlotState.m_bNWOfRiver; plotState.m_bWOfRiver = oldPlotState.m_bWOfRiver; PlotStatePerTurn plotStatePerTurn; plotStatePerTurn[m_iInitialTurn] = plotState; m_listPlots.push_back(plotStatePerTurn); } } else {
bool CvReplayInfo::read(FDataStreamBase& stream) { int iType; int iNumTypes; bool bSuccess = true; try { int iVersion; stream.Read(&iVersion); if (iVersion < 2) { return false; } stream.Read(&m_iActivePlayer); stream.Read(&iType); m_eDifficulty = (HandicapTypes)iType; stream.ReadString(m_szLeaderName); stream.ReadString(m_szCivDescription); stream.ReadString(m_szShortCivDescription); stream.ReadString(m_szCivAdjective); if (iVersion > 3) { stream.ReadString(m_szMapScriptName); } else { m_szMapScriptName = gDLL->getText("TXT_KEY_TRAIT_PLAYER_UNKNOWN"); } stream.Read(&iType); m_eWorldSize = (WorldSizeTypes)iType; stream.Read(&iType); m_eClimate = (ClimateTypes)iType; stream.Read(&iType); m_eSeaLevel = (SeaLevelTypes)iType; stream.Read(&iType); m_eEra = (EraTypes)iType; stream.Read(&iType); m_eGameSpeed = (GameSpeedTypes)iType; stream.Read(&iNumTypes); for (int i = 0; i < iNumTypes; i++) { stream.Read(&iType); m_listGameOptions.push_back((GameOptionTypes)iType); } stream.Read(&iNumTypes); for (int i = 0; i < iNumTypes; i++) { stream.Read(&iType); m_listVictoryTypes.push_back((VictoryTypes)iType); } stream.Read(&iType); m_eVictoryType = (VictoryTypes)iType; stream.Read(&iNumTypes); for (int i = 0; i < iNumTypes; i++) { CvReplayMessage* pMessage = new CvReplayMessage(0); if (NULL != pMessage) { pMessage->read(stream); } m_listReplayMessages.push_back(pMessage); } stream.Read(&m_iInitialTurn); stream.Read(&m_iStartYear); stream.Read(&m_iFinalTurn); stream.ReadString(m_szFinalDate); stream.Read(&iType); m_eCalendar = (CalendarTypes)iType; stream.Read(&m_iNormalizedScore); stream.Read(&iNumTypes); for (int i = 0; i < iNumTypes; i++) { PlayerInfo info; stream.Read(&iType); info.m_eLeader = (LeaderHeadTypes)iType; stream.Read(&iType); info.m_eColor = (ColorTypes)iType; int jNumTypes; stream.Read(&jNumTypes); for (int j = 0; j < jNumTypes; j++) { TurnData data; stream.Read(&(data.m_iScore)); stream.Read(&(data.m_iEconomy)); stream.Read(&(data.m_iIndustry)); stream.Read(&(data.m_iAgriculture)); info.m_listScore.push_back(data); } m_listPlayerScoreHistory.push_back(info); } stream.Read(&m_iMapWidth); stream.Read(&m_iMapHeight); SAFE_DELETE(m_pcMinimapPixels); m_pcMinimapPixels = new unsigned char[m_nMinimapSize]; stream.Read(m_nMinimapSize, m_pcMinimapPixels); stream.Read(&m_bMultiplayer); if (iVersion > 2) { stream.ReadString(m_szModName); } } catch (...) { bSuccess = false; } return bSuccess; }
void CvReplayInfo::createInfo(PlayerTypes ePlayer) { CvGame& game = GC.getGameINLINE(); CvMap& map = GC.getMapINLINE(); if (ePlayer == NO_PLAYER) { ePlayer = game.getActivePlayer(); } if (NO_PLAYER != ePlayer) { CvPlayer& player = GET_PLAYER(ePlayer); m_eDifficulty = player.getHandicapType(); m_szLeaderName = player.getName(); m_szCivDescription = player.getCivilizationDescription(); m_szShortCivDescription = player.getCivilizationShortDescription(); m_szCivAdjective = player.getCivilizationAdjective(); m_szMapScriptName = GC.getInitCore().getMapScriptName(); m_eWorldSize = map.getWorldSize(); m_eClimate = map.getClimate(); m_eSeaLevel = map.getSeaLevel(); m_eEra = game.getStartEra(); m_eGameSpeed = game.getGameSpeedType(); m_listGameOptions.clear(); for (int i = 0; i < NUM_GAMEOPTION_TYPES; i++) { GameOptionTypes eOption = (GameOptionTypes)i; if (game.isOption(eOption)) { m_listGameOptions.push_back(eOption); } } m_listVictoryTypes.clear(); for (int i = 0; i < GC.getNumVictoryInfos(); i++) { VictoryTypes eVictory = (VictoryTypes)i; if (game.isVictoryValid(eVictory)) { m_listVictoryTypes.push_back(eVictory); } } if (game.getWinner() == player.getTeam()) { m_eVictoryType = game.getVictory(); } else { m_eVictoryType = NO_VICTORY; } m_iNormalizedScore = player.calculateScore(true, player.getTeam() == GC.getGameINLINE().getWinner()); } m_bMultiplayer = game.isGameMultiPlayer(); m_iInitialTurn = GC.getGameINLINE().getStartTurn(); m_iStartYear = GC.getGameINLINE().getStartYear(); m_iFinalTurn = game.getGameTurn(); GAMETEXT.setYearStr(m_szFinalDate, m_iFinalTurn, false, GC.getGameINLINE().getCalendar(), GC.getGameINLINE().getStartYear(), GC.getGameINLINE().getGameSpeedType()); m_eCalendar = GC.getGameINLINE().getCalendar(); std::map<PlayerTypes, int> mapPlayers; m_listPlayerScoreHistory.clear(); int iPlayerIndex = 0; for (int iPlayer = 0; iPlayer < MAX_PLAYERS; iPlayer++) { CvPlayer& player = GET_PLAYER((PlayerTypes)iPlayer); if (player.isEverAlive()) { mapPlayers[(PlayerTypes)iPlayer] = iPlayerIndex; if ((PlayerTypes)iPlayer == game.getActivePlayer()) { m_iActivePlayer = iPlayerIndex; } ++iPlayerIndex; PlayerInfo playerInfo; playerInfo.m_eLeader = player.getLeaderType(); //playerInfo.m_eColor = (ColorTypes)GC.getPlayerColorInfo(player.getPlayerColor()).getColorTypePrimary(); playerInfo.m_eColor = (ColorTypes)GC.getPlayerColorInfo(GC.getInitCore().getColor((PlayerTypes)iPlayer)).getColorTypePrimary(); // K-Mod. (bypass the conceal colour check.) for (int iTurn = m_iInitialTurn; iTurn <= m_iFinalTurn; iTurn++) { TurnData score; score.m_iScore = player.getScoreHistory(iTurn); score.m_iAgriculture = player.getAgricultureHistory(iTurn); score.m_iIndustry = player.getIndustryHistory(iTurn); score.m_iEconomy = player.getEconomyHistory(iTurn); playerInfo.m_listScore.push_back(score); } m_listPlayerScoreHistory.push_back(playerInfo); } } m_listReplayMessages.clear(); for (uint i = 0; i < game.getNumReplayMessages(); i++) { std::map<PlayerTypes, int>::iterator it = mapPlayers.find(game.getReplayMessagePlayer(i)); if (it != mapPlayers.end()) { CvReplayMessage* pMsg = new CvReplayMessage(game.getReplayMessageTurn(i), game.getReplayMessageType(i), (PlayerTypes)it->second); if (NULL != pMsg) { pMsg->setColor(game.getReplayMessageColor(i)); pMsg->setText(game.getReplayMessageText(i)); pMsg->setPlot(game.getReplayMessagePlotX(i), game.getReplayMessagePlotY(i)); m_listReplayMessages.push_back(pMsg); } } else { CvReplayMessage* pMsg = new CvReplayMessage(game.getReplayMessageTurn(i), game.getReplayMessageType(i), NO_PLAYER); if (NULL != pMsg) { pMsg->setColor(game.getReplayMessageColor(i)); pMsg->setText(game.getReplayMessageText(i)); pMsg->setPlot(game.getReplayMessagePlotX(i), game.getReplayMessagePlotY(i)); m_listReplayMessages.push_back(pMsg); } } } m_iMapWidth = GC.getMapINLINE().getGridWidthINLINE(); m_iMapHeight = GC.getMapINLINE().getGridHeightINLINE(); SAFE_DELETE(m_pcMinimapPixels); m_pcMinimapPixels = new unsigned char[m_nMinimapSize]; void *ptexture = (void*)gDLL->getInterfaceIFace()->getMinimapBaseTexture(); if (ptexture) memcpy((void*)m_pcMinimapPixels, ptexture, m_nMinimapSize); m_szModName = gDLL->getModName(); }