Fixed a million bugs in reserved slots plugin - should be perfect now (I hope)

Finalized KickClient native

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401004
This commit is contained in:
Scott Ehlert 2007-06-22 03:43:00 +00:00
parent 58eedf6226
commit db83c8e2d9
2 changed files with 22 additions and 13 deletions

View File

@ -933,9 +933,7 @@ static cell_t KickClient(IPluginContext *pContext, const cell_t *params)
if (pPlayer->IsFakeClient()) if (pPlayer->IsFakeClient())
{ {
char kickcmd[64]; char kickcmd[40];
/* :TODO: Define BotKickCmd in core.games.txt so that "bot_kick" can be used in CS:S */
UTIL_Format(kickcmd, sizeof(kickcmd), "kick %s\n", pPlayer->GetName()); UTIL_Format(kickcmd, sizeof(kickcmd), "kick %s\n", pPlayer->GetName());
engine->ServerCommand(kickcmd); engine->ServerCommand(kickcmd);

View File

@ -59,7 +59,7 @@ public OnConfigsExecuted()
{ {
if (GetConVarBool(sm_hide_slots)) if (GetConVarBool(sm_hide_slots))
{ {
SetConVarInt(sv_visiblemaxplayers, g_MaxClients - GetConVarInt(sm_reserved_slots)); SetVisibleMaxSlots(GetClientCount(false), g_MaxClients - GetConVarInt(sm_reserved_slots));
} }
} }
@ -73,11 +73,11 @@ public OnClientAuthorized(client, const String:auth[])
new limit = g_MaxClients - reserved; new limit = g_MaxClients - reserved;
new flags = GetUserFlagBits(client); new flags = GetUserFlagBits(client);
if (flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION || clients <= limit) if (clients <= limit || IsFakeClient(client) || flags & ADMFLAG_ROOT || flags & ADMFLAG_RESERVATION)
{ {
if (GetConVarBool(sm_hide_slots)) if (GetConVarBool(sm_hide_slots))
{ {
SetConVarInt(sv_visiblemaxplayers, (clients == g_MaxClients) ? g_MaxClients : ++limit); SetVisibleMaxSlots(clients, limit);
} }
return; return;
@ -88,13 +88,24 @@ public OnClientAuthorized(client, const String:auth[])
} }
} }
public OnClientDisconnect(client) public OnClientDisconnect_Post(client)
{ {
if (GetConVarBool(sm_hide_slots)) if (GetConVarBool(sm_hide_slots))
{ {
new clients = GetClientCount(false); SetVisibleMaxSlots(GetClientCount(false), g_MaxClients - GetConVarInt(sm_reserved_slots));
new limit = g_MaxClients - GetConVarInt(sm_reserved_slots);
SetConVarInt(sv_visiblemaxplayers, (clients == g_MaxClients) ? g_MaxClients : limit);
} }
} }
SetVisibleMaxSlots(clients, limit)
{
new num = clients + 1;
if (clients == g_MaxClients || clients > limit)
{
num = g_MaxClients;
} else if (clients < limit) {
num = limit;
}
SetConVarInt(sv_visiblemaxplayers, num);
}