diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index 108bfcaf1..a6a6350b2 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -1467,6 +1467,7 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy) m_MapDetailsPresent = true; (void)MapSize; + str_copy(m_aPreviousMapDetailsName, m_aMapDetailsName); str_copy(m_aMapDetailsName, pMap); m_MapDetailsSha256 = *pMapSha256; m_MapDetailsCrc = MapCrc; @@ -1522,6 +1523,12 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy) if(m_DummyConnected) { + if(str_comp(m_aMapDetailsName, m_aPreviousMapDetailsName) == 0) + { + m_DummyReconnectOnLoad = true; + m_DummySwapOnReconnect = g_Config.m_ClDummy == 1 ? false : true; + } + DummyDisconnect(0); } @@ -1652,6 +1659,11 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy) else if(Conn == CONN_MAIN && (pPacket->m_Flags & NET_CHUNKFLAG_VITAL) != 0 && Msg == NETMSG_CON_READY) { GameClient()->OnConnected(); + if(m_DummyReconnectOnLoad) + { + m_DummyReconnectOnLoad = false; + DummyConnect(); + } } else if(Conn == CONN_DUMMY && Msg == NETMSG_CON_READY) { @@ -2746,6 +2758,16 @@ void CClient::Update() } } + if(m_DummySwapOnReconnect && g_Config.m_ClDummy == 1) + { + m_DummySwapOnReconnect = false; + g_Config.m_ClDummy = 0; + } + else if(!m_DummyConnected && m_DummySwapOnReconnect) + { + m_DummySwapOnReconnect = false; + } + m_LastDummy = (bool)g_Config.m_ClDummy; } diff --git a/src/engine/client/client.h b/src/engine/client/client.h index b272f8eaa..497dd135e 100644 --- a/src/engine/client/client.h +++ b/src/engine/client/client.h @@ -156,6 +156,7 @@ class CClient : public IClient, public CDemoPlayer::IListener bool m_MapDetailsPresent = false; char m_aMapDetailsName[256] = ""; + char m_aPreviousMapDetailsName[256] = ""; int m_MapDetailsCrc = 0; SHA256_DIGEST m_MapDetailsSha256 = SHA256_ZEROED; char m_aMapDetailsUrl[256] = ""; @@ -182,6 +183,8 @@ class CClient : public IClient, public CDemoPlayer::IListener bool m_DummyConnecting = false; bool m_DummyConnected = false; float m_LastDummyConnectTime = 0.0f; + bool m_DummyReconnectOnLoad = false; + bool m_DummySwapOnReconnect = false; // graphs CGraph m_InputtimeMarginGraph;