Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Добавление категорий/опций в SourceMod админ меню
_wS_ Дата: Воскресенье, 08.07.2012, 12:28:05 | Сообщение # 1
Добавление категорий/опций в 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

Гости не могут скачивать файлы
 
  • Страница 1 из 1
  • 1
Поиск: