#include <sourcemod>
new Handle:hRate = INVALID_HANDLE;
new Handle:hCmdRate = INVALID_HANDLE;
new Handle:hUpdateRate = INVALID_HANDLE;
new Handle:hMsg = INVALID_HANDLE;
new String:CmdString[192],
String:Msg[192];
public Plugin:myinfo =
{
name = "Forcerate",
author = "Lomaka",
description = "Automatically corrects rates of client",
version = "2.1",
url = "http://bisoftgames.♥♥♥♥.ru"
}
public OnPluginStart()
{
hRate = CreateConVar("sm_rate", "25000", "Forcerate default rate.", FCVAR_PLUGIN, true, 10.0, true, 100000.0);
hCmdRate = CreateConVar("sm_cmdrate", "33", "Forcerate default cl_cmdrate.", FCVAR_PLUGIN, true, 10.0, true, 1000.0);
hUpdateRate = CreateConVar("sm_updaterate", "33", "Forcerate default cl_updaterate.", FCVAR_PLUGIN, true, 10.0, true, 1000.0);
hMsg = CreateConVar("sm_msg", "http://bisoftgames.♥♥♥♥.ru/Rates.html", "URL to Message file.", FCVAR_PLUGIN);
HookEvent("player_spawn", PlayerSpawn, EventHookMode_Post);
AutoExecConfig(true, "forcerate");
}
public OnConfigsExecuted()
{
Format(CmdString, sizeof(CmdString), "rate %d;cl_cmdrate %d;cl_updaterate %d", GetConVarInt(hRate), GetConVarInt(hCmdRate), GetConVarInt(hUpdateRate));
GetConVarString(hMsg, Msg, sizeof(Msg));
}
public PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
new client = GetClientOfUserId(GetEventInt(event,"userid"));
if(client != 0 && !IsFakeClient(client) && GetClientTeam(client))
{
CheckRates(client);
}
}
CheckRates(client)
{
QueryClientConVar(client, "rate", ConVarQueryFinished:ClientConVar, client);
QueryClientConVar(client, "cl_cmdrate", ConVarQueryFinished:ClientConVar, client);
QueryClientConVar(client, "cl_updaterate", ConVarQueryFinished:ClientConVar, client);
}
public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
new String:rate[10],
String:cmdrate[10],
String:updaterate[10];
GetConVarString(hRate, rate, sizeof(rate));
GetConVarString(hCmdRate, cmdrate, sizeof(cmdrate));
GetConVarString(hUpdateRate, updaterate, sizeof(updaterate));
if(StrEqual("rate",cvarName,false))
{
if(!StrEqual(rate,cvarValue,false))
{
EnforceRates(client);
}
}
if(StrEqual("cl_cmdrate",cvarName,false))
{
if(!StrEqual(cmdrate,cvarValue,false))
{
EnforceRates(client)
}
}
if(StrEqual("cl_updaterate",cvarName,false))
{
if(!StrEqual(updaterate,cvarValue,false))
{
EnforceRates(client);
}
}
}
EnforceRates(client)
{
new Handle:ForcerateMsg = CreateKeyValues("data");
KvSetString(ForcerateMsg, "title", "Forcerate");
KvSetString(ForcerateMsg, "type", "2");
KvSetString(ForcerateMsg, "msg", Msg);
KvSetString(ForcerateMsg, "cmd", CmdString);
ShowVGUIPanel(client, "info", ForcerateMsg);
CloseHandle(ForcerateMsg);
}
public OnClientSettingsChanged(client)
{
if(IsClientInGame(client) && GetClientTeam(client))
{
CheckRates(client);
}
}