Skip to content

Commit

Permalink
Fix 0.7 clients not being able to join after slot change
Browse files Browse the repository at this point in the history
If the player slots update the 0.7 clients have to be informed
about it. Otherwise the client can block the join button
if the outdated playerslots are filled already.
  • Loading branch information
ChillerDragon committed Sep 6, 2023
1 parent 3ff7997 commit 5a8e67b
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/engine/server/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3810,6 +3810,7 @@ void CServer::RegisterCommands()

Console()->Chain("sv_name", ConchainSpecialInfoupdate, this);
Console()->Chain("password", ConchainSpecialInfoupdate, this);
Console()->Chain("sv_spectator_slots", ConchainSpecialInfoupdate, this);

Console()->Chain("sv_max_clients_per_ip", ConchainMaxclientsperipUpdate, this);
Console()->Chain("access_level", ConchainCommandAccessUpdate, this);
Expand Down
35 changes: 24 additions & 11 deletions src/game/server/gamecontext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -641,17 +641,14 @@ void CGameContext::SendMotd(int ClientID)

void CGameContext::SendSettings(int ClientID)
{
if(Server()->IsSixup(ClientID))
{
protocol7::CNetMsg_Sv_ServerSettings Msg;
Msg.m_KickVote = g_Config.m_SvVoteKick;
Msg.m_KickMin = g_Config.m_SvVoteKickMin;
Msg.m_SpecVote = g_Config.m_SvVoteSpectate;
Msg.m_TeamLock = 0;
Msg.m_TeamBalance = 0;
Msg.m_PlayerSlots = g_Config.m_SvMaxClients - g_Config.m_SvSpectatorSlots;
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_NORECORD, ClientID);
}
protocol7::CNetMsg_Sv_ServerSettings Msg;
Msg.m_KickVote = g_Config.m_SvVoteKick;
Msg.m_KickMin = g_Config.m_SvVoteKickMin;
Msg.m_SpecVote = g_Config.m_SvVoteSpectate;
Msg.m_TeamLock = 0;
Msg.m_TeamBalance = 0;
Msg.m_PlayerSlots = g_Config.m_SvMaxClients - g_Config.m_SvSpectatorSlots;
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_NORECORD, ClientID);
}

void CGameContext::SendBroadcast(const char *pText, int ClientID, bool IsImportant)
Expand Down Expand Up @@ -3324,6 +3321,16 @@ void CGameContext::ConchainSpecialMotdupdate(IConsole::IResult *pResult, void *p
}
}

void CGameContext::ConchainSettingUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
{
pfnCallback(pResult, pCallbackUserData);
if(pResult->NumArguments())
{
CGameContext *pSelf = (CGameContext *)pUserData;
pSelf->SendSettings(-1);
}
}

void CGameContext::OnConsoleInit()
{
m_pServer = Kernel()->RequestInterface<IServer>();
Expand Down Expand Up @@ -3363,6 +3370,12 @@ void CGameContext::OnConsoleInit()

Console()->Chain("sv_motd", ConchainSpecialMotdupdate, this);

Console()->Chain("sv_vote_kick", ConchainSettingUpdate, this);
Console()->Chain("sv_vote_kick_min", ConchainSettingUpdate, this);
Console()->Chain("sv_vote_spectate", ConchainSettingUpdate, this);
Console()->Chain("sv_spectator_slots", ConchainSettingUpdate, this);
Console()->Chain("sv_max_clients", ConchainSettingUpdate, this);

#define CONSOLE_COMMAND(name, params, flags, callback, userdata, help) m_pConsole->Register(name, params, flags, callback, userdata, help);
#include <game/ddracecommands.h>
#define CHAT_COMMAND(name, params, flags, callback, userdata, help) m_pConsole->Register(name, params, flags, callback, userdata, help);
Expand Down
1 change: 1 addition & 0 deletions src/game/server/gamecontext.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ class CGameContext : public IGameServer
static void ConDrySave(IConsole::IResult *pResult, void *pUserData);
static void ConDumpAntibot(IConsole::IResult *pResult, void *pUserData);
static void ConchainSpecialMotdupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
static void ConchainSettingUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
static void ConDumpLog(IConsole::IResult *pResult, void *pUserData);

void Construct(int Resetting);
Expand Down

0 comments on commit 5a8e67b

Please sign in to comment.