Skip to content

Repository files navigation

ImServerGUI

ImServerGUI — маленький framework для быстрого создания интерфейсов в Server Specific Settings на серверах SCP:SL.

~ Я думаю что этот простейший фреймворк пригодиться тем кто хочется сделать меню быстро и на коленке. Так что, думаю, вам понравится. А ещё, возможно, я перепишу его на LabAPI в будущем. Но это не точно.

Возможности

  • Упрощённое создание Server Specific GUI.
  • Автоматическая отправка интерфейса игрокам при подключении.
  • Поддержка разных интерфейсов для разных игроков.
  • Линейное верстка в одной функции.
  • Удобное добавление элементов через AddGuiElement().

Создание базового класса GUI

Для создания собственного GUI необходимо создать класс, наследующийся от ImServerGui.

using Exiled.API.Features;
using Exiled.API.Features.Core.UserSettings;
using ImServerGUI;

namespace AdvancedAdmin
{
    public class Menu : ImServerGui
    {
        public override string GuiId { get; set; } = "AdvancedAdminMenu";

        protected override void Gui(Player player)
        {
            AddGuiElement(
                new HeaderSetting(
                    27000,
                    "Advanced Admin"
                )
            );
        }
    }
}

ImServerGUI автоматически обработает подключение игрока и выполняет синхронизацию.

Создание продвинутого класса GUI

using Exiled.API.Features;
using Exiled.API.Features.Core.UserSettings;
using ImServerGUI;

namespace AdvancedAdmin
{
    public class Menu : ImServerGui
    {
        public override string GuiId { get; set; } = "AdvancedAdminMenu";

        protected override void Gui(Player player)
        {
            if (player.CheckPermission("advancedadmin.admin"))
            {
                AddGuiElement(
                    new HeaderSetting(
                        27000,
                        "Advanced Admin (Admin)"
                    )
                );

                AddGuiElement(
                    new ButtonSetting(
                        27001,
                        "Restart Round",
                        "Restart"
                    )
                );
            }
            else if (player.CheckPermission("advancedadmin.moderator"))
            {
                AddGuiElement(
                    new HeaderSetting(
                        27002,
                        "Advanced Admin (Moderator)"
                    )
                );
            }
        }
    }
}

Метод Gui(Player player) вызывается отдельно для каждого игрока.


Подключение GUI в плагине

Plugin.cs

using System;
using Exiled.API.Features;

namespace AdvancedAdmin
{
    public class Plugin : Plugin<Config>
    {
        public override string Name { get; } = "AdvancedAdmin";
        public override string Author { get; } = "Morkamo";
        public override Version Version { get; } = new Version(1, 0, 0);

        public static Plugin Instance { get; private set; }

        private Menu Menu { get; set; }

        public override void OnEnabled()
        {
            Instance = this;

            Menu = new Menu();
            Menu.RegisterGui();

            base.OnEnabled();
        }

        public override void OnDisabled()
        {
            Menu.UnregisterGui();

            Menu = null;
            Instance = null;

            base.OnDisabled();
        }
    }
}

После запуска:

  1. Создаётся экземпляр меню.
  2. ImServerGUI подписывается на необходимые события.
  3. При подключении игрока вызывается метод Gui(Player player).
  4. Созданный интерфейс отправляется игроку после подключения на сервер.

Добавление элементов GUI

Для добавления элементов используется:

AddGuiElement();

Работа с Permission

Так как Gui() получает объект игрока:

protected override void Gui(Player player)

вы можете создавать любые условия для отображения UI (может быть особо эффективно в UI для донат-групп):

protected override void Gui(Player player)
{
    if (player.CheckPermission("advancedadmin.admin"))
    {
        AddGuiElement(
            new HeaderSetting(
                27000,
                "Administrator"
            )
        );
    }
}

Структура ImSGUI

Библиотека предоставляет базовый класс:

public abstract class ImServerGui

Он отвечает за:

  • регистрацию событий;
  • обработку подключения игроков;
  • хранение элементов GUI;
  • регистрацию объектов Server Specific Settings.

Разработчику необходимо реализовать только:

protected abstract void Gui(Player player);

Внутри этого метода описывается интерфейс конкретного игрока.


ID элементов

Каждый элемент Server Specific Settings должен иметь уникальный ID.
Использование одинаковых ID для разных элементов может привести к конфликтам.


Применение ImSGUI

Подходит для создания:

  • административных панелей;
  • донат-интерфейсов;
  • систем управления режимами;
  • общедоступных UI.

Лицензия

MIT License

About

Маленький фреймворк для быстрого создания GUI в SERVER SPECIFIC SETTINGS на серверах SCP:SL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages