Хочу обратить ваше внимание на то, что пункты меню и заголовок меню находятся в одном массиве, а не в разных или в обще разных местах, не говоря уже о том что некоторые бывают по не опытности путаются с register_menuid, там идентификатор меню.
Инфо из amxmodx.inc:
/* Displays menu. Keys have bit values (key 1 is (1<<0), key 5 is (1<<4) etc.). */
native show_menu(index,keys,const menu[], time = -1, const title[] = "");
Синтаксис:
show_menu ( index, keys, const menu[], time = -1, title[] = "" )
- index - Айди игрока которому будет показано меню
- keys - Битовая сумма кнопок меню которые можно будет нажать игроку
#define MENU_KEY_1 (1<<0)
#define MENU_KEY_2 (1<<1)
#define MENU_KEY_3 (1<<2)
#define MENU_KEY_4 (1<<3)
#define MENU_KEY_5 (1<<4)
#define MENU_KEY_6 (1<<5)
#define MENU_KEY_7 (1<<6)
#define MENU_KEY_8 (1<<7)
#define MENU_KEY_9 (1<<8)
#define MENU_KEY_0 (1<<9) - const menu[] - Массив или отформатированная строчка с заголовком и пунктами меню.
- time = -1 - Сколько времени будет отображаться меню ( -1 бесконечно )
- title[] = "" - Идентификатор меню
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "[amxmodx.inc] show_menu"
#define VERSION "1.0"
#define AUTHOR "Admin"
#define Menu_Keys (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_menu("my_menu",Menu_Keys,"Pressed",0)
register_clcmd("say /menu","ShowMenu")
}
public ShowMenu(id) {
new menu[192]
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_0
format(menu,191,"\yYou first menu:^n^n\w1. One^n2. Two^n3. Three^n4. Five^n5. None^n^n^n0. Exit")
show_menu(id, keys, menu, -1, "my_menu")
return PLUGIN_HANDLED
}
public Pressed(id, key) {
switch (key) {
case 0:client_print(id,print_chat,"Menu N 1")
case 1:client_print(id,print_chat,"Menu N 2")
case 2:client_print(id,print_chat,"Menu N 3")
case 3:client_print(id,print_chat,"Menu N 4")
case 4:client_print(id,print_chat,"Menu N 5")
}
return PLUGIN_HANDLED
}
Описание:
Функция показа меню сама по себе очень простая, всего то необходимо указать в ней:
- id игрока кому будет показано меню ( Думаю и так все понятно)
- Какие кнопки может игрок нажать
Вот тут пару слов скажу.
Обратите внимание на строку:new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_0
Именно в этой строке указанно какие кнопки сможет нажать игрок в меню, даже если пункта меню не будет видно, нажать его можно будет.
То есть Графическое отображение и выполняемые команды не связаны на прямую. - Текст меню и заголовка.Как составляется меню:
Меню составляется в одну строку с помощью переноса строк (^n). Первая строка это будет название меню, далее что бы перенести строку необходимо поставить вот эти 2 символа^n, они означают что следующий текст будет на следующей строке. Следующая строка это и будет следующим пунктом меню.Вот так будет нагляднее выглядеть:\yYou first menu:^n^n
\w1. One^n
2. Two^n
3. Three^n
4. Five^n
5. None^n^n^n
0. Exit - Время показа ( все понятно из синтаксиса)
- id меню Необходимо указать тот айди что указывался при регистрации меню, иначе не будет вызываться исполняющаяся функция.
Собственно меню показано, пункт выбран и передана информация о игроке и пункте что он выбрал в функцию:
public Pressed(id, key) {
Внутри которой уже и происходят необходимые действия для каждого пункта.
О том как работать с этими данными и организовать многостраничность меню, расскажу в следующий раз.
А так же приведу пример как сделать меню из игроков.