Инфо из 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
Тип функции:
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 пункт, зато имя пункта меню верное.Access[512]
Data[ma_TEST]
Name[Item 2]
Callback[373]