Главная | Комментарии | О проекте
Чтение RSS
Суперсайт
Главная Контакты Карта сайта Добавить в избранное
  • Кто OnLine

    Всего на сайте: 5
    Гостей: 3
    Пользователи: - отсутствуют
    Роботы: Mail Ru, Mail Ru

    Опрос пользователей

    Для какого мода Вы пишите плагины?

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 7-03-2012, 13:03 Просмотров: 5179

    menu_item_getinfo Функция получает данные о выбранном пункте меню

    После того как мы создали меню, добавили в него нужные пункты, создали функции обратного вызова (callback) и красиво его оформили, необходимо обработать выбор пользователя и получить необходимую информацию, а сделать это можно при помощи функции menu_item_getinfo

    Инфо из newmenus.inc:
    /**
    * Retrieves info about a menu item.
    *
    * @param menu            Menu resource identifier.
    * @param item            Item identifier.
    * @param access        Variable to store access value.
    * @param info            Buffer to store item info.
    * @param infolen        Item info buffer length.
    * @param name            Buffer to store item display text.
    * @param namelen        Item name buffer length.
    * @param callback        Callback ID.
    * @return                1 on success, 0 on failure.
    * @error                Invalid menu resource.
    */
    native menu_item_getinfo(menu, item, &access, info[], infolen, name[]="", namelen=0, &callback);


    Синтаксис:
    menu_item_getinfo(menu, item, &access, info[], infolen, name[]="", namelen=0, &callback)

    • menu - Указывается айди меню
    • item - Какой пункт выбран
    • &access, - Права доступа к пункту
    • info[] - Инфо константа из функции menu_additem
    • infolen - Длина info
    • name[]="" - Имя пункта меню
    • namelen=0 - Его длина
    • &callback - Айди функции callback
    Функция вернет 1 если все прошло успешно и 0 если нет.

    Тип функции:
    Native

    Пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[newmenu.inc] menu_item_getinfo"
    #define VERSION "1.0"
    #define AUTHOR "Admin"

    new mTEST // Menu
    new mcbTEST // Menu Callback

    public plugin_init() {
        
        register_plugin(PLUGIN, VERSION, AUTHOR)
        
        register_clcmd("say /menu","func_menu")
        
        mTEST = menu_create("TEST", "mh_TEST")
        mcbTEST = menu_makecallback("mcb_TEST")
        
        new szItem[64]
        for (new i=1; i < 25; i++){
            format(szItem,63,"Item %i",i)
            menu_additem(mTEST,szItem, "ma_TEST", ADMIN_VOTE, mcbTEST)
        }
        menu_setprop(mTEST,MPROP_EXIT, 1)
        
        new iItems
        iItems = menu_items(mTEST)
        server_print("[NewMenus] Number items:%d",iItems)
    }
    public func_menu(id){

        menu_display(id, mTEST, 0)
    }
    public mh_TEST(id, menu, item) {
        
        new s_Data[30], s_Name[64], i_Access, i_Callback
        menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
        
        console_print(id,"item[%d]",item)
        console_print(id,"Access[%d]",i_Access)
        console_print(id,"Data[%s]",s_Data)
        console_print(id,"Name[%s]",s_Name)
        console_print(id,"Callback[%d]",i_Callback)
        
    }
    public mcb_TEST(id, menu, item){
        //callback
    }


    Описание:
    В привычный пример меню, добавляем последний штрих в виде заключительной функции menu_item_getinfo, с помощью которой получим передаваемую информацию из пункта меню в функцию обработчик.

    И так, по умолчанию в функцию приходят следующие данные:
    (id, menu, item)
    Это Айди игрока, айди меню и выбранный пункт меню.
    Имея эти данные, точнее айд меню и итема, мы можем их передать в функцию menu_item_getinfo, которая в замен нам отдаст информацию о Названии пункта меню и информации из функции menu_additem(mTEST,szItem, "ma_TEST", ADMIN_VOTE, mcbTEST) , а именно "ma_TEST". Эту константу игрок не видит, мы же допустим можем туда писать номер пункта меню, так как нумерация итемов начинается с нуля и можно запутаться.

    Если я не ошибаюсь, то это последняя из функций в newmenus.inc, теперь вы можете создать любое меню.
    Главное что бы была фантазия, а не копировать чужие идеи. Удачи в творчестве.

    Ах да, вот результат из моей консоли, я выбрал 2 пункт меню:
    item[1]
    Access[512]
    Data[ma_TEST]
    Name[Item 2]
    Callback[373]
    Обратили внимание что итем 1 ,а я выбрал 2 пункт, зато имя пункта меню верное.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    Kostia-195

    --
    ICQ: --
    Публикаций: 0
    Комментариев: 0
    Репутация: -  0  +

    Я так думаю, итем 1 потому, что счёт идёт с 0. Ну да ладно, это я протестирую, если будет время, и сюда отпишусь. У меня другой вопрос: как сделать так, чтобы при вызове команды появлялся список игроков, которые сейчас на сервере, если выбрать одного из них, то на нем будет выполнена какая-то команда, как, например, в плагина "Админские преимущества", там жмешь " кикнуть" и появляется список игроков. Как реализуется это?
    Radius

    7.05.2013
    ICQ: 357188115
    Публикаций: 1
    Комментариев: 57
    Репутация: -  4  +

    Цитата: Kostia-195
    Я так думаю, итем 1 потому, что счёт идёт с 0. Ну да ладно, это я протестирую, если будет время, и сюда отпишусь. У меня другой вопрос: как сделать так, чтобы при вызове команды появлялся список игроков, которые сейчас на сервере, если выбрать одного из них, то на нем будет выполнена какая-то команда, как, например, в плагина "Админские преимущества", там жмешь " кикнуть" и появляется список игроков. Как реализуется это?


    Да, нумерация параметра item идет с нуля. По поводу меню, смотрите примеры в плагинах опытных скриптеров.

    Информация

    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Наверх

Реклама