Это не команда, а переменная. И она серверная, а не клиентская.Здравствуйте. Как можно отследить значение клиентской команды, например, sv_logecho ?
отследить значение клиентской команды, например, sv_logecho
public OnPluginStart()
{
decl Handle:convar;
if ((convar = FindConVar("sv_logecho")) == INVALID_HANDLE) SetFailState("Данного СЕРВЕРНОГО квара не существует (не найден)!"); //Квары ПЛАГИНОВ обычно получают позже.
//Начинаем отлов любых изменений квара выше.
HookConVarChange(convar, ChangeCvar);
}
public ChangeCvar(Handle:convar, const String:oldValue[], const String:newValue[])
{
// convar - Handle квара;
// oldValue - старое строчное значение квара;
// newValue - новое строковое значение квара.
}
А разве ConVar поможет отследить значение клиентских команд? Мне нужно узнать конкретно sensetivityPHP:public OnPluginStart() { decl Handle:convar; if ((convar = FindConVar("sv_logecho")) == INVALID_HANDLE) SetFailState("Данного СЕРВЕРНОГО квара не существует (не найден)!"); //Квары ПЛАГИНОВ обычно получают позже. //Начинаем отлов любых изменений квара выше. HookConVarChange(convar, ChangeCvar); } public ChangeCvar(Handle:convar, const String:oldValue[], const String:newValue[]) { // convar - Handle квара; // oldValue - старое строчное значение квара; // newValue - новое строковое значение квара. }
sv_logecho
Про что спрошено, на то и дано. Мы же не телепаты, квар дан просто для примера или действительно не знаешь, что он серверный.она серверная, а не клиентская
Спасибо, помогло. Но команда работает некорректно. Если предварительно перед входом написать sv_logecho 0, а потом сразу sv_logecho 1, и зайти на сервер, то проверка не сработает. Вот код:Вот так
PHP:QueryClientConVar(client, "sv_logecho", GetClientConVar); public GetClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) { }
CreateTimer(2.0, CommandsCheck, client);
CreateTimer(2.0, CommandsCheck, client, TIMER_REPEAT);
А можно подробнее как это сделать? Я не силен в SPКвар надо проверять постоянно. "Хук" то одноразовый.PHP:CreateTimer(2.0, CommandsCheck, client, TIMER_REPEAT);
Добавил рипит таймера теперь сервер крашится каждые 2сКвар надо проверять постоянно. "Хук" то одноразовый.PHP:CreateTimer(2.0, CommandsCheck, client, TIMER_REPEAT);
#pragma semicolon 1
new Handle:g_hTimer;
public OnMapStart()
{
g_hTimer = CreateTimer(5.0, CheckPlayerCvar, _, TIMER_REPEAT);
}
public OnMapEnd()
{
KillTimer(g_hTimer);
}
public Action CheckPlayerCvar(Handle timer)
{
for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i))
{
QueryClientConVar(i, "sv_logecho", ConVarQueryFinished:ClientConVar);
QueryClientConVar(i, "sv_logflush", ConVarQueryFinished:ClientConVar);
}
}
public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
new cvarInt = StringToInt(cvarValue);
if(StrEqual(cvarName,"sv_logecho") && cvarInt == 1)
{
KickClient(client, "Установите значение sv_logecho 1");
}
if(StrEqual(cvarName,"sv_logflush") && cvarInt == 1)
{
KickClient(client, "Установите значение sv_logflush 1");
}
}
Все же плохая была идея с таймером, сервер перегружается вплоть до лаговА одним таймером не лучше будет?
PHP:#pragma semicolon 1 new Handle:g_hTimer; public OnMapStart() { g_hTimer = CreateTimer(5.0, CheckPlayerCvar, _, TIMER_REPEAT); } public OnMapEnd() { KillTimer(g_hTimer); } public Action CheckPlayerCvar(Handle timer) { for(new i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) { QueryClientConVar(i, "sv_logecho", ConVarQueryFinished:ClientConVar); QueryClientConVar(i, "sv_logflush", ConVarQueryFinished:ClientConVar); } } public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) { new cvarInt = StringToInt(cvarValue); if(StrEqual(cvarName,"sv_logecho") && cvarInt == 1) { KickClient(client, "Установите значение sv_logecho 1"); } if(StrEqual(cvarName,"sv_logflush") && cvarInt == 1) { KickClient(client, "Установите значение sv_logflush 1"); } }
Попробуй так:сервер перегружается вплоть до лагов
public OnPluginStart() CreateTimer(5.0, CheckPlayerCvar, _, TIMER_REPEAT);
public Action:CheckPlayerCvar(Handle:timer)
{
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
QueryClientConVar(i, "sv_logecho", ClientConVar);
QueryClientConVar(i, "sv_logflush", ClientConVar);
}
}
return Plugin_Continue;
}
public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
if (result != ConVarQuery_Okay) SetFailState("Что-то пошло не так (ошибка №:%i)!", result);
if (cvarValue[0] == '0') KickClient(client, "Установите значение %s 1", strcmp(cvarName, "sv_logecho") ? "sv_logflush":"sv_logecho");
}
Да, работает и кикает. Но баг остался, пишешь перед входомПопробуй так:Посмотри лог ошибок после. Он всё скажет.PHP:public OnPluginStart() CreateTimer(5.0, CheckPlayerCvar, _, TIMER_REPEAT); public Action:CheckPlayerCvar(Handle:timer) { for (new i = 1; i <= MaxClients; ++i) { if (IsClientInGame(i) && !IsFakeClient(i)) { QueryClientConVar(i, "sv_logecho", ClientConVar); QueryClientConVar(i, "sv_logflush", ClientConVar); } } return Plugin_Continue; } public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[]) { if (result != ConVarQuery_Okay) SetFailState("Что-то пошло не так (ошибка №:%i)!", result); if (cvarValue[0] == '0') KickClient(client, "Установите значение %s 1", strcmp(cvarName, "sv_logecho") ? "sv_logflush":"sv_logecho"); }
Не понял. Так если последние значения введены по единице, как и требуется, то с чего кикать?пишешь перед входом
Да, это я перепутал. В таком порядке:Не понял. Так если последние значения введены по единице, как и требуется, то с чего кикать?
Сделай вывод сообщения в чат или консоль, да проверь, какое значение тогда имеет переменная.перестает почему то кикать
public OnPluginStart() CreateTimer(5.0, CheckPlayerCvar, _, TIMER_REPEAT);
public Action:CheckPlayerCvar(Handle:timer)
{
for (new i = 1; i <= MaxClients; ++i)
{
if (IsClientInGame(i) && !IsFakeClient(i))
{
QueryClientConVar(i, "sv_logecho", ClientConVar);
QueryClientConVar(i, "sv_logflush", ClientConVar);
}
}
return Plugin_Continue;
}
public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, const String:cvarName[], const String:cvarValue[])
{
if (result != ConVarQuery_Okay) SetFailState("Что-то пошло не так (ошибка №:%i)!", result);
if (cvarValue[0] == '0') KickClient(client, "Установите значение %s 1", strcmp(cvarName, "sv_logecho") ? "sv_logflush":"sv_logecho");
else PrintToChat(client, "Значение переменной %s %s!", cvarName, cvarValue);
}