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..df8c35804 100644 --- a/addons/sourcemod/scripting/specrates.sp +++ b/addons/sourcemod/scripting/specrates.sp @@ -132,14 +132,16 @@ 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); + RequestFrame(OnNextFrame_AdjustRates, event.GetInt("userid")); } -Action TimerAdjustRates(Handle timer, any client) +void OnNextFrame_AdjustRates(any userid) { + int client = GetClientOfUserId(userid); + if (!IsValidClient(client)) + return; + AdjustRates(client); - return Plugin_Handled; } public void OnClientSettingsChanged(int client)