diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp index bd019c839..e5f9b701b 100644 --- a/server/CVCMIServer.cpp +++ b/server/CVCMIServer.cpp @@ -176,7 +176,7 @@ void CVCMIServer::run() } } - while(state == EServerState::LOBBY) + while(state == EServerState::LOBBY || state == EServerState::GAMEPLAY_STARTING) boost::this_thread::sleep(boost::posix_time::milliseconds(50)); logNetwork->info("Thread handling connections ended"); diff --git a/server/CVCMIServer.h b/server/CVCMIServer.h index 0dd83da55..2ef4dfef6 100644 --- a/server/CVCMIServer.h +++ b/server/CVCMIServer.h @@ -32,6 +32,7 @@ class CBaseForGHApply; enum class EServerState : ui8 { LOBBY, + GAMEPLAY_STARTING, GAMEPLAY, GAMEPLAY_ENDED, SHUTDOWN diff --git a/server/NetPacksLobbyServer.cpp b/server/NetPacksLobbyServer.cpp index 728fe213a..ce6f5977b 100644 --- a/server/NetPacksLobbyServer.cpp +++ b/server/NetPacksLobbyServer.cpp @@ -115,6 +115,9 @@ bool LobbyChatMessage::checkClientPermissions(CVCMIServer * srv) const bool LobbySetMap::applyOnServer(CVCMIServer * srv) { + if(srv->state != EServerState::LOBBY) + return false; + srv->updateStartInfoOnMapChange(mapInfo, mapGenOpts); return true; } @@ -172,6 +175,7 @@ bool LobbyStartGame::applyOnServer(CVCMIServer * srv) return false; } // Server will prepare gamestate and we announce StartInfo to clients + srv->state = EServerState::GAMEPLAY_STARTING; srv->prepareToStartGame(); initializedStartInfo = std::make_shared(*srv->gh->getStartInfo(true)); return true;