diff --git a/source/glest_game/game/game.cpp b/source/glest_game/game/game.cpp index 9e6eeaa7..967ad9d8 100644 --- a/source/glest_game/game/game.cpp +++ b/source/glest_game/game/game.cpp @@ -1168,6 +1168,7 @@ void Game::setupPopupMenus(bool checkClientAdminOverrideOnly) { clientInterface->isMasterServerAdminOverride() == true))) { if(checkClientAdminOverrideOnly == true) { gameSettings.setMasterserver_admin(clientInterface->getSessionKey()); + gameSettings.setMasterserver_admin_faction_index(clientInterface->getPlayerIndex()); } //PopupMenu popupMenu; std::vector menuItems; diff --git a/source/glest_game/game/game_settings.h b/source/glest_game/game/game_settings.h index 515aa077..7fef76c5 100644 --- a/source/glest_game/game/game_settings.h +++ b/source/glest_game/game/game_settings.h @@ -88,6 +88,8 @@ private: int aiAcceptSwitchTeamPercentChance; int masterserver_admin; + int masterserver_admin_factionIndex; + public: static string playerDisconnectedText; @@ -128,6 +130,7 @@ public: factionCRCList.clear(); aiAcceptSwitchTeamPercentChance = 30; masterserver_admin = -1; + masterserver_admin_factionIndex = -1; } // default copy constructor will do fine, and will maintain itself ;) @@ -264,6 +267,9 @@ public: int getMasterserver_admin() const { return masterserver_admin;} void setMasterserver_admin(int value) { masterserver_admin = value; } + int getMasterserver_admin_faction_index() const { return masterserver_admin_factionIndex;} + void setMasterserver_admin_faction_index(int value) { masterserver_admin_factionIndex = value; } + string toString() const { string result = ""; @@ -310,6 +316,7 @@ public: result += "aiAcceptSwitchTeamPercentChance = " + intToStr(aiAcceptSwitchTeamPercentChance) + "\n"; result += "masterserver_admin = " + intToStr(masterserver_admin) + "\n"; + result += "masterserver_admin_factionIndex = " + intToStr(masterserver_admin_factionIndex) + "\n"; return result; } @@ -434,6 +441,8 @@ public: gameSettingsNode->addAttribute("aiAcceptSwitchTeamPercentChance",intToStr(aiAcceptSwitchTeamPercentChance), mapTagReplacements); // int masterserver_admin; gameSettingsNode->addAttribute("masterserver_admin",intToStr(masterserver_admin), mapTagReplacements); + + gameSettingsNode->addAttribute("masterserver_admin_factionIndex",intToStr(masterserver_admin_factionIndex), mapTagReplacements); } void loadGame(const XmlNode *rootNode) { @@ -559,6 +568,10 @@ public: aiAcceptSwitchTeamPercentChance = gameSettingsNode->getAttribute("aiAcceptSwitchTeamPercentChance")->getIntValue(); // int masterserver_admin; masterserver_admin = gameSettingsNode->getAttribute("masterserver_admin")->getIntValue(); + + if(gameSettingsNode->hasAttribute("masterserver_admin_factionIndex") == true) { + masterserver_admin_factionIndex = gameSettingsNode->getAttribute("masterserver_admin_factionIndex")->getIntValue(); + } } }; diff --git a/source/glest_game/menu/menu_state_connected_game.cpp b/source/glest_game/menu/menu_state_connected_game.cpp index aa03c61a..809fee39 100644 --- a/source/glest_game/menu/menu_state_connected_game.cpp +++ b/source/glest_game/menu/menu_state_connected_game.cpp @@ -1745,6 +1745,8 @@ void MenuStateConnectedGame::render() { renderer.renderListBox(&listBoxPlayerStatus); + NetworkManager &networkManager= NetworkManager::getInstance(); + ClientInterface *clientInterface = networkManager.getClientInterface(); for(int i = 0; i < GameConstants::maxPlayers; ++i) { if(listBoxControls[i].getSelectedItemIndex() == ctNetworkUnassigned) { //printf("Player #%d [%s] control = %d\n",i,labelPlayerNames[i].getText().c_str(),listBoxControls[i].getSelectedItemIndex()); @@ -1763,8 +1765,26 @@ void MenuStateConnectedGame::render() { if(crcPlayerTextureCache[i] != NULL) { // Render the player # label the player's color + //printf("clientInterface->getGameSettings()->getMasterserver_admin_faction_index() = %d\n",clientInterface->getGameSettings()->getMasterserver_admin_faction_index()); + Vec3f playerColor = crcPlayerTextureCache[i]->getPixmap()->getPixel3f(0, 0); - renderer.renderLabel(&labelPlayers[i],&playerColor); + if(clientInterface != NULL && + clientInterface->getGameSettings() != NULL && + clientInterface->getGameSettings()->getMasterserver_admin() > 0 && + clientInterface->getGameSettings()->getMasterserver_admin_faction_index() == i) { + + if(difftime(time(NULL),timerLabelFlash) < 1) { + renderer.renderLabel(&labelPlayers[i],&playerColor); + } + else { + Vec4f flashColor=Vec4f(playerColor.x, playerColor.y, playerColor.z, 0.45f); + renderer.renderLabel(&labelPlayers[i],&flashColor); + } + + } + else { + renderer.renderLabel(&labelPlayers[i],&playerColor); + } // Blend the color with white so make it more readable //Vec4f newColor(1.f, 1.f, 1.f, 0.57f); @@ -1816,9 +1836,6 @@ void MenuStateConnectedGame::render() { } else { renderer.renderLabel(&labelDataSynchInfo,&WHITE); - if(difftime(time(NULL),timerLabelFlash) > 2) { - timerLabelFlash = time(NULL); - } } renderer.renderLabel(&labelMap); @@ -1915,6 +1932,10 @@ void MenuStateConnectedGame::render() { } renderer.renderChatManager(&chatManager); renderer.renderConsole(&console,showFullConsole,true); + + if(difftime(time(NULL),timerLabelFlash) > 2) { + timerLabelFlash = time(NULL); + } } catch(const std::exception &ex) { char szBuf[8096]=""; diff --git a/source/glest_game/menu/menu_state_custom_game.cpp b/source/glest_game/menu/menu_state_custom_game.cpp index 264cefea..23636b9a 100644 --- a/source/glest_game/menu/menu_state_custom_game.cpp +++ b/source/glest_game/menu/menu_state_custom_game.cpp @@ -3213,6 +3213,7 @@ void MenuStateCustomGame::loadGameSettings(GameSettings *gameSettings,bool force (serverInterface->getSlot(i)->getConnectedTime() > 0 && serverInterface->getSlot(i)->getConnectedTime() < clientConnectedTime)) { clientConnectedTime = serverInterface->getSlot(i)->getConnectedTime(); gameSettings->setMasterserver_admin(serverInterface->getSlot(i)->getSessionKey()); + gameSettings->setMasterserver_admin_faction_index(serverInterface->getSlot(i)->getPlayerIndex()); labelGameName.setText(serverInterface->getSlot(i)->getName()+" controls"); //printf("slot = %d, admin key [%d] slot connected time[%lu] clientConnectedTime [%lu]\n",i,gameSettings->getMasterserver_admin(),serverInterface->getSlot(i)->getConnectedTime(),clientConnectedTime); } diff --git a/source/glest_game/network/network_message.cpp b/source/glest_game/network/network_message.cpp index b83d10fd..59cba080 100644 --- a/source/glest_game/network/network_message.cpp +++ b/source/glest_game/network/network_message.cpp @@ -182,6 +182,7 @@ NetworkMessageLaunch::NetworkMessageLaunch() { } data.aiAcceptSwitchTeamPercentChance = 0; data.masterserver_admin = -1; + data.masterserver_admin_factionIndex = -1; } NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8 messageType) { @@ -244,6 +245,7 @@ NetworkMessageLaunch::NetworkMessageLaunch(const GameSettings *gameSettings,int8 data.aiAcceptSwitchTeamPercentChance = gameSettings->getAiAcceptSwitchTeamPercentChance(); data.masterserver_admin = gameSettings->getMasterserver_admin(); + data.masterserver_admin_factionIndex = gameSettings->getMasterserver_admin_faction_index(); data.scenario = gameSettings->getScenario(); } @@ -294,6 +296,7 @@ void NetworkMessageLaunch::buildGameSettings(GameSettings *gameSettings) const { gameSettings->setAiAcceptSwitchTeamPercentChance(data.aiAcceptSwitchTeamPercentChance); gameSettings->setMasterserver_admin(data.masterserver_admin); + gameSettings->setMasterserver_admin_faction_index(data.masterserver_admin_factionIndex); gameSettings->setScenario(data.scenario.getString()); } diff --git a/source/glest_game/network/network_message.h b/source/glest_game/network/network_message.h index fb54e64c..9187901b 100644 --- a/source/glest_game/network/network_message.h +++ b/source/glest_game/network/network_message.h @@ -237,6 +237,7 @@ private: int8 aiAcceptSwitchTeamPercentChance; int32 masterserver_admin; + int32 masterserver_admin_factionIndex; NetworkString scenario; }; diff --git a/source/glest_game/network/server_interface.cpp b/source/glest_game/network/server_interface.cpp index 877fd8c1..72622251 100644 --- a/source/glest_game/network/server_interface.cpp +++ b/source/glest_game/network/server_interface.cpp @@ -1296,6 +1296,8 @@ void ServerInterface::update() { sendTextMessage(sMsg,-1, true,""); this->gameSettings.setMasterserver_admin(slots[iFirstConnectedSlot]->getSessionKey()); + this->gameSettings.setMasterserver_admin_faction_index(slots[iFirstConnectedSlot]->getPlayerIndex()); + this->broadcastGameSetup(&this->gameSettings); } }