Разработчик
Скриптер
Участник
Пользователь
- Сообщения
- 48
- Реакции
- 151
MenuAPI - это заголовочный файл предоставляющий очень удобную и функциональную систему меню. Никаких модулей и дополнительных плагинов ставить не нужно, все реализовано в самом инклуде, просто подключаете и пользуетесь доступными функциями.
MenuCreate(handler[], title[], any:...)
- Создание нового меню
• handler - обработчик меню
• title - заголовок
• Возвращает идентификатор менюMenuAddItem(const menuid, const alias, const name[], const access = INVALID_HANDLE, const callback[32] = "")
- Добавление нового пункта
• menuid - индекс меню
• alias - уникальная метка
• name - название пункта
• access - флаги доступа (-1 — без флагов доступа)
• callback - функция обработчикMenuAddItemF(const menuid, const alias, const nameid, const access = INVALID_HANDLE, const callback[32] = "")
- Добавление нового пункта (функция с форматированием строки)
• menuid - индекс меню
• alias - уникальная метка
• nameid - название пункта через функцию ItemFormat (смотрите пример)
• access - флаги доступа (-1 — без флагов доступа)
• callback - функция обработчикItemFormat(const buffer[], any:...)
- Форматирование имени пунктаMenuDisplay(const player, const menu)
- Отображает созданное меню опр. игрокуMenuDestroy(const menu)
- Уничтожение менюMenuClose(const player)
- Закрытие всех меню для опр. игрокаMenuItemGetInfo(const menuid, const item, name[], const len, bool: removecolor = false, &alias = 0, &access = 0, &callback = 0)
- Получение информации о пункте
• menuid - индекс меню
• item - индекс пункта меню
• name - массив для записи названия меню
• len - максимальная длина массива
• removecolor - удалить ли все символы цвета из названия
• alias - переменная для записи уникальной метки
• access - переменная для записи флагов доступа
• callback - переменная для записи идентификатора обработчикаMenuSetItemName(const menu, const item, buffer[], any:...)
- Установка временного названия для пункта. При следующем открытии будет снова название, которое было получено при добавлении пункта.GetPlayerMenu(const player)
- Вернет индекс меню, которое открыто у игрока, либо -1, если нет открытых менюGetPlayerMenuPage(const player)
- Вернет текущую страницу меню, открытую у игрока, либо -1, если нет открытых менюMenuSetProp(const menu, const MenuProps: prop, any:...)
- Изменение свойств меню
• menu - индекс меню
• prop - нужное свойство
• arg1 - значение №1
• arg2 - значение №2 (необязательно)
• arg3 - значение №3 (необязательно)
P.S.: Некоторые свойства могут принять сразу несколько значений, установив его к следующему похожему свойству. Так, например, свойство MENU_PROP_NUMFMT может принять вторым аргументом сразу значение и для MENU_PROP_NUMFMT_DISABLE. А свойство MENU_PROP_BACKNAME аналогично может принять сразу еще два дополнительных значения, для свойств MENU_PROP_NEXTNAME и MENU_PROP_EXITNAME.
СвойствоОписаниеПо умолчаниюMENU_PROP_NUMFMT Формат нумерации доступных для нажатия пунктов \r%i.MENU_PROP_NUMFMT_DISABLE Формат нумерации недоступных для нажатия пунктов \d%i.MENU_PROP_NOACCESS_FMT Формат пункта при отсутствии доступа к нему \d%s \r*MENU_PROP_EXIT Присутствие пункта "Выход" 1MENU_PROP_DISPLAY_PAGES Включение показа номера текущей страницы меню/всего страниц меню, когда страниц больше одной 1MENU_PROP_BACKNAME Название пункта "Назад" BackMENU_PROP_NEXTNAME Название пункта "Далее" NextMENU_PROP_EXITNAME Название пункта "Выход" ExitMENU_PROP_COPYRIGHT Копирайт. Идет следующим после пункта "Выход"
C++:
#include <amxmodx>
#include <menuapi>
new const szAdminItemName[] = "Третий пункт"// с заранее сохраним название пункта для админов
public plugin_init() {
//зарегистрируем команду, по которой будет открываться меню
register_clcmd("say /menu", "MenuOpen");
}
public MenuOpen(const player) {
//получим имя игрока, который открыл меню
new szName[32]; get_user_name(player, szName, charsmax(szName));
// создадим меню и сохраним его индекс в переменную, чтобы взаимодействовать с ним в дальнейшем
// в заголовке поприветствуем игрока, который открыл меню
new iMenu = MenuCreate("MenuHandler", "Привет, \r%s\w! Мы ждали тебя!", szName);
// добавим парочку пунктов для всех
MenuAddItem(iMenu, 1, "Первый пункт");
MenuAddItem(iMenu, 2, "Второй пункт");
// и один пункт только для админовс флагом ADMIN_BAN, название которого мы придумали с заранее
MenuAddItemF(iMenu, 3, ItemFormat("%s", szAdminItemName), ADMIN_BAN)
// переведем названия пунктов управления на русский
MenuSetProp(iMenu, MENU_PROP_BACKNAME, "Назад", "Далее", "Выход");
// установим копирайт с нашим сайтом
MenuSetProp(iMenu, MENU_PROP_COPYRIGHT, "\dby MYSITE.RU");
// покажем созданное нами меню игроку
MenuDisplay(player, iMenu);
return PLUGIN_HANDLED;
}
// обработчик нашего меню
public MenuHandler(const player, const menu, const item) {
// создадим переменные для записи в них информации о нажатом пункте
new szName[64], iAlias, iAccess, iCallback;
// записываем информацию о нажатом пункте в ранее созданные переменные
MenuItemGetInfo(menu, item, szName, charsmax(szName), false, iAlias, iAccess, iCallback);
// опеределим какой именно пункт был выбран, сделаем мы это по уникальной метке, которую мы присвоили каждому из пунктов
switch (iAlias) {
case 1: {
client_print(player, print_chat, "Вы выбрали первый пункт (его название: %s)", szName);
}
case 2: {
client_print(player, print_chat, "Вы выбрали второй пункт (его название: %s)", szName);
}
case 3: {
client_print(player, print_chat, "Вы выбрали третий пункт (его название: %s)", szName);
}
}
// уничтожим меню
MenuDestroy(menu);
}
Версия 1.0.1:
- Добавлены новые свойства меню: MENU_PROP_NOACCESS_FMT и MENU_PROP_DISPLAY_PAGES. Описание по прежнему в таблице под спойлером "Доступные функции".
- MenuClose теперь можно использовать для всех (0 индекс).
- Добавлены две функции: GetPlayerMenu и GetPlayerMenuPage.
- Первый релиз
Download all Attachments
-
15.4 KB Просмотры: 93
Последнее редактирование: