Как запретить юзать +left +right

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
Всем привет, подскажите, опционально помогите, как заблокать игроку использовать команду +right и +left?

А то некоторые стоят вола любят... =\

В яндехе был, толкового не нашел. разве что блокировщиков status и ping.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
На форуме имеются темы о написании и поиске плагинов (и этот вопрос тоже следовало бы задавать именно там). Так вот там неоднократно давался код для блокировки этих кнопок.

Попробуй вот это (должно полностью блокироваться использование этих команд игроком):
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;
}
 

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
На форуме имеются темы о написании и поиске плагинов (и этот вопрос тоже следовало бы задавать именно там). Так вот там неоднократно давался код для блокировки этих кнопок.

Попробуй вот это (должно полностью блокироваться использование этих команд игроком):
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

Все проверю отпишусь. =)
Сообщения автоматически склеены:

Это не то.
это блочит стрейфы, а на серфе без этого никак.

Мне надо запретить игрокам юзать команду +left, чтобы они на месте не крутились в афк.
Сообщения автоматически склеены:

@Grey83, Не сработало, но щас на пиратке еще проверю.
Сообщения автоматически склеены:

Не работает. =(
 
Последнее редактирование:

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
Это обманывает Anti-AFK?
Именно...

Мне то вообщем то это не особо напряжно. Но по отношению к другим игрокам это нечестно, поэтому и спрашиваю как от этой гавешки избавиться. =(
Сообщения автоматически склеены:

Ну так поставь анти афк
как антиafk в этом поможет!? -_-
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Мне надо запретить игрокам юзать команду +left, чтобы они на месте не крутились в афк.
Это не то.
это блочит стрейфы, а на серфе без этого никак.
так ставьте проверку на FL_ONGROUND чтобы находясь на земле они не работали. это как раз решит проблему на surf.
но я вообще не надеялся бы на то что это поможет от афк, ведь данные все равно отправляются а блокируется только на стороне сервера, значит какая бы система не была он все равно получит эти данные хоть изменяй в OnPlayerRunCmd (мне так кажется).
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
Мне надо запретить игрокам юзать команду +left, чтобы они на месте не крутились в афк.
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 секунд не выставить.
 

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
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 секунд не выставить.
Или чет не так сделал, или проблема в том, что у меня рут...

Не работает =\ на серваке я один + боты
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@Deluks, и ошибок никаких в логах?
 

Martin

Участник
Сообщения
17
Реакции
0
Madness предложил вполне толковое решение. Плагин чуть изменить, добавив проверку на нахождение на земле
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@Deluks, точно так же, только поменяется строка 55
 
Сверху Снизу