This commit is contained in:
KebsCS 2024-09-12 03:12:40 +02:00 committed by GitHub
commit 5e255494f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 36 additions and 4 deletions

View file

@ -163,7 +163,7 @@ public:
// dummy // dummy
virtual void DummyDisconnect(const char *pReason) = 0; virtual void DummyDisconnect(const char *pReason) = 0;
virtual void DummyConnect() = 0; virtual void DummyConnect(bool Force = false) = 0;
virtual bool DummyConnected() const = 0; virtual bool DummyConnected() const = 0;
virtual bool DummyConnecting() const = 0; virtual bool DummyConnecting() const = 0;
virtual bool DummyConnectingDelayed() const = 0; virtual bool DummyConnectingDelayed() const = 0;

View file

@ -707,7 +707,7 @@ bool CClient::DummyConnectingDelayed() const
return !DummyConnected() && !DummyConnecting() && m_LastDummyConnectTime > 0.0f && m_LastDummyConnectTime + 5.0f > GlobalTime(); return !DummyConnected() && !DummyConnecting() && m_LastDummyConnectTime > 0.0f && m_LastDummyConnectTime + 5.0f > GlobalTime();
} }
void CClient::DummyConnect() void CClient::DummyConnect(bool Force)
{ {
if(m_aNetClient[CONN_MAIN].State() != NETSTATE_ONLINE) if(m_aNetClient[CONN_MAIN].State() != NETSTATE_ONLINE)
{ {
@ -725,7 +725,7 @@ void CClient::DummyConnect()
log_info("client", "Dummy is already connected/connecting."); log_info("client", "Dummy is already connected/connecting.");
return; return;
} }
if(DummyConnectingDelayed()) if(!Force && DummyConnectingDelayed())
{ {
log_info("client", "Wait before connecting dummy again."); log_info("client", "Wait before connecting dummy again.");
return; return;
@ -1649,9 +1649,24 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
} }
} }
} }
else if(Conn == CONN_MAIN && (pPacket->m_Flags & NET_CHUNKFLAG_VITAL) != 0 && Msg == NETMSG_MAP_RELOAD)
{
if(m_DummyConnected)
{
m_DummyReconnectOnLoad = true;
m_DummySwapOnReconnect = g_Config.m_ClDummy == 1 ? false : true;
}
else
m_DummySwapOnReconnect = false;
}
else if(Conn == CONN_MAIN && (pPacket->m_Flags & NET_CHUNKFLAG_VITAL) != 0 && Msg == NETMSG_CON_READY) else if(Conn == CONN_MAIN && (pPacket->m_Flags & NET_CHUNKFLAG_VITAL) != 0 && Msg == NETMSG_CON_READY)
{ {
GameClient()->OnConnected(); GameClient()->OnConnected();
if(m_DummyReconnectOnLoad)
{
m_DummyReconnectOnLoad = false;
DummyConnect(true);
}
} }
else if(Conn == CONN_DUMMY && Msg == NETMSG_CON_READY) else if(Conn == CONN_DUMMY && Msg == NETMSG_CON_READY)
{ {
@ -2746,6 +2761,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; m_LastDummy = (bool)g_Config.m_ClDummy;
} }

View file

@ -182,6 +182,8 @@ class CClient : public IClient, public CDemoPlayer::IListener
bool m_DummyConnecting = false; bool m_DummyConnecting = false;
bool m_DummyConnected = false; bool m_DummyConnected = false;
float m_LastDummyConnectTime = 0.0f; float m_LastDummyConnectTime = 0.0f;
bool m_DummyReconnectOnLoad = false;
bool m_DummySwapOnReconnect = false;
// graphs // graphs
CGraph m_InputtimeMarginGraph; CGraph m_InputtimeMarginGraph;
@ -319,7 +321,7 @@ public:
void Disconnect() override; void Disconnect() override;
void DummyDisconnect(const char *pReason) override; void DummyDisconnect(const char *pReason) override;
void DummyConnect() override; void DummyConnect(bool Force = false) override;
bool DummyConnected() const override; bool DummyConnected() const override;
bool DummyConnecting() const override; bool DummyConnecting() const override;
bool DummyConnectingDelayed() const override; bool DummyConnectingDelayed() const override;

View file

@ -3510,6 +3510,8 @@ void CServer::ConStopRecord(IConsole::IResult *pResult, void *pUser)
void CServer::ConMapReload(IConsole::IResult *pResult, void *pUser) void CServer::ConMapReload(IConsole::IResult *pResult, void *pUser)
{ {
((CServer *)pUser)->m_MapReload = true; ((CServer *)pUser)->m_MapReload = true;
CMsgPacker Msg(NETMSG_MAP_RELOAD, true);
((CServer *)pUser)->SendMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_FLUSH, -1);
} }
void CServer::ConLogout(IConsole::IResult *pResult, void *pUser) void CServer::ConLogout(IConsole::IResult *pResult, void *pUser)

View file

@ -35,3 +35,4 @@ UUID(NETMSG_CHECKSUM_ERROR, "checksum-error@ddnet.tw")
UUID(NETMSG_REDIRECT, "redirect@ddnet.org") UUID(NETMSG_REDIRECT, "redirect@ddnet.org")
UUID(NETMSG_RCON_CMD_GROUP_START, "rcon-cmd-group-start@ddnet.org") UUID(NETMSG_RCON_CMD_GROUP_START, "rcon-cmd-group-start@ddnet.org")
UUID(NETMSG_RCON_CMD_GROUP_END, "rcon-cmd-group-end@ddnet.org") UUID(NETMSG_RCON_CMD_GROUP_END, "rcon-cmd-group-end@ddnet.org")
UUID(NETMSG_MAP_RELOAD, "map-reload@ddnet.org")

View file

@ -3237,6 +3237,8 @@ void CGameContext::ConHotReload(IConsole::IResult *pResult, void *pUserData)
pSelf->m_apSavedTeams[pSelf->m_aTeamMapping[i]]->Save(pSelf, pSelf->m_aTeamMapping[i], true, true); pSelf->m_apSavedTeams[pSelf->m_aTeamMapping[i]]->Save(pSelf, pSelf->m_aTeamMapping[i], true, true);
} }
pSelf->Server()->ReloadMap(); pSelf->Server()->ReloadMap();
CMsgPacker Msg(NETMSG_MAP_RELOAD, true);
pSelf->Server()->SendMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_FLUSH, -1);
} }
void CGameContext::ConAddVote(IConsole::IResult *pResult, void *pUserData) void CGameContext::ConAddVote(IConsole::IResult *pResult, void *pUserData)