Пример меню в новой системе:
[pawn]
- #include <amxmodx>
- public plugin_init()
- {
- // Данные вашего плагина
- // Клиентская команда для вызова меню
- register_clcmd("my_menu", "My_Menu")
- }
- // Создадим функцию, которая будет формировать меню
- public My_Menu(id)
- {
- // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
- new i_Menu = menu_create("\rTitle of my menu:", "menu_handler")
- // Теперь добавим некоторые опции для меню
- menu_additem(i_Menu, "\wFirst option #1", "1", 0)
- menu_additem(i_Menu, "\wSecond option #2", "2", 0)
- menu_additem(i_Menu, "\wAdmin option #3", "3", ADMIN_ADMIN)
- // Устанавливаем свойства меню
- menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
- // Отображение меню игроку
- menu_display(id, i_Menu, 0)
- }
- // Создадим теперь функцию обработки действий меню
- public menu_handler(id, menu, item)
- {
- // Если игрок нажал выход из меню
- if (item == MENU_EXIT)
- {
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции
- new s_Data[6], 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)
- // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию
- // В данном случае вся информация - целочисленная
- new i_Key = str_to_num(s_Data)
- // Теперь найдем, какая именно опция была использована
- switch(i_Key)
- {
- case 1:
- {
- client_print(id, print_chat, "You selected first option")
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- case 2:
- {
- client_print(id, print_chat, "You selected second option")
- }
- case 3:
- {
- client_print(id, print_chat, "You selected admin option")
- }
- }
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
_____________________________________________________
Делаем "Далее, Назад" на одной кнопке
Этим же убираем нумерацию страницы 1\2
При этом нужно в одном плагине создать 2 меню из новой системе.
Обязательно меню №1 должно быть с 8 пунктами
[pawn]
- #include <amxmodx>
- public plugin_init()
- {
- // Данные вашего плагина
- // Клиентская команда для вызова меню
- register_clcmd("my_menu", "My_Menu") // First Menu
- register_clcmd("my_menu2", "My_Menu2") // Second Menu
- }
- // Создадим функцию, которая будет формировать меню
- public My_Menu(id)
- {
- // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
- new i_Menu = menu_create("\rTitle of my menu:", "menu_handler")
- // Теперь добавим некоторые опции для меню
- menu_additem(i_Menu, "\wTest #1", "1")
- menu_additem(i_Menu, "\wTest #2", "2")
- menu_additem(i_Menu, "\wTest #3", "3")
- menu_additem(i_Menu, "\wTest #4", "4")
- menu_additem(i_Menu, "\wTest #5", "5")
- menu_additem(i_Menu, "\wTest #6", "6")
- menu_additem(i_Menu, "\wTest #7", "7")
- menu_additem(i_Menu, "\wTest #8^n", "8")
- menu_additem(i_Menu, "\wNext menu", "9")
- menu_additem(i_Menu, "\wExit", "0")
- // Устанавливаем свойства меню
- menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
- menu_setprop(i_menu, MPROP_PERPAGE, 0) // максимальность итемов на 1 страницы.
- // Отображение меню игроку
- menu_display(id, i_Menu, 0)
- }
- // Создадим теперь функцию обработки действий меню
- public menu_handler(id, menu, item)
- {
- // Если игрок нажал выход из меню
- if (item == MENU_EXIT)
- {
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции
- new s_Data[6], 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)
- // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию
- // В данном случае вся информация - целочисленная
- new i_Key = str_to_num(s_Data)
- // Теперь найдем, какая именно опция была использована
- switch(i_Key)
- {
- case 1: // Test
- case 2: // Test
- case 3: // Test
- case 4: // Test
- case 5: // Test
- case 6: // Test
- case 7: // Test
- case 8: // Test
- case 9: // client_cmd(id, "my_menu2")
- case 0: // menu_destroy(menu)
- }
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- // Создадим функцию, которая будет формировать меню 2
- public My_Menu2(id)
- {
- // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
- new i_Menu = menu_create("\rTitle of my menu2:", "menu_handler2")
- // Теперь добавим некоторые опции для меню
- menu_additem(i_Menu, "\wTest2 #1", "1")
- menu_additem(i_Menu, "\wTest2 #2", "2")
- menu_additem(i_Menu, "\wTest2 #3", "3")
- menu_additem(i_Menu, "\wTest2 #4", "4")
- menu_additem(i_Menu, "\wTest2 #5", "5")
- menu_additem(i_Menu, "\wTest2 #6", "6")
- menu_additem(i_Menu, "\wTest2 #7", "7")
- menu_additem(i_Menu, "\wTest2 #8^n", "8")
- menu_additem(i_Menu, "\wBack menu", "9")
- menu_additem(i_Menu, "\wExit", "0")
- // Устанавливаем свойства меню
- menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
- menu_setprop(i_menu, MPROP_PERPAGE, 0) // максимальность итемов на 1 страницы.
- // Отображение меню игроку
- menu_display(id, i_Menu, 0)
- }
- // Создадим теперь функцию обработки действий меню
- public menu_handler2(id, menu, item)
- {
- // Если игрок нажал выход из меню
- if (item == MENU_EXIT)
- {
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
- // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции
- new s_Data[6], 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)
- // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию
- // В данном случае вся информация - целочисленная
- new i_Key = str_to_num(s_Data)
- // Теперь найдем, какая именно опция была использована
- switch(i_Key)
- {
- case 1: // Test2
- case 2: // Test2
- case 3: // Test2
- case 4: // Test2
- case 5: // Test2
- case 6: // Test2
- case 7: // Test2
- case 8: // Test2
- case 9: // client_cmd(id, "my_menu")
- case 0: // menu_destroy(menu)
- }
- // Уничтожение меню
- menu_destroy(menu)
- return PLUGIN_HANDLED
- }
_____________________________________________________
Делаем строку меню мультиязычным:
[pawn]
- new msg[64]
- public plugin_init() register_dictionary("menu.txt")
- public my_menu(id)
- {
- // code......
- formatex(msg, charsmax(msg), "%L", LANG_PLAYER, "MENU_TEST_1")
- menu_additem(i_menu, msg, "1")
- }
Создаём menu.txt
закидываем cstrike/addons/amxmodx/data/lang
прописываем в нём
[spoiler][ru]
MENU_TEST_1 = Ваше название
[en]
MENU_TEST_1 = You name[/spoiler]
_____________________________________________________
Переводим Next, Back, Exit на русский
[pawn]
- menu_setprop(i_menu , MPROP_NEXTNAME, "Далее")
- menu_setprop(i_menu , MPROP_BACKNAME, "Назад")
- menu_setprop(i_menu , MPROP_EXITNAME, "Выход")
- menu_setprop(i_menu , MPROP_EXIT, MEXIT_ALL)
_____________________________________________________