amx_banmenu timer

SAM

Сообщения
47
Реакции
-29
Помог
3 раз(а)
Здравствуйте!
Подсобите разобраться, не получается установить таймер на открытие amx_banmenu для VIP игрока.
Условие: если VIP игрок выдал бан, то устанавливается таймер, по истечению которого, возможно повторное открытие меню.
Использую AmxBans.
Собственно, пытался сам, но не вышло.

В amxbans_main.sma я объявил глобальную переменную g_iBanTimer[33]

В plugin_init смотрю, какую функцию вызывает зарегистрированная клиентская команда amx_banmenu

В файле menu_ban.inl

Если игрок имеет ADMIN_LEVEL_H и у него g_iBanTimer не равняется нулю, то не выполняем код ниже.

Код:
public cmdBanMenu(id, level, cid)
{
    if(!cmd_access(id, level, cid, 1))
    {
        return PLUGIN_HANDLED
    }
  
    // Добавил
    if(get_user_flags(id) & ADMIN_LEVEL_H) {
        if(g_iBanTimer[id] != 0)
        return PLUGIN_HANDLED
    }
    // Конец правки
  
    cmdBanMenu2(id)
  
    return PLUGIN_HANDLED
}
Теперь нужно отловить момент, когда выдается бан.
Открываю файл cmd_ban.inl, но не могу понять, где именно там банит игрока.

Дальнейшее условие должно быть, наверное, выглядеть так:

Код:
// После того, как выдан бан игроку

g_iBanTimer[id] = 120 // Наш таймер на две минуты

// Здесь нужно запустить set_task с интервалом в одну секунду, что я и делаю

#define TASK_DELAY 1.0
set_task(TASK_DELAY, "Task_BanTimer", id, 312831, .flags="b")
// Здесь передаю id игрока и устанавливаю id самого set_task, чтобы потом завершить.

// Создаю функцию

public Task_BanTimer(id) {
    // Проверяю, если g_iBanTimer равен 0
    if(g_iBanTimer[id] == 0) {
        remove_task(312831);    //    Если условие верное - удаляю бесконечный set_task
    }else{
        g_iBanTimer[id]--    //    Иначе отнимаю значение
    }
}
Собственно, подскажите, пожалуйста, где сам момент бана и куда вставить переменные, и функции?
Еще вопрос: правильное ли условие в таймере? Может, его как-то корректнее можно сделать?


Сам файл cmd_ban.inl выглядит так:

Код:
#if defined _cmdban_included
    #endinput
#endif

#define _cmdban_included

#include <amxmodx>
#include <sqlx>

public cmdMenuBan(id)
{
    new pid, bantime, bantype[3], banip[22], banname[32], bansteamid[34], banreason[128]
  
    pid = banData[id][banPlayer]
    bantime = banData[id][banTime]
    copy(bantype, 2, banData[id][banType])
    copy(banip, 21, banData[id][banIp])
    copy(banname, 31, banData[id][banName])
    copy(bansteamid, 33, banData[id][banSteamid])
    copy(banreason, 127, banData[id][banReason])
  
    if(get_user_state(pid, PDATA_BEING_BANNED))
    {
        return ColorChat(id, RED, "%s %L", PREFIX, id, "BLOCKING_DOUBLEBAN", banname)
    }
  
    add_user_state(pid, PDATA_BEING_BANNED)
  
    if(!get_ban_type(bantype, 127, bansteamid, banip))
    {
        log_amx("[AMXBans ERROR cmdMenuBan] Steamid / IP Invalid! Bantype: <%s> | Authid: <%s> | IP: <%s>", bantype, bansteamid, banip)
        return remove_user_state(pid, PDATA_BEING_BANNED)
    }
  
    if(get_pcvar_num(pcvar_debug) >= 2)
    {
        log_amx("[AMXBans cmdMenuBan %d] %d | %s | %s | %s | %s (%d min)", id, pid, banname, bansteamid, banip, banreason, bantime)
    }
  
    new pquery[512]
  
    if(equal(bantype, "S"))
    {
        formatex(pquery, 511, "SELECT `player_id` FROM `%s%s` WHERE `player_id` = '%s' AND `ban_type` = 'S' AND `expired` = '0';", g_dbPrefix, TBL_BANS, bansteamid)
        if(get_pcvar_num(pcvar_debug) >= 2)
        {
            log_amx("[AMXBans cmdMenuBan] Banned a player by SteamID")
        }
    }
    else
    {
        formatex(pquery, 511, "SELECT `player_ip` FROM `%s%s` WHERE `player_ip` = '%s' AND `ban_type` = 'SI' AND `expired` = '0';", g_dbPrefix, TBL_BANS, banip)
        if(get_pcvar_num(pcvar_debug) >= 2)
        {
            log_amx("[AMXBans cmdMenuBan] Banned a player by IP")
        }
    }
  
    new data[256]
    format_ban_data(data, id, pid, bantime, bantype, banip, banname, bansteamid, banreason)
  
    return SQL_ThreadQuery(g_SqlX, "_cmdMenuBan", pquery, data, 255)
}

public _cmdMenuBan(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
    new id, pid, bantime, nums[3], bantype[3], banip[22], banname[32], bansteamid[34], banreason[128]
    parse_ban_data(data, nums, bantype, banip, banname, bansteamid, banreason)
  
    id = nums[0]
    pid = nums[1]
    bantime = nums[2]

    if(failstate)
    {
        remove_user_state(pid, PDATA_BEING_BANNED)
        return SQL_Error(query, error, errornum, failstate)
    }
  
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmdMenuBan function 2] Playerid: %d", pid)
    }
  
    if(SQL_NumResults(query))
    {
        SQL_FreeHandle(query)
        ColorChat(id, RED, "%s %L", PREFIX, id, "ALREADY_BANNED")
        return remove_user_state(pid, PDATA_BEING_BANNED)
    }
  
    new admin_nick[64]
    mysql_get_username_safe(id, admin_nick, 63)
  
    new player_nick[64]
    copy(player_nick, 63, banname)
    mysql_escape_string(player_nick, 63)
  
    new server_name[256]
    mysql_get_servername_safe(server_name, 255)
  
    if(get_pcvar_num(pcvar_add_mapname))
    {
        new mapname[32]
        get_mapname(mapname, 31)
        format(server_name, 255, "%s (%s)", server_name, mapname)
    }
  
    new pquery[1024], len
  
#if defined SET_NAMES_UTF8

    len = format(pquery, 1023, "SET NAMES UTF8; INSERT INTO `%s%s` (`player_id`, `player_ip`, `player_nick`, `admin_ip`, `admin_id`, `admin_nick`, `ban_type`, `ban_reason`, `cs_ban_reason`, `ban_created`, `ban_length`, `server_name`, `server_ip`, `expired`) ", g_dbPrefix, TBL_BANS)
    len += format(pquery[len], 1023 - len, "VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP(NOW()), '%d', '%s', '%s:%s', '0');", bansteamid, banip, player_nick, playerData[id][playerIp], playerData[id][playerSteamid], admin_nick, bantype, banreason, "See banlist", bantime, server_name, g_ip, g_port)
  
#else

    len = format(pquery, 1023, "INSERT INTO `%s%s` (`player_id`, `player_ip`, `player_nick`, `admin_ip`, `admin_id`, `admin_nick`, `ban_type`, `ban_reason`, `cs_ban_reason`, `ban_created`, `ban_length`, `server_name`, `server_ip`, `expired`) ", g_dbPrefix, TBL_BANS)
    len += format(pquery[len], 1023 - len, "VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP(NOW()), '%d', '%s', '%s:%s', '0');", bansteamid, banip, player_nick, playerData[id][playerIp], playerData[id][playerSteamid], admin_nick, bantype, banreason, banreason, bantime, server_name, g_ip, g_port)

#endif

    return SQL_ThreadQuery(g_SqlX, "insert_bandetails", pquery, data, size)
}

public cmdBan(id, level, cid)
{
    if(!cmd_access(id, level, cid, 3))
    {
        return PLUGIN_HANDLED
    }
  
    new pid, bantime, bantype[3], ban_length[10], banip[22], banname[32], bansteamid[34], ind[52], banreason[128], temp2[182], temp[192]
  
    read_args(temp, 191)
    strbreak(temp, ban_length, 9, temp2, 181)
    strbreak(temp2, ind, 51, banreason, 127)
    trim(ban_length)
    trim(ind)
    trim(banreason)
    remove_quotes(banreason)
  
    pid = locate_player(id, bantype, ind)
  
    if(pid == -2)
    {
        return PLUGIN_HANDLED
    }
  
    if(!is_str_num(ban_length) || read_argc() < 3 || pid == -1)
    {
        return client_print(id, print_console, "[AMXBans] %L", LANG_PLAYER, "AMX_BAN_SYNTAX")
    }
  
    bantime = abs(str_to_num(ban_length))

    if(get_user_state(pid, PDATA_BEING_BANNED))
    {
        return client_print(id, print_console, "[AMXBans] %L", id, "BLOCKING_DOUBLEBAN")
    }
  
    if(!(get_user_flags(id) & get_higher_ban_time_admin_flag()) && bantime == 0)
    {
        return client_print(id, print_console, "[AMXBans] %L", LANG_PLAYER, "NOT_BAN_PERMANENT")
    }
  
    add_user_state(pid, PDATA_BEING_BANNED)
  
    if(!strlen(banreason))
    {
        get_pcvar_string(pcvar_default_banreason, banreason, 127)
    }
  
    new cTimeLength[128]
    if(bantime > 0)
    {
        get_time_length(id, bantime, timeunit_minutes, cTimeLength, 127)
    }
    else
    {
        format(cTimeLength, 127, "%L", LANG_PLAYER, "TIME_ELEMENT_PERMANENTLY")
    }
  
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmdBan function 1] Playerid: %d", pid)
    }

    if(pid)
    {
        copy(bansteamid, 33, playerData[pid][playerSteamid])
        copy(banname, 31, playerData[pid][playerName])
        copy(banip, 21, playerData[pid][playerIp])
    }
    else
    {     
        console_print(id, "[AMXBans] %L", LANG_PLAYER, "PLAYER_NOT_FOUND", ind)

        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans] Player %s could not be found", ind)
        }
      
        return remove_user_state(id, PDATA_BEING_BANNED)
    }

    if(!get_ban_type(bantype, 127, bansteamid, banip))
    {
        log_amx("[AMXBans ERROR cmdBan] Steamid / IP Invalid! Bantype: <%s> | Authid: <%s> | IP: <%s>", banreason, bansteamid, banip)
        return remove_user_state(id, PDATA_BEING_BANNED)
    }
  
    new pquery[256]
  
    if(equal(banreason, "S"))
    {
        formatex(pquery, 255, "SELECT `player_id` FROM `%s%s` WHERE `player_id` = '%s' AND `ban_type` = 'S' AND `expired` = '0';", g_dbPrefix, TBL_BANS, bansteamid)
      
        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans cmdBan] Banned a player by SteamID: %s", bansteamid)
        }
    }
    else
    {
        formatex(pquery, 255, "SELECT `player_ip` FROM `%s%s` WHERE `player_ip` = '%s' AND `ban_type` = 'SI' AND `expired` = '0';", g_dbPrefix, TBL_BANS, banip)
      
        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans cmdBan] Banned a player by IP: %s", banip)
        }
    }
  
    new data[256]
    format_ban_data(data, id, pid, bantime, bantype, banip, banname, bansteamid, banreason)

    return SQL_ThreadQuery(g_SqlX, "cmd_ban_", pquery, data, 256)
}

public cmd_ban_(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
    new id, pid, bantime, nums[3], bantype[3], banip[22], banname[32], bansteamid[34], banreason[128]
    parse_ban_data(data, nums, bantype, banip, banname, bansteamid, banreason)

    id = nums[0]
    pid = nums[1]
    bantime = nums[2]
  
    if(failstate)
    {
        remove_user_state(pid, PDATA_BEING_BANNED)
        return SQL_Error(query, error, errornum, failstate)
    }
  
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmd_ban_ function 2] Playerid: %d", pid)
    }
  
    if(!SQL_NumResults(query))
    {
        SQL_FreeHandle(query)

        new admin_nick[100]
        if(id == 0) get_user_name(id, playerData[id][playerName], 31)
        mysql_get_username_safe(id, admin_nick, 99)
      
        if(id > 0)
        {
            if(get_pcvar_num(pcvar_debug) >= 1)
            {
                log_amx("[AMXBans cmdBan] Adminsteamid: %s, Servercmd: %s", playerData[id][playerSteamid], (id == 0) ? "Yes" : "No")
            }
        }
        else
        {
            copy(playerData[id][playerSteamid], 33, "STEAM_ID_SERVER")
  
            new servernick[100]
            get_pcvar_string(pcvar_server_nick, servernick, 99)
            if(strlen(servernick))
            {
                copy(admin_nick, 99, servernick)
            }
          
            check_reason(banreason, 127, admin_nick, 99)
        }
      
        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans cmdBan] Admin nick: %s, Admin userid: %d", admin_nick, get_user_userid(id))
        }
      
        new server_name[200]
        mysql_get_servername_safe(server_name, 199)
      
        if(get_pcvar_num(pcvar_add_mapname))
        {
            new mapname[32]
            get_mapname(mapname, 31)
            format(server_name, 199, "%s (%s)", server_name, mapname)
        }
      
        new player_nick[64]
        copy(player_nick, 63, banname)
      
        mysql_escape_string(player_nick, 99)
        mysql_escape_string(admin_nick, 99)
      
        new pquery[1024], len
      
#if defined SET_NAMES_UTF8     
      
        len = format(pquery, 1023, "SET NAMES UTF8; INSERT INTO `%s%s` (`player_id`, `player_ip`, `player_nick`, `admin_ip`, `admin_id`, `admin_nick`, `ban_type`, `ban_reason`, `cs_ban_reason`, `ban_created`, `ban_length`, `server_name`, `server_ip`, `expired`) ", g_dbPrefix, TBL_BANS)
        len += format(pquery[len], 1023 - len, "VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP(NOW()), '%d', '%s', '%s:%s', '0');", bansteamid, banip, player_nick, playerData[id][playerIp], playerData[id][playerSteamid], admin_nick, bantype, banreason, "See banlist", bantime, server_name, g_ip, g_port)
      
#else

        len = format(pquery, 1023, "INSERT INTO `%s%s` (`player_id`, `player_ip`, `player_nick`, `admin_ip`, `admin_id`, `admin_nick`, `ban_type`, `ban_reason`, `cs_ban_reason`, `ban_created`, `ban_length`, `server_name`, `server_ip`, `expired`) ", g_dbPrefix, TBL_BANS)
        len += format(pquery[len], 1023 - len, "VALUES('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP(NOW()), '%d', '%s', '%s:%s', '0');", bansteamid, banip, player_nick, playerData[id][playerIp], playerData[id][playerSteamid], admin_nick, bantype, banreason, banreason, bantime, server_name, g_ip, g_port)

#endif
          
        new tdata[256]
        format_ban_data(tdata, id, pid, bantime, bantype, banip, banname, bansteamid, banreason)
      
        SQL_ThreadQuery(g_SqlX, "insert_bandetails", pquery, tdata, 255)
    }
    else
    {
        if(id == 0)
        {
            log_amx("[AMXBans] %L", LANG_SERVER, "ALREADY_BANNED", bansteamid, banip)
        }
        else
        {
            client_print(id, print_console, "[AMXBans] %L", LANG_PLAYER, "ALREADY_BANNED", bansteamid, banip)
            remove_user_state(pid, PDATA_BEING_BANNED)
        }
    }
  
    return PLUGIN_HANDLED
}

public insert_bandetails(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
    new pid, nums[3], banip[22], bansteamid[34], banreason[128]
    parse_ban_data(data, nums, _, banip, _, bansteamid, banreason)

    pid = nums[1]
  
    if(failstate)
    {
        return SQL_Error(query, error, errornum, failstate)
    }
  
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmdBan function 5] Playerid: %d", pid)
    }
  
#if defined SET_NAMES_UTF8 
  
    SQL_FreeHandle(query)
  
    new pquery[1024]
    formatex(pquery, 1023, "SELECT (@bid := (SELECT MAX(`bid`) FROM `%s%s` WHERE (`player_ip` = '%s' AND `ban_type` = 'SI') OR (`player_id` = '%s' AND `ban_type` = 'S'))) AS `bid`; UPDATE `%s%s` SET `cs_ban_reason` = '%s' WHERE `bid` = @bid;", g_dbPrefix, TBL_BANS, banip, bansteamid, g_dbPrefix, TBL_BANS, banreason)

    return SQL_ThreadQuery(g_SqlX, "KocTblJIu_KocTblJIb4uku", pquery, data, size)
}
  
public KocTblJIu_KocTblJIb4uku(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
    new id, pid, nums[3]
    parse_ban_data(data, nums)
  
    id = nums[0]
    pid = nums[1]
  
    if(failstate)
    {
        delayed_kick(pid + 200)
        return SQL_Error(query, error, errornum, failstate)
    }
  
    if(!SQL_NumResults(query))
    {
        return SQL_FreeHandle(query)
    }
  
    new bid = SQL_ReadResult(query, 0)
  
#else

    new id = nums[0]
    new bid = SQL_GetInsertId(query)
  
#endif 

    SQL_FreeHandle(query)
  
    new motd[3]
    motd[0] = id
    motd[1] = pid
    motd[2] = bid
  
    if(get_pcvar_num(pcvar_snapshot))
    {
        screen_user(id, pid)
        return set_task(1.5, "select_amxbans_motd", 117811, motd, 3)
    }

    return select_amxbans_motd(motd)
}

public select_amxbans_motd(const data[])
{
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmdBan function 5] Bid: %d", data[2])
    }

    new pquery[1024]

#if defined SET_NAMES_UTF8
  
    format(pquery, 1023, "SELECT `si`.`amxban_motd`, `ba`.`player_nick`, `ba`.`player_id`, `ba`.`player_ip`, \
        `ba`.`admin_nick`, `ba`.`admin_id`, `ba`.`ban_type`, `ba`.`cs_ban_reason`, `ba`.`ban_length` FROM `%s%s` AS `si`,`%s%s` AS `ba` \
        WHERE `ba`.`bid` = '%d' AND `si`.`address` = '%s:%s';", g_dbPrefix, TBL_SERVERINFO, g_dbPrefix, TBL_BANS, data[2], g_ip, g_port)
      
#else

    format(pquery, 1023, "SELECT `si`.`amxban_motd`, `ba`.`player_nick`, `ba`.`player_id`, `ba`.`player_ip`, \
        `ba`.`admin_nick`, `ba`.`admin_id`, `ba`.`ban_type`, `ba`.`ban_reason`, `ba`.`ban_length` FROM `%s%s` AS `si`,`%s%s` AS `ba` \
        WHERE `ba`.`bid` = '%d' AND `si`.`address` = '%s:%s';", g_dbPrefix, TBL_SERVERINFO, g_dbPrefix, TBL_BANS, data[2], g_ip, g_port)

#endif
  
    return SQL_ThreadQuery(g_SqlX, "_select_amxbans_motd", pquery, data, 3)
}

public _select_amxbans_motd(failstate, Handle:query, const error[], errornum, const data[], size, Float:queuetime)
{
    if(failstate)
    {
        delayed_kick(data[1] + 200)
        return SQL_Error(query, error, errornum, failstate)
    }
  
    new id = data[0]
    new player = data[1]
    new bid = data[2]
  
    if(get_pcvar_num(pcvar_debug) >= 1)
    {
        log_amx("[AMXBans cmdBan function 6] Playerid: %d, Bid: %d", player, bid)
    }
  
    new amxban_motd_url[256]
    new admin_steamid[35], admin_nick[100], pl_steamid[35], pl_nick[100], pl_ip[22]
    new ban_type[32], ban_reason[128], iBanLength
  
    if(!SQL_NumResults(query))
    {
        SQL_FreeHandle(query)
        amxban_motd_url[0] = '^0'
        log_amx("[AMXBans cmdBan function 6.1] select_motd without result: %d, Bid: %d", player, bid)

        return set_task(kick_delay, "delayed_kick", player + 200)
    }
    else
    {
        SQL_ReadResult(query, 0, amxban_motd_url, 256)
        SQL_ReadResult(query, 1, pl_nick, 99)
        SQL_ReadResult(query, 2, pl_steamid, 34)
        SQL_ReadResult(query, 3, pl_ip, 21)
        SQL_ReadResult(query, 4, admin_nick, 99)
        SQL_ReadResult(query, 5, admin_steamid, 34)
        SQL_ReadResult(query, 6, ban_type, 31)
        SQL_ReadResult(query, 7, ban_reason, 127)
        iBanLength = SQL_ReadResult(query, 8)
        SQL_FreeHandle(query)
    }
  
    new admin_team[11]
  
    get_user_team(id, admin_team, 10)
  
    new cTimeLengthPlayer[128]
    new cTimeLengthServer[128]
      
    if(iBanLength > 0)
    {
        get_time_length(player, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
        get_time_length(0, iBanLength, timeunit_minutes, cTimeLengthServer, 127)
    }
    else
    {
        format(cTimeLengthPlayer, 127, "%L", player, "TIME_ELEMENT_PERMANENTLY")
        format(cTimeLengthServer, 127, "%L", LANG_SERVER, "TIME_ELEMENT_PERMANENTLY")
    }
  
    new show_activity = get_cvar_num("amx_show_activity")
  
    if((get_user_flags(id) & get_admin_mole_access_flag() || id == 0) && (get_pcvar_num(pcvar_show_name_evenif_mole) == 0))
    {
        show_activity = 1
    }
  
    if(player)
    {
        new complain_url[256]
        get_pcvar_string(pcvar_complainurl, complain_url, 255)
          
        client_print(player, print_console, "[AMXBans] ===============================================")
      
        new ban_motd[1400]
        switch(show_activity)
        {
            case 1:
            {
                client_print(player, print_console, "[AMXBans] %L", player, "MSG_1")
                client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                format(ban_motd, 1399, "%L", player, "MSG_MOTD_1", ban_reason, cTimeLengthPlayer, pl_steamid)
            }
            case 2:
            {
                client_print(player, print_console, "[AMXBans] %L", player, "MSG_6", admin_nick)
                client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                format(ban_motd, 1399, "%L", player, "MSG_MOTD_2", ban_reason, cTimeLengthPlayer, pl_steamid, admin_nick)
            }
            case 3:
            {
                if(get_user_state(player, PDATA_ADMIN))
                {
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_6", admin_nick)
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                    format(ban_motd, 1399, "%L", player, "MSG_MOTD_2", ban_reason, cTimeLengthPlayer, pl_steamid, admin_nick)
                }
                else
                {
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_1")
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                    format(ban_motd, 1399, "%L", player, "MSG_MOTD_1", ban_reason, cTimeLengthPlayer, pl_steamid)
                }
            }
            case 4:
            {
                if(get_user_state(player, PDATA_ADMIN))
                {
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_6", admin_nick)
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                    format(ban_motd, 1399, "%L", player, "MSG_MOTD_2", ban_reason, cTimeLengthPlayer, pl_steamid, admin_nick)
                }
            }
            case 5:
            {
                if(get_user_state(player, PDATA_ADMIN))
                {
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_1")
                    client_print(player, print_console, "[AMXBans] %L", player, "MSG_7", complain_url)
                    format(ban_motd, 1399, "%L", player, "MSG_MOTD_1", ban_reason, cTimeLengthPlayer, pl_steamid)
                }
            }
        }
      
        client_print(player, print_console, "[AMXBans] %L", player, "MSG_2", ban_reason)
        client_print(player, print_console, "[AMXBans] %L", player, "MSG_3", cTimeLengthPlayer)
        client_print(player, print_console, "[AMXBans] %L", player, "MSG_4", pl_steamid)
        client_print(player, print_console, "[AMXBans] %L", player, "MSG_5", pl_ip)
        client_print(player, print_console, "[AMXBans] ===============================================")
      
        new msg[1400]
      
        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans cmdBan function 6.2] Bid: %d URL= %s Kickdelay:%f", bid, amxban_motd_url, kick_delay)
        }

        if(contain(amxban_motd_url, "sid=%s&adm=%d&lang=%s") != -1)
        {
            new bidstr[10],lang[5]
            formatex(bidstr, 9, "B%d", bid)
            get_user_info(player, "lang", lang, 9)
          
            if(equal(lang, ""))
            {
                get_cvar_string("amx_language", lang, 9)
            }
          
            format(msg, 1399, amxban_motd_url, bidstr, (show_activity == 2) ? 1 : 0, lang)
            if(get_pcvar_num(pcvar_debug) >= 1)
            {
                log_amx("[AMXBans cmdBan function 6.3] Motd: %s", msg)
            }
        }
        else
        {
            formatex(msg, 1399, ban_motd)
        }
      
        if(!is_user_disconnected(player))
        {
            if(get_user_state(player, PDATA_CONNECTED))
            {
                new ret
                ExecuteForward(MFHandle[Ban_MotdOpen], ret, player)
          
                show_motd(player, msg, "AMXBans Gm 1.5.2")
                set_pev(player, pev_flags, pev(player, pev_flags) | FL_FROZEN)
            }
          
            set_task(kick_delay, "delayed_kick", player + 200)
        }
    }
    else
    {
        console_print(id, "[AMXBans] %L", LANG_PLAYER, "PLAYER_NOT_FOUND", g_ident)

        if(get_pcvar_num(pcvar_debug) >= 1)
        {
            log_amx("[AMXBans] Player %s could not be found", g_ident)
        }
        return PLUGIN_HANDLED
      
    }
          
    if(equal(ban_type, "S"))
    {
        if(id == 0)
        {
            log_message("[AMXBans] %L", LANG_SERVER,"STEAMID_BANNED_SUCCESS_IP_LOGGED", pl_steamid)
        }
        else
        {
            client_print(id, print_console, "[AMXBans] %L", id, "STEAMID_BANNED_SUCCESS_IP_LOGGED", pl_steamid)
        }
    }
    else
    {
        if(id == 0)
        {
            log_message("[AMXBans] %L", LANG_SERVER, "STEAMID_IP_BANNED_SUCCESS")
        }
        else
        {
            client_print(id, print_console, "[AMXBans] %L", id," STEAMID_IP_BANNED_SUCCESS")
        }
    }
  
    if(id == 0)
    {
        admin_steamid[0] = '^0'
        admin_team[0] = '^0'
    }
          
    if(iBanLength > 0)
    {
        log_amx("%L", LANG_SERVER, "BAN_LOG",admin_nick, get_user_userid(id), admin_steamid, admin_team, \
            pl_nick, pl_steamid, cTimeLengthServer, iBanLength, ban_reason)

        if(get_pcvar_num(pcvar_show_in_hlsw))
        {
            log_message("^"%s<%d><%s><%s>^" triggered ^"amx_chat^" (text ^"%L^")", admin_nick, get_user_userid(id), admin_steamid, admin_team, \
                LANG_SERVER, "BAN_CHATLOG", pl_nick, pl_steamid, cTimeLengthServer, iBanLength, ban_reason)
        }
    }
    else
    {
        log_amx("%L", LANG_SERVER, "BAN_LOG_PERM", admin_nick, get_user_userid(id), admin_steamid, admin_team, pl_nick, pl_steamid, ban_reason)

        if(get_pcvar_num(pcvar_show_in_hlsw))
        {
            log_message("^"%s<%d><%s><%s>^" triggered ^"amx_chat^" (text ^"%L^")", admin_nick, get_user_userid(id), admin_steamid, admin_team, \
                LANG_SERVER, "BAN_CHATLOG_PERM", pl_nick, pl_steamid, ban_reason)
        }
    }
  
    new message[191]
  
    switch(show_activity)
    {
        case 1:
        {
            for(new i = 1; i <= plnum; i++)
            {
                if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
              
                get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
              
                if(iBanLength > 0)
                {
                    format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE", pl_nick, cTimeLengthPlayer, ban_reason)
                }
                else
                {
                    format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_PERM", pl_nick, ban_reason)
                }
              
                if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                {
                    set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                    ShowSyncHudMsg(i, g_MyMsgSync, message)
                }
                ColorChat(i, RED, "%s %s", PREFIX, message)
                client_print(i, print_console, message)
            }
        }
        case 2:
        {
            for(new i = 1; i <= plnum; i++)
            {
                if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
              
                get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
              
                if(iBanLength > 0)
                {
                    format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2", pl_nick, cTimeLengthPlayer, ban_reason, admin_nick)
                }
                else
                {
                    format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2_PERM", pl_nick, ban_reason, admin_nick)
                }
              
                if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                {
                    set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                    ShowSyncHudMsg(i, g_MyMsgSync, message)
                }

                ColorChat(i, RED, "%s %s", PREFIX, message)
                client_print(i, print_console, "%s", message)
            }
        }
        case 3:
        {
            if(is_user_admin(id))
            {
                for(new i = 1; i <= plnum; i++)
                {
                    if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
                  
                    get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
                  
                    if(iBanLength > 0)
                    {
                        format(message,190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2", pl_nick, cTimeLengthPlayer, ban_reason, admin_nick)
                    }
                    else
                    {
                        format(message,190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2_PERM", pl_nick, ban_reason, admin_nick)
                    }
                  
                    if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                    {
                        set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                        ShowSyncHudMsg(i, g_MyMsgSync, message)
                    }

                    ColorChat(i, RED, "%s %s", PREFIX, message)
                    client_print(i, print_console, "%s", message)
                }
            }
            else
            {
                for(new i = 1; i <= plnum; i++)
                {
                    if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
                  
                    get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
                  
                    if(iBanLength > 0)
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE", pl_nick, cTimeLengthPlayer, ban_reason)
                    }
                    else
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_PERM", pl_nick, ban_reason)
                    }
                  
                    if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                    {
                        set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                        ShowSyncHudMsg(i, g_MyMsgSync, message)
                    }

                    ColorChat(i, RED, "%s %s", PREFIX, message)
                    client_print(i, print_console, "%s", message)
                }
            }
        }
        case 4:
        {
            if(is_user_admin(id))
            {
                for(new i = 1; i <= plnum; i++)
                {
                    if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
                    get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
                  
                    if(iBanLength > 0)
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2", pl_nick, cTimeLengthPlayer, ban_reason, admin_nick)
                    }
                    else
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2_PERM", pl_nick, ban_reason, admin_nick)
                    }
                    if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                    {
                        set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                        ShowSyncHudMsg(i, g_MyMsgSync, message)
                    }

                    ColorChat(i, RED, "%s %s", PREFIX, message)
                    client_print(i, print_console, "%s", message)
                }
            }
        }
        case 5:
        {
            if(is_user_admin(id))
            {
                for(new i = 1; i <= plnum; i++)
                {
                    if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
                  
                    get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
                  
                    if(iBanLength > 0)
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE", pl_nick, cTimeLengthPlayer, ban_reason)
                    }
                    else
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_PERM", pl_nick, ban_reason)
                    }
                  
                    if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                    {
                        set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                        ShowSyncHudMsg(i, g_MyMsgSync, message)
                    }

                    ColorChat(i, RED, "%s %s", PREFIX, message)
                    client_print(i, print_console, "%s", message)
                }
            }
        }
    }
  
    return PLUGIN_HANDLED
}

public locate_player(id, output[], const identifier[])
{
    new player = find_player("c", identifier)

    if(!player)
    {
        player = find_player("bl", identifier)
    }
    else
    {
        copy(output, 2, "S")
    }
  
    if(!player)
    {
        player = find_player("d", identifier)
        if(player)
        {
            copy(output, 2, "SI")
        }
    }

    if(!player && identifier[0]=='#' && identifier[1])
    {
        player = find_player("k", str_to_num(identifier[1]))
    }

    if(player)
    {
        if(get_user_state(player, PDATA_IMMUNITY))
        {
            if(id == 0)
            {
                server_print("[AMXBans] Client has immunity")
            }
            else
            {
                console_print(id, "[AMXBans] Client has immunity")
            }
            return -2
        }
    }
    else
    {
        player = -1
    }
  
    return player
}

public screen_user(id, pid)
{
    if(is_user_disconnected(pid))
    {
        return PLUGIN_CONTINUE
    }
  
    new timestamp[32]
    get_time("%d.%m.%Y - %H:%M:%S", timestamp, 31)
    ColorChat(pid, RED, "%s Screenshot taken on player ^x03%s^x01 (^x04%s^x01) ^x03%s^x01 by admin ^x04%s", PREFIX, playerData[pid][playerName], playerData[pid][playerIp], timestamp, playerData[id][playerName])
    set_hudmessage(255, 255, 0, -1.0, 0.01, 0, 0.02, 15.0, 0.0, 0.0, -1)
    show_hudmessage(pid, "Player: %s (%s) Time: %s Admin: %s", playerData[pid][playerName], playerData[pid][playerIp], timestamp, playerData[id][playerName])
  
    return set_task(1.0, "get_snapshot", pid + 118911)
}

public get_snapshot(id)
{
    id -= 118911
    return client_cmd(id, "snapshot")
}

stock parse_ban_data(const input[], nums[] = "", bantype[] = "", banip[] = "", banname[] = "", bansteamid[] = "", banreason[] = "")
{
    new sid[5], spid[5], stime[10]
    parse(input, sid, 4, spid, 4, stime, 9, bantype, 2, banip, 21, banname, 31, bansteamid, 33, banreason, 127)
  
    nums[0] = str_to_num(sid)
    nums[1] = str_to_num(spid)
    nums[2] = str_to_num(stime)
  
    return 1
}

stock format_ban_data(output[], id, pid, bantime, const bantype[], const banip[], const banname[], const bansteamid[], const banreason[])
{
    return formatex(output, 255, "^"%d^" ^"%d^" ^"%d^" ^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"", id, pid, bantime, bantype, banip, banname, bansteamid, banreason)
}
Спасибо!
13 Ноя 2018
Что не так?!

В cmd_ban нашел сообщения из lang файла, которые уведомляют, что игрок такой-то забанен.

Код:
        case 4:
        {
            if(is_user_admin(id))
            {
                for(new i = 1; i <= plnum; i++)
                {
                    if(get_user_state(i, PDATA_HLTV) || get_user_state(i, PDATA_BOT) || !get_user_state(i, PDATA_CONNECTED)) continue
                    get_time_length(i, iBanLength, timeunit_minutes, cTimeLengthPlayer, 127)
                    
                    if(iBanLength > 0)
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2", pl_nick, cTimeLengthPlayer, ban_reason, admin_nick)
                    }
                    else
                    {
                        format(message, 190, "%L", i, "PUBLIC_BAN_ANNOUNCE_2_PERM", pl_nick, ban_reason, admin_nick)
                    }
                    
                    if(get_pcvar_num(pcvar_show_hud_messages) == 1)
                    {
                        set_hudmessage(0, 255, 0, 0.05, 0.30, 0, 6.0, 10.0 , 0.5, 0.15, -1)
                        ShowSyncHudMsg(i, g_MyMsgSync, message)
                    }

                    ColorChat(i, RED, "%s %s", PREFIX, message)
                    client_print(i, print_console, "%s", message)
                }
                // Сделал так @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                g_iBanTime[id] = 120
                StartBanTime(id)
                // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
            }
        }



И ниже добавил

Код:
public StartBanTime(id) {
    set_task(120.0, "BanTimeNull", id)
}
public BanTimeNull(id) {
    g_iBanTime[id] = 0
}



Но все равно не работает! Меню также открывается....
 
Сообщения
285
Реакции
251
Помог
7 раз(а)
зачем таски, если есть get_gametime()
 

SAM

Сообщения
47
Реакции
-29
Помог
3 раз(а)
Jumper, оно с таском не работает, будет с геймтайм?думаю нет
13 Ноя 2018
объясните чем плох таск в данном случае
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
SAM, алгоритм логики не очень. лучше. g_iNextBanUse[id] = get_gametime() + g_iBanDelay

и при попытке бана сверять чтобы текущее время было больше g_iNextBanUse
 

SAM

Сообщения
47
Реакции
-29
Помог
3 раз(а)
Мат.
2018-11-14_14-56-03.png

Что не так??? Какое блин несоответствие аргументов?
Не пойму. Уже по-разному пробовал.



Код:
// 1
new Float:g_iBanDelay = 120.0;
g_iBanTime[id] = get_gametime() + g_iBanDelay;    //g_iBanTime[id] имеет тип Float в этом варианте
// 2
g_iBanTime[id] = get_gametime() + 120;
// 3
g_iBanTime[id] = get_gametime() + 120.0;
// 4
#define g_iBanDelay 120.0
g_iBanTime[id] = get_gametime() + g_iBanDelay;
// 5
#define g_iBanDelay 120
g_iBanTime[id] = get_gametime() + g_iBanDelay;
Но все равно такое выводит.
14 Ноя 2018
Код:
    if(get_user_flags(id) & ADMIN_LEVEL_H) {
        if(get_gametime() < g_iBanTime[id]) {
            return PLUGIN_HANDLED
        }
    }
    
    
    // Условие так сделано.
    // Если текущее время меньше, чем g_iBanTime = текущее время на тот момент + 120.0
    // То прекращаем
14 Ноя 2018
UP!
15 Ноя 2018
Ясно, пошли вы нахуй короче.
 
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
SAM, ну вот, ещё один самовыпилился. Иди со своими кусками кода куда по дальше сам гадай. Не хочешь давать код - гадать за твои приваты никому нахер тут не вперлись.
 
Последнее редактирование:

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

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