#include <sdktools_hooks>
public Action OnPlayerRunCmd(int client, int &buttons)
{
if(buttons & (IN_LEFT|IN_RIGHT))
{
buttons &= ~(IN_LEFT|IN_RIGHT);
return Plugin_Changed;
}
return Plugin_Continue;
}
Согласен, но чет подумал что такого плагина нет, но есть какой-то способ..На форуме имеются темы о написании и поиске плагинов (и этот вопрос тоже следовало бы задавать именно там). Так вот там неоднократно давался код для блокировки этих кнопок.
Попробуй вот это (должно полностью блокироваться использование этих команд игроком):C-подобный:#include <sdktools_hooks> public Action OnPlayerRunCmd(int client, int &buttons) { if(buttons & (IN_LEFT|IN_RIGHT)) { buttons &= ~(IN_LEFT|IN_RIGHT); return Plugin_Changed; } return Plugin_Continue; }
Этот я находил, но опять же xxtn подумал что это не то.. XD
Это не то.
Именно...Это обманывает Anti-AFK?
как антиafk в этом поможет!? -_-Ну так поставь анти афк
Мне надо запретить игрокам юзать команду +left, чтобы они на месте не крутились в афк.
так ставьте проверку на FL_ONGROUND чтобы находясь на земле они не работали. это как раз решит проблему на surf.Это не то.
это блочит стрейфы, а на серфе без этого никак.
Мне надо запретить игрокам юзать команду +left, чтобы они на месте не крутились в афк.
#include <cstrike>
#include <sdktools_hooks>
bool
bCheck;
int
iTime;
float
fLastActive[MAXPLAYERS+1];
public void OnPluginStart()
{
ConVar cvar = CreateConVar("sm_afk_time", "30", "Time after which the player will be transferred to the spectators team, sec.", FCVAR_NONE, true, 10.0);
cvar.AddChangeHook(CVarChange_Spec);
iTime = cvar.IntValue;
HookEvent("player_spawn", Event_Spawn);
HookEvent("round_freeze_end", Event_Round, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_Round, EventHookMode_PostNoCopy);
}
public void CVarChange_Spec(ConVar cvar, const char[] oldValue, const char[] newValue)
{
iTime = cvar.IntValue;
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && !IsFakeClient(client) && GetClientTeam(client) > 1) fLastActive[client] = GetGameTime();
}
public void Event_Round(Event event, const char[] name, bool dontBroadcast)
{
if(!(bCheck = name[6] == 'f')) return;
float time = GetGameTime();
for(int i = 1; i <= MaxClients; i++) fLastActive[i] = time;
}
public Action OnPlayerRunCmd(int client, int &buttons)
{
if(!bCheck || !IsClientInGame(client) || IsFakeClient(client) || GetClientTeam(client) < 2 || !IsPlayerAlive(client))
return Plugin_Continue;
static int old_buttons[MAXPLAYERS+1];
static float time;
time = GetGameTime();
if(buttons != old_buttons[client])
{
fLastActive[client] = time;
old_buttons[client] = buttons;
}
else if(time - fLastActive[client] > iTime)
CS_SwitchTeam(client, 1);
return Plugin_Continue;
}
Или чет не так сделал, или проблема в том, что у меня рут...За отдельную плату можно соорудить иммунитет для админов и випов. =)C-подобный:#include <cstrike> #include <sdktools_hooks> bool bCheck; int iTime; float fLastActive[MAXPLAYERS+1]; public void OnPluginStart() { ConVar cvar = CreateConVar("sm_afk_time", "30", "Time after which the player will be transferred to the spectators team, sec.", FCVAR_NONE, true, 10.0); cvar.AddChangeHook(CVarChange_Spec); iTime = cvar.IntValue; HookEvent("player_spawn", Event_Spawn); HookEvent("round_freeze_end", Event_Round, EventHookMode_PostNoCopy); HookEvent("round_end", Event_Round, EventHookMode_PostNoCopy); } public void CVarChange_Spec(ConVar cvar, const char[] oldValue, const char[] newValue) { iTime = cvar.IntValue; } public void Event_Spawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); if(client && !IsFakeClient(client) && GetClientTeam(client) > 1) fLastActive[client] = GetGameTime(); } public void Event_Round(Event event, const char[] name, bool dontBroadcast) { if(!(bCheck = name[6] == 'f')) return; float time = GetGameTime(); for(int i = 1; i <= MaxClients; i++) fLastActive[i] = time; } public Action OnPlayerRunCmd(int client, int &buttons) { if(!bCheck || !IsClientInGame(client) || IsFakeClient(client) || GetClientTeam(client) < 2 || !IsPlayerAlive(client)) return Plugin_Continue; static int old_buttons[MAXPLAYERS+1]; static float time; time = GetGameTime(); if(buttons != old_buttons[client]) { fLastActive[client] = time; old_buttons[client] = buttons; } else if(time - fLastActive[client] > iTime) CS_SwitchTeam(client, 1); return Plugin_Continue; }
Сообщения автоматически склеены:
Дефолтом, если игрок простоит 30 секунд с одними и теми же зажатыми кнопками, то его перекинет в наблюдатели.
Квар можно прописывать в server.cfg или прописывать для каждого из режимов (в ксго) или карт (если используется мап конфиг) своё значение, но меньше 10 секунд не выставить.