From 36542327b0d69f2d66ed912bc47d766c4f59cfb7 Mon Sep 17 00:00:00 2001 From: KebsCS Date: Fri, 6 Sep 2024 22:05:37 +0200 Subject: [PATCH] Fix dummy disconnecting on hot reload --- src/engine/client/client.cpp | 22 ++++++++++++++++++++++ src/engine/client/client.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp index 8f416bc97..9fd519155 100644 --- a/src/engine/client/client.cpp +++ b/src/engine/client/client.cpp @@ -1470,6 +1470,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; @@ -1525,6 +1526,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); } @@ -1655,6 +1662,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) { @@ -2747,6 +2759,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 844f38036..cb46452d0 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;