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

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

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

[pawn]
  1.         new callback_func = menu_makecallback ("call_func")

  2.        

  3.         new strtemp0[100];

  4.         formatex(strtemp0, charsmax(strtemp0), "%L", LANG_PLAYER, "BUYMENU_MENU2")

  5.         menu_additem(zp_cs_buymenu, strtemp0, "1", _, callback_func);
[/pawn]

__________________________________________________________________________________

[pawn]
  1. public call_func(id, menu, item)

  2. {

  3.         return (g_TimeMenu[ id ] > get_gametime( )) ? ITEM_ENABLED : ITEM_DISABLED

  4. }
[/pawn]

Можно еще добавить условий,очень удобно.
Последний раз редактировалось Bos93 08 апр 2012, 21:12, всего редактировалось 2 раз(а).
Всем добра, любви и осознанности.

Nosce animum tuum.

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

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

Сообщение Матвей » 30 мар 2012, 18:56

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

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

Сообщение Retro-kolt Lincoln » 07 апр 2012, 23:06

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

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение FellomoN » 08 апр 2012, 08:47

Программы? Видел одну на makeserver :-!
Пишу плагины на заказ.
Контакты: ICQ - 523406, Skype - fellomon .
Аватара пользователя
FellomoN
 
Сообщения: 581
Зарегистрирован: 04 авг 2011, 19:00
Откуда: взять денег?
Благодарил (а): 62 раз.
Поблагодарили: 100 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: ----------------------
Counter-Strike 1.6
----------------------

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

Сообщение Retro-kolt Lincoln » 08 апр 2012, 11:17

FellomoN писал(а):Программы? Видел одну на makeserver :-!

Главное что они есть и работают, я бы конечно некогда бы не стал ими пользоваться, думаю и как каждый уважающий себя скриптер, но главное что они есть.
Предлагаю услуги гаранта. Написание плагинов на заказ.
Статус:
на заслуженном отдыхе
Отзывы: Нажми
Обратиться ко мне: Нажми

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение Proo.Noob » 08 апр 2012, 11:18

Retro-kolt Lincoln писал(а):
FellomoN писал(а):Программы? Видел одну на makeserver :-!

Главное что они есть и работают, я бы конечно некогда бы не стал ими пользоваться, думаю и как каждый уважающий себя скриптер, но главное что они есть.


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

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

Сообщение Plrip » 09 апр 2012, 00:30

Proo.Noob писал(а):
Retro-kolt Lincoln писал(а):
FellomoN писал(а):Программы? Видел одну на makeserver :-!

Главное что они есть и работают, я бы конечно некогда бы не стал ими пользоваться, думаю и как каждый уважающий себя скриптер, но главное что они есть.


Ага, но они все равно гомно

для нубов прокатит :thumbs_up

сделали бы прогу в которой все функции вложены

Status:
Аватара пользователя
Plrip
Скриптер
 
Сообщения: 2903
Зарегистрирован: 03 дек 2011, 19:33
Откуда: Ukraine
Благодарил (а): 237 раз.
Поблагодарили: 603 раз.
Языки программирования: Counter-Strike 1.6
X-Ray
Killing-Floor [low]

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

Сообщение Proo.Noob » 09 апр 2012, 01:30

Plrip писал(а):
Proo.Noob писал(а):
Retro-kolt Lincoln писал(а):
FellomoN писал(а):Программы? Видел одну на makeserver :-!

Главное что они есть и работают, я бы конечно некогда бы не стал ими пользоваться, думаю и как каждый уважающий себя скриптер, но главное что они есть.


Ага, но они все равно гомно

для нубов прокатит :thumbs_up

сделали бы прогу в которой все функции вложены

Ага, текстбокс и кнопка сгенерировать. В текстбокс пишем например: "Хасю сервер как у сисы!!!11
!!!!!!". Нажимаешь на кнопку и он генерирует все сисовские плагины.

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

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

Сообщение Retro-kolt Lincoln » 09 апр 2012, 21:48

Зачем:
[pawn]
  1. // Уничтожение меню

  2.     menu_destroy(menu)

  3.     return PLUGIN_HANDLED

  4.  }
