diff --git a/source/network/NetClient.cpp b/source/network/NetClient.cpp index a41e45ec79..aa23532ad0 100644 --- a/source/network/NetClient.cpp +++ b/source/network/NetClient.cpp @@ -105,6 +105,7 @@ CNetClient::CNetClient(CGame* game, bool isLocalClient) : AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CHAT, NCS_JOIN_SYNCING, (void*)&OnChat, context); AddTransition(NCS_JOIN_SYNCING, (uint)NMT_GAME_SETUP, NCS_JOIN_SYNCING, (void*)&OnGameSetup, context); AddTransition(NCS_JOIN_SYNCING, (uint)NMT_PLAYER_ASSIGNMENT, NCS_JOIN_SYNCING, (void*)&OnPlayerAssignment, context); + AddTransition(NCS_JOIN_SYNCING, (uint)NMT_KICKED, NCS_JOIN_SYNCING, (void*)&OnKicked, context); AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CLIENT_TIMEOUT, NCS_JOIN_SYNCING, (void*)&OnClientTimeout, context); AddTransition(NCS_JOIN_SYNCING, (uint)NMT_CLIENT_PERFORMANCE, NCS_JOIN_SYNCING, (void*)&OnClientPerformance, context); AddTransition(NCS_JOIN_SYNCING, (uint)NMT_GAME_START, NCS_JOIN_SYNCING, (void*)&OnGameStart, context); @@ -115,6 +116,7 @@ CNetClient::CNetClient(CGame* game, bool isLocalClient) : AddTransition(NCS_LOADING, (uint)NMT_CHAT, NCS_LOADING, (void*)&OnChat, context); AddTransition(NCS_LOADING, (uint)NMT_GAME_SETUP, NCS_LOADING, (void*)&OnGameSetup, context); AddTransition(NCS_LOADING, (uint)NMT_PLAYER_ASSIGNMENT, NCS_LOADING, (void*)&OnPlayerAssignment, context); + AddTransition(NCS_LOADING, (uint)NMT_KICKED, NCS_LOADING, (void*)&OnKicked, context); AddTransition(NCS_LOADING, (uint)NMT_CLIENT_TIMEOUT, NCS_LOADING, (void*)&OnClientTimeout, context); AddTransition(NCS_LOADING, (uint)NMT_CLIENT_PERFORMANCE, NCS_LOADING, (void*)&OnClientPerformance, context); AddTransition(NCS_LOADING, (uint)NMT_LOADED_GAME, NCS_INGAME, (void*)&OnLoadedGame, context); diff --git a/source/network/NetServer.cpp b/source/network/NetServer.cpp index 54c81fcc88..38680d8efd 100644 --- a/source/network/NetServer.cpp +++ b/source/network/NetServer.cpp @@ -808,7 +808,9 @@ void CNetServerWorker::KickPlayer(const CStrW& playerName, const bool ban) CKickedMessage kickedMessage; kickedMessage.m_Name = playerName; kickedMessage.m_Ban = ban; - Broadcast(&kickedMessage); + for (CNetServerSession* session : m_Sessions) + if (session->GetCurrState() > NSS_AUTHENTICATE) + session->SendMessage(&kickedMessage); } void CNetServerWorker::AssignPlayer(int playerID, const CStr& guid) @@ -1321,10 +1323,8 @@ bool CNetServerWorker::OnClientPaused(void* context, CFsmEvent* event) void CNetServerWorker::CheckGameLoadStatus(CNetServerSession* changedSession) { for (const CNetServerSession* session : m_Sessions) - { if (session != changedSession && session->GetCurrState() != NSS_INGAME) return; - } CLoadedGameMessage loaded; loaded.m_CurrentTurn = 0;