- Статичное меню - создается один раз.
- Динамичное меню - создается многократно, обычно при каждом вызове.
Если же удалить статичное меню, то при попытки открыть его - сервер выдаст ошибку, о неправильном 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)
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 вызывается многократно, то после каждого создания - необходимо его уничтожение. Иначе будет утечка памяти. что очень плохо для сервера.