Pushistik↯❤
Команда форума
- Регистрация
- 6 Июл 2017
- Сообщения
- 393
- Реакции
- 97
- Баллы
- 28
[SourcePawn] Урок 11 - Админ меню
<= К содержанию
PHP:
#pragma semicolon 1
#include <sourcemod>
#undef REQUIRE_PLUGIN // Все библиотеки подключенные ниже этого - не обязательные для работы плагина
// Подключаем библиотеку
#include <adminmenu>
#pragma newdecls required
// Создаем переменную для админ-меню
TopMenu g_hAdminMenu = null;
// При старте плагина проверяем
public void OnPluginStart()
{
// Если библиотека есть
if (LibraryExists("adminmenu"))
{
TopMenu hTopMenu;
if ((hTopMenu = GetAdminTopMenu()) != null)) // Если админ-меню уже создано
{
// Вызываем ф-ю, в которой добавляется пункт в админ-меню
OnAdminMenuReady(hTopMenu);
}
}
}
// Если библиотека была отключена
public OnLibraryRemoved(const char[] szName)
{
if (StrEqual(szName, "adminmenu"))
{
g_hAdminMenu = null;
}
}
// Ф-я вызывается когда админ-меню готово к добавлению пунктов
public void OnAdminMenuReady(Handle aTopMenu)
{
/*
Дальше всё очень сложно, просто всё делаем так же
*/
TopMenu hTopMenu = TopMenu.FromHandle(aTopMenu);
if (hTopMenu == g_hAdminMenu)
{
return;
}
g_hAdminMenu = hTopMenu;
/* Вот теперь можно добавлять что хотим
Необходимо различать 2 понятия:
1. Категория - пункт главной странице админ-меню
2. Пункт - пункт внутри категории
Т.е. структура админ-меню выглядит так:
Админ-меню
1. Категория 1
1. Пункт 1
2. Пункт 2
3. Пункт 3
4. Пункт 4
2. Категория 2
1. Пункт 1
2. Пункт 2
3. Категория 3
1. Пункт 1
2. Пункт 2
4. Категория 4
1. Пункт 1
2. Пункт 2
3. Пункт 3
Дальше 2 варианта:
a) Создать категорию и добавить в неё пункты
b) Добавить пункты в уже существующую категорию
Либо и то и то
*/
// Вариант a
TopMenuObject hMyCategory = g_hTopMenu.AddCategory("vip_admin_category", Handler_MenuVIPAdmin, "vip_admin", ADMFLAG_ROOT, "Моя категория 1");
/*
"vip_admin_category" - уникальное имя категории
Handler_MenuVIPAdmin - обработчик событий
"vip_admin" - команда (для access overrides)
ADMFLAG_ROOT - Флаг доступа по умолчанию
"Моя категория 1" - Описание категории (опционально)
*/
// Вариант b
TopMenuObject hMyCategory = g_hTopMenu.FindCategory("vip_admin_category");
// Если категории нет вернет INVALID_TOPMENUOBJEC
if (hMyCategory != INVALID_TOPMENUOBJECT)
{
// Теперь можем добавить пункты
g_hTopMenu.AddItem("vip_add_item", Handler_MenuVIPAdd, hMyCategory, "vip_add", ADMFLAG_ROOT, "Мой пункт 1");
/*
"vip_add_item" - уникальное имя пункта
Handler_MenuVIPAdd - обработчик событий
hMyCategory - Объект категории в которую должен быть добавлен пункт
"vip_add" - команда (для access overrides)
ADMFLAG_ROOT - Флаг доступа по умолчанию
"Мой пункт 1" - Описание пункта (опционально)
*/
g_hTopMenu.AddItem("vip_list_item", Handler_MenuVIPList, hMyCategory, "vip_list", ADMFLAG_ROOT);
g_hTopMenu.AddItem("vip_reload_players_item", Handler_MenuVIPReloadPlayers, hMyCategory, "vip_reload_players", ADMFLAG_ROOT);
}
}
// обработчик событий категории
public void Handler_MenuVIPAdmin(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
// Когда категория отображается пунктом на главной странице админ-меню
case TopMenuAction_DisplayOption:
{
FormatEx(sBuffer, maxlength, "Управление VIP");
}
// Когда категория отображается заглавием меню
case TopMenuAction_DisplayTitle:
{
FormatEx(sBuffer, maxlength, "Управление VIP");
}
}
}
// обработчик событий пункта
public void Handler_MenuVIPAdd(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
// Когда пункт отображается в категории
case TopMenuAction_DisplayOption:
{
FormatEx(sBuffer, maxlength, "Добавить VIP-игрока");
}
// Когда пункт выбрали
case TopMenuAction_SelectOption:
{
// открываем меню со списком игроков.
}
}
}
public void Handler_MenuVIPList(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
case TopMenuAction_DisplayOption: FormatEx(sBuffer, maxlength, "Список VIP-игроков");
case TopMenuAction_SelectOption:
{
// Открываем список VIP-игроков
}
}
}
public void Handler_MenuVIPReloadPlayers(TopMenu hMenu, TopMenuAction action, TopMenuObject object_id, int iClient, char[] sBuffer, int maxlength)
{
switch (action)
{
case TopMenuAction_DisplayOption:FormatEx(sBuffer, maxlength, "Перезагрузка VIP-игроков");
case TopMenuAction_SelectOption:
{
//
}
}
}
- OnAdminMenuCreated - Админ-меню готово к добавлению категорий
PHP:void OnAdminMenuCreated(Handle topmenu)
- OnAdminMenuReady - Админ-меню готово к добавлению пунктов
PHP:
void OnAdminMenuReady(Handle topmenu)
- ADMINMENU_SERVERCOMMANDS или "ServerCommands" - Управление сервером
- ADMINMENU_VOTINGCOMMANDS или "VotingCommands" - Управление голосованиями
- ADMINMENU_PLAYERCOMMANDS или "PlayerCommands" - Управление игроками
- ADMINMENU_SERVERCOMMANDS или "ServerCommands" - Управление сервером
- ADMINMENU_VOTINGCOMMANDS или "VotingCommands" - Управление голосованиями
- RedisplayAdminMenu - Повторно отображает админ-меню админу после выбора пункта.
PHP:bool RedisplayAdminMenu(Handle topmenu, int client)
- AddTargetsToMenu - Добавляет цели (игроков) в меню.
PHP:
int AddTargetsToMenu(Handle menu, int source_client, bool in_game_only, bool alive_only)
- AddTargetsToMenu2 - Тоже что и AddTargetsToMenu но с использованием фильтров.
PHP:
int AddTargetsToMenu2(Handle menu, int source_client, int flags)
PHP:#define COMMAND_FILTER_ALIVE (1<<0) /**< Только живые */ #define COMMAND_FILTER_DEAD (1<<1) /**< Только мертвые */ #define COMMAND_FILTER_CONNECTED (1<<2) /**< Разрешить игро, которые не полностью в игре (IsClientInGame) */ #define COMMAND_FILTER_NO_IMMUNITY (1<<3) /**< Игнорировать правила иммунитета */ #define COMMAND_FILTER_NO_MULTI (1<<4) /**< Запретить множественный выбор (Не используется для данной функции) */ #define COMMAND_FILTER_NO_BOTS (1<<5) /**< Исключить ботов */
<= К содержанию
Последнее редактирование: