diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index b6fabc41..28016c24 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -2326,11 +2326,13 @@ void Game::update() { ConnectionSlot *slot = server->getSlot(faction->getStartLocationIndex()); server->gameSettings.setNetworkPlayerName(i,slot->getName()); server->gameSettings.setNetworkPlayerUUID(i,slot->getUUID()); + server->gameSettings.setNetworkPlayerPlatform(i,slot->getPlatform()); server->gameSettings.setNetworkPlayerStatuses(i,npst_None); this->gameSettings.setFactionControl(i,ctNetwork); this->gameSettings.setNetworkPlayerName(i,server->gameSettings.getNetworkPlayerName(i)); this->gameSettings.setNetworkPlayerUUID(i,server->gameSettings.getNetworkPlayerUUID(i)); + this->gameSettings.setNetworkPlayerPlatform(i,server->gameSettings.getNetworkPlayerPlatform(i)); this->gameSettings.setNetworkPlayerStatuses(i,npst_None); } } @@ -2370,6 +2372,7 @@ void Game::update() { this->gameSettings.setFactionControl(i,ctNetwork); this->gameSettings.setNetworkPlayerName(i,server->gameSettings.getNetworkPlayerName(i)); this->gameSettings.setNetworkPlayerUUID(i,server->gameSettings.getNetworkPlayerUUID(i)); + this->gameSettings.setNetworkPlayerPlatform(i,server->gameSettings.getNetworkPlayerPlatform(i)); if(this->gameSettings.getNetworkPlayerStatuses(i) == npst_Disconnected) { this->gameSettings.setNetworkPlayerStatuses(i,npst_None); @@ -2787,6 +2790,9 @@ bool Game::switchSetupForSlots(ServerInterface *& serverInterface, gameSettings.setNetworkPlayerUUID(oldFactionIndex, ""); serverInterface->gameSettings.setNetworkPlayerUUID(oldFactionIndex, ""); + gameSettings.setNetworkPlayerPlatform(oldFactionIndex, ""); + serverInterface->gameSettings.setNetworkPlayerPlatform(oldFactionIndex, ""); + gameSettings.setFactionControl(newFactionIndex,ctNetwork); serverInterface->gameSettings.setFactionControl(newFactionIndex,ctNetwork); diff --git a/source/glest_game/game/game_settings.h b/source/glest_game/game/game_settings.h index eec1c417..cd2d540c 100644 --- a/source/glest_game/game/game_settings.h +++ b/source/glest_game/game/game_settings.h @@ -93,6 +93,7 @@ private: string scenarioDir; string factionTypeNames[GameConstants::maxPlayers]; //faction names string networkPlayerNames[GameConstants::maxPlayers]; + string networkPlayerPlatform[GameConstants::maxPlayers]; int networkPlayerStatuses[GameConstants::maxPlayers]; string networkPlayerLanguages[GameConstants::maxPlayers]; int networkPlayerGameStatus[GameConstants::maxPlayers]; @@ -160,6 +161,7 @@ public: for(int i = 0; i < GameConstants::maxPlayers; ++i) { factionTypeNames[i] = ""; networkPlayerNames[i] = ""; + networkPlayerPlatform[i] = ""; networkPlayerStatuses[i] = npst_None; networkPlayerLanguages[i] = DEFAULT_LANG; factionControls[i] = ctClosed; @@ -214,6 +216,17 @@ public: } return result; } + string getNetworkPlayerPlatform(int factionIndex) const { + if(factionIndex < 0 || factionIndex >= GameConstants::maxPlayers) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"In [%s] Invalid factionIndex = %d\n",__FUNCTION__,factionIndex); + throw megaglest_runtime_error(szBuf); + } + + string result = networkPlayerPlatform[factionIndex]; + return result; + } + const int getNetworkPlayerStatuses(int factionIndex) const { if(factionIndex < 0 || factionIndex >= GameConstants::maxPlayers) { char szBuf[8096]=""; @@ -268,6 +281,17 @@ public: } return result; } + const string getNetworkPlayerPlatformByPlayerIndex(int playerIndex) const { + string result = ""; + for(int i = 0; i < GameConstants::maxPlayers; ++i) { + if(startLocationIndex[i] == playerIndex) { + result = networkPlayerPlatform[i]; + break; + } + } + return result; + } + ControlType getFactionControl(int factionIndex) const { if(factionIndex < 0 || factionIndex >= GameConstants::maxPlayers) { char szBuf[8096]=""; @@ -391,6 +415,16 @@ public: this->networkPlayerNames[factionIndex]= playername; } + void setNetworkPlayerPlatform(int factionIndex,const string& platform) { + if(factionIndex < 0 || factionIndex >= GameConstants::maxPlayers) { + char szBuf[8096]=""; + snprintf(szBuf,8096,"In [%s] Invalid factionIndex = %d\n",__FUNCTION__,factionIndex); + throw megaglest_runtime_error(szBuf); + } + + this->networkPlayerPlatform[factionIndex]= platform; + } + void setNetworkPlayerStatuses(int factionIndex,int status) { if(factionIndex < 0 || factionIndex >= GameConstants::maxPlayers) { char szBuf[8096]=""; @@ -530,6 +564,7 @@ public: result += "player index = " + intToStr(idx) + "\n"; result += "factionTypeName = " + factionTypeNames[idx] + "\n"; result += "networkPlayerName = " + networkPlayerNames[idx] + "\n"; + result += "networkPlayerPlatform = " + networkPlayerPlatform[idx] + "\n"; result += "networkPlayerLanguage = " + networkPlayerLanguages[idx] + "\n"; result += "factionControl = " + intToStr(factionControls[idx]) + "\n"; @@ -598,6 +633,11 @@ public: networkPlayerNamesNode->addAttribute("name",networkPlayerNames[idx], mapTagReplacements); } + for(int idx =0; idx < GameConstants::maxPlayers; idx++) { + XmlNode *networkPlayerNamesNode = gameSettingsNode->addChild("networkPlayerPlatform"); + networkPlayerNamesNode->addAttribute("name",networkPlayerPlatform[idx], mapTagReplacements); + } + // int networkPlayerStatuses[GameConstants::maxPlayers]; for(int idx =0; idx < GameConstants::maxPlayers; idx++) { XmlNode *networkPlayerStatusesNode = gameSettingsNode->addChild("networkPlayerStatuses"); diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index 886456ab..9f18ee43 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -2088,6 +2088,7 @@ void MenuStateConnectedGame::loadGameSettings(GameSettings *gameSettings) { gameSettings->setThisFactionIndex(slotIndex); gameSettings->setNetworkPlayerName(slotIndex, getHumanPlayerName()); gameSettings->setNetworkPlayerUUID(slotIndex,Config::getInstance().getString("PlayerId","")); + gameSettings->setNetworkPlayerPlatform(slotIndex,getPlatformNameString()); gameSettings->setNetworkPlayerStatuses(slotIndex, getNetworkPlayerStatus()); Lang &lang= Lang::getInstance(); gameSettings->setNetworkPlayerLanguages(slotIndex, lang.getLanguage()); diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index c1ead26c..f39e5f11 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -3281,6 +3281,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force gameSettings->setThisFactionIndex(slotIndex); gameSettings->setNetworkPlayerName(slotIndex, getHumanPlayerName(i)); gameSettings->setNetworkPlayerUUID(slotIndex,Config::getInstance().getString("PlayerId","")); + gameSettings->setNetworkPlayerPlatform(slotIndex,getPlatformNameString()); gameSettings->setNetworkPlayerStatuses(slotIndex, getNetworkPlayerStatus()); Lang &lang= Lang::getInstance(); gameSettings->setNetworkPlayerLanguages(slotIndex, lang.getLanguage()); @@ -3340,6 +3341,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force gameSettings->setNetworkPlayerName(slotIndex, serverInterface->getSlot(i)->getName()); gameSettings->setNetworkPlayerUUID(i,serverInterface->getSlot(i)->getUUID()); + gameSettings->setNetworkPlayerPlatform(i,serverInterface->getSlot(i)->getPlatform()); labelPlayerNames[i].setText(serverInterface->getSlot(i)->getName()); } else { @@ -3362,6 +3364,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force } if(serverInterface != NULL && serverInterface->getSlot(i) != NULL) { gameSettings->setNetworkPlayerUUID(slotIndex,serverInterface->getSlot(i)->getUUID()); + gameSettings->setNetworkPlayerPlatform(slotIndex,serverInterface->getSlot(i)->getPlatform()); } factionCount++; @@ -3394,6 +3397,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force gameSettings->setFactionTypeName(slotIndex, factionFiles[listBoxFactions[i].getSelectedItemIndex()]); gameSettings->setNetworkPlayerName(slotIndex, "Closed"); gameSettings->setNetworkPlayerUUID(slotIndex,""); + gameSettings->setNetworkPlayerPlatform(slotIndex,""); closedCount++; } diff --git a/source/glest_game/network/client_interface.cpp b/source/glest_game/network/client_interface.cpp index a745bd70..2bfa9411 100644 --- a/source/glest_game/network/client_interface.cpp +++ b/source/glest_game/network/client_interface.cpp @@ -538,6 +538,7 @@ void ClientInterface::updateLobby() { playerIndex= networkMessageIntro.getPlayerIndex(); serverName= networkMessageIntro.getName(); serverUUID = networkMessageIntro.getPlayerUUID(); + serverPlatform = networkMessageIntro.getPlayerPlatform(); serverFTPPort = networkMessageIntro.getFtpPort(); MutexSafeWrapper safeMutexFlags(flagAccessor,CODE_AT_LINE); @@ -609,7 +610,8 @@ void ClientInterface::updateLobby() { serverFTPPort, lang.getLanguage(), networkMessageIntro.getGameInProgress(), - Config::getInstance().getString("PlayerId","")); + Config::getInstance().getString("PlayerId",""), + getPlatformNameString()); sendMessage(&sendNetworkMessageIntro); //printf("Got intro sending client details to server\n"); diff --git a/source/glest_game/network/client_interface.h b/source/glest_game/network/client_interface.h index f7ad1c03..29ea701b 100644 --- a/source/glest_game/network/client_interface.h +++ b/source/glest_game/network/client_interface.h @@ -82,6 +82,7 @@ private: int serverFTPPort; string serverUUID; + string serverPlatform; ClientInterfaceThread *networkCommandListThread; diff --git a/source/glest_game/network/connection_slot.cpp b/source/glest_game/network/connection_slot.cpp index 62ae3bf4..1456de3f 100644 --- a/source/glest_game/network/connection_slot.cpp +++ b/source/glest_game/network/connection_slot.cpp @@ -422,6 +422,7 @@ ConnectionSlot::ConnectionSlot(ServerInterface* serverInterface, int playerIndex this->playerStatus = npst_None; this->playerLanguage = ""; this->playerUUID = ""; + this->platform = ""; this->currentFrameCount = 0; this->currentLagCount = 0; this->gotLagCountWarning = false; @@ -639,6 +640,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { this->playerStatus = npst_PickSettings; this->playerLanguage = ""; this->playerUUID = ""; + this->platform = ""; this->ready = false; this->vctFileList.clear(); this->receivedNetworkGameStatus = false; @@ -684,7 +686,8 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { ServerSocket::getFTPServerPort(), "", serverInterface->getGameHasBeenInitiated(), - Config::getInstance().getString("PlayerId","")); + Config::getInstance().getString("PlayerId",""), + getPlatformNameString()); sendMessage(&networkMessageIntro); if(this->serverInterface->getGameHasBeenInitiated() == true) { @@ -922,6 +925,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { this->connectedRemoteIPAddress = networkMessageIntro.getExternalIp(); this->playerLanguage = networkMessageIntro.getPlayerLanguage(); this->playerUUID = networkMessageIntro.getPlayerUUID(); + this->platform = networkMessageIntro.getPlayerPlatform(); //printf("Got uuid from client [%s]\n",this->playerUUID.c_str()); @@ -998,6 +1002,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { this->serverInterface->addClientToServerIPAddress(this->getSocket()->getConnectedIPAddress(this->getSocket()->getIpAddress()),this->connectedRemoteIPAddress); this->serverInterface->gameSettings.setNetworkPlayerUUID(factionIndex,this->playerUUID); + this->serverInterface->gameSettings.setNetworkPlayerPlatform(factionIndex,this->platform); if(serverInterface->getGameHasBeenInitiated() == true && serverInterface->getAllowInGameConnections() == true) { @@ -1128,6 +1133,7 @@ void ConnectionSlot::update(bool checkForNewClients,int lockedSlotIndex) { this->serverInterface->gameSettings.setFactionControl(factionIndex,ctNetwork); this->serverInterface->gameSettings.setNetworkPlayerName(factionIndex,this->name); this->serverInterface->gameSettings.setNetworkPlayerUUID(factionIndex,this->playerUUID); + this->serverInterface->gameSettings.setNetworkPlayerPlatform(factionIndex,this->platform); if(this->serverInterface->gameSettings.getNetworkPlayerStatuses(factionIndex) == npst_Disconnected) { this->serverInterface->gameSettings.setNetworkPlayerStatuses(factionIndex,npst_None); diff --git a/source/glest_game/network/connection_slot.h b/source/glest_game/network/connection_slot.h index 244a9253..33b62c8e 100644 --- a/source/glest_game/network/connection_slot.h +++ b/source/glest_game/network/connection_slot.h @@ -151,6 +151,7 @@ private: int playerStatus; string playerLanguage; string playerUUID; + string platform; bool skipLagCheck; bool joinGameInProgress; @@ -193,6 +194,7 @@ public: void setReady(); const string &getName() const {return name;} const string &getUUID() const {return playerUUID;} + const string &getPlatform() const { return platform; } void setName(string value) {name = value;} bool isReady() const {return ready;} diff --git a/source/glest_game/network/network_message.cpp b/source/glest_game/network/network_message.cpp index 42039d03..1b04029c 100644 --- a/source/glest_game/network/network_message.cpp +++ b/source/glest_game/network/network_message.cpp @@ -120,7 +120,8 @@ NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionSt uint32 externalIp, uint32 ftpPort, const string &playerLanguage, - int gameInProgress, const string &playerUUID) { + int gameInProgress, const string &playerUUID, + const string &platform) { data.messageType = nmtIntro; data.sessionId = sessionId; data.versionString = versionString; @@ -132,10 +133,11 @@ NetworkMessageIntro::NetworkMessageIntro(int32 sessionId,const string &versionSt data.language = playerLanguage; data.gameInProgress = gameInProgress; data.playerUUID = playerUUID; + data.platform = platform; } const char * NetworkMessageIntro::getPackedMessageFormat() const { - return "cl128s32shcLL60sc60s"; + return "cl128s32shcLL60sc60s60s"; } unsigned int NetworkMessageIntro::getPackedSize() { @@ -154,7 +156,8 @@ unsigned int NetworkMessageIntro::getPackedSize() { packedData.ftpPort, packedData.language.getBuffer(), data.gameInProgress, - packedData.playerUUID.getBuffer()); + packedData.playerUUID.getBuffer(), + packedData.platform.getBuffer()); delete [] buf; } return result; @@ -172,7 +175,8 @@ void NetworkMessageIntro::unpackMessage(unsigned char *buf) { &data.ftpPort, data.language.getBuffer(), &data.gameInProgress, - data.playerUUID.getBuffer()); + data.playerUUID.getBuffer(), + data.platform.getBuffer()); if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s] unpacked data:\n%s\n",__FUNCTION__,this->toString().c_str()); } @@ -191,7 +195,8 @@ unsigned char * NetworkMessageIntro::packMessage() { data.ftpPort, data.language.getBuffer(), data.gameInProgress, - data.playerUUID.getBuffer()); + data.playerUUID.getBuffer(), + data.platform.getBuffer()); return buf; } @@ -207,6 +212,7 @@ string NetworkMessageIntro::toString() const { result += " language = " + data.language.getString(); result += " gameInProgress = " + uIntToStr(data.gameInProgress); result += " playerUUID = " + data.playerUUID.getString(); + result += " platform = " + data.platform.getString(); return result; } @@ -229,6 +235,7 @@ bool NetworkMessageIntro::receive(Socket* socket) { data.versionString.nullTerminate(); data.language.nullTerminate(); data.playerUUID.nullTerminate(); + data.platform.nullTerminate(); if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] get nmtIntro, data.playerIndex = %d, data.sessionId = %d\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__,data.playerIndex,data.sessionId); return result; @@ -531,6 +538,7 @@ NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8 for(int i= 0; i < GameConstants::maxPlayers; ++i) { data.factionTypeNames[i]= gameSettings->getFactionTypeName(i); data.networkPlayerNames[i]= gameSettings->getNetworkPlayerName(i); + data.networkPlayerPlatform[i]= gameSettings->getNetworkPlayerPlatform(i); data.networkPlayerStatuses[i] = gameSettings->getNetworkPlayerStatuses(i); data.networkPlayerLanguages[i] = gameSettings->getNetworkPlayerLanguages(i); data.factionControls[i]= gameSettings->getFactionControl(i); @@ -588,6 +596,7 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const { for(int i= 0; i < GameConstants::maxPlayers; ++i) { gameSettings->setFactionTypeName(i, data.factionTypeNames[i].getString()); gameSettings->setNetworkPlayerName(i,data.networkPlayerNames[i].getString()); + gameSettings->setNetworkPlayerPlatform(i,data.networkPlayerPlatform[i].getString()); gameSettings->setNetworkPlayerStatuses(i, data.networkPlayerStatuses[i]); gameSettings->setNetworkPlayerLanguages(i, data.networkPlayerLanguages[i].getString()); gameSettings->setFactionControl(i, static_cast(data.factionControls[i])); @@ -596,6 +605,7 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const { gameSettings->setStartLocationIndex(i, data.startLocationIndex[i]); gameSettings->setNetworkPlayerUUID(i,data.networkPlayerUUID[i].getString()); + gameSettings->setNetworkPlayerPlatform(i,data.networkPlayerPlatform[i].getString()); //printf("Build game settings for index: %d [%s]\n",i,data.networkPlayerUUID[i].getString().c_str()); } @@ -624,7 +634,7 @@ vector > NetworkMessageLaunch::getFactionCRCList() const { } const char * NetworkMessageLaunch::getPackedMessageFormat() const { - return "c256s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60sllllllll60s60s60s60s60s60s60s60sLLL60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60sLLLLLLLLLLLLLLLLLLLLcccccccccccccccccccccccccccccccccccccccccCccLccll256s60s60s60s60s60s60s60s60sc60s"; + return "c256s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60sllllllll60s60s60s60s60s60s60s60sLLL60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60s60sLLLLLLLLLLLLLLLLLLLLcccccccccccccccccccccccccccccccccccccccccCccLccll256s60s60s60s60s60s60s60s60sc60s"; } unsigned int NetworkMessageLaunch::getPackedSize() { @@ -654,6 +664,14 @@ unsigned int NetworkMessageLaunch::getPackedSize() { packedData.networkPlayerNames[5].getBuffer(), packedData.networkPlayerNames[6].getBuffer(), packedData.networkPlayerNames[7].getBuffer(), + packedData.networkPlayerPlatform[0].getBuffer(), + packedData.networkPlayerPlatform[1].getBuffer(), + packedData.networkPlayerPlatform[2].getBuffer(), + packedData.networkPlayerPlatform[3].getBuffer(), + packedData.networkPlayerPlatform[4].getBuffer(), + packedData.networkPlayerPlatform[5].getBuffer(), + packedData.networkPlayerPlatform[6].getBuffer(), + packedData.networkPlayerPlatform[7].getBuffer(), packedData.networkPlayerStatuses[0], packedData.networkPlayerStatuses[1], packedData.networkPlayerStatuses[2], @@ -801,6 +819,14 @@ void NetworkMessageLaunch::unpackMessage(unsigned char *buf) { data.networkPlayerNames[5].getBuffer(), data.networkPlayerNames[6].getBuffer(), data.networkPlayerNames[7].getBuffer(), + data.networkPlayerPlatform[0].getBuffer(), + data.networkPlayerPlatform[1].getBuffer(), + data.networkPlayerPlatform[2].getBuffer(), + data.networkPlayerPlatform[3].getBuffer(), + data.networkPlayerPlatform[4].getBuffer(), + data.networkPlayerPlatform[5].getBuffer(), + data.networkPlayerPlatform[6].getBuffer(), + data.networkPlayerPlatform[7].getBuffer(), &data.networkPlayerStatuses[0], &data.networkPlayerStatuses[1], &data.networkPlayerStatuses[2], @@ -947,6 +973,14 @@ unsigned char * NetworkMessageLaunch::packMessage() { data.networkPlayerNames[5].getBuffer(), data.networkPlayerNames[6].getBuffer(), data.networkPlayerNames[7].getBuffer(), + data.networkPlayerPlatform[0].getBuffer(), + data.networkPlayerPlatform[1].getBuffer(), + data.networkPlayerPlatform[2].getBuffer(), + data.networkPlayerPlatform[3].getBuffer(), + data.networkPlayerPlatform[4].getBuffer(), + data.networkPlayerPlatform[5].getBuffer(), + data.networkPlayerPlatform[6].getBuffer(), + data.networkPlayerPlatform[7].getBuffer(), data.networkPlayerStatuses[0], data.networkPlayerStatuses[1], data.networkPlayerStatuses[2], @@ -1092,6 +1126,7 @@ bool NetworkMessageLaunch::receive(Socket* socket) { for(int i= 0; i < GameConstants::maxPlayers; ++i){ data.factionTypeNames[i].nullTerminate(); data.networkPlayerNames[i].nullTerminate(); + data.networkPlayerPlatform[i].nullTerminate(); data.networkPlayerLanguages[i].nullTerminate(); data.networkPlayerUUID[i].nullTerminate(); diff --git a/source/glest_game/network/network_message.h b/source/glest_game/network/network_message.h index eb47a4ec..e2ff9c58 100644 --- a/source/glest_game/network/network_message.h +++ b/source/glest_game/network/network_message.h @@ -113,6 +113,7 @@ private: NetworkString language; int8 gameInProgress; NetworkString playerUUID; + NetworkString platform; }; void toEndian(); void fromEndian(); @@ -127,7 +128,7 @@ public: NetworkMessageIntro(int32 sessionId, const string &versionString, const string &name, int playerIndex, NetworkGameStateType gameState, uint32 externalIp, uint32 ftpPort, const string &playerLanguage, - int gameInProgress, const string &playerUUID); + int gameInProgress, const string &playerUUID, const string &platform); virtual const char * getPackedMessageFormat() const; @@ -149,6 +150,7 @@ public: uint8 getGameInProgress() const { return data.gameInProgress; } string getPlayerUUID() const { return data.playerUUID.getString();} + string getPlayerPlatform() const { return data.platform.getString();} virtual bool receive(Socket* socket); virtual void send(Socket* socket); @@ -260,6 +262,7 @@ private: NetworkString tech; NetworkString factionTypeNames[GameConstants::maxPlayers]; //faction names NetworkString networkPlayerNames[GameConstants::maxPlayers]; //networkPlayerNames + NetworkString networkPlayerPlatform[GameConstants::maxPlayers]; int32 networkPlayerStatuses[GameConstants::maxPlayers]; //networkPlayerStatuses NetworkString networkPlayerLanguages[GameConstants::maxPlayers]; diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index 76b470ce..db45299c 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -2855,6 +2855,7 @@ std::map ServerInterface::publishToMasterserverStats() { publishToServerInfo["quitBeforeGameEnd_" + intToStr(factionIndex)] = intToStr(gameStats->getPlayerLeftBeforeEnd(factionIndex)); publishToServerInfo["quitTime_" + intToStr(factionIndex)] = intToStr(gameStats->getTimePlayerLeft(factionIndex)); publishToServerInfo["playerUUID_" + intToStr(factionIndex)] = this->getGameSettings()->getNetworkPlayerUUID(factionIndex); + publishToServerInfo["platform_" + intToStr(factionIndex)] = this->getGameSettings()->getNetworkPlayerPlatform(factionIndex); } if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__); } diff --git a/source/glest_game/world/scenario.cpp b/source/glest_game/world/scenario.cpp index e9075f79..1b40504d 100644 --- a/source/glest_game/world/scenario.cpp +++ b/source/glest_game/world/scenario.cpp @@ -496,6 +496,7 @@ void Scenario::loadGameSettings(const vector &dirList, gameSettings->setNetworkPlayerName(i,Config::getInstance().getString("NetPlayerName",Socket::getHostName().c_str())); } gameSettings->setNetworkPlayerUUID(i,Config::getInstance().getString("PlayerId","")); + gameSettings->setNetworkPlayerPlatform(i,getPlatformNameString()); } else { if(gameSettings->getNetworkPlayerName(i) == "") { diff --git a/source/masterserver/addGameStats.php b/source/masterserver/addGameStats.php index 45b20cc8..d043ec1a 100644 --- a/source/masterserver/addGameStats.php +++ b/source/masterserver/addGameStats.php @@ -202,6 +202,11 @@ $playerUUID = (string) clean_str( $_GET['playerUUID_' . $factionNumber] ); } + $playerPlatform = ""; + if ( isset( $_GET['platform_' . $factionNumber] ) ) { + $playerPlatform = (string) clean_str( $_GET['platform_' . $factionNumber] ); + } + if($player_statsCount[0] > 0) { $result = mysql_query( 'UPDATE glestgameplayerstats SET ' . @@ -222,6 +227,7 @@ 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . 'quitTime=' . $quitTime . ', ' . 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\', ' . + 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . 'lasttime=' . 'now()' . ' ' . 'WHERE ' . $whereClause . ' AND factionIndex = ' . $factionIndex . ';'); @@ -251,6 +257,7 @@ 'playerName=\'' . mysql_real_escape_string( $playerName ) . '\', ' . 'quitBeforeGameEnd=' . $quitBeforeGameEnd . ', ' . 'quitTime=' . $quitTime . ', ' . + 'platform=\'' . mysql_real_escape_string( $playerPlatform ) . '\', ' . 'playerUUID=\'' . mysql_real_escape_string( $playerUUID ) . '\';'); if (!$result) { diff --git a/source/masterserver/install/scheme_mysql.sql b/source/masterserver/install/scheme_mysql.sql index 3d151da0..b491ea5d 100644 --- a/source/masterserver/install/scheme_mysql.sql +++ b/source/masterserver/install/scheme_mysql.sql @@ -91,6 +91,7 @@ CREATE TABLE `glestgameplayerstats` ( `lasttime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `gameUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, `playerUUID` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, + `platform` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL, `factionIndex` int(11) NOT NULL, `controlType` int(11) NOT NULL, `resourceMultiplier` DECIMAL(10,6) NOT NULL, @@ -109,6 +110,7 @@ CREATE TABLE `glestgameplayerstats` ( KEY `gameUUID` (`gameUUID`) KEY `playerUUID` (`playerUUID`) + KEY `platform` (`platform`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- diff --git a/source/masterserver/showGameStats.php b/source/masterserver/showGameStats.php index acce50a6..947c52c7 100644 --- a/source/masterserver/showGameStats.php +++ b/source/masterserver/showGameStats.php @@ -85,7 +85,7 @@ echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; - echo ' ' . PHP_EOL; + echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; @@ -97,6 +97,7 @@ echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; + echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; @@ -133,7 +134,7 @@ { echo "\t\t\t" . '' . PHP_EOL; - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionIndex'], ENT_QUOTES ), PHP_EOL ); + printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionIndex']+1, ENT_QUOTES ), PHP_EOL ); $controlType = $player_stats['controlType']; switch ( $controlType ) @@ -182,7 +183,7 @@ printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['resourceMultiplier'], ENT_QUOTES ), PHP_EOL ); printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['factionTypeName'], ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['teamIndex'], ENT_QUOTES ), PHP_EOL ); + printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['teamIndex']+1, ENT_QUOTES ), PHP_EOL ); $wonGame_class = "player_loser"; if($player_stats['wonGame']) @@ -190,7 +191,7 @@ $wonGame_class = "player_winner"; } - printf( "\t\t\t\t%s", $wonGame_class, htmlspecialchars( $player_stats['wonGame'], ENT_QUOTES ), PHP_EOL ); + printf( "\t\t\t\t%s", $wonGame_class, htmlspecialchars( ($player_stats['wonGame'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['killCount'], ENT_QUOTES ), PHP_EOL ); $player_score_class = "player_losing_score"; @@ -218,6 +219,7 @@ printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_stats['resourceHarvestedCount'], ENT_QUOTES ), PHP_EOL ); printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['playerName'], ENT_QUOTES ), PHP_EOL ); + printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['platform'], ENT_QUOTES ), PHP_EOL ); $player_score = $player_stats['enemyKillCount'] * 100 + $player_stats['unitsProducedCount'] * 50 + $player_stats['resourceHarvestedCount'] / 10; $player_score_class = "player_losing_score"; @@ -228,7 +230,7 @@ printf( "\t\t\t\t%s", $player_score_class, htmlspecialchars( $player_score, ENT_QUOTES ), PHP_EOL ); - printf( "\t\t\t\t%s", htmlspecialchars( $player_stats['quitBeforeGameEnd'], ENT_QUOTES ), PHP_EOL ); + printf( "\t\t\t\t%s", htmlspecialchars( ($player_stats['quitBeforeGameEnd'] ? "yes" : "no"), ENT_QUOTES ), PHP_EOL ); $quitTime = $player_stats['quitTime']; $quitTime = getTimeString($quitTime);
Faction IndexPlayer #Player TypeResource MultiplierFaction TypeUnits ProducedResources HarvestedPlayer NamePlatformScoreQuit Before Game EndedQuit Time
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s