[/pawn]
Если есть:
[pawn]
  1. // Если игрок нажал выход из меню

  2.     if (item == MENU_EXIT)

  3.     {

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

  5.         menu_destroy(menu)

  6.        

  7.         return PLUGIN_HANDLED

  8.     }
[/pawn]
При том что если:
[pawn]
  1. case 0: // menu_destroy(menu)

  2.  

  3.     }

  4.  

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

  6.     menu_destroy(menu)

  7.     return PLUGIN_HANDLED

  8.  }
[/pawn]
получается мы два раза уничтожаем меню, потом школо юзеры будут спрашивать почему в консоли пишет ошибку :bravo:
Предлагаю услуги гаранта. Написание плагинов на заказ.
Статус:
на заслуженном отдыхе
Отзывы: Нажми
Обратиться ко мне: Нажми

- - - - - - - - - - - - - - - -
Если ваше ЛС было проигнорировано мною, знайте, оно мне не интересно.
Аватара пользователя
Retro-kolt Lincoln
 
Сообщения: 1283
Зарегистрирован: 28 авг 2010, 19:16
Благодарил (а): 321 раз.
Поблагодарили: 581 раз.
Опыт программирования: Больше трех лет
Языки программирования: ╚►Counter-Strike 1.6

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

Сообщение tavot » 10 апр 2012, 00:11

Retro-kolt Lincoln писал(а):Лучше сделай как создать меню из игроков в новой системе, потому что статей как сделать меню полно, даже программы есть которые сделают всё за тебя.

[pawn]
  1. #include <amxmodx>

  2. #include <fun>

  3.  

  4. public plugin_init()

  5. {

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

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

  8. }

  9.  

  10. public My_Menu(id)

  11. {

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

  13.     new i_Menu = menu_create("\rPlayer menu:", "menu_handler")

  14.  

  15.     // Необходимые переменные, которые понадобятся нам при выводе меню из игроков

  16.     new s_Players[32], i_Num, i_Player

  17.  

  18.     // Переменные для хранения информации об игроках

  19.     new s_Name[32], s_Player[10]

  20.  

  21.     // Получаем массив игроков

  22.     get_players(s_Players, i_Num)

  23.  

  24.     // Цикл по всем игрокам

  25.     for (new i; i < i_Num; i++)

  26.     {

  27.         // Сохраняем текущего игрока в i_Player

  28.         i_Player = s_Players[i]

  29.  

  30.         // Получаем имя и ID игрока

  31.         get_user_name(i_Player, s_Name, charsmax(s_Name))

  32.         num_to_str(i_Player, s_Player, charsmax(s_Player))

  33.  

  34.         // Добавляем опцию по данному игроку

  35.         menu_additem(i_Menu, s_Name, s_Player, 0)

  36.  

  37.     }

  38.  

  39.     // Мы сформировали меню из игроков, присутствующих на сервере, теперь выводим его

  40.     menu_display(id, i_Menu, 0)

  41. }

  42.  

  43. public menu_handler(id, menu, item)

  44. {

  45.     if (item == MENU_EXIT)

  46.     {

  47.         menu_destroy(menu)

  48.         return PLUGIN_HANDLED

  49.     }

  50.  

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

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

  53.  

  54.     // Получаем ID игрока, который был выбран в меню

  55.     new i_Player = str_to_num(s_Data)

  56.  

  57.     // Проверяем, если игрок живой

  58.     if (is_user_alive(i_Player))

  59.         // Устанавливаем его здоровье в 100 HP

  60.         set_user_health(i_Player, 100)

  61.  

  62.     menu_destroy(menu)

  63.     return PLUGIN_HANDLED

  64.  }
[/pawn]
З.ы. творение не мое, выдали яша и гоша на первой же строчке...
Amxmodx по русски на amxxmodx.ru
Скриптинг для новичков в примерах
Аватара пользователя
tavot
 
Сообщения: 611
Зарегистрирован: 13 ноя 2009, 16:47
Откуда: Питер
Благодарил (а): 104 раз.
Поблагодарили: 267 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Пред.След.

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

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

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