Ping / FPS checker

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
208
Симпатии
5
Пол
Мужской
Столкнулся с проблемой в плагине. Суть плагина: проверка на высокий пинг и FPS + кик за превышенные значения. За пинг еще не тестил, не знаю, исправно работает ли. Но вот по части FPS есть нюанс. В кваре задано максимально допустимое значение 130. А меня кикает при fps_max 119. Кикает регулярно. Правда, я не выводил квары в amxx.cfg, а понадеялся, что значения оно будет черпать из деф заданных в самом плагине (g_pCvar_iLimitFPS = register_cvar("amxx_kicker_max_fps", "130")), так же можно? В общем, может кто сталкивался или знает, почему меня кикает с допустимым FPS - подскажите :)

PHP:
#include <amxmodx>
#include <fakemeta>

new const g_szPluginName[] = "Ping/FPS Kicker";
new const g_szPluginVersion[] = "1.0";
new const g_szPluginAuthor[] = "zmn";

new const g_szFile_LogPlayer[] = "AMXX_KICKER.txt";

#pragma semicolon 1

enum
{
    NONE = 0,
    PING,
    FPS
};

new g_bConnected;

new g_iPlayerFPS[33];
new g_iChecks[33];

new Float:g_fCheckTime;
new g_iLimitPing;
new g_iLimitFPS;

new g_pCvar_iEnabled;
new g_pCvar_iInmunity;
new g_pCvar_iChecks;
new g_pCvar_iLimitPing;
new g_pCvar_iLimitFPS;
new g_pCvar_iTimeCheck;

const TASK_PFK = 21050;

public plugin_init()
{
    register_plugin(g_szPluginName, g_szPluginVersion, g_szPluginAuthor);
    
    g_pCvar_iEnabled = register_cvar("amxx_kicker_enabled", "1");
    g_pCvar_iInmunity = register_cvar("amxx_kicker_admin_inmunity", "1");
    g_pCvar_iChecks = register_cvar("amxx_kicker_check", "3");
    g_pCvar_iLimitPing = register_cvar("amxx_kicker_max_ping", "130");
    g_pCvar_iLimitFPS = register_cvar("amxx_kicker_max_fps", "130");
    g_pCvar_iTimeCheck = register_cvar("amxx_kicker_check_time", "15");
    
    register_forward(FM_CmdStart, "fw_CmdStart");
}

public plugin_cfg()
{
    if (!get_pcvar_num(g_pCvar_iEnabled))
        return;
    
    g_iLimitFPS = get_pcvar_num(g_pCvar_iLimitFPS);
    g_iLimitPing = get_pcvar_num(g_pCvar_iLimitPing);
    g_fCheckTime = get_pcvar_float(g_pCvar_iTimeCheck);
    set_task(g_fCheckTime, "Task_Kicker_Ping", TASK_PFK, .flags = "b");
}

public client_putinserver(id)
{
    if (!get_pcvar_num(g_pCvar_iEnabled))
        return;
    
    g_bConnected |= (1<<(id - 1));
    g_iPlayerFPS[id] = g_iChecks[id] = 0;
    
    if (!is_user_bot(id) && !is_user_hltv(id))
        set_task(10.0, "ShowMensaje", id);
}

public client_disconnected(id)
{
    if (!get_pcvar_num(g_pCvar_iEnabled))
        return;
    
    g_bConnected &= ~(1<<(id - 1));
}

public ShowMensaje(id)
{
    if (get_pcvar_num(g_pCvar_iInmunity) && get_user_flags(id) & ADMIN_LEVEL_H)
        return;
    
    client_print_color(id, print_team_default, "^x04[INFO]^x01 Игроки с пингом выше ^x04%d^x01 и FPS выше ^x04%d^x01 будут кикнуты!", g_iLimitPing, g_iLimitFPS);
}

public fw_CmdStart(id, uc_handle)
{
    if (!get_pcvar_num(g_pCvar_iEnabled))
        return;
    
    if (~g_bConnected & (1<<(id - 1)))
        return;
    
    static iFPS;
    iFPS = floatround(1 / (get_uc(uc_handle, UC_Msec) * 0.001));
    
    if (iFPS > g_iPlayerFPS[id])
        g_iPlayerFPS[id] = iFPS;
}

public Task_Kicker_Ping()
{
    static Float:fCheckTime, iChecks;
    fCheckTime = get_pcvar_float(g_pCvar_iTimeCheck);
    iChecks = get_pcvar_num(g_pCvar_iChecks);
    
    if (g_fCheckTime != fCheckTime)
    {
        change_task(TASK_PFK, fCheckTime);
        g_fCheckTime = fCheckTime;
    }
    
    static id, iPing, iLoss;
    for (id = 1; id <= get_maxplayers(); id++)
    {
        if (~g_bConnected & (1<<(id - 1)))
            continue;
        
        if (g_iPlayerFPS[id] >= g_iLimitFPS)
        {
            KickJugador(id, FPS);
            continue;
        }
        
        get_user_ping(id, iPing, iLoss);
        if (iPing >= g_iLimitPing)
        {
            if (++g_iChecks[id] >= iChecks)
                KickJugador(id, PING);
        }
    }
}

KickJugador(id, iNum = NONE)
{
    if (get_pcvar_num(g_pCvar_iInmunity) && get_user_flags(id) & ADMIN_LEVEL_H)
        return;
    
    new szName[32], szSteamID[32];
    get_user_name(id, szName, charsmax(szName));
    get_user_authid(id, szSteamID, charsmax(szSteamID));
    
    server_cmd("kick #%d ^"Твой %s слишком высокий, сделай что то с этим :)^"", get_user_userid(id), iNum == PING ? "пинг" : "FPS");
    client_print_color(0, print_team_default, "^x04[INFO]^x01 Боец^x03 %s^x01 был кикнут. Причина: ^x04высокий %s^x01 mayor de la permitida", szName, iNum == PING ? "пинг" : "fps");
    log_to_file(g_szFile_LogPlayer, "Игрок ^"%s^" был кикнут из-за повышенного пинга/фпс: <Steam: ^"%s^" - ID: %d>", szName, szSteamID, get_user_userid(id));
}

stock ChatColor(id, const input[], any:...)
{
    static szMsg[191];
    vformat(szMsg, 190, input, 3);
    
    message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, get_user_msgid("SayText"), .player = id);
    write_byte(id ? id : 33);
    write_string(szMsg);
    message_end();
}
 
Сверху Снизу