Добавление категорий/опций в SourceMod админ меню
Требуется стандартный плагин "Admin Menu" (adminmenu.smx).
Пример добавления категории "MyCategory"("Моя категория") с опцией "MoveToObservers"("Отправиться в наблюдатели"):
Код
#include <sourcemod>
#undef REQUIRE_PLUGIN
#include <adminmenu>
#pragma semicolon 1
#pragma newdecls required
TopMenu g_TopMenu = null; // Главное меню.
public void OnLibraryAdded(const char[] name)
{
if(!g_TopMenu && !strcmp(name, "adminmenu")) {
OnAdminMenuReady(GetAdminTopMenu());
}
}
public void OnLibraryRemoved(const char[] name)
{
if (g_TopMenu && !strcmp(name, "adminmenu")) {
g_TopMenu = null;
}
}
public void OnAdminMenuReady(Handle topmenu)
{
TopMenu topmenu_ = topmenu ? TopMenu.FromHandle(topmenu) : null;
if (g_TopMenu != topmenu_ &&(g_TopMenu = topmenu_))
{
TopMenuObject category = g_TopMenu.FindCategory("MyCategory");
if ( category == INVALID_TOPMENUOBJECT
&& (category = g_TopMenu.AddCategory("MyCategory", OnMyCategoryAction)) == INVALID_TOPMENUOBJECT
) {
SetFailState("Can't create category 'MyCategory'");
}
g_TopMenu.AddItem("MoveToObservers", OnMoveToObserversAction, category, "sm_kick", ADMFLAG_KICK);
}
}
static void OnMyCategoryAction(
TopMenu topmenu,
TopMenuAction action,
TopMenuObject topobj_id,
int param,
char[] buffer,
int maxlength
) {
if (action == TopMenuAction_DisplayOption) {
strcopy(buffer, maxlength, "Моя категория");
}
else if (action == TopMenuAction_DisplayTitle) {
strcopy(buffer, maxlength, "Выберите действие:\n ");
}
}
static void OnMoveToObserversAction(
TopMenu topmenu,
TopMenuAction action,
TopMenuObject topobj_id,
int param,
char[] buffer,
int maxlength
) {
if (action == TopMenuAction_DisplayOption) {
strcopy(buffer, maxlength, "Отправиться в наблюдатели");
}
else if (action == TopMenuAction_SelectOption) {
int client = param;
// Если вы добавили НЕСКОЛЬКО опций, сохраните их TopMenuObject'ы (g_TopMenu.AddItem) в глобальные переменные и сравните с @param topobj_id.
if (GetClientTeam(client) > 1) {
ChangeClientTeam(client, 1);
} else {
PrintCenterText(client, "Вы уже в наблюдателях..");
}
if (g_TopMenu) {
g_TopMenu.Display(client, TopMenuPosition_LastCategory);
}
}
}
По умолчанию существуют три категории:
Код
#define ADMINMENU_PLAYERCOMMANDS "PlayerCommands" // "Управление игроками"
#define ADMINMENU_SERVERCOMMANDS "ServerCommands" // "Управление сервером"
#define ADMINMENU_VOTINGCOMMANDS "VotingCommands" // "Управление голосованиями"
Изменить текст заглавия админ меню и текст категорий можно в:
addons/sourcemod/translations/ru/adminmenu.phrases.txt