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

Немного о новой системе меню 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

Сообщение L4D2 » 29 мар 2012, 17:24

PRoSToTeM@ писал(а):Новая система меню баговая конкретно.


:-D
На старой мне кажется проще и круче :crazy: :-)

==============================================
|| Пишу не большие плагины под заказ: Заказ онлайн (Кликабельно)
|| Ссылка на официальный топик: заказ плагинов.
|| Желаешь оставить отзыв: тебе сюда(кликни).
==============================================
Аватара пользователя
L4D2
 
Сообщения: 792
Зарегистрирован: 25 июн 2011, 19:26
Благодарил (а): 240 раз.
Поблагодарили: 100 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение Proo.Noob » 29 мар 2012, 17:35

MEXIT_NEVER чтобы убрать выход.
Plugins4You - Skype: pyshcoder
Аватара пользователя
Proo.Noob
 
Сообщения: 299
Зарегистрирован: 21 янв 2012, 11:46
Благодарил (а): 63 раз.
Поблагодарили: 49 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
PHP
LUA - изучаю.
Java - изучаю.

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

Сообщение L4D2 » 29 мар 2012, 17:56

Proo.Noob писал(а):MEXIT_NEVER чтобы убрать выход.


Спасибо сделал убрал выход.

Но как сделать всё на одной странице ?

==============================================
|| Пишу не большие плагины под заказ: Заказ онлайн (Кликабельно)
|| Ссылка на официальный топик: заказ плагинов.
|| Желаешь оставить отзыв: тебе сюда(кликни).
==============================================
Аватара пользователя
L4D2
 
Сообщения: 792
Зарегистрирован: 25 июн 2011, 19:26
Благодарил (а): 240 раз.
Поблагодарили: 100 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение Proo.Noob » 29 мар 2012, 18:16

MPROP_PERPAGE
Вроде так. Отвечает за количество итемов на странице.
Plugins4You - Skype: pyshcoder
Аватара пользователя
Proo.Noob
 
Сообщения: 299
Зарегистрирован: 21 янв 2012, 11:46
Благодарил (а): 63 раз.
Поблагодарили: 49 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
PHP
LUA - изучаю.
Java - изучаю.

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

Сообщение L4D2 » 29 мар 2012, 18:42

Proo.Noob писал(а):MPROP_PERPAGE
Вроде так. Отвечает за количество итемов на странице.

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

Я так делал он ругается на эту строку :( :dntknw:

==============================================
|| Пишу не большие плагины под заказ: Заказ онлайн (Кликабельно)
|| Ссылка на официальный топик: заказ плагинов.
|| Желаешь оставить отзыв: тебе сюда(кликни).
==============================================
Аватара пользователя
L4D2
 
Сообщения: 792
Зарегистрирован: 25 июн 2011, 19:26
Благодарил (а): 240 раз.
Поблагодарили: 100 раз.
Языки программирования: Counter-Strike 1.6

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

Сообщение Mon[str] » 29 мар 2012, 19:58

forze96 писал(а):Proo.Noob, Вот почему вы постоянно трогаете школоту? По сути я школота, Матвей школота.
И что?
Например, Матвей может дать урок многим на этом форуме. Почему если школьник, значит ничего не умеет? ошибаетесь. Я не буду говорить про себя себя, но матвей многое может сделать.

Школота - это глупый молодой организм который тупит на каждом повороте и много говорит.
Я считаю себя школьником, между этими словами есть большая разница, вот что отличает многих молодых людей которых мало на этом форуме к сожалению.
Умный подрастающий человек, в своем возрасте имеет такой большой для своих лет интелект, если еще к тому же и спортсмен.
Вот будущее России, а не те уроды которые сидят сейчас в правительстве и как то управляют страной.
Аватара пользователя
Mon[str]
 
Сообщения: 1166
Зарегистрирован: 26 июл 2011, 12:12
Откуда: Россия -> Иркутская область
Благодарил (а): 99 раз.
Поблагодарили: 273 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
C++

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

Сообщение Fedcomp » 29 мар 2012, 21:47

Школота это состояние души, и это не обязательно молодой организм.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

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

Сообщение fl0wer » 29 мар 2012, 21:55

Mon[str], ты милкшэйп тоже программируешь? :-D
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

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

Сообщение Bos93 » 30 мар 2012, 16:38

PRoSToTeM@ писал(а):Новая система меню баговая конкретно.


Чем ?

Мне например новая система меню через formatex больше нравиться,чем старая и удобная функция callback

и не нужен #include <amxmisc> ^_^
Всем добра, любви и осознанности.

Nosce animum tuum.

А осознание и есть, что понял и осмыслил..
А коль не думал ты о том, то кто о том замыслил..?
Аватара пользователя
Bos93
 
Сообщения: 1425
Зарегистрирован: 03 апр 2010, 13:44
Благодарил (а): 149 раз.
Поблагодарили: 514 раз.

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

Сообщение PRoSToTeM@ » 30 мар 2012, 16:47

Bos93 писал(а):Чем ?

Иногда открываются другие меню.
Bos93 писал(а):Мне например новая система меню через formatex больше нравиться,чем старая и удобная функция callback

Ты как callback применяешь?
Bos93 писал(а):и не нужен #include <amxmisc> ^_^

[pawn]
  1. register_menucmd(register_menuid("ololo"), MENU_KEY_1, "trololo");
[/pawn]
OR
[pawn]
  1. #define RegisterMenu(%0,%1,%2) register_menucmd(register_menuid(%0), %1, %2)
[/pawn]
Аватара пользователя
PRoSToTeM@
Скриптер
 
Сообщения: 2498
Зарегистрирован: 26 мар 2010, 00:12
Благодарил (а): 438 раз.
Поблагодарили: 1125 раз.

Пред.След.

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

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

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