- Якщо ви створюється меню, опції якого не змінюються (постійні), то краще за все створити його, як глобальне. Не потрібно його знищувати і заново створювати по кілька разів.
- Якщо небхідно вирівняти текст в меню по правому краю, то використовуйте \ R.
- Меню стане нормальним, якщо у нього немає опцій.
- Для того щоб прибрати відображення меню у гравця на екрані, можна використовувати код:
Код: Виділити все show_menu (id. 0. "^ n". 1) - Список кольорів, які можна використовувати при створенні меню:
- Білий - \ w
- Жовтий - \ y
- Червоний - \ r
- Сірий - \ d
функції:
- створення меню
Код: Виділити все menu_create (title # 91; # 93 ;, handler # 91; # 93 ;, ml = 0)
title - заголовок меню, який відображений в верхній частині.
handler - функція, з якою буде відбуватися взаємодія, коли відбулося натискання однієї з опцій.
ml - використовувати багатомовність при формуванні меню. - Додавання опції меню
Код: Виділити все menu_additem (menu. Const name # 91; # 93 ;, const command # 91; # 93 ;, paccess = 0. callback = - 1)
menu - меню, з яким ми будемо взаємодіяти.
name - назва опції меню (нумерація відбувається автоматично).
command - інформація, яку ми посилаємо при використанні даної опції.
paccess - рівень доступу до даної опції (прапор адміністратора).
callback - якщо дана опція встановлена (це повинен бути результат функції menu_makecallback), то буде виклик функції до виведення опції на екран, що дасть можливість змінити опцію в реальному часі. - Установка властивостей меню
Код: Виділити все menu_setprop (menu. Prop.)
menu - меню, з яким ми будемо взаємодіяти.
prop - властивість меню. - відображення меню
Код: Виділити все menu_display (id. Menu. Page)
id - індекс гравця, якому ми повинні показати меню.
menu - меню, яке необхідно показати.
page - сторінка меню, з якої починається відображення. - знищення меню
Код: Виділити все menu_destroy (menu)
menu - меню, яке потрібно знищити. Після виклику даної функції необхідно використовувати return PLUGIN_HANDLED. - Отримання інформації про опції меню
Код: Виділити все menu_item_getinfo (menu. Item. access. command # 91; # 93 ;, cmdlen. name # 91; # 93; = "". namelen = 0. callback)
menu - меню, з якого необхідно отримати інформацію.
item - опція, про яку необхідно отримати інформацію.
access - рівень доступу для зазначеної опції.
command - дані, що передаються даною опцією.
cmdlen - довжина даних.
name - назва опції меню.
namelen - довжина назви.
callback - значення callback. - Додавання порожній опції (пропуск)
Код: Виділити все menu_addblank (menu. Slot = 1)
menu - меню, з яким необхідно провести дію.
slot - якщо значення більше 0, то збільшує прогалини в даній кількості раз.
Можна використовувати тільки після menu_additem. - Скасувати меню у гравця
Код: Виділити все menu_cancel (player)
player - гравець, у якого необхідно скасувати дію меню, меню залишиться на екрані гравця, але будь-яка дія буде анульовано. - Кількість опцій в меню
Код: Виділити все menu_items (menu)
menu - меню, у якого необхідно отримати кількість опцій. - Кількість сторінок в меню
Код: Виділити все menu_pages (menu)
menu - меню, у якого необхідно отримати кількість сторінок. - Встановити callback на опцію меню
Код: Виділити все menu_item_setcall (menu. Item. Callback = - 1)
menu - меню, з яким відбувається взаємодія.
item - опція меню.
callback - значення для callback. - Встановити команду на опцію меню
Код: Виділити все menu_item_setcmd (menu. Item. Cmd # 91; # 93;)
menu - меню, з яким відбувається взаємодія.
item - опція меню.
cmd - команда опції. - Встановити назву опції меню
Код: Виділити все menu_item_setname (menu. Item. Name # 91; # 93;)
menu - меню, з яким відбувається взаємодія.
item - опція меню.
name - назва опції. - Створення callback функції
Код: Виділити все menu_makecallback (function # 91; # 93;)
function - назва функції для callback.
Ця функція передає аргументи id гравця, id меню і id опції:
Код: Виділити все public function (id. Menu. Item)
Функція може повертати наступні значення: ITEM_IGNORE, ITEM_ENABLED або ITEM_DISABLED.
Створення базисного меню (основний приклад)
Код: Виділити все #include
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)
// Тепер створимо змінні, необхідні для отримання інформації про меню і, утримуючи опції
new s_Data # 91; 6 # 93 ;, s_Name # 91; 64 # 93 ;, 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
>
Створення меню, сформованого з гравців на сервері
Код: Виділити все #include
#include
public plugin_init ()
// Клієнтська команда для виклику меню
register_clcmd ( "my_menu". "My_Menu")
>
public My_Menu (id)
// Спершу необхідно створити змінну для меню, з якої ми будемо взаємодіяти в подальшому
new i_Menu = menu_create ( "\ rPlayer menu:". "menu_handler")
// Необхідні змінні, які знадобляться нам при виведенні меню з гравців
new s_Players # 91; 32 # 93 ;, i_Num. i_Player
// Змінні для зберігання інформації про гравців
new s_Name # 91; 32 # 93 ;, s_Player # 91; 10 # 93;
// Отримуємо масив гравців
get_players (s_Players. i_Num)
// Цикл по всім гравцям
for (new i; i
// Зберігаємо поточного гравця в i_Player
i_Player = s_Players # 91; i # 93;
// Отримуємо ім'я і ID гравця
get_user_name (i_Player. s_Name. charsmax (s_Name))
num_to_str (i_Player. s_Player. charsmax (s_Player))
// Додаємо опцію по даному гравцю
menu_additem (i_Menu. s_Name. s_Player. 0)
// Ми сформували меню з гравців, присутніх на сервері, тепер виводимо його
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 # 91; 6 # 93 ;, s_Name # 91; 64 # 93 ;, i_Access. i_Callback
menu_item_getinfo (menu. item. i_Access. s_Data. charsmax (s_Data), s_Name. charsmax (s_Name), i_Callback)
// Отримуємо ID гравця, який був обраний в меню
new i_Player = str_to_num (s_Data)
// Перевіряємо, якщо гравець живий
if (is_user_alive (i_Player))
// Встановлюємо його здоров'я в 100 HP
set_user_health (i_Player. 100)
menu_destroy (menu)
return PLUGIN_HANDLED
>
Створення меню для голосування
Код: Виділити все #include
// Для зберігання меню голсоованій
new g_VoteMenu
// Для зберігання голосів за кожну опцію
new g_Votes # 91; 2 # 93;
// Для перевірки, якщо голосування вже запущено
new g_Voting
public plugin_init ()
register_clcmd ( "start_vote". "StartVote")
>
public StartVote (id)
// Якщо голосування вже запущено, то виходимо
if (g_Voting)
client_print (id. print_chat. "There is already a vote going.")
// Ми повертаємо PLUGIN_HANDLED, щоб в консолі гравця не було повідомлення unknown command
return PLUGIN_HANDLED
>
g_VoteMenu = menu_create ( "\ rVote Menu:". "menu_handler")
menu_additem (g_VoteMenu. "Vote Option 1". "0". 0)
menu_additem (g_VoteMenu. "Vote Option 2". "1". 0)
new s_Players # 91; 32 # 93 ;, i_Num. i_Player
get_players (s_Players. i_Num)
for (new i; i
menu_display (i_Player. g_VoteMenu. 0)
// Збільшуємо, щоб дізнатися скільки гравців голосують
g_Voting ++
>
// Зупиняємо голосування через 10 секунд
set_task (10.0. "EndVote")
public menu_handler (id. menu. item)
if (item == MENU_EXIT)
return PLUGIN_HANDLED
new s_Data # 91; 6 # 93 ;, s_Name # 91; 64 # 93 ;, i_Access. i_Callback
menu_item_getinfo (menu. item. i_Access. s_Data. charsmax (s_Data), s_Name. charsmax (s_Name), i_Callback)
// полчан інформацію про те, яка опція була обрана
new i_Vote = str_to_num (s_Data)
// Збільшуємо кількість голосів по даній опції
g_Votes # 91; i_Vote # 93; ++
public EndVote ()
// Якщо перша опція набрала більше голосів, ніж друга
if (g_Votes # 91; 0 # 93;> g_Votes # 91; 1 # 93;)
client_print (0. print_chat. "First option recieved most votes (.)". g_Votes # 91; 0 # 93;)
// Інакше якщо друга опція набрала більше голосів, ніж перша
else if (g_Votes # 91; 1 # 93;> g_Votes # 91; 0 # 93;)
client_print (0. print_chat. "Second option recieved most votes (.)". g_Votes # 91; 1 # 93;)
// Інакше рівну кількість голосів
else
client_print (0. print_chat. "The vote tied at. votes each.". g_Votes # 91; 0 # 93;)
// Скидаємо інформацію про те, що гравці голосують
g_Voting = 0
>
Створення меню з використанням під-меню
Код: Виділити все #include
public plugin_init ()
register_clcmd ( "my_menu". "My_Menu")
>
public My_Menu (id)
new i_Menu = menu_create ( "\ rMy menu:". "menu_handler")
menu_additem (i_Menu. "\ wFirst option # 1". "1". 0)
menu_additem (i_Menu. "\ wSub-Menu # 2". "2". 0)
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 # 91; 6 # 93 ;, s_Name # 91; 64 # 93 ;, i_Access. i_Callback
menu_item_getinfo (menu. item. i_Access. s_Data. charsmax (s_Data), s_Name. charsmax (s_Name), i_Callback)
new i_Key = str_to_num (s_Data)
switch (i_Key)
case 1:
client_print (id. print_chat. "You selected first option")
>
case 2:
// Відкрити під-меню
Sub_Menu (id)
>
>
menu_destroy (menu)
return PLUGIN_HANDLED
>
public Sub_Menu (id)
// Створюємо нове меню, але функція обробки дій буде інша
new i_Menu = menu_create ( "\ rSub-Menu:". "submenu_handler")
menu_additem (i_Menu. "\ wSub-option # 1". "1". 0)
menu_additem (i_Menu. "\ wSub-option # 2". "2". 0)
menu_setprop (i_Menu. MPROP_EXIT. MEXIT_ALL)
menu_display (id. i_Menu. 0)
>
public submenu_handler (id. menu. item)
if (item == MENU_EXIT)
menu_destroy (menu)
// Якщо гравець на сервері, то показуємо головне меню
if (is_user_connected (id))
My_Menu (id)
new s_Data # 91; 6 # 93 ;, s_Name # 91; 64 # 93 ;, i_Access. i_Callback
menu_item_getinfo (menu. item. i_Access. s_Data. charsmax (s_Data), s_Name. charsmax (s_Name), i_Callback)
new i_Key = str_to_num (s_Data)
switch (i_Key)
case 1:
client_print (id. print_chat. "You selected first sub-option")
>
case 2:
client_print (id. print_chat. "You selected second sub-option")
>
>
// Якщо ви хочете показати головне меню потім
My_Menu (id)
Не пишіть мені в ЛС. якщо вам потрібна допомога на безоплатній основі. Будь-які питання на форум.