Статус темы:
Закрыта.
  1. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    всем привет

    нужно сделать в этом меню чтоб если нету доступа к команде то тогда пункт меняется нет доступа и нажав на него он не работал
    то есть при нажатие этого пункта меню не закрывалось
    PHP:
    #include < amxmodx >

    native open_mute_menu(id)

    #define PLUGIN        "[JB] AdminMenu"
    #define VERSION        "0.1"
    #define AUTHOR        "Opo4uMapy"

    #define map_timer_change         25

    new g_Timer

    public plugin_init()
    {
        
    register_plugin(PLUGINVERSIONAUTHOR)
        
    register_clcmd("adm""adm_menu")
       
        
    g_Timer get_systime() + 60 map_timer_change
    }

    public 
    client_command(id
    {
        new 
    arg[13]
        
    read_argv(0arg 12)

        for (new 
    034a++) 
        {
            if(
    equal("amxmodmenu"arg)) 
            {
                
    client_cmd(id"adm")
                return 
    PLUGIN_HANDLED
            

        }
        return 
    PLUGIN_CONTINUE
    }

    public 
    adm_menu(id
    {
        new 
    menu menu_create("\rАдмин Меню""menu_adm")
        new 
    Buffer[256], Buffer2[256]
       
        if(
    get_user_flags(id) & ADMIN_KICK)
            
    menu_additem(menu"Кикнуть","1")
        else
            
    menu_additem(menu"Кикнуть \w[\rНедоступо\w]","1")
           
        if(
    get_user_flags(id) & ADMIN_BAN)
            
    menu_additem(menu"Забанить","2")
        else
            
    menu_additem(menu"Забанить \w[\rНедоступо\w]","2")
       
        if(
    get_user_flags(id) & ADMIN_LEVEL_A)
            
    menu_additem(menu"Ударить/Убить","3")
        else
            
    menu_additem(menu"Ударить/Убить \w[\rНедоступо\w]","3")
           
        if(
    get_user_flags(id) & ADMIN_MAP)
        {
            if(
    g_Timer get_systime())
                
    menu_additem(menu"Сменить карту","4")
            else
            {
                
    formatex(Buffercharsmax(Buffer), "\dСменить карту [\rПроиграно \y%d\r/\y%d \rмин\d]"map_timer_change - (g_Timer get_systime()) / 60map_timer_change)
                
    menu_additem(menuBuffer,"4")
            }
        }
        else
        {
            
    menu_additem(menu"Сменить карту \w[\rНедоступо\w]","4")
        }
           
        if(
    get_user_flags(id) & ADMIN_BAN)
        {
            if(
    g_Timer get_systime())
                
    menu_additem(menu"Голосование за карту","5")
            else
            {
                
    formatex(Buffer2charsmax(Buffer2), "\dГолосование за карту [\rПроиграно \y%d\r/\y%d \rмин\d]"map_timer_change - (g_Timer get_systime()) / 60map_timer_change)
                
    menu_additem(menuBuffer2,"5")
            }
        }
        else
        {
            
    menu_additem(menu"Голосование за карту \w[\rНедоступо\w]","5")
        }
        if(
    get_user_flags(id) & ADMIN_LEVEL_A)
            
    menu_additem(menu"Сделать рестарт","6")
        else
            
    menu_additem(menu"Сделать рестарт \w[\rНедоступо\w]","6")
        
    menu_setprop(menuMPROP_NEXTNAME"Дальше")
        
    menu_setprop(menuMPROP_BACKNAME"Назад")
        
    menu_setprop(menuMPROP_EXITNAME"Выход")

        
    menu_display(id,menu,0)

        return 
    PLUGIN_HANDLED
    }
         
    public 
    menu_adm(idmenuitem
    {
        if(
    item == MENU_EXIT
        {
            
    menu_destroy(menu)
            return 
    PLUGIN_HANDLED
        
    }
           
        new 
    data[6], iName[64], accesscallback
        menu_item_getinfo
    (menuitemaccessdata5iName63callback)
           
        new 
    key str_to_num(data)

        switch(
    key)
        {
            case 
    1: if(get_user_flags(id) & ADMIN_KICKclient_cmd(id"amx_kickmenu")// c
            
    case 2: if(get_user_flags(id) & ADMIN_BANclient_cmd(id"amx_banmenu")// d
            
    case 3: if(get_user_flags(id) & ADMIN_LEVEL_Aclient_cmd(id"amx_slapmenu")// e
            
    case 4:
            {
                if(
    get_user_flags(id) & ADMIN_MAP)
                {
                    if (
    g_Timer get_systime())
                        
    client_cmd(id"amx_mapmenu")
                    else 
    color_chat(id"!y[!gZP!y] Проиграно %d/%d"map_timer_change - (g_Timer get_systime()) / 60map_timer_change)
                }
            }
            case 
    5:
            {
                if(
    get_user_flags(id) & ADMIN_BAN)
                {
                    if (
    g_Timer get_systime())
                        
    client_cmd(id"amx_votemapmenu")
                    else 
    color_chat(id"!y[!gZP!y] Проиграно %d/%d"map_timer_change - (g_Timer get_systime()) / 60map_timer_change)
                }
            }
            case 
    6: if(get_user_flags(id) & ADMIN_LEVEL_Aserver_cmd("sv_restartround 1")
        }
        return 
    PLUGIN_HANDLED
    }

    stock color_chat(const id, const input[], any:...)
    {
        new 
    count 1players[32];
        static 
    msg[191];
        
    vformat(msg190input3);
       
        
    replace_all(msg190"!g""^4");
        
    replace_all(msg190"!y""^1");
        
    replace_all(msg190"!t""^3");
       
        if (
    idplayers[0] = id; else get_players(playerscount"ch");
        {
            for (new 
    0counti++)
            {
                if (
    is_user_connected(players[i]))
                {
                    
    message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i]);
                    
    write_byte(players[i]);
                    
    write_string(msg);
                    
    message_end();
                }
            }
        }
    }
    /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
    *{\\ rtf1\\ ansi\\ ansicpg1251\\ deff0\\ deflang1049{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
    */

     
  2. MakapoH. Команда форума

    Регистрация:
    06.02.16
    Сообщения:
    655
    Симпатии:
    241
    Пол:
    Мужской
    Там, где не надо чтобы закрывалось, добавляешь adm_menu(id)
    --- добавлено 05.08.16 ---
    Например:
    PHP:
    if(ya_admin[id])
        ....
    else
        
    adm_menu(id)
    В данном примере если игрок админ, то выполняется какой-либо код
    Если игрок не админ, то ему просто откроется меню ещё раз
     
  3. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    848
    Симпатии:
    287
    Пол:
    Мужской
    Вопрос, а почему бы в menu_additem не добавить условие на флаг, это бы кардинально сократило код, плюс недоступные пункты меню становились серыми да и при нажатии на них не отвечали бы если доступа нет.
    --- добавлено 05.08.16 ---
    PHP:
    /**
    * Adds an menu to a menu.
    *
    * @param menu            Menu resource identifier.
    * @param name            Item text to display.
    * @param info            Item info string for internal information.
    * @param paccess            Access required by the player viewing the menu.
    * @param callback        If set to a valid ID from menu_makecallback(), the
    *                        callback will be invoked before drawing the item.
    * @noreturn
    * @error                Invalid menu resource.
    */
    native menu_additem(menu, const name[], const info[]=""paccess=0callback=-1);
     
  4. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    а можно живой пример :D?
     
  5. Mistrick Разработчик

    Регистрация:
    13.07.15
    Сообщения:
    161
    Симпатии:
    88
    Пол:
    Мужской
    PHP:
    new text[64]; formatex(textcharsmax(text), "Кикнуть%s"get_user_flags(id) & ADMIN_KICK "" "[\rНедоступо\d]");
    menu_additem(menutext"1"ADMIN_KICK);
    Остальные по аналогии.
     
    Himera и neygomon нравится это.
  6. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @Mistrick, пробел забыл и \d перед скобкой :D
    ---
    приибалсо xDD
     
  7. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    спс всё пашет
     
  8. Mistrick Разработчик

    Регистрация:
    13.07.15
    Сообщения:
    161
    Симпатии:
    88
    Пол:
    Мужской
    @neygomon, \d не нужен, пункт автоматом закрасит серым, трата 2 байт :D
     
    pUzzlik нравится это.
  9. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
  10. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    :D а если без авто закраски:D? сколько тратить будет?
     
  11. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @Himera, автозакраска по дефу
     
  12. Morfik_59RUS Пользователь

    Регистрация:
    01.07.16
    Сообщения:
    229
    Симпатии:
    16
    Пол:
    Мужской
    Извините, я тупой :D
    Сделайте эту же блокировку с перекраской к примеру на 1й пункт админ меню, пожалуйста)
     

    Вложения:

    • menu.sma
      Размер файла:
      2 КБ
      Просмотров:
      3
  13. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    848
    Симпатии:
    287
    Пол:
    Мужской
    @Morfik_59RUS, Во первых у тебя старая система, во вторых чё за кал, в-третьих дам ответ на вопрос
    Код:
    static menu[650], iLen
    я бы заменил на это
    Код:
    static menu[512], iLen;
    new flags = get_user_flags(id);
    дальше это
    Код:
    if(get_user_flags(id) & ADMIN_BAN)
            iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r[\y1\r] \wКикнуть^n")
        else
            iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r[\y1\r] \dКикнуть^n")
    можно переписать так
    Код:
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r[\y1\r] \%sКикнуть^n", flags & ADMIN_BAN ? "w" : "d");
    Как я понял сам писал меню... для начала учись всегда ставить ; в конце строки, ну а дальше по анологии, делай но чтобы не пихать проверку в каждый пункт можно сразу сделать одну проверку записать результат в массив и просто подставлять массив в пункты, либо вообще сделать проверку на админа и запретить открывать меню смертным.

    И да зачем тебе столько пунктов, у тебя их же только 5 + выход
    Код:
    new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
    >>>
    Код:
    const KEYS = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<9);
    этого вполне хватит
    дальше не забудь тут подправить register_menu("Menu 1", keys, "func_menu")
    и тут show_menu(id, keys, menu, -1, "Menu 1");
    это все keys |= MENU_KEY_9 keys |= MENU_KEY_0 не нужный кал
    Вроде все :)
    --- добавлено 09.08.16 ---
    А еще зачем тебе эти инклуды я вообще не допёр хД
    Код:
    #include <amxmisc>
    #include <fun>
     
  14. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    Спс всем за помощь получилось вот такое меню может кому пригодится
    PHP:
    #include <amxmodx>


    #define PLUGIN        "AdminMenu"
    #define VERSION        "0.1"
    #define AUTHOR        "https://neugomon.ru/threads/2675/"


    new text[64];

    public 
    plugin_init()
    {
    register_plugin(PLUGINVERSIONAUTHOR)
    register_clcmd("adminmenu""adm_menu")
       
    }

    public 
    adm_menu(id
    {
    new 
    menu menu_create("\rАдмин Меню""menu_adm")

    formatex(textcharsmax(text), "Кикнуть%s"get_user_flags(id) & ADMIN_KICK "" " [\rНедоступо\d]");
    menu_additem(menutext"1"ADMIN_KICK);
    formatex(textcharsmax(text), "Забанить%s"get_user_flags(id) & ADMIN_BAN "" " [\rНедоступо\d]");
    menu_additem(menutext"2"ADMIN_BAN);
    formatex(textcharsmax(text), "Ударить/Убить%s"get_user_flags(id) & ADMIN_LEVEL_A "" " [\rНедоступо\d]");
    menu_additem(menutext"3"ADMIN_LEVEL_A);
    formatex(textcharsmax(text), "Сменить карту%s"get_user_flags(id) & ADMIN_MAP "" " [\rНедоступо\d]");
    menu_additem(menutext"4"ADMIN_MAP);
    formatex(textcharsmax(text), "Голосование за карту%s"get_user_flags(id) & ADMIN_BAN "" " [\rНедоступо\d]");
    menu_additem(menutext"5"ADMIN_BAN);
    formatex(textcharsmax(text), "Сделать рестарт%s"get_user_flags(id) & ADMIN_LEVEL_A "" " [\rНедоступо\d]");
    menu_additem(menutext"6"ADMIN_LEVEL_A);
    menu_setprop(menuMPROP_NEXTNAME"Дальше")
    menu_setprop(menuMPROP_BACKNAME"Назад")
    menu_setprop(menuMPROP_EXITNAME"Выход")
    menu_display(id,menu,0)
    return 
    PLUGIN_HANDLED
    }
         
    public 
    menu_adm(idmenuitem
    {
    if(
    item == MENU_EXIT
    {
    menu_destroy(menu)
    return 
    PLUGIN_HANDLED
    }
           
    new 
    data[6], iName[64], accesscallback
    menu_item_getinfo
    (menuitemaccessdata5iName63callback)
           
    new 
    key str_to_num(data)

    switch(
    key)
    {
    case 
    1client_cmd(id"amx_kickmenu")
    case 
    2client_cmd(id"amx_banmenu")
    case 
    3client_cmd(id"amx_slapmenu")
    case 
    4client_cmd(id"amx_mapmenu")
    case 
    5client_cmd(id"amx_votemapmenu")
    case 
    6server_cmd("sv_restartround 1")
    }
    return 
    PLUGIN_HANDLED
    }

     
  15. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    @Himera, про массив никогда не слышал? :)
     
  16. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
    как то так
     

    Вложения:

    • menu.sma
      Размер файла:
      1,7 КБ
      Просмотров:
      18
    pUzzlik нравится это.
  17. pUzzlik Пользователь

    Регистрация:
    06.05.15
    Сообщения:
    848
    Симпатии:
    287
    Пол:
    Мужской
    @neygomon, Ого... красаучег :) Мне нраица :)
     
  18. Himera Пользователь

    Регистрация:
    21.06.16
    Сообщения:
    73
    Симпатии:
    4
    хз я прост как могу так и делаю а что не так можете на ошибки указать чтоб их не повторять
    заранее спс
     
  19. boss_ex Пользователь

    Регистрация:
    09.06.16
    Сообщения:
    84
    Симпатии:
    14
    Пол:
    Мужской
    Один сделал ошибку "Недоступо" и все повторили:rofl:
     
  20. neygomon Его Темнейшество :j Команда форума

    Регистрация:
    26.02.15
    Сообщения:
    7.600
    Симпатии:
    4.173
    Пол:
    Мужской
Статус темы:
Закрыта.