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

    Всего на сайте: 10
    Гостей: 2
    Пользователи: SKAJIbnEJIb
    Роботы: Yandex Bot, crawl Bot, Yandex Bot, Yandex Bot, Yandex Bot, Yandex Bot, robot Bot

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 16-12-2011, 00:41 Просмотров: 4548

    menu_makecallback Функция создает обработчик обратного вызова пункта меню

    Если вам необходимо проверять и делать активным/неактивным какой то из пунктов меню, именно не активным, а не просто не показывать, то без функции
    menu_makecallback вам просто не обойтись. Функция обработчик вызывается чуть ранее чем добавляется пункт в систему меню, тем самым дает время на проверку и запрет/разрешение использование какого то пункта меню. Обратит внимание что эта функция только создает обработчик и задает идентификатор, и ни чего сама не вызывает.

    Инфо из newmenu.inc:
    /**
    * Creates a menu item callback handler.  
    *
    * The handler function should be prototyped as:
    *
    * public <function>(id, menu, item)
    *  id      - Client index being displayed to.
    *  menu    - Menu resource identifier.
    *  item    - Item being drawn.
    * <return> - ITEM_IGNORE to use the default functionality.  ITEM_ENABLED to
    *            explicitly enable or ITEM_DISABLED to explicitly disable.
    *
    * @param function        Function name.
    * @return                Menu callback ID.
    */
    native menu_makecallback(const function[]);


    Синтаксис:
    menu_makecallback ( function[] )

    • function[] - Исполняемая функция


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

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

    #include <amxmodx>
    #include <amxmisc>

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

    new mTEST // Menu
    new mcbTEST // Menu Callback

    public plugin_init() {

        register_plugin(PLUGIN, VERSION, AUTHOR)

        mTEST = menu_create("TEST", "mh_TEST")

        mcbTEST = menu_makecallback("mcb_TEST")


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

    Немного поразмыслив, решил сюда дописать готовый рабочий пример:
    /* Plugin generated by AMXX-Studio */

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[newmenu.inc] Callback"
    #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)
        
    }
    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){
        
        if(item == 0 || item == 2){
            
            return ITEM_DISABLED
        }
        return ITEM_ENABLED
    }
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
    LORDofLINEAGE

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

    чуток Автор вы вроде не правильно оформили....ВИД имеется ввиду
    True_Hacker

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

    LORDofLINEAGE,Уважай чужой труд,сам был лучше статью написал

    Информация

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

Реклама