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

Пункт меню несколько раз в раунд.

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

Модератор: Chuvi

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

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

Пункт меню несколько раз в раунд.

Сообщение BlackSmoke » 27 ноя 2012, 12:00

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

  2.  

  3. public plugin_init()

  4. {

  5.         // Регистрируем меню.

  6.         register_menucmd(register_menuid("ExampleMenu"), 1023, "ActionExampleMenu")

  7.         // Регистрируем команду вызова.

  8.         register_clcmd("say /my_menu", "ShowMenu")

  9. }

  10.  

  11. public ShowMenu(id)

  12. {

  13.         new szMenu[512], iLen, iKey = MENU_KEY_1|MENU_KEY_0

  14.         iLen = format(szMenu[iLen], charsmax(szMenu)-iLen, "\yMy Menu:^n^n")

  15.         iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y1. \wItem 1^n")

  16.         // ...

  17.         iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\y0. \wExit")

  18.  

  19.         show_menu(id, iKey, szMenu, -1, "ExampleMenu")

  20.         return PLUGIN_HANDLED

  21. }

  22.  

  23. public ActionExampleMenu(id, key)

  24. {

  25.         switch(key)

  26.         {

  27.                 case 0: // 1

  28.                         client_print(id, print_chat, "Item 1")

  29.         }

  30.         return PLUGIN_HANDLED

  31. }
[/pawn]

Создаем нужные нам переменные:
[pawn]
  1. #define INUM1 5 // Сколько раз за раунд можно использовать.

  2. new iNum[33] // Счётчик.
[/pawn]

Событие новый раунд:
[pawn]
  1. register_event("HLTV", "logevent_round_start", "a", "1=0", "2=0")
[/pawn]
[pawn]
  1. public logevent_round_start()

  2. {

  3.         new iPlayers[32], iNums

  4.         get_players(iPlayers, iNums) // Получаем игроков

  5.         for(new i; i < iNums; i++)

  6.                 iNum[iPlayers[i]] = INUM1 // Устанавливаем число.

  7. }
[/pawn]
Показываем сколько нам осталось раз:
[pawn]
  1. iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y1. \wItem 1: \r(%d)^n", iNum[id])
[/pawn]
Блокируем пункт если переменная достигла 0:
[pawn]
  1. case 0: // 1

  2. {

  3.        if(iNum[id] <= 0) // Проверяем достигла ли 0 переменная.

  4.        {

  5.              client_print(id, print_chat, "Вы использовали свои %d раз", INUM1) // выводим сообщение

  6.              return PLUGIN_CONTINUE

  7.        }

  8.        iNum[id]-- // Отнимаем 1 от переменной (использовали 1 раз)

  9.        client_print(id, print_chat, "Item 1")

  10. }
[/pawn]
Готовый плагин:
[pawn]
  1. #include <amxmodx>

  2.  

  3. #define INUM1 5 // Сколько раз за раунд можно использовать.

  4. new iNum[33] // Счётчик.

  5.  

  6. public plugin_init()

  7. {

  8.         // Регистрируем меню.

  9.         register_menucmd(register_menuid("ExampleMenu"), 1023, "ActionExampleMenu")

  10.         // Регистрируем команду вызова.

  11.         register_clcmd("say /my_menu", "ShowMenu")

  12.         // Регистрируем новый раунд.

  13.         register_event("HLTV", "logevent_round_start", "a", "1=0", "2=0")

  14. }

  15.  

  16. public logevent_round_start()

  17. {

  18.         new iPlayers[32], iNums

  19.         get_players(iPlayers, iNums) // Получаем игроков

  20.         for(new i; i < iNums; i++)

  21.                 iNum[iPlayers[i]] = INUM1 // Устанавливаем число.

  22. }

  23.  

  24. public ShowMenu(id)

  25. {

  26.         new szMenu[512], iLen, iKey = MENU_KEY_1|MENU_KEY_0

  27.         iLen = format(szMenu[iLen], charsmax(szMenu)-iLen, "\yMy Menu:^n^n")

  28.         iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y1. \wItem 1 \r(%d)^n", iNum[id])

  29.         // ...

  30.         iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\y0. \wExit")

  31.  

  32.         show_menu(id, iKey, szMenu, -1, "ExampleMenu")

  33.         return PLUGIN_HANDLED

  34. }

  35.  

  36. public ActionExampleMenu(id, key)

  37. {

  38.         switch(key)

  39.         {

  40.                 case 0: // 1

  41.                 {

  42.                         if(iNum[id] <= 0) // Проверяем достигла ли 0 переменная.

  43.                         {

  44.                                 client_print(id, print_chat, "Вы использовали свои %d раз", INUM1) // выводим сообщение

  45.                                 return PLUGIN_CONTINUE

  46.                         }

  47.                         iNum[id]-- // Отнимаем 1 от переменной (использовали 1 раз)

  48.                         client_print(id, print_chat, "Item 1")

  49.                 }

  50.                

  51.         }

  52.         return PLUGIN_HANDLED

  53. }

  54.  
[/pawn]
Заказы принимаю Отзывы о работе
itsblacksmoke
Аватара пользователя
BlackSmoke
 
Сообщения: 1109
Зарегистрирован: 28 июл 2012, 04:33
Откуда: Ukraine
Благодарил (а): 106 раз.
Поблагодарили: 287 раз.
Опыт программирования: Около года
Языки программирования: Counter Strike 1.6

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

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

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

cron