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

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


  • Всего проголосовало
    16
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
Накатал приблизительный код для проверки на 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);
    }
}
 
Последнее редактирование:
Сообщения
500
Реакции
275
Помог
6 раз(а)
Зашёл сюда после темы плагина для AS_. Увидев идею хотел предложить сделать отдельный полноценный плагин проверки на АФК, в котором будет учтён VIP. Чтобы 100-процентно в связке всё работало круто и стабильно. Судя по всему, ты так и решил сделать?
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
wopox1337
Код:
if(get_member(id, m_fLastMovement) >= 15.0)
всегда будет истиной, оно же равно gpGlobals->time, а не разнице.
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
wopox1337, а чем не подходит обычный афк чекер? По сути для него не важно с бомбой или нет игрок.
21 Май 2019
P.S. еще надо учесть то что другой игрок может подобрать бомбу
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)
чем не подходит обычный афк чекер?
Необходимо выкинуть бомбу после 15с простоя, более элегантным методом
21 Май 2019
надо учесть то что другой игрок может подобрать бомбу
Подумал об этом, наверняка ловится BombPickup
 
Сообщения
289
Реакции
251
Помог
7 раз(а)
Если бомба вылетит в такого же афк, можно тогда учесть, чтобы афк не мог ее поднять
 
Сообщения
333
Реакции
290
Помог
9 раз(а)
m_fLastMovement учитывает только изменение координат. Не учтет деплой, изменение угла обзора. Зато, если афк наносить урон, изменятся координаты при попадании и, вследствие, m_fLastMovement

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

d3m37r4

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

    // dropped
}
 
Сообщения
2,751
Реакции
3,016
Помог
61 раз(а)

d3m37r4

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


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

d3m37r4

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

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

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

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