1. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    PHP:
    #include <amxmodx>
    #include <amxmisc>
    native days_left_info(id);
    #pragma semicolon 1

    #define MAX_PLAYERS 32 // Максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)

    enum _:DATA_SIZE
    {
        
    DS_Name[48],
        
    DS_Command[32],
        
    DS_Acceess
    }

    new Array:
    g_aData;

    new 
    g_iPosition[MAX_PLAYERS 1], g_iItemsNumg_iItemsPerPage;

    public 
    plugin_init()
    {
        
    register_plugin("Admin Menu""0.0.2 alpha""Subb98 & Nesquik");
        
    register_clcmd("admin_menu""CmdAdminMenu"ADMIN_MENU"- displays Admin Menu");
        
    register_clcmd("amxmodmenu""CmdAdminMenu"ADMIN_MENU"- displays Admin Menu");
        
    register_menu("_admin_menu"1023"HandleMenu");
        new 
    szFile[64];
        
    get_configsdir(szFilecharsmax(szFile));
        
    add(szFilecharsmax(szFile), "/admin_menu.ini");

        
    register_dictionary("admin_menu.txt");
        if(
    file_exists(szFile))
        {
            
    g_aData ArrayCreate(DATA_SIZE);
            
    ReadFile(szFile);
        }
        else
        {
            new 
    szError[96];
            
    formatex(szErrorcharsmax(szError), "File ^"%s^" not found"szFile);
            
    set_fail_state(szError);
        }
    }

    public 
    CmdAdminMenu(const id, const level, const cid)
    {
        if(!
    cmd_access(idlevelcid1))
        {
            return 
    PLUGIN_HANDLED;
        }
        return 
    ShowMenu(idg_iPosition[id] = 0);
    }

    ReadFile(const szFile[])
    {
        new 
    pFile fopen(szFile"rt"), szBuffer[128], aData[DATA_SIZE], szAccess[24];
        while(!
    feof(pFile))
        {
            
    szBuffer[0] = '^0';
            
    fgets(pFileszBuffercharsmax(szBuffer));
            if(
    szBuffer[0] && szBuffer[0] != ';' && szBuffer[0] != '#')
            {
                
    aData[DS_Name][0] = '^0'aData[DS_Command][0] = '^0'szAccess[0] = '^0';
                
    parse(szBufferaData[DS_Name], charsmax(aData[DS_Name]), aData[DS_Command], charsmax(aData[DS_Command]), szAccesscharsmax(szAccess));
                if(
    aData[DS_Name][0] && aData[DS_Command][0] && szAccess[0])
                {
                    
    aData[DS_Acceess] = read_flags(szAccess);
                    
    GetLangTransKey(aData[DS_Name]) != TransKey_Bad ArrayPushArray(g_aDataaData):server_print("[MenuFront] Invalid multilang load: %s, please fix it"aData[DS_Name]);
                }
            }
        }
        
    fclose(pFile);
        
    g_iItemsNum ArraySize(g_aData);
        if(
    g_iItemsNum)
        {
            
    g_iItemsPerPage g_iItemsNum 9;
        }
        else
        {
            
    ArrayDestroy(g_aData);
            new 
    szError[96];
            
    formatex(szErrorcharsmax(szError), "File ^"%s^" is empty or incorrect"szFile);
            
    set_fail_state(szError);
        }
    }

    ShowMenu(const idiPos)
    {
        if(
    iPos 0)
        {
            return 
    PLUGIN_HANDLED;
        }
        new 
    iStartiEndiPagesNumiLenszMenu[512], aData[DATA_SIZE], iFlags get_user_flags(id), iKeys MENU_KEY_0b;
        
    iStart iPos g_iItemsPerPage;
        if(
    iStart >= g_iItemsNum)
        {
            
    iStart iPos g_iPosition[id] = 0;
        }
        
    iEnd iStart g_iItemsPerPage;
        if(
    iEnd g_iItemsNum)
        {
            
    iEnd g_iItemsNum;
        }
        
    iPagesNum g_iItemsNum g_iItemsPerPage + (g_iItemsNum g_iItemsPerPage 0);
        new 
    exp days_left_info(id)
        new 
    left[32]
        if (
    exp == 0)
        {
        
    format(left31"Не ограничен")  
        }
        else
        {
            
    num_to_str(expleft19)
        }
        if(
    iPagesNum == 1)
        {
            
    iLen formatex(szMenucharsmax(szMenu), "%s^n"id"ADMIN_MENU_TITLE"s_Exp);
        }
        else
        {
            
    iLen formatex(szMenucharsmax(szMenu), "%s^n"id"ADMIN_MENU_TITLE_PAGE"iPos 1iPagesNums_Exp);
        }
        for(new 
    iStartiEnda++)
        {
            
    ArrayGetArray(g_aDataaaData);
            if(
    iFlags aData[DS_Acceess])
            {
                
    iKeys |= (1<<b);
                
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y%d. \w%L^n", ++bidaData[DS_Name]);
            }
            else
            {
                
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\d%d. %L^n", ++bidaData[DS_Name]);
            }
        }
        if(
    iEnd g_iItemsNum)
        {
            
    iKeys |= MENU_KEY_9;
            
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y9. \w%L^n\y0. \w%L"id"MENU_NEXT"idiPos "MENU_BACK" "MENU_EXIT");
        }
        else
        {
            
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y0. \w%L"idiPos "MENU_BACK" "MENU_EXIT");
        }
        return 
    show_menu(idiKeysszMenu, -1"_admin_menu");
    }

    public 
    HandleMenu(const id, const iKey)
    {
        switch(
    iKey)
        {
            case 
    8:
            {
                if(
    g_iItemsNum 9)
                {
                    
    ShowMenu(id, ++g_iPosition[id]);
                }
                else
                {
                    
    ExecCmd(id8);
                }
            }
            case 
    9:
            {
                
    ShowMenu(id, --g_iPosition[id]);
            }
            default:
            {
                
    ExecCmd(idiKey);
            }
        }
    }

    ExecCmd(const id, const iKey)
    {
        new 
    aData[DATA_SIZE];
        
    ArrayGetArray(g_aDatag_iPosition[id] * g_iItemsPerPage iKeyaData);
        
    client_cmd(idaData[DS_Command]);
    }
    Для успешной компиляции сторонних плагинов с использованием натива, необходимо добавить строку native days_left_info(id); в инклюд (например, в amxmodx.inc)
    Добавлена строчка, но не компилирует( Помогите поправить)
     

    Вложения:

    • admin_menu.sma
      Размер файла:
      4,4 КБ
      Просмотров:
      8
    • amxbans_core.sma
      Размер файла:
      30,7 КБ
      Просмотров:
      5
  2. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    PHP:
    #include <amxmodx>
    #include <amxmisc>
    //native days_left_info(id);
    #pragma semicolon 1

    #define MAX_PLAYERS 32 // Максимальное кол-во игроков на сервере, заменить своим (по умолчанию 32)

    enum _:DATA_SIZE
    {
        
    DS_Name[48],
        
    DS_Command[32],
        
    DS_Acceess
    }

    new Array:
    g_aData;

    new 
    g_iPosition[MAX_PLAYERS 1], g_iItemsNumg_iItemsPerPage;

    public 
    plugin_init()
    {
        
    register_plugin("Admin Menu""0.0.2 alpha""Subb98 & Nesquik");
        
    register_clcmd("admin_menu""CmdAdminMenu"ADMIN_MENU"- displays Admin Menu");
        
    register_clcmd("amxmodmenu""CmdAdminMenu"ADMIN_MENU"- displays Admin Menu");
        
    register_menu("_admin_menu"1023"HandleMenu");
        new 
    szFile[64];
        
    get_configsdir(szFilecharsmax(szFile));
        
    add(szFilecharsmax(szFile), "/admin_menu.ini");

        
    register_dictionary("admin_menu.txt");
        if(
    file_exists(szFile))
        {
            
    g_aData ArrayCreate(DATA_SIZE);
            
    ReadFile(szFile);
        }
        else
        {
            new 
    szError[96];
            
    formatex(szErrorcharsmax(szError), "File ^"%s^" not found"szFile);
            
    set_fail_state(szError);
        }
    }

    public 
    CmdAdminMenu(const id, const level, const cid)
    {
        if(!
    cmd_access(idlevelcid1))
        {
            return 
    PLUGIN_HANDLED;
        }
        return 
    ShowMenu(idg_iPosition[id] = 0);
    }

    ReadFile(const szFile[])
    {
        new 
    pFile fopen(szFile"rt"), szBuffer[128], aData[DATA_SIZE], szAccess[24];
        while(!
    feof(pFile))
        {
            
    szBuffer[0] = '^0';
            
    fgets(pFileszBuffercharsmax(szBuffer));
            if(
    szBuffer[0] && szBuffer[0] != ';' && szBuffer[0] != '#')
            {
                
    aData[DS_Name][0] = '^0'aData[DS_Command][0] = '^0'szAccess[0] = '^0';
                
    parse(szBufferaData[DS_Name], charsmax(aData[DS_Name]), aData[DS_Command], charsmax(aData[DS_Command]), szAccesscharsmax(szAccess));
                if(
    aData[DS_Name][0] && aData[DS_Command][0] && szAccess[0])
                {
                    
    aData[DS_Acceess] = read_flags(szAccess);
                    
    GetLangTransKey(aData[DS_Name]) != TransKey_Bad ArrayPushArray(g_aDataaData):server_print("[MenuFront] Invalid multilang load: %s, please fix it"aData[DS_Name]);
                }
            }
        }
        
    fclose(pFile);
        
    g_iItemsNum ArraySize(g_aData);
        if(
    g_iItemsNum)
        {
            
    g_iItemsPerPage g_iItemsNum 9;
        }
        else
        {
            
    ArrayDestroy(g_aData);
            new 
    szError[96];
            
    formatex(szErrorcharsmax(szError), "File ^"%s^" is empty or incorrect"szFile);
            
    set_fail_state(szError);
        }
    }

    ShowMenu(const idiPos)
    {
        if(
    iPos 0)
        {
            return 
    PLUGIN_HANDLED;
        }
        new 
    iStartiEndiPagesNumiLenszMenu[512], aData[DATA_SIZE], iFlags get_user_flags(id), iKeys MENU_KEY_0b;
        
    iStart iPos g_iItemsPerPage;
        if(
    iStart >= g_iItemsNum)
        {
            
    iStart iPos g_iPosition[id] = 0;
        }
        
    iEnd iStart g_iItemsPerPage;
        if(
    iEnd g_iItemsNum)
        {
            
    iEnd g_iItemsNum;
        }
        
    iPagesNum g_iItemsNum g_iItemsPerPage + (g_iItemsNum g_iItemsPerPage 0);
        new 
    exp days_left_info(id);
        new 
    left[32];
        if (
    exp == 0)
        {
        
    format(left31"Не ограничен");  
        }
        else
            
    num_to_str(expleft19);
        if(
    iPagesNum == 1)
        {
            
    iLen formatex(szMenucharsmax(szMenu), "%s^n"id"ADMIN_MENU_TITLE"exp);
        }
        else
        {
            
    iLen formatex(szMenucharsmax(szMenu), "%s^n"id"ADMIN_MENU_TITLE_PAGE"iPos 1iPagesNumexp);
        }
        for(new 
    iStartiEnda++)
        {
            
    ArrayGetArray(g_aDataaaData);
            if(
    iFlags aData[DS_Acceess])
            {
                
    iKeys |= (1<<b);
                
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y%d. \w%L^n", ++bidaData[DS_Name]);
            }
            else
            {
                
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\d%d. %L^n", ++bidaData[DS_Name]);
            }
        }
        if(
    iEnd g_iItemsNum)
        {
            
    iKeys |= MENU_KEY_9;
            
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y9. \w%L^n\y0. \w%L"id"MENU_NEXT"idiPos "MENU_BACK" "MENU_EXIT");
        }
        else
        {
            
    formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y0. \w%L"idiPos "MENU_BACK" "MENU_EXIT");
        }
        return 
    show_menu(idiKeysszMenu, -1"_admin_menu");
    }

    public 
    HandleMenu(const id, const iKey)
    {
        switch(
    iKey)
        {
            case 
    8:
            {
                if(
    g_iItemsNum 9)
                {
                    
    ShowMenu(id, ++g_iPosition[id]);
                }
                else
                {
                    
    ExecCmd(id8);
                }
            }
            case 
    9:
            {
                
    ShowMenu(id, --g_iPosition[id]);
            }
            default:
            {
                
    ExecCmd(idiKey);
            }
        }
    }

    ExecCmd(const id, const iKey)
    {
        new 
    aData[DATA_SIZE];
        
    ArrayGetArray(g_aDatag_iPosition[id] * g_iItemsPerPage iKeyaData);
        
    client_cmd(idaData[DS_Command]);
    }
    хех, метод тыка:D
     
  3. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.121
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    Пробуй, если не правильный вывод сделай скриншоты меню
     

    Вложения:

    • admin_menu.amxx
      Размер файла:
      4,1 КБ
      Просмотров:
      3
  4. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    LeninChan^^,
    L 11/04/2015 - 20:10:10: String formatted incorrectly - parameter 6 (total 5)
    L 11/04/2015 - 20:10:10: [AMXX] Run time error 25 (plugin "admin_menu.amxx") - debug not enabled!
    L 11/04/2015 - 20:10:10: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
     
  5. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.121
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    damir4ik, запусти с debug плагин
     
  6. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    LeninChan^^, admin_menu.amxx debug так?
     
  7. LeninChan^^ Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.121
    Симпатии:
    368
    Пол:
    Мужской
    Telegram:
    LeninChan
    да
     
  8. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    LeninChan^^, загрузчик админов походу лаганый. Загружает долго. )минуту ровно грузит при смене карты..)
     
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.933
    Симпатии:
    4.330
    Пол:
    Мужской
    говенненькая менюшка.
    subb может лучше....
     
  10. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    neygomon, меню отличное) но загрузчик админов К-ко ко))
    минуту сервер думает. ) тоесть вообще Ж*па)
     
  11. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.933
    Симпатии:
    4.330
    Пол:
    Мужской
    damir4ik, я про код говорю
     
  12. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    тоесть я прав ?) georgeml , изменил не совсем хорошо amxbans_core ?
    просто у меня , реально сервер в аут уходит))
     
  13. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.933
    Симпатии:
    4.330
    Пол:
    Мужской
    damir4ik, amxbans_core откровенная хурма.
    проще научить admin loader мой кешить коннект для мейна
     
  14. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    он вроде у тебя еще сырой) комменты читал)
    __
    а загружает быстро,вроде) про загрузку все молчат,думаю норм все
     
  15. HannibaL Команда форума

    Регистрация:
    28.02.15
    Сообщения:
    1.058
    Симпатии:
    224
    Пол:
    Мужской
    damir4ik, не сырой, нормально работает. Для криворуких сырой xD
     
    Le$hiy нравится это.
  16. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    HannibaL, admin loader?:) насчет него не знаю) поэтому) молчу)
     
  17. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    [​IMG]
    DropMeFiles – бесплатный файлообменник без регистрации
    помогите убрать этот знак и пробел..
    [en]
    ADMIN_MENU_TITLE = Меню администратора
    ADMIN_MENU_TITLE_PAGE = Меню администратора
    AMX_KICK = Кикнуть игрока
    AMX_BAN = Забанить игрока
    AMX_SLAP = Убить/ударить игрока
    AMX_TEAM = Команда игрока
    AMX_MAP = Смена карты
    AMX_VOTEMAP = Голосование за карту
    AMX_SPEECH = Голосовые команды
    AMX_CLCMD = Команды клиента
    AMX_CMDMENU = Команды сервера
    AMX_CVARMENU = Настройки кваров
    AMX_CFGMENU = Конфигурация
    AMX_LANGMENU = Настройки языка
    AMX_STATCFGMENU = Настройки статистики
    AMX_PAUSECFGMENU = Приостановка плагинов
    AMX_RESTMENU = Запрет оружий
    AMX_TELEMENU = Телепортировать игрока
    AMX_PLUGINCVARMENU = Квары плагинов
    AMX_PLUGINCMDMENU = Команды плагинов
    AMX_VIPMENU = VIP оружейка
    AMX_WEAPONMENU = ADMIN оружейка
    AMX_GAGMENU = Заткнуть игрока
    AMX_RESTART = Сделать Рестарт (rr)
    AMX_STARTVOTE = Голосование (rtv)
    AMX_SCREEN = Сделать Скриншот
    AMX_BANDISCONNECTEDMENU = Бан отключенных
    MENU_NEXT = Далее
    MENU_BACK = Назад
    MENU_EXIT = Выход

    [ru]
    ADMIN_MENU_TITLE = Меню администратора
    ADMIN_MENU_TITLE_PAGE = Меню администратора
    AMX_KICK = Кикнуть игрока
    AMX_BAN = Забанить игрока
    AMX_SLAP = Убить/ударить игрока
    AMX_TEAM = Команда игрока
    AMX_MAP = Смена карты
    AMX_VOTEMAP = Голосование за карту
    AMX_SPEECH = Голосовые команды
    AMX_CLCMD = Команды клиента
    AMX_CMDMENU = Команды сервера
    AMX_CVARMENU = Настройки кваров
    AMX_CFGMENU = Конфигурация
    AMX_LANGMENU = Настройки языка
    AMX_STATCFGMENU = Настройки статистики
    AMX_PAUSECFGMENU = Приостановка плагинов
    AMX_RESTMENU = Запрет оружий
    AMX_TELEMENU = Телепортировать игрока
    AMX_PLUGINCVARMENU = Квары плагинов
    AMX_PLUGINCMDMENU = Команды плагинов
    AMX_VIPMENU = VIP оружейка
    AMX_WEAPONMENU = ADMIN оружейка
    AMX_GAGMENU = Заткнуть игрока
    AMX_RESTART = Сделать Рестарт (rr)
    AMX_STARTVOTE = Голосование (rtv)
    AMX_SCREEN = Сделать Скриншот
    AMX_BANDISCONNECTEDMENU = Бан отключенных
    MENU_NEXT = Далее
    MENU_BACK = Назад
    MENU_EXIT = Выход
     
  18. gudaus Команда форума

    Регистрация:
    27.02.15
    Сообщения:
    1.579
    Симпатии:
    1.170
    Пол:
    Мужской
  19. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    @gudaus, lang в спойлере )
    --- добавлено 17.01.17 ---
    ; Admin Menu 0.0.1 alpha от Subb98 - файл конфигураций
    ; синтаксис: <название_пункта_в_меню> <команда> <флаг_доступа>
    ; пример: "Удалить игрока" "amx_kickmenu" "c"
    "AMX_BAN" "amx_banmenu" "d"
    "AMX_KICK" "amx_kickmenu" "c"
    "AMX_GAGMENU" "amx_gagmenu" "c"
    "AMX_SLAP" "amx_slapmenu" "e"
    "AMX_TEAM" "amx_teammenu" "m"
    "AMX_MAP" "amx_mapmenu" "f"
    "AMX_VOTEMAP" "amx_votemapmenu" "f"
    "AMX_SCREEN" "amx_screenmenu" "d"
    "AMX_RESTART" "sv_restart 1" "d"
    "AMX_STARTVOTE" "mapm_startvote" "c"
    "AMX_VIPMENU" "vipmenu" "h"
    "AMX_WEAPONMENU" "weaponmenu" "d"
    "AMX_BANDISCONNECTEDMENU" "amx_bandisconnectedmenu" "d"
    --- добавлено 17.01.17 ---
    кодировка utf8 без бом
    --- добавлено 17.01.17 ---
    @gudaus, )) я пробовал ставить
    ADMIN_MENU_TITLE_PAGE = Меню администратора (%d/%d) в ланг файле) вообще не открывает меню
     
  20. damir4ik Пользователь

    Регистрация:
    27.07.15
    Сообщения:
    252
    Симпатии:
    20
    Пол:
    Мужской
    Иногда вообще вырубается меню:D
    [​IMG]