#include "MW4Headers.hpp" #define GAMEINFOEXTERN // to define variables in gameinfo #include "gameinfo.hpp" #undef GAMEINFOEXTERN // to protect from other headers defining variables. #include "MWMission.hpp" #include "MWApplication.hpp" #include #include #include #include #include "gametypes.h" #include #include #include #define __mbsrchr(s,c) (char*)_mbsrchr((const unsigned char*)(s),(c)) const int MAX_MESSAGE_SIZE=65536; using namespace MWGameInfo; extern int Connected; #ifdef LAB_ONLY namespace MWGameInfo { char *MessageNames[Adept::Network::GosMessageStopID]; #define MESSAGE_NAME(name)\ MessageNames[name] = ""#name""; char MWGameInfo::g_MachineName[MAX_GAME_INFO_STR_LEN] = ""; char MWGameInfo::g_UserName[MAX_GAME_INFO_STR_LEN] = ""; char MWGameInfo::g_MissionName[MAX_GAME_INFO_STR_LEN] = ""; char MWGameInfo::g_MissionScript[128] = ""; char MWGameInfo::g_PlayerMech[MAX_GAME_INFO_STR_LEN] = ""; char g_LastMWObject[MAX_GAME_INFO_STR_LEN] = ""; char g_LastVehicle[MAX_GAME_INFO_STR_LEN] = ""; char g_MechModel[MAX_GAME_INFO_STR_LEN] = ""; char g_ResourceFile[MAX_GAME_INFO_STR_LEN] = ""; char g_ResourceEntry[MAX_GAME_INFO_STR_LEN] = ""; Point3D g_LastMWObjectPos = Point3D::Identity; Point3D g_LastVehiclePos = Point3D::Identity; Time g_currentTime = 0; int g_totalNumberOfPlayedGames = 0; int g_lastGameType = NoGame; int g_currentGameType = NoGame; char *g_gameTypes[MaxGameTypes] = { "NoGame", "Campaign", "Instant", "MultiServer", "MultiClient", }; bool g_dedicatedServer = false; int g_totalNetworkConnects = 0; int g_totalNetworkDisconnects = 0; int g_totalNetworkJoins = 0; int g_totalNetworkLeaves = 0; int g_currentlyConnected = 0; int g_currentlyJoined = 0; int g_lastConnectID = -1; int g_lastDisconnectID = -1; int g_lastJoinID = -1; int g_lastLeaveID = -1; Stuff::Scalar g_GameStart = 0; Stuff::Scalar g_GameEnd = 0; MString* g_missionParamsString = 0; MString* g_serverMissionParamsString = 0; bool m_GameInfoReady = false; GUID g_playerIds[Maximum_Connection_Numbers]; char g_playerNames[Maximum_Connection_Numbers][MAX_GAME_INFO_STR_LEN]; char g_playerVehicleNames[Maximum_Connection_Numbers][MAX_GAME_INFO_STR_LEN]; int g_playerTeams[Maximum_Connection_Numbers]; int g_playerScores[Maximum_Connection_Numbers]; int g_playerKills[Maximum_Connection_Numbers]; int g_playerDeaths[Maximum_Connection_Numbers]; double g_playerConnectTime[Maximum_Connection_Numbers]; double g_playerDisconnectTime[Maximum_Connection_Numbers]; double g_playerJoinTime[Maximum_Connection_Numbers]; double g_playerLeaveTime[Maximum_Connection_Numbers]; int g_playerJoins[Maximum_Connection_Numbers]; int g_playerLeaves[Maximum_Connection_Numbers]; int g_networkDebugLevel[Maximum_Connection_Numbers]; int g_connectRate[Maximum_Connection_Numbers]; } extern char g_LastEntity[255]; char* __stdcall GameInfo(void) { if (!m_GameInfoReady) return NULL; if (!Stuff::g_StuffInitizlized) return NULL; static char Buffer[MAX_MESSAGE_SIZE]; char temp_buffer[MAX_MESSAGE_SIZE]; MemoryStream stream(&Buffer[0], MAX_MESSAGE_SIZE); stream << "Machine Name = " << g_MachineName << "\n"; stream << "User Name = " << g_UserName << "\n"; stream << "Connection = "; switch (Connected) { case NP_NOT: { stream << "None\n"; break; } case NP_TCP: { stream << "TCP\n"; break; } case NP_IPX: { stream << "IPX\n"; break; } case NP_MODEM: { stream << "Modem\n"; break; } case NP_SERIAL: { stream << "Serial\n"; break; } case NP_ZONEMATCH: { stream << "Zone Match\n"; break; } default: { stream << "?Unknown.\n"; } } stream << "Mission = " << g_MissionName << "\n"; stream << "Mission Script = " << g_MissionScript << "\n"; stream << "Mech = " << g_PlayerMech << "\n"; stream << "MechModel = " << g_MechModel << "\n"; stream << "ResourceFile = " << g_ResourceFile << "\n"; stream << "ResourceEntry = " << g_ResourceEntry << "\n"; stream << "LastFileRequest = " << g_LastFileOpenRequest << "\n"; sprintf(temp_buffer, "<%f:%f:%f>", g_LastLocalPlayerPos.x, g_LastLocalPlayerPos.y, g_LastLocalPlayerPos.z); stream << "Last Player Mech Pos = " << temp_buffer << "\n"; sprintf(temp_buffer, "<%f:%f:%f>", g_LastCameraPos.x, g_LastCameraPos.y, g_LastCameraPos.z); stream << "Last Camera Pos = " << temp_buffer << "\n"; stream << "Last Entity = " << g_LastEntity << "\n"; stream << "Last Object = " << g_LastMWObject << "\n"; sprintf(temp_buffer, "<%f:%f:%f>", g_LastMWObjectPos.x, g_LastMWObjectPos.y, g_LastMWObjectPos.z); stream << "Last Object Pos = " << temp_buffer << "\n"; stream << "Last Vehicle = " << g_LastVehicle << "\n"; sprintf(temp_buffer, "<%f:%f:%f>", g_LastVehiclePos.x, g_LastVehiclePos.y, g_LastVehiclePos.z); stream << "Last Vehicle Pos = " << temp_buffer << "\n"; stream << "\n Application \n "; stream << "---------------------\n"; stream << "Last Game Type : " << g_gameTypes[g_lastGameType] << "\n"; stream << "Current Game Type : " << g_gameTypes[g_currentGameType] << "\n"; sprintf(temp_buffer, "%d", g_totalNumberOfPlayedGames); stream << "Number of Games : " << temp_buffer << "\n"; sprintf(temp_buffer, "%10.4f", g_currentTime); stream << "CurrentGameTime : " << temp_buffer << "\n"; stream << "ApplicationState : " << g_applicationStates[g_currentApplicationState] << "\n"; stream << "ApplicationPhase : " << g_applicationPhases[g_currentApplicationPhase] << "\n"; if (g_currentGameType == MultiServer || g_currentGameType == MultiClient) { stream << "\n Network \n "; stream << "---------------------\n"; if (g_dedicatedServer) { stream << "Dedicated Game Server\n"; } else { stream << "Playing Game Server\n"; } stream << "Teams Present : "; bool any_teams_present = false; bool teams_present[8]; {for (int i = 0; i < 8; ++i) { teams_present[i] = false; }} {for (int i = 0; i < Maximum_Connection_Numbers; ++i) { if (g_playerTeams[i] != MWApplication::No_Team) { teams_present[i] = true; any_teams_present = true; } }} if (any_teams_present == false) { stream << "None"; } else { {for (int i = 0; i < 8; ++i) { if (teams_present[i] == true) { sprintf(temp_buffer,"%d",i+1); stream << temp_buffer << " "; } }} } stream << "\n"; if (g_GameEnd == 0) { g_GameEnd = (Stuff::Scalar)gos_GetElapsedTime(); } sprintf(temp_buffer, "%10.4f", g_GameEnd - g_GameStart); stream << "Game Duration : " << temp_buffer; sprintf(temp_buffer, "%10.4f", g_GameStart); stream << "\nStart : " << temp_buffer; sprintf(temp_buffer, "%10.4f", g_GameEnd); stream << "\nEnd : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_totalNetworkConnects); stream << "Total Connects : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_totalNetworkDisconnects); stream << "Total Disconnects : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_totalNetworkJoins); stream << "Total Joins : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_totalNetworkLeaves); stream << "Total Leaves : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_currentlyConnected); stream << "Current Connections : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_currentlyJoined); stream << "Current Playing : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_lastConnectID); stream << "Last Player Connected : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_lastDisconnectID); stream << "Last Player Disconnected : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_lastJoinID); stream << "Last Player Join : " << temp_buffer << "\n"; sprintf(temp_buffer, "%d", g_lastLeaveID); stream << "Last Player Leave : " << temp_buffer << "\n"; for (int i = 0; i < Maximum_Connection_Numbers; ++i) { if (g_playerNames[i][0] != '\0') { double time_since_last_packet_to = g_currentTime - g_lastPacketToPlayer[i]; double time_since_last_packet_from = g_currentTime - g_lastPacketFromPlayer[i]; stream << "\n"; sprintf(temp_buffer, "%d: name: %s, mech: %s", i, g_playerNames[i], g_playerVehicleNames[i]); stream << temp_buffer << "\n"; if (g_playerTeams[i] == MWApplication::No_Team) { stream << "Team = None\n"; } else { sprintf(temp_buffer, "%d", g_playerTeams[i] + 1); stream << "Team = " << temp_buffer << "\n"; } sprintf(temp_buffer,"%d",g_playerKills[i]); stream << "Kills = " << temp_buffer; sprintf(temp_buffer,"%d",g_playerDeaths[i]); stream << "\nDeaths = " << temp_buffer; sprintf(temp_buffer,"%d",g_playerScores[i]); stream << "\nScore = " << temp_buffer; stream << "\n---------------------\n"; sprintf(temp_buffer, "net_debug_level %d : ConnectBandwidth %d ", g_networkDebugLevel[i], g_connectRate[i]); stream << temp_buffer << "\n"; sprintf(temp_buffer, "connect: %10.4f", g_playerConnectTime[i]); stream << temp_buffer << "\n"; sprintf(temp_buffer, "dissconnect: %10.4f", g_playerDisconnectTime[i]); stream << temp_buffer << "\n"; sprintf(temp_buffer, "joins %d : last %10.4f", g_playerJoins[i], g_playerJoinTime[i]); stream << temp_buffer << "\n"; sprintf(temp_buffer, "leave %d : last %10.4f", g_playerLeaves[i], g_playerLeaveTime[i]); stream << temp_buffer << "\n"; sprintf(temp_buffer, "last packet to: %10.4f", time_since_last_packet_to); stream << temp_buffer << "\n"; sprintf(temp_buffer, "last packet from : %10.4f", time_since_last_packet_from); stream << temp_buffer << "\n"; } } stream << "\n PacketHistory \n"; stream << "------------------------- \n"; // print them out, last to first... for (i = nextPacketHistoryIndex; i < Packet_History_Count; ++i) { if (g_lastPacketType[i] != -1) { sprintf(temp_buffer,"%10.4f : player %d : i %d : Type : %d : %s : Size : %d \n", g_lastPacketTime[i], g_lastPacketAddress[i], g_lastPacketInbound[i], g_lastPacketType[i], MessageNames[g_lastPacketType[i]], g_lastPacketSize[i]); stream << temp_buffer; } } for (i = 0; i < nextPacketHistoryIndex; ++i) { if (g_lastPacketType[i] != -1) { sprintf(temp_buffer,"%10.4f : player %d : i %d : Type : %d : %s: Size : %d \n",g_lastPacketTime[i], g_lastPacketAddress[i], g_lastPacketInbound[i], g_lastPacketType[i], MessageNames[g_lastPacketType[i]], g_lastPacketSize[i]); stream << temp_buffer; } } if (g_missionParamsString != 0) { stream << "\n Mission Params \n "; stream << "---------------------\n"; stream.WriteBytes(*g_missionParamsString,g_missionParamsString->GetLength()); stream << "\n"; } if (g_serverMissionParamsString != 0) { stream << "\n Server Mission Params \n "; stream << "---------------------\n"; stream.WriteBytes(*g_serverMissionParamsString,g_serverMissionParamsString->GetLength()); stream << "\n"; } } return Buffer; } void MWGameInfo::InitGameInfo (void) { for (int i = 0; i < Maximum_Connection_Numbers; ++i) { g_playerNames[i][0] = '\0'; g_playerVehicleNames[i][0] = '\0'; g_playerTeams[i] = MWApplication::No_Team; g_playerScores[i] = 0; g_playerKills[i] = 0; g_playerDeaths[i] = 0; g_playerConnectTime[i] = -1.0; g_playerDisconnectTime[i] = -1.0; g_playerJoinTime[i] = -1.0; g_playerLeaveTime[i] = -1.0; g_lastPacketFromPlayer[i] = -1.0; g_lastPacketToPlayer[i] = -1.0; g_playerJoins[i] = 0; g_playerLeaves[i] = 0; g_networkDebugLevel[i] = -1; g_connectRate[i] = -1; } for (i = 0; i < Packet_History_Count; ++i) { g_lastPacketAddress[i] = -1; g_lastPacketType[i] = -1; g_lastPacketSize[i] = -1; g_lastPacketTime[i] = -1; g_lastPacketInbound[i] = false; } for (i = 0; i < Adept::Network::GosMessageStopID; ++i) { MessageNames[i] = "Unknown"; } MESSAGE_NAME(Adept::Network::NetworkBoxID); MESSAGE_NAME(Adept::Network::ConnectionBoxID); MESSAGE_NAME(Adept::Network::ApplicationBoxID); MESSAGE_NAME(Adept::Network::BigPacketStartBufferBoxID); MESSAGE_NAME(Adept::Network::BigPacketPartBufferBoxID); MESSAGE_NAME(Adept::Network::BigPacketEndBufferBoxID); MESSAGE_NAME(Adept::Network::FullConnectionListMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestConnectionMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::DenyRequestConnectionMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::AcceptConnectionMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::LoadGameMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::LoadPersitantHermitObjectsID); MESSAGE_NAME(MechWarrior4::MWApplication::AddPlayerMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RemovePlayerMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestPlayerVehicleMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::AcceptPlayerVehicleMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::DenyPlayerVehicleMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::AddLancemateMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::ReadyToLaunchMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::ClientLoadedMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RunGameMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::ScoreMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestRespawnMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RespawnMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::ChatMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::StopMissionMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::PlayerLeavingMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestMissionParameterMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::MissionParameterMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::ScoreFormatMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestMapInfoMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::MapInfoMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::SwitchToCameraMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::DecalLayoutMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestDecalsMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::DecalPayLoadMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::AddTeamMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::LobbyStatusMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestTeamMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestPreRenderMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::PreRenderMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::MissionReviewAvailableMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RequestMissionReviewMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::CancelMissionReviewMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::MissionReviewPartMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RespawnFlagsMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::PlayerClanMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RespawnLancemateMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::UnreadyLaunchMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::StopMissionConfirmationMessageID); // team order MESSAGE_NAME(MechWarrior4::MWApplication::TeamOrderMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::svrTeamOrderMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::RepTeamOrderMessageID); MESSAGE_NAME(MechWarrior4::MWApplication::svrRepTeamOrderMessageID); // team order MESSAGE_NAME(MechWarrior4::MWEntityManager::DictionaryIndexMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonControlMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonObserverControlMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonSmallConfirmationMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonFullConfirmationMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonWeaponToMechCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonWeaponToGroundCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonWeaponToServerObjectCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::FirstPersonWeaponNoTargetCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::ThirdPersonWeaponToMechCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::ThirdPersonWeaponToGroundCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::ThirdPersonWeaponToServerObjectCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::ThirdPersonWeaponNoTargetCommandMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::AIWeaponCommandToMechtMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::AIWeaponCommandToGroundtMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::AIWeaponCommandToServerObjectMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::AIWeaponCommandToNoTargetMessageID); MESSAGE_NAME(MechWarrior4::MWEntityManager::WeaponBundleMessageID); for (i = 0; i < MechWarrior4::MaximumPages; ++i) { MessageNames[MechWarrior4::MWEntityManager::DictionaryPage0MessageID+i] = "MechWarrior4::MWEntityManager::DictionaryPage"; } m_GameInfoReady = true; } void MWGameInfo::InitMissionInfo (void) { Adept::Mission *miss; g_MissionName[0] = 0; g_MissionScript[0] = 0; g_PlayerMech[0] = 0; g_LastMWObject[0] = 0; g_LastVehicle[0] = 0; g_MechModel[0] = 0; g_ResourceEntry[0] = 0; g_ResourceFile[0] = 0; g_LastFileOpenRequest[0] = 0; g_LastMWObjectPos = Point3D::Identity; g_LastVehiclePos = Point3D::Identity; g_LastCameraPos = Point3D::Identity; g_LastLocalPlayerPos = Point3D::Identity; if (!Application::GetInstance()->m_localMissionParameters->m_runDedicated) { Adept::Player *play; play = Player::GetInstance(); Entity *veh; Check_Object (play); veh = play->vehicle; strncpy (g_PlayerMech,veh->instanceName,MAX_GAME_INFO_STR_LEN-1); g_PlayerMech[MAX_GAME_INFO_STR_LEN-1] = 0; const char *name; name = veh->GetModelName (); strncpy (g_MechModel,name,MAX_GAME_INFO_STR_LEN-1); g_MechModel[MAX_GAME_INFO_STR_LEN-1] = 0; } miss = Mission::GetInstance(); Check_Object(miss); char *loc,*loc2; const char *name; name = miss->GetModelName (); Verify (name); loc = __mbsrchr (name,'\\'); if (loc) { loc2 = strchr (loc,'.'); if (loc2) { Verify ((loc2 - loc) < MAX_GAME_INFO_STR_LEN); strncpy (g_MissionName,loc+1,loc2 - loc-1); g_MissionName[MAX_GAME_INFO_STR_LEN-1] = 0; } else { strncpy (g_MissionName,loc,MAX_GAME_INFO_STR_LEN); g_MissionName[MAX_GAME_INFO_STR_LEN-1] = 0; } } else { strncpy (g_MissionName,name,MAX_GAME_INFO_STR_LEN); g_MissionName[MAX_GAME_INFO_STR_LEN-1] = 0; } if (miss->IsDerivedFrom(MWMission::DefaultData) == true) { MWMission* mwmission = Cast_Object(MWMission*,miss); strncpy(g_MissionScript,mwmission->scriptName,128); g_MissionName[127] = 0; } DWORD machine_name_size = MAX_GAME_INFO_STR_LEN - 1; GetComputerName(g_MachineName,&machine_name_size); DWORD user_name_size = MAX_GAME_INFO_STR_LEN - 1; GetUserName((char*)&g_UserName,&user_name_size); if (g_missionParamsString != 0) { delete g_missionParamsString; g_missionParamsString = 0; } if (g_serverMissionParamsString != 0) { delete g_serverMissionParamsString; g_serverMissionParamsString = 0; } if (MWApplication::GetInstance() != 0) { NetMissionParameters::MWNetMissionParameters* net_params = MWApplication::GetInstance()->GetLocalNetParams(); if (net_params != 0) { g_missionParamsString = new MString; *g_missionParamsString = ""; NotationFile notefile; net_params->SaveParameters(¬efile); NotationFile::PageIterator* page_iter = notefile.MakePageIterator(); while (page_iter->GetCurrent() != 0) { Page* page = page_iter->GetCurrent(); Page::NoteIterator* note_iter = page->MakeNoteIterator(); while (note_iter->GetCurrent() != 0) { Note* note = note_iter->GetCurrent(); *g_missionParamsString += note->GetName(); *g_missionParamsString += " = "; const char* char_ptr; note->GetEntry(&char_ptr); *g_missionParamsString += char_ptr; *g_missionParamsString += "\n"; note_iter->ReadAndNext(); } delete note_iter; page_iter->ReadAndNext(); } delete page_iter; notefile.IgnoreChanges(); } net_params = MWApplication::GetInstance()->GetServerNetParams(); if (net_params != 0) { g_serverMissionParamsString = new MString; *g_serverMissionParamsString = ""; NotationFile notefile; net_params->SaveParameters(¬efile); NotationFile::PageIterator* page_iter = notefile.MakePageIterator(); while (page_iter->GetCurrent() != 0) { Page* page = page_iter->GetCurrent(); Page::NoteIterator* note_iter = page->MakeNoteIterator(); while (note_iter->GetCurrent() != 0) { Note* note = note_iter->GetCurrent(); *g_serverMissionParamsString += note->GetName(); *g_serverMissionParamsString += " = "; const char* char_ptr; note->GetEntry(&char_ptr); *g_serverMissionParamsString += char_ptr; *g_serverMissionParamsString += "\n"; note_iter->ReadAndNext(); } delete note_iter; page_iter->ReadAndNext(); } delete page_iter; notefile.IgnoreChanges(); } } g_GameStart = (Stuff::Scalar)gos_GetElapsedTime(); } void MWGameInfo::QuitGameInfo() { g_GameEnd = (Stuff::Scalar)gos_GetElapsedTime(); if (g_missionParamsString != 0) { delete g_missionParamsString; g_missionParamsString = 0; } if (g_serverMissionParamsString != 0) { delete g_serverMissionParamsString; g_serverMissionParamsString = 0; } } #endif