diff --git a/addons/sourcemod/plugins/optional/ratemonitor.smx b/addons/sourcemod/plugins/optional/ratemonitor.smx index 139dee24b..8ce15b3c7 100644 Binary files a/addons/sourcemod/plugins/optional/ratemonitor.smx and b/addons/sourcemod/plugins/optional/ratemonitor.smx differ diff --git a/addons/sourcemod/plugins/optional/specrates.smx b/addons/sourcemod/plugins/optional/specrates.smx index 577ae82b7..a6fee3a2b 100644 Binary files a/addons/sourcemod/plugins/optional/specrates.smx and b/addons/sourcemod/plugins/optional/specrates.smx differ diff --git a/addons/sourcemod/scripting/ratemonitor.sp b/addons/sourcemod/scripting/ratemonitor.sp index e87f2ed4e..e9fdd5682 100644 --- a/addons/sourcemod/scripting/ratemonitor.sp +++ b/addons/sourcemod/scripting/ratemonitor.sp @@ -143,7 +143,7 @@ void OnTeamChange(Event hEvent, const char[] name, bool dontBroadcast) Action OnTeamChangeDelay(Handle hTimer, any userid) { int client = GetClientOfUserId(userid); - if (client > 0) { + if (client > 0 && IsClientInGame(client) && !IsFakeClient(client)) { RegisterSettings(client); } @@ -152,7 +152,7 @@ Action OnTeamChangeDelay(Handle hTimer, any userid) public void OnClientSettingsChanged(int client) { - if (IsValidEntity(client) && !IsFakeClient(client)) { + if (client > 0 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client)) { RegisterSettings(client); } } @@ -178,6 +178,10 @@ Action ListRates(int client, int args) void RegisterSettings(int client) { + if (client <= 0 || client > MaxClients || !IsClientInGame(client) || IsFakeClient(client)) { + return; + } + if (GetClientTeam(client) < L4D2Team_Survivor) { return; } diff --git a/addons/sourcemod/scripting/specrates.sp b/addons/sourcemod/scripting/specrates.sp index 50b2e0e97..936aeb2e1 100644 --- a/addons/sourcemod/scripting/specrates.sp +++ b/addons/sourcemod/scripting/specrates.sp @@ -132,12 +132,18 @@ public void OnClientPutInServer(int client) void OnTeamChange(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(event.GetInt("userid")); - CreateTimer(10.0, TimerAdjustRates, client, TIMER_FLAG_NO_MAPCHANGE); + if (event.GetBool("disconnect")) + return; + + CreateTimer(10.0, TimerAdjustRates, event.GetInt("userid"), TIMER_FLAG_NO_MAPCHANGE); } -Action TimerAdjustRates(Handle timer, any client) +Action TimerAdjustRates(Handle timer, any userid) { + int client = GetClientOfUserId(userid); + if (!IsValidClient(client)) + return Plugin_Handled; + AdjustRates(client); return Plugin_Handled; } @@ -229,4 +235,4 @@ stock L4DTeam L4D_GetClientTeam(int client) { int team = GetClientTeam(client); return view_as(team); -} \ No newline at end of file +}