Иконка ресурса

Anti-Afk lite #1 [email protected] f0 d2

Нет прав для скачивания
Сообщения
133
Реакции
58
Пользователь Крабос разместил новый ресурс:

Anti-Afk lite - Легкий Anti-Afk без нагрузки

Позволяет кикнуть или перевести в спектора afk игрока, который стоит на базе несколько раундов подрят.

Плагин записывает координаты игрока при спавне,и если они не изменились в конце раунда или после смерти игрока, то он распознается как AFK игрок.

Таймеры и OnRunCmd не используется.
Узнать больше об этом ресурсе...
 

Drumanid

Не все так как мы 'думаем'
Сообщения
1,715
Реакции
1,304
И в моей версии можно сделать без 'OnRunCmd'. Запомнить координаты при старте раунда 'всех игроков' и через определенное время, через таймер, снова проверить циклом 'всех игроков' и если координаты отличаются, то наказывать тех игроков у кого они остались прежние(координаты). Все просто, даже легче вашего будет и куда 'практичнее':biggrin:

Мне вот всегда было интересно, где же вы все прячетесь когда нужно. Приходиться писать самому.
Лень было делать квары и дополнительные 'плюшки'. Как то так, я это имел ввиду.
PHP:
#include <sdktools_functions>

float fCP[MAXPLAYERS +1][3], fCI[MAXPLAYERS +1][3];

public Plugin myinfo = {name = "AntiAfkLite", author = "Drumanid", version = "1.0", url = "http://vk.com/drumanid"}

public void OnPluginStart() {HookEvent("round_freeze_end", RoundFreezeEnd);}

public Action RoundFreezeEnd(Event event, const char[] name, bool dbc)
{
    for (int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && IsPlayerAlive(i) && !IsFakeClient(i))
        {
            GetClientAbsOrigin(i, fCP[i]);
        }
    }
 
    CreateTimer(15.0, CheckPlayers, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action CheckPlayers(Handle timer)
{
    for (int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && IsPlayerAlive(i) && !IsFakeClient(i))
        {
            GetClientAbsOrigin(i, fCI[i]);
            if(fCP[i][0] == fCI[i][0] && fCP[i][1] == fCI[i][1])
            {
                ForcePlayerSuicide(i);
                PrintToChat(i, "AFK IS FORBIDDEN!");
            }
        }
    }
}
 
Последнее редактирование модератором:

R1KO

всё тлен
Супермодератор
Сообщения
8,439
Реакции
5,879
@Lisoh, На ксс это не будет корректно работать т.к. В round_start игроки еще не спавнились и их координаты отличаются от координат спавна + помню был баг когда координаты при спавне отличаются от координат через пол секунды после спавна, лечил таймером.
В ксго из проверки автоматически выпадают все, кто спавнится после начала раунда
 

Drumanid

Не все так как мы 'думаем'
Сообщения
1,715
Реакции
1,304
@Lisoh, На ксс это не будет корректно работать т.к. В round_start игроки еще не спавнились и их координаты отличаются от координат спавна + помню был баг когда координаты при спавне отличаются от координат через пол секунды после спавна, лечил таймером.
В ксго из проверки автоматически выпадают все, кто спавнится после начала раунда
ок.

Меняем событие старта раунда на round_freeze_end. Думаю тогда проблема будет решена.
Для тех кто не понял о чем речь...

PHP:
public void OnPluginStart() {HookEvent("round_start", RoundStart);}
>>
PHP:
public void OnPluginStart() {HookEvent("round_freeze_end", RoundFreezeEnd);}
PHP:
//Можно было и не менять. Если и делаем, то нормально.
public Action RoundStart(Event event, const char[] name, bool dbc)
>>
PHP:
public Action RoundFreezeEnd(Event event, const char[] name, bool dbc)
 

R1KO

всё тлен
Супермодератор
Сообщения
8,439
Реакции
5,879

Drumanid

Не все так как мы 'думаем'
Сообщения
1,715
Реакции
1,304
Что то я не могу тебя понять. Если просто подумать логически, если координаты уже вполне так скажем нормализовались.. То должно же быть все в порядке ?

Смотри, как я это понимаю. Начался раунд, после возродились игроки, дальше идет то событие которое я сейчас заменил(по стандарту, если квар не изменен - это 3 секунды) и тогда уже идет подсчет игроков в цикле. Разве это не решает проблему?

Я пока видимо сам не столкнусь с этой проблемой, не пойму. Создать таймер в событии, после создавать таймер в таймере и только тогда считать игроков? В чем прикол?(round_start > timer > timer):ac:
 
Последнее редактирование модератором:

R1KO

всё тлен
Супермодератор
Сообщения
8,439
Реакции
5,879
@Lisoh, я имею ввиду спавн игроков, которые вошли в команду уже после начала раунда.
И описанная тобой последовательность актуальна на ксс но не на ксго.
На ксго идет так:
  1. round_prestart
  2. player_spawn
  3. round_start
  4. round_freeze_end
 

R1KO

всё тлен
Супермодератор
Сообщения
8,439
Реакции
5,879
Посмотрел оба варианта AntiAfk и Anti-Afk lite

Anti-Afk lite:
  • Плюсы
    • RequestFrame в player_spawn это хорошо по причине описанной мной нексколькими постами выше.
    • Начальные координаты берутся при спавне, а не начале раунда - тоже гуд.
  • Минусы
    • Для реагирования плагина должно пройти несколько раундов (sm_afk_check)
    • Строгая проверка (fAFKPos[client][0] == fCheckPos[0] && fAFKPos[client][1] == fCheckPos[1]). ИМХО - должен быть допуск на изменение координат в разумных пределах. Тем более что проверка происходит при смерти и координаты могут чуток отклониться

AntiAfk:
  • Плюсы
    • Проверка на кнопки в OnPlayerRunCmd, а следовательно моментальное реагирование.
  • Минусы
    • Слишком много таймеров. Можно было проверять всех игроков в одном таймере
    • Слишком частые проверки (интервал таймера) - 5 сек с головой хватает.
 
Сообщения
133
Реакции
58
Тем более что проверка происходит при смерти и координаты могут чуток отклониться
Да, коорды изменятся если ловить в событии player_death.
Но если поставить EventHookMode_Pre, т.е за кадр до смерти, то отображаются нормально
 
Сообщения
653
Реакции
310
Круто! А такое можно под SM 1.6.3 для 34 версии реализовать?
 
Сообщения
52
Реакции
0
Как сделать имунитет для админов, а то их тоже кикает
 
Сообщения
221
Реакции
9
Для мульти геймс похоже не подходит( там же каждый раунд одна точка спавна и другая точка смерти
 
Сверху