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

    Всего на сайте: 5
    Гостей: 4
    Пользователи: - отсутствуют
    Роботы: Google Bot

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

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

    • Популярное

    Рекомендуем

    • AMX Mod X
    • up.org.ua

    Наши друзья


  • Автор: Admin Дата: 28-12-2011, 23:00 Просмотров: 3978

    menu_destroy Функция уничтожает ранее созданное меню.

    Меню можно создавать двумя разными способами:
    1. Статичное меню - создается один раз.
    2. Динамичное меню - создается многократно, обычно при каждом вызове.
    У каждого из них свои плюсы и минусы, но у второго есть еще необходимость, после того как оно отработало его удалить, иначе у вас будет происходить утечка памяти и сервер в итоге просто зависнет от нехватки оперативной памяти.
    Если же удалить статичное меню, то при попытки открыть его - сервер выдаст ошибку, о неправильном id меню.

    Инфо из newmenus.inc:
    /**
    * Destroys a menu.  Player menus will be cancelled (although may still linger
    * on the HUD), and future attempts to access the menu resource will result in
    * an error.
    *
    * This must be called if you create menus dynamically, otherwise you will
    * leak memory.  For normal dynamic menus, you will destroy the menu in the
    * handler function (remembering to handle the case of a menu being cancelled,
    * it must still be destroyed).
    *
    * @param menu            Menu resource identifier.
    * @noreturn
    * @error                Invalid menu resource.
    */
    native menu_destroy(menu);


    Синтаксис:
    menu_destroy ( menu )

    • menu - Идентификатор уничтожаемого меню.


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

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

    #include <amxmodx>
    #include <amxmisc>

    #define PLUGIN "[newmenu.inc] menu_destroy"
    #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")
        register_clcmd("say /del_menu","f_menu_destroy")
        
        mTEST = menu_create("TEST", "mh_TEST")
        mcbTEST = menu_makecallback("mcb_TEST")
        
        new szItem[64]
        for (new i=1; i < 10; i++){
            format(szItem,63,"Item %i",i)
            menu_additem(mTEST,szItem, "ma_TEST", ADMIN_ALL, mcbTEST)
        }
        menu_setprop(mTEST,MPROP_EXIT, 1)
    }
    public func_menu(id)
        menu_display(id, mTEST, 0)

    public f_menu_destroy(id)
        menu_destroy(mTEST)
        
    public mh_TEST(id, menu, item) {
        item++
        client_print(id,print_chat,"You select %d",item)
    }
    public mcb_TEST(id, menu, item){
        //callback
    }


    Описание:
    При загрузке плагина, будет создано меню и его можно будет взывать сколько угодно раз.
    Но попробуй потом ввести команду say /del_menu.
    Она вызовет функцию которая уничтожит созданное в самом начале меню и сервер в консоль выдаст ошибку:
    L 12/18/2011 - 22:51:21: Invalid menu id 0(1)
    L 12/18/2011 - 22:51:21: [AMXX] Displaying debug trace (plugin "AMXXMODX-for-site.amxx")
    L 12/18/2011 - 22:51:21: [AMXX] Run time error 10: native error (native "menu_display")
    L 12/18/2011 - 22:51:21: [AMXX]    [0] AMXXMODX-for-site.sma::func_menu (line 31)

    Так как это меню создавалось один раз при старте плагина. То есть оно статично.

    Если же вы создаете меню динамично, то есть функция menu_create вызывается многократно, то после каждого создания - необходимо его уничтожение. Иначе будет утечка памяти. что очень плохо для сервера.
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Наверх

Реклама