diff --git a/src/engine/server/main.cpp b/src/engine/server/main.cpp index dc7b874cfe2..5904b3245c9 100644 --- a/src/engine/server/main.cpp +++ b/src/engine/server/main.cpp @@ -167,6 +167,7 @@ int main(int argc, const char **argv) if(argc > 1) pConsole->ParseArguments(argc - 1, &argv[1]); + pConfigManager->SetReadOnly("sv_max_clients", true); pConfigManager->SetReadOnly("sv_test_cmds", true); pConfigManager->SetReadOnly("sv_rescue", true); diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp index ab641ddc6e0..c55be134eb0 100644 --- a/src/engine/server/server.cpp +++ b/src/engine/server/server.cpp @@ -1527,7 +1527,7 @@ void CServer::ProcessClientPacket(CNetChunk *pPacket) } // reserved slot - if(ClientId >= Config()->m_SvMaxClients - Config()->m_SvReservedSlots && !CheckReservedSlotAuth(ClientId, pPassword)) + if(ClientId >= MaxClients() - Config()->m_SvReservedSlots && !CheckReservedSlotAuth(ClientId, pPassword)) { m_NetServer.Drop(ClientId, "This server is full"); return; @@ -2624,10 +2624,11 @@ void CServer::UpdateDebugDummies(bool ForceDisconnect) if(m_PreviousDebugDummies == g_Config.m_DbgDummies && !ForceDisconnect) return; + g_Config.m_DbgDummies = clamp(g_Config.m_DbgDummies, 0, MaxClients()); for(int DummyIndex = 0; DummyIndex < maximum(m_PreviousDebugDummies, g_Config.m_DbgDummies); ++DummyIndex) { const bool AddDummy = !ForceDisconnect && DummyIndex < g_Config.m_DbgDummies; - const int ClientId = MAX_CLIENTS - DummyIndex - 1; + const int ClientId = MaxClients() - DummyIndex - 1; if(AddDummy && m_aClients[ClientId].m_State == CClient::STATE_EMPTY) { NewClientCallback(ClientId, this, false); diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index e8a9837626a..ec8b0fb26a8 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -716,7 +716,7 @@ void CGameContext::SendSettings(int ClientId) const 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; + Msg.m_PlayerSlots = Server()->MaxClients() - g_Config.m_SvSpectatorSlots; Server()->SendPackMsg(&Msg, MSGFLAG_VITAL | MSGFLAG_NORECORD, ClientId); } @@ -3573,7 +3573,6 @@ void CGameContext::OnConsoleInit() 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); RegisterDDRaceCommands(); RegisterChatCommands();