Алгоритм проверки игрока с бомбой на AFK

Ну вот зачем ты сюда зашёл?


  • Всего проголосовало
    16
Сообщения
2,717
Реакции
2,996
Помог
59 раз(а)
Накатал приблизительный код для проверки на AFK игрока с бомбой. Не проверял, но терзают сомнения, что можно сделать лучше.
Каковы ваши предложения по улучшению?

p.s: даже не знаю, работает ли этот код :blush2:

Код:
#include <amxmodx>
#include <reapi>

new g_iBombGuy;

enum { TASKID_CheckBomberAFK = 1337 };
const Float:CHECK_INTERVAL = 5.0;

public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_MakeBomber, "CBasePlayer_MakeBomber", .post = true);
    register_event_ex("BombDrop", "hEvent_BombDrop", RegisterEvent_Single, "4=1");
  
}

public CBasePlayer_MakeBomber(id)
{
    g_iBombGuy = id;
  
    server_print("   ::::::::::::::> CBasePlayer_MakeBomber(%i)", id);
  
    set_task(CHECK_INTERVAL, "TASK_CheckBomberAFK", .id = id + TASKID_CheckBomberAFK, .flags = "b");

}


public hEvent_BombDrop()
{
    enum { arg_X = 1, arg_Y, arg_Z, arg_flag };

    remove_task(g_iBombGuy + TASKID_CheckBomberAFK); 
    g_iBombGuy = 0;

    server_print(" <:::::::::::::: hEvent_BombDrop(%i,%i,%i,%i)",
        read_data(arg_X), read_data(arg_Y), read_data(arg_Z), read_data(arg_flag)
    );
}

public TASK_CheckBomberAFK(id)
{
    id -= TASKID_CheckBomberAFK;
  
    if(g_iBombGuy != id)
    {
        remove_task(id + TASKID_CheckBomberAFK);
    }

    if(get_gametime() - get_member(id, m_fLastMovement) >= 15.0)
    {
        rg_drop_item(id, "weapon_c4");
      
        server_print(" =>>>>>>>>>>> TASK_CheckBomberAFK(%i) DROP BOMB FROM AFK.", id);
    }
}
 
Последнее редактирование:
Сообщения
473
Реакции
249
Помог
6 раз(а)
Зашёл сюда после темы плагина для AS_. Увидев идею хотел предложить сделать отдельный полноценный плагин проверки на АФК, в котором будет учтён VIP. Чтобы 100-процентно в связке всё работало круто и стабильно. Судя по всему, ты так и решил сделать?
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
wopox1337
Код:
if(get_member(id, m_fLastMovement) >= 15.0)
всегда будет истиной, оно же равно gpGlobals->time, а не разнице.
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
wopox1337, а чем не подходит обычный афк чекер? По сути для него не важно с бомбой или нет игрок.
21 Май 2019
P.S. еще надо учесть то что другой игрок может подобрать бомбу
 
Сообщения
2,717
Реакции
2,996
Помог
59 раз(а)
чем не подходит обычный афк чекер?
Необходимо выкинуть бомбу после 15с простоя, более элегантным методом
21 Май 2019
надо учесть то что другой игрок может подобрать бомбу
Подумал об этом, наверняка ловится BombPickup
 
Сообщения
285
Реакции
251
Помог
7 раз(а)
Если бомба вылетит в такого же афк, можно тогда учесть, чтобы афк не мог ее поднять
 
Сообщения
327
Реакции
289
Помог
9 раз(а)
m_fLastMovement учитывает только изменение координат. Не учтет деплой, изменение угла обзора. Зато, если афк наносить урон, изменятся координаты при попадании и, вследствие, m_fLastMovement

Вызывается только при RestartRound и GetIntoGame. Проще ивентами.
 
Последнее редактирование:

d3m37r4

111111
Сообщения
1,428
Реакции
1,168
Помог
10 раз(а)
Сообщения
327
Реакции
289
Помог
9 раз(а)
d3m37r4, Хотя с m_fLastMovement уже запутался, когда давно тестировал. Суть, что для определения афк не подходит, т.к. много чего не учитывает и не оправдывает своего названия. Столько мемберов перебрал, так и не нашел подходящего варианта.
 
Последнее редактирование:
Сообщения
1,668
Реакции
1,495
Помог
24 раз(а)
Код:
@CWeaponBox__SetModel_Post(iEntity, sModelName[])
{
    if (!get_member(iEntity, m_WeaponBox_bIsBomb))
        return;

    // dropped
}
 
Сообщения
2,717
Реакции
2,996
Помог
59 раз(а)

d3m37r4

111111
Сообщения
1,428
Реакции
1,168
Помог
10 раз(а)
wopox1337, фризтайм не учитывается?
16832
Бомба выкидывается сразу по истечении фризтайма)
И еще там с версией чет не то, game version 332 выводит, а в названии архива 334)
Логичнее, учитывать время АФК, когда фризтайм кончился, но это, наверно, уже в самой проверке на АФК правки надо делать.
 
Сообщения
2,717
Реакции
2,996
Помог
59 раз(а)
d3m37r4, за 5 секунд игрок не проявил активности. m_fLastMovement остался прежним, он не сбрасывается при рестартах. Теоритичски - это нормальное поведение, учитывая так же маленькое время квара.


В действительности, сомневаюсь, что кто-то будет выставлять 5 секунд для этого квара, по идее, 15сек = норма.
 

d3m37r4

111111
Сообщения
1,428
Реакции
1,168
Помог
10 раз(а)
Я на пабе 3-5 сек юзаю, чтобы особо медлительные закупиться смогли и не профукали респавны свои яумамыкиберсмортсмен)
В действительности, сомневаюсь, что кто-то будет выставлять 5 секунд для этого квара, по идее, 15сек = норма.
Нужно все ситуации предусмотреть)
 
Сообщения
2,717
Реакции
2,996
Помог
59 раз(а)
учитывать время АФК, когда фризтайм кончился
Поправил, провейте.
http://teamcity.rehlds.org/reposito...ish/17134:id/regamedll-dist-5.7.0.337-dev.zip

karaulov игрок когда целится - полюбому нажмёт хоть одну кнопку. Иначе - это действительно AFK :dntknw: Так же устроен дефолтный механизм mp_autokick_timeout для кика игроков с причиной idle/
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу