Admin Auto Remove

AUF

Сообщения
91
Реакции
8
Всем привет, есть старый плагин и он работает исправно
но я хотел бы добавить в него проверку на вечного админа или запись которую нельзя перезаписывать.
C++:
#include <amxmodx>

new Admin_Days[33]
new const CONFIGS_DIR[] = "/addons/amxmodx/configs/users.ini"
#define register_cmd_list(%0,%1,%2) for (new i = 0; i < sizeof(%1); i ++) register_%0(%1[i], %2)

new const commands[][] = {
    "days", "say /days", "say_team /days"
}

public plugin_init()
{
    register_cmd_list(clcmd, commands, "CmdDays")

    new text_s[256], m_date[12], line, len
    read_file(CONFIGS_DIR, line, text_s, charsmax(text_s), len)

    trim(text_s)
    get_time("%d.%m.%Y", m_date, charsmax(m_date))

    if (equal(text_s, m_date)) return
    else write_file(CONFIGS_DIR, m_date, line)

    new admin[32], pass[32], flags[32],
    x_access[32], x_days[32], bufferd[128], days
    new iFiled = fopen(CONFIGS_DIR, "r")

    while(!feof(iFiled))
    {
        fgets(iFiled, bufferd, 255); trim(bufferd)
        if (bufferd[0] == '"' && parse(bufferd, admin, 31, pass, 31, flags, 31, x_access, 31, x_days, 31))
        {
            days = str_to_num(x_days) -1
            formatex(text_s, charsmax(text_s), "%s^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"", (days > 0) ? "" : ";", admin, pass, flags, x_access, days)
            write_file(CONFIGS_DIR, text_s, line)
        }
        line ++
    }
    fclose(iFiled)
    server_cmd("amx_reloadadmins")
}

public client_authorized(id)
{
    if (!is_user_admin(id))
        return PLUGIN_HANDLED

    new admin[32], pass[32], flags[32], x_access[32],
    x_days[32], bufferd[128], name[32], st[33], ip[33]
    new iFiled = fopen(CONFIGS_DIR, "r")

    get_user_name(id, name, 31)
    get_user_authid(id, st, 32)
    get_user_ip(id, ip, 32)

    while(!feof(iFiled))
    {
        fgets(iFiled, bufferd, 255); trim(bufferd)
        if (bufferd[0] == '"' && parse(bufferd, admin, 31, pass, 31, flags, 31, x_access, 31, x_days, 31))
        {
            if (equal(admin, name) || equal(admin, st) || equal(admin, ip))
            {
                Admin_Days[id] = str_to_num(x_days)
                return PLUGIN_HANDLED
            }
        }
    }
    fclose(iFiled)
    return PLUGIN_HANDLED
}

public CmdDays(id)
{
    new Days = Admin_Days[id]
    if (!Days) client_print_color(id, print_team_default, "^4* ^1У вас ^4Нет ^1привилегий.")
    else client_print_color(id, print_team_default, "^4* ^1До окончания привилегий осталось:^4 %d ^1дн.", Days)
}

stock is_user_admin(id)
{
    new __flags = get_user_flags(id)
    return (__flags > 0 && !(__flags & ADMIN_USER))
}

public plugin_natives()
{
    register_native("get_access_days", "native_get_access_days", 1)
}

public native_get_access_days(id)
{
    return Admin_Days[id]
}
Пробовал добавлять еще 1 аргумент типа "ADMIN" и делал на него проверку но почему то это не работает( "STEAM_ID" "PASS" "abcdefghijkltuv" "ce" "3560" "ADMIN"
хотел бы сделать вывод дней для вечного админа типа без ограничений. А то прописывать кучу дней и делать проверку типа days > 1000 = вечный админ не хотелось бы)
думал спустя столько времени этот плагин доработали или переписали но нет) в гугле ничего нету по данной теме. вроде как есть ласт версия но там тоже дичь и еще nvault прикрутили(
 
Сообщения
775
Реакции
293
Помог
11 раз(а)
@AUF,открой админ лоадер любой и посмотри реализацию, это тебя толкнет на правильную мысль
 

AUF

Сообщения
91
Реакции
8
короче пока сделал так если кому интересен именно этот плагин.
C++:
#include <amxmodx>

new Admin_Days[33]
new const CONFIGS_DIR[] = "/addons/amxmodx/configs/users.ini"

#define is_user_admin(%0) (get_user_flags(%0) > 0 && !(get_user_flags(%0) & ADMIN_USER))
#define register_cmd_list(%0,%1,%2) for (new i = 0; i < sizeof(%1); i ++) register_%0(%1[i], %2)

new const commands[][] = {
    "days", "say /days", "say_team /days"
}

public plugin_init()
{
    register_cmd_list(clcmd, commands, "CmdDays")

    new text_s[256], m_date[12], line, len
    read_file(CONFIGS_DIR, line, text_s, charsmax(text_s), len)

    trim(text_s)
    get_time("%d.%m.%Y", m_date, charsmax(m_date))

    if (equal(text_s, m_date)) return
    else write_file(CONFIGS_DIR, m_date, line)

    new admin[32], pass[32], flags[32],
    x_access[32], x_days[32], bufferd[128], days
    new iFiled = fopen(CONFIGS_DIR, "r")

    while(!feof(iFiled))
    {
        fgets(iFiled, bufferd, 255); trim(bufferd)
        if (bufferd[0] == '"' && parse(bufferd, admin, 31, pass, 31, flags, 31, x_access, 31, x_days, 31))
        {
            days = str_to_num(x_days) -1

            if (strlen(x_days))
            {
                formatex(text_s, charsmax(text_s), "%s^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%d^"", (days > 0) ? "" : ";", admin, pass, flags, x_access, days)
                write_file(CONFIGS_DIR, text_s, line)
            }
        }
        line ++
    }
    fclose(iFiled)
    server_cmd("amx_reloadadmins")
}

public client_authorized(id)
{
    if (!is_user_admin(id))
        return

    new admin[32], pass[32], flags[32], x_access[32],
    x_days[32], bufferd[128], name[32], st[33], ip[33]
    new iFiled = fopen(CONFIGS_DIR, "r")

    get_user_name(id, name, 31)
    get_user_authid(id, st, 32)
    get_user_ip(id, ip, 32)

    while(!feof(iFiled))
    {
        fgets(iFiled, bufferd, 255); trim(bufferd)
        if (bufferd[0] == '"' && parse(bufferd, admin, 31, pass, 31, flags, 31, x_access, 31, x_days, 31))
        {
            if (equal(admin, name) || equal(admin, st) || equal(admin, ip))
            {
                if (strlen(x_days))
                    Admin_Days[id] = str_to_num(x_days)
                else Admin_Days[id] = -1
            }
        }
    }
    fclose(iFiled)
}

public CmdDays(id)
{
    new Days = Admin_Days[id]

    if (Days == -1)
        client_print_color(id, print_team_default, "^4* ^1У вас ^4бесконечные ^1привилегии.")
    else if (!Days)
        client_print_color(id, print_team_default, "^4* ^1У вас ^4Нет ^1привилегий.")
    else client_print_color(id, print_team_default, "^4* ^1До окончания привилегий осталось:^4 %d ^1дн.", Days)
}

public plugin_natives()
{
    register_native("get_access_days", "native_get_access_days", 1)
}

public native_get_access_days(id)
{
    return Admin_Days[id]
}
теперь если запись без дней типа так: "Ник" "Пасс" "abcdefghijkltuv" "a" ""
то такая запись будет как админка навсегда.
если добавить дни типа: "Ник" "Пасс" "abcdefghijkltuv" "a" "30"
то по истечении 30 дней запись закомментируется и каждый день дни в записи будут уменьшатся.
вот пример с нативом из випменю типа
C++:
    #if !defined GET_ACCESS_DAYS
    iLen = formatex(szMenu, charsmax(szMenu), "\r[\yВип\r] \wWeaponMenu^n^n\
        \r1. \wВзять \yAK47^n\
        \r2. \wВзять \yM4A1^n\
        \r3. \wВзять \yFamas^n"
    )
    #else
    new days = get_access_days(id)
    if (days == -1)
    {
        iLen = formatex(szMenu, charsmax(szMenu), "\r[\yВип\r] \wWeaponMenu^n\wКол-во оставшихся дней: \r[\yБесконечно\r]^n^n\
            \r1. \wВзять \yAK47^n\
            \r2. \wВзять \yM4A1^n\
            \r3. \wВзять \yFamas^n"
        )
    }
    else if (days > 0)
    {
        iLen = formatex(szMenu, charsmax(szMenu), "\r[\yВип\r] \wWeaponMenu^n\wКол-во оставшихся дней: \r[\y%d\r]^n^n\
            \r1. \wВзять \yAK47^n\
            \r2. \wВзять \yM4A1^n\
            \r3. \wВзять \yFamas^n", days
        )
    }
    else
    {
        iLen = formatex(szMenu, charsmax(szMenu), "\r[\yВип\r] \wWeaponMenu^n^n\
            \r1. \wВзять \yAK47^n\
            \r2. \wВзять \yM4A1^n\
            \r3. \wВзять \yFamas^n"
        )
    }
    #endif
Знаю что есть куча плагинов типа admin_loader но меня интересовал именно этот для своих нужд)
знаю что код в нем так себе и будет если время перепишу) но главное функции свои выполняет как надо а это щас главное)
 

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

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