Представьте себе следующие: Вы создаете меню во время инициализации плагина, то есть это происходит 1 раз и изменить меню по идее уже ни как, по этому что бы его менять, его создание будет вынесено в отдельную функцию и оно будет создаваться при каждом вызове, что не является оптимальным.
Функция menu_item_setname может изменить пункт в меню, которое уже было создано.
Обращаю внимание, что данная функция меняет только отображаемое название, остальные свойства меняют другие функции, но они отдельно поговорим.
Инфо из newmenu.inc:
/**
* Sets an item's display text.
*
* @param menu Menu resource identifier.
* @param item Item identifier.
* @param name New item display text.
* @return 1 on success, 0 on failure.
* @error Invalid menu resource.
*/
native menu_item_setname(menu, item, const name[]);
Синтаксис:
menu_item_setname ( menu, item, name[] )
- menu - Идентификатор меню
- item - Пункт меню
- name[] - Новый текст для пункта меню
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[newmenu.inc] menu_item_setname"
#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 /SetOptions","f_SetOptions")
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_SetOptions()
menu_item_setname(mTEST,0,"New name to item")
public mh_TEST(id, menu, item) {
item++
client_print(id,print_chat,"You select %d",item)
}
public mcb_TEST(id, menu, item){
//callback
}
Описание:
В данном примере я немного причесал код, так смотрится красивее, да и правильнее.
Для того что бы оценить работу примера, зайдите на сервер и попробуйте открыть меню say /menu,
вы увидите ровный столбик имен пунктов меню. Закройте меню и выполните команду say /SetOptions, которая вызовет функцию:
public f_SetOptions()Внутри которой происходит изменение названия пункта меню.
menu_item_setname(mTEST,0,"New name to item")
Это изменение можно производить сколько угодно раз и в любое время.
Напоминаю. что функция изменяет только название пункта меню, остальные свойства изменяют функции menu_item_set***.