Настало время показать наше меню игроку. Делается это с помощью функции menu_display.
Для тех кто не читал предыдущие материалы, напоминаю:прежде чем показать игроку меню, его нужно сначала создать, добавить в него пункты меню и не забыть про функцию обработчик.
Инфо из newmenu.inc:
/**
* Displays a menu to one client. This should never be called from a handler
* when the item is less than 0 (i.e. calling this from a cancelled menu will
* result in an error).
*
* @param id Client index.
* @param menu Menu resource identifier.
* @param page Page to start from (starting from 0).
* @noreturn
* @error Invalid menu resource or client index.
*/
native menu_display(id, menu, page=0);
Синтаксис:
menu_display ( id, menu, page )
- id - Индекс игрока
- menu - Идентификатор меню ( какое меню открыть, мало ли у вас их 10 штук в одном плагине)
- page - Номер страницы меню, с какой необходимо открыть меню ( ну например не с первой, а сразу с пятой страницы или когда идет переход на следующую страницу меню)
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[newmenu.inc] menu_display"
#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")
/* Menu TEST */
mTEST = menu_create("TEST", "mh_TEST")
mcbTEST = menu_makecallback("mcb_TEST")
menu_additem(mTEST, "Menu test 1", "ma_TEST", ADMIN_ALL, mcbTEST)
menu_additem(mTEST, "Menu test 2", "ma_TEST", ADMIN_ALL, mcbTEST)
/* Menu End */
}
public func_menu(id){
//Функция показывает меню,
//которое было сформировано еще в plugin_init
menu_display(id, mTEST, 0)
}
/* Menu TEST */
public mh_TEST(id, menu, item) {
// Функция вызывается при выборе одного из пунктов меню
}
public mcb_TEST(id, menu, item) {
// Тут код для активации/де активации пунктов меню
}
Описание:
И так для наглядности Все что связано с нашим меню имеет в своих названиях слово TEST.
Грубо говоря, везде где есть это слово были произведены необходимые изменения в функциях, такие как объявление переменных или указание идентификатора.
Сама по себе работа функции показа меню очень проста:
menu_display(id, mTEST, 0)
Показываем игроку с айди таким то, меню такое то, со страницы 0 ( то есть с первой)
Если было бы в меню 30 пунктов, то можно было указать скажем с третьей страницы.И у игрока меню открылось бы сразу примерно с 23 пункта.
Функции идущие после строки
/* Menu TEST */
Это функции обработчики, одна обрабатывает пункты меню до того как они появятся у пользователя, другая после того как пользователь выберет один из пунктов.
На этом основная часть меню можно сказать сделана, остальные функции расширяют возможности нового меню.
Но о них позже.