как правильно допилить плагин botpingfake?

ifx

Сообщения
330
Реакции
149
Помог
4 раз(а)
Ребят, подскажите советы или направление, куда копать или ЧЯДНТ в плане кода

есть вот такой плагин, он показывает фейковый пинг ботам
как я понимаю переменная RG_CBasePlayer_UpdateClientData отвечает за апдейт информации отправляемой игроку. каким образом можно сделать, чтобы пинг просто был всегда статичен и нагрузка при этом была по-минимуму? Может как-то через set_task или static?

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

new g_connected[33]

public plugin_init()
{
    RegisterHookChain(RG_CBasePlayer_UpdateClientData, "fw_updateClientData", 1);
}

public client_putinserver(id)
{
    g_connected[id] = true
}

public client_disconnected(id)
{
    g_connected[id] = false
}

public fw_updateClientData(id)
{
    
    new ping = 15
    new ping1
    new offset1
    
    for(new player = 1; player < get_maxplayers(); player++)
    {
        if (!g_connected[player] || !is_user_bot(player))
             continue;
        
        for(new offset1 = 0; offset1 < 4; offset1++)
        {
            if ((ping - offset1) % 4 == 0)
            {
                ping1 = (ping - offset1) / 4
                break;
            }
        }
        message_begin(MSG_ONE_UNRELIABLE, SVC_PINGS, _, id)
        write_byte((offset1 * 64) + (1 + 2 * (player - 1)))
        write_short(ping1)
        write_byte(0)
        message_end()
    }

}
 
  • Нравится
Реакции: Murz

ssx

Сообщения
272
Реакции
71
ifx, Что-то с данным плагином очень часто проскакивает настоящий пинг.
(Только проверку на бота убрал)
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
ssx, он и будет проскакивать так как в engine не заблокирована рассылка пинга, на неё нет хука поэтому её не заблокируешь.
 
Сообщения
2,491
Реакции
2,790
Помог
61 раз(а)
ifx, как минимум пинг не отсылается во время UpdateClientData. Отправка его происходит только если игрок нажал TAB (IN_SCORE). В этот момент и происходит отсылка пингов всех игроков на клиент. Уточнение: в каждом фрейме сервера. Детали
SV_Frame -> SV_SendClientMessages -> SV_SendClientDatagram -> SV_WriteEntitiesToClient -> SV_EmitPings.
А сама проверка отсылать или нет лежит в SV_ShouldUpdatePing
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
ifx,ssx, Ну как-то так
Код:
#include <amxmodx>
#include <reapi>

new g_connected[33];

public plugin_init()
{
    register_plugin("Bot fake ping", "1.0", "bionext")
    RegisterHookChain(RG_PM_Move,"PM_Move",0);
}

public client_putinserver(id)
{
    g_connected[id] = true
}

public client_disconnected(id)
{
    g_connected[id] = false
}

public PM_Move(const PlayerMove:ppmove, const server)
{
    new oldbuttons = get_pmove( pm_oldbuttons );

    if(!(oldbuttons & IN_SCORE))
        return HC_CONTINUE;

    oldbuttons &= ~IN_SCORE;
    set_pmove(pm_oldbuttons, oldbuttons);

    new const id = get_pmove(pm_player_index) + 1;
    new ping = 666;
    new ping1;
    new offset1;

    for(new player = 1; player < get_maxplayers(); player++)
    {
        if (!g_connected[player] || !is_user_bot(player))
             continue;

        for(new offset1 = 0; offset1 < 4; offset1++)
        {
            if ((ping - offset1) % 4 == 0)
            {
                ping1 = (ping - offset1) / 4
                break;
            }
        }

        message_begin(MSG_ONE_UNRELIABLE, SVC_PINGS, _, id)
        write_byte((offset1 * 64) + (1 + 2 * (player - 1)))
        write_short(ping1)
        write_byte(0)
        message_end()
    }
    return HC_CONTINUE;
}
 
Последнее редактирование:
  • Нравится
Реакции: ifx
Сообщения
29
Реакции
62
В любом случае будет проскакивать. Либо подобрать функцию, которая фреймит вместе с сервером и так глушить стандартный. Но, ИМХО, какой адекватный человек будет ставить такой плагин!? Уж лучше, если вам так необходимо, закажите у кодера вариант с хуком SV_EmitPings на rehlds (естественно нужно будет вносить правки в RE*).

C++:
        new ping = 15
        for(new offset1 = 0; offset1 < 4; offset1++)
        {
            if ((ping - offset1) % 4 == 0)
            {
                ping1 = (ping - offset1) / 4
                break;
            }
        }

        // ...
        write_byte((offset1 * 64) + (1 + 2 * (player - 1)))
джеки-чан-фейс.jpg


https://wiki.alliedmods.net/Half-Life_1_Engine_Messages#SVC_PINGS
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
SerGrib, В моем коде исключены проскоки. И не каждый фрейм сервера, а каждую cl_cmd. На счет непонятного способа сдвига согласен, взял из оригинала надо будет переделать.
 
Последнее редактирование:
Сообщения
29
Реакции
62
И не каждый фрейм сервера, а каждую cl_cmd
PM_Move не cmdшный хук
В моем коде исключены проскои.
по тому, что PM_Move вызывается достаточно часто, чтобы переотправить мессагу и это не было заметно на глаз.
И она, должно быть, вызывается для каждого игрока.
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
PM_Move не cmdшный хук
:smile3:
Вы бы хоть в исходники заглянули прежде чем писать такое (PM_Move хук на clc_move), я писал что PM_Move вызывается когда сервер парсит clc команды клиента частота которых зависит от параметра cl_cmd на клиенте и ограничивается на сервере где-то 64 команды в сек максимум. А то что максимум, при полной нагрузке, сервер 2048 раз в секунду будет проверять условие
Код:
new oldbuttons = get_pmove( pm_oldbuttons );

    if(!(oldbuttons & IN_SCORE))
        return HC_CONTINUE;
и из них может раз отправит пинг(при чём со стороны движка он блокируется) погоды не делает. А вот иерархия вызовов PM_Move в движке
SV_Frame->SV_ReadPackets->SV_ExecuteClientMessage->SV_HandleClientMessage_api->{ clc_move, "clc_move", &SV_ParseMove },->func(cl)->SV_ParseMove->SV_RunCmd->PM_Move
 
Последнее редактирование:

ifx

Сообщения
330
Реакции
149
Помог
4 раз(а)
fantom, спасибо большое, как всегда все по полочкам) изучу ссылки. про нажатие tab - это я в курсе да)
bionext, спасибо большое за правки!
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
ifx, Плагин в корне неправильный, пока не торопитесь я как раз работаю над таким плагином, скоро выложу. Но в моём примере блокировка работает на 100%.
11 Дек 2018
ifx, Разместил плагин, надеюсь скоро добавят. Получилось вообще огонь:good2:
12 Дек 2018
ifx, Bot ping as real player
 

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

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