Русское сообщество по скриптингу

Немного о новой системе меню AMXX

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Немного о новой системе меню AMXX

Сообщение Матвей » 29 мар 2012, 00:42

Итак с начнём с часто задаваемых вопросов на форуме.

Пример меню в новой системе:
[pawn]
  1. #include <amxmodx>

  2.  

  3. public plugin_init()

  4. {

  5.     // Данные вашего плагина

  6.  

  7.     // Клиентская команда для вызова меню

  8.     register_clcmd("my_menu", "My_Menu")

  9. }

  10.  

  11. // Создадим функцию, которая будет формировать меню

  12. public My_Menu(id)

  13. {

  14.     // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем

  15.     new i_Menu = menu_create("\rTitle of my menu:", "menu_handler")

  16.  

  17.     // Теперь добавим некоторые опции для меню

  18.     menu_additem(i_Menu, "\wFirst option #1", "1", 0)

  19.     menu_additem(i_Menu, "\wSecond option #2", "2", 0)

  20.     menu_additem(i_Menu, "\wAdmin option #3", "3", ADMIN_ADMIN)

  21.  

  22.     // Устанавливаем свойства меню

  23.     menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)

  24.  

  25.     // Отображение меню игроку

  26.     menu_display(id, i_Menu, 0)

  27.  }

  28.  

  29. // Создадим теперь функцию обработки действий меню

  30. public menu_handler(id, menu, item)

  31. {

  32.     // Если игрок нажал выход из меню

  33.     if (item == MENU_EXIT)

  34.     {

  35.         // Уничтожение меню

  36.         menu_destroy(menu)

  37.        

  38.         return PLUGIN_HANDLED

  39.     }

  40.  

  41.     // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции

  42.     new s_Data[6], s_Name[64], i_Access, i_Callback

  43.  

  44.     // Получаем информацию об опции

  45.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  46.  

  47.     // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию

  48.     // В данном случае вся информация - целочисленная

  49.     new i_Key = str_to_num(s_Data)

  50.  

  51.     // Теперь найдем, какая именно опция была использована

  52.     switch(i_Key)

  53.     {

  54.         case 1:

  55.         {

  56.             client_print(id, print_chat, "You selected first option")

  57.             // Уничтожение меню

  58.             menu_destroy(menu)

  59.             return PLUGIN_HANDLED

  60.         }

  61.         case 2:

  62.         {

  63.             client_print(id, print_chat, "You selected second option")

  64.         }

  65.         case 3:

  66.         {

  67.             client_print(id, print_chat, "You selected admin option")

  68.         }

  69.     }

  70.  

  71.     // Уничтожение меню

  72.     menu_destroy(menu)

  73.     return PLUGIN_HANDLED

  74.  }
[/pawn]
_____________________________________________________
Делаем "Далее, Назад" на одной кнопке
Этим же убираем нумерацию страницы 1\2

При этом нужно в одном плагине создать 2 меню из новой системе.
Обязательно меню №1 должно быть с 8 пунктами
[pawn]
  1. #include <amxmodx>

  2.  

  3. public plugin_init()

  4. {

  5.     // Данные вашего плагина

  6.  

  7.     // Клиентская команда для вызова меню

  8.     register_clcmd("my_menu", "My_Menu") // First Menu

  9.         register_clcmd("my_menu2", "My_Menu2") // Second Menu

  10. }

  11.  

  12. // Создадим функцию, которая будет формировать меню

  13. public My_Menu(id)

  14. {

  15.     // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем

  16.     new i_Menu = menu_create("\rTitle of my menu:", "menu_handler")

  17.  

  18.     // Теперь добавим некоторые опции для меню

  19.     menu_additem(i_Menu, "\wTest #1", "1")

  20.     menu_additem(i_Menu, "\wTest #2", "2")

  21.     menu_additem(i_Menu, "\wTest #3", "3")

  22.         menu_additem(i_Menu, "\wTest #4", "4")

  23.         menu_additem(i_Menu, "\wTest #5", "5")

  24.         menu_additem(i_Menu, "\wTest #6", "6")

  25.         menu_additem(i_Menu, "\wTest #7", "7")

  26.         menu_additem(i_Menu, "\wTest #8^n", "8")

  27.        

  28.         menu_additem(i_Menu, "\wNext menu", "9")

  29.         menu_additem(i_Menu, "\wExit", "0")

  30.  

  31.     // Устанавливаем свойства меню

  32.     menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)

  33.         menu_setprop(i_menu, MPROP_PERPAGE, 0) // максимальность итемов на 1 страницы.

  34.  

  35.     // Отображение меню игроку

  36.     menu_display(id, i_Menu, 0)

  37.  }

  38.  

  39. // Создадим теперь функцию обработки действий меню

  40. public menu_handler(id, menu, item)

  41. {

  42.     // Если игрок нажал выход из меню

  43.     if (item == MENU_EXIT)

  44.     {

  45.         // Уничтожение меню

  46.         menu_destroy(menu)

  47.        

  48.         return PLUGIN_HANDLED

  49.     }

  50.  

  51.     // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции

  52.     new s_Data[6], s_Name[64], i_Access, i_Callback

  53.  

  54.     // Получаем информацию об опции

  55.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  56.  

  57.     // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию

  58.     // В данном случае вся информация - целочисленная

  59.     new i_Key = str_to_num(s_Data)

  60.  

  61.     // Теперь найдем, какая именно опция была использована

  62.     switch(i_Key)

  63.     {

  64.         case 1: // Test

  65.                

  66.                 case 2: // Test

  67.                                

  68.                 case 3: // Test

  69.                                        

  70.                 case 4: // Test

  71.                                                                

  72.                 case 5: // Test

  73.                                                                        

  74.                 case 6: // Test

  75.                

  76.                 case 7: // Test

  77.                                

  78.                 case 8: // Test

  79.                

  80.                 case 9: // client_cmd(id, "my_menu2")

  81.                

  82.                 case 0: // menu_destroy(menu)

  83.  

  84.     }

  85.  

  86.     // Уничтожение меню

  87.     menu_destroy(menu)

  88.     return PLUGIN_HANDLED

  89.  }

  90.  

  91.  // Создадим функцию, которая будет формировать меню 2

  92. public My_Menu2(id)

  93. {

  94.     // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем

  95.     new i_Menu = menu_create("\rTitle of my menu2:", "menu_handler2")

  96.  

  97.     // Теперь добавим некоторые опции для меню

  98.     menu_additem(i_Menu, "\wTest2 #1", "1")

  99.     menu_additem(i_Menu, "\wTest2 #2", "2")

  100.     menu_additem(i_Menu, "\wTest2 #3", "3")

  101.         menu_additem(i_Menu, "\wTest2 #4", "4")

  102.         menu_additem(i_Menu, "\wTest2 #5", "5")

  103.         menu_additem(i_Menu, "\wTest2 #6", "6")

  104.         menu_additem(i_Menu, "\wTest2 #7", "7")

  105.         menu_additem(i_Menu, "\wTest2 #8^n", "8")

  106.        

  107.         menu_additem(i_Menu, "\wBack menu", "9")

  108.         menu_additem(i_Menu, "\wExit", "0")

  109.  

  110.     // Устанавливаем свойства меню

  111.     menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)

  112.         menu_setprop(i_menu, MPROP_PERPAGE, 0) // максимальность итемов на 1 страницы.

  113.  

  114.     // Отображение меню игроку

  115.     menu_display(id, i_Menu, 0)

  116.  }

  117.  

  118. // Создадим теперь функцию обработки действий меню

  119. public menu_handler2(id, menu, item)

  120. {

  121.     // Если игрок нажал выход из меню

  122.     if (item == MENU_EXIT)

  123.     {

  124.         // Уничтожение меню

  125.         menu_destroy(menu)

  126.        

  127.         return PLUGIN_HANDLED

  128.     }

  129.  

  130.     // Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции

  131.     new s_Data[6], s_Name[64], i_Access, i_Callback

  132.  

  133.     // Получаем информацию об опции

  134.     menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

  135.  

  136.     // Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию

  137.     // В данном случае вся информация - целочисленная

  138.     new i_Key = str_to_num(s_Data)

  139.  

  140.     // Теперь найдем, какая именно опция была использована

  141.     switch(i_Key)

  142.     {

  143.         case 1: // Test2

  144.                

  145.                 case 2: // Test2

  146.                                

  147.                 case 3: // Test2

  148.                                        

  149.                 case 4: // Test2

  150.                                                                

  151.                 case 5: // Test2

  152.                                                                        

  153.                 case 6: // Test2

  154.                

  155.                 case 7: // Test2

  156.                                

  157.                 case 8: // Test2

  158.                

  159.                 case 9: // client_cmd(id, "my_menu")

  160.                

  161.                 case 0: // menu_destroy(menu)

  162.  

  163.     }

  164.  

  165.     // Уничтожение меню

  166.     menu_destroy(menu)

  167.     return PLUGIN_HANDLED

  168.  }

  169.  
[/pawn]

_____________________________________________________

Делаем строку меню мультиязычным:
[pawn]
  1.  

  2. new msg[64]

  3.  

  4. public plugin_init()  register_dictionary("menu.txt")

  5.  

  6. public my_menu(id)

  7. {

  8. // code......

  9.  

  10.  

  11. formatex(msg, charsmax(msg), "%L", LANG_PLAYER, "MENU_TEST_1")

  12. menu_additem(i_menu, msg, "1")

  13. }
[/pawn]
Создаём menu.txt
закидываем cstrike/addons/amxmodx/data/lang
прописываем в нём
[spoiler][ru]
MENU_TEST_1 = Ваше название
[en]
MENU_TEST_1 = You name[/spoiler]

_____________________________________________________

Переводим Next, Back, Exit на русский
[pawn]
  1. menu_setprop(i_menu , MPROP_NEXTNAME, "Далее")

  2. menu_setprop(i_menu , MPROP_BACKNAME, "Назад")

  3. menu_setprop(i_menu , MPROP_EXITNAME, "Выход")

  4. menu_setprop(i_menu , MPROP_EXIT, MEXIT_ALL)
[/pawn]

_____________________________________________________
Аватара пользователя
Матвей
 
Сообщения: 1064
Зарегистрирован: 11 дек 2011, 14:32
Откуда: Украина
Благодарил (а): 164 раз.
Поблагодарили: 161 раз.

Re: Немного о новой системе меню AMXX

Сообщение DJ_WEST » 15 апр 2012, 23:55

.ы. творение не мое, выдали яша и гоша на первой же строчке...

Вы должны зарегистрироваться, чтобы видеть ссылки.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2

Пред.

Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3