#include <sdktools>
#include <cstrike>
#include <morecolors>
bool bBlock[MAXPLAYERS+1] = {false, ...}
Handle hQueryCvarsTimer;
public void OnMapStart() {
hQueryCvarsTimer = CreateTimer(10.0, OnQueryTimer, _, TIMER_REPEAT);
}
public void OnMapEnd() {
delete hQueryCvarsTimer;
}
public Action OnQueryTimer(Handle timer) {
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i)) {
QueryCvars(i);
}
}
public void OnClientPutInServer(int client) {
QueryCvars(client);
}
public void CvarResults(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvar, const char[] cvarvalue, any value) {
if(result == ConVarQuery_Okay) {
if(cvar[3] == 'i') {
if(StringToFloat(cvarvalue) < 0.031) BlockClient(client, cvar, cvarvalue);
else UnBlockClient(client);
}
else if(cvar[0] == 'c') {
if(StringToFloat(cvarvalue) < 66) BlockClient(client, cvar, cvarvalue);
else UnBlockClient(client);
}
else if(cvar[0] == 'r') {
if(StringToInt(cvarvalue) < 25000) BlockClient(client, cvar, cvarvalue);
else UnBlockClient(client);
}
else if(cvar[0] == 'u') {
if(StringToInt(cvarvalue) < 66) BlockClient(client, cvar, cvarvalue);
else UnBlockClient(client);
}
}
}
void QueryCvars(int client) {
QueryClientConVar(client, "cl_interp", CvarResults);
QueryClientConVar(client, "cl_cmdrate", CvarResults);
QueryClientConVar(client, "rate", CvarResults);
QueryClientConVar(client, "cl_updaterate", CvarResults);
}
void BlockClient(int client, const char[] cvar, const char[] cvarvalue) {
FakeClientCommand(client, "cl_predict 0");
bBlock[client] = true;
CPrintToChat(client, "{white}[{springgreen}РЕЙТЫ{white}] {red}Значение команды {blueviolet}\"%s\" {red}должен быть выше {darkgreen}\"%s\".", cvar, cvarvalue);
CPrintToChat(client, "{white}[{springgreen}РЕЙТЫ{white}] {magenta}Что-бы продолжить играть на сервере без лагов, измените значения команд!");
}
void UnBlockClient(int client) {
if(bBlock[client]) {
FakeClientCommand(client, "cl_predict 1");
bBlock[client] = false;
}
}