diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index 9bda9978d96..649bf6934b7 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -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); diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index adb4129932b..969e94fc30d 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -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) @@ -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(); @@ -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 #define CHAT_COMMAND(name, params, flags, callback, userdata, help) m_pConsole->Register(name, params, flags, callback, userdata, help); diff --git a/src/game/server/gamecontext.h b/src/game/server/gamecontext.h index fa3f695126c..6acac331333 100644 --- a/src/game/server/gamecontext.h +++ b/src/game/server/gamecontext.h @@ -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);