C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Xml;
using HarmonyLib;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using UnityEngine.UI;
namespace Oxide.Plugins {
[Info("RAdminMenu", "RustInnovate", "2.0.4")]
[Description("Современное модульное меню администратора")]
public class RAdminMenu : RustPlugin {
// CHANGE: Компонент маскирования RectMask2D для аппаратной обрезки UI элементов внутри ScrollView
private sealed class CuiRectMask2DComponent : ICuiComponent {
public string Type => "UnityEngine.UI.RectMask2D";
}
// CHANGE: Ссылки на опциональные плагины для отображения в UserInfo
[PluginReference]
private Plugin Economics, ServerRewards, Clans;
#region Constants & Permissions
// CHANGE: Базовые слои пользовательского интерфейса
private const string LayerMain = "RAdminMenu.Main";
private const string LayerNavigation = "RAdminMenu.Navigation";
private const string LayerNavButtons = "RAdminMenu.NavButtons";
private const string LayerHeader = "RAdminMenu.Header";
private const string LayerHeaderTitle = "RAdminMenu.HeaderTitle";
private const string LayerHeaderInfo = "RAdminMenu.HeaderInfo";
private const string LayerContent = "RAdminMenu.Content";
private const string LayerContentBody = "RAdminMenu.ContentBody";
private const string LayerModal = "RAdminMenu.Modal";
// CHANGE: Внутренняя фиксированная чувствительность скролла для плавной и быстрой прокрутки
private const float SCROLL_SENSITIVITY = 50f;
#endregion
#region State Management
private static RAdminMenu Instance;
// CHANGE: Хранилище сессий интерфейса для каждого игрока
private class AdminSession {
public string CurrentCategory = "quickmenu";
public string PlayerFilter = "online";
public string PlayerSearch = "";
public int PlayerPage = 0;
public ulong SelectedUserId = 0;
public string PluginSearch = "";
public int PluginPage = 0;
public string PermTargetType = "group";
// "group" or "user"
public string PermTargetName = "default";
public string PermSelectedPlugin = "";
public string PermSearch = "";
public int PermPage = 0;
public string ModalType = "";
//"creategroup", "clonegroup"
public string ModalInput = "";
public string ModalInputSecondary = "";
// CHANGE: Ожидающее подтверждения опасное действие (kill/strip_inv/revoke_bp/revoke_bp_granted)
public string PendingAction = "";
// CHANGE: Флаг открытого меню — фоновые таймеры обновления UI не шлют элементы, пока меню закрыто
public bool MenuOpen = false;
public bool TeleportToMarkerEnabled = false;
// CHANGE: Поле ввода времени суток для администратора
public string TimeInput = "12:00";
// CHANGE: Подкатегория погоды и сохраненные значения пользовательского ввода
public string WeatherSubCategory = "presets";
public Dictionary<string, string> WeatherInputs = new Dictionary<string, string>();
// CHANGE: Активное поле ввода с фокусом для скрытия плейсхолдера
public string FocusedInput = "";
}
private readonly Dictionary<ulong, AdminSession> _sessions = new Dictionary<ulong, AdminSession>();
private readonly HashSet<ulong> _tpMarkerPlayers = new HashSet<ulong>();
// CHANGE: Креатив-режим полностью удалён из плагина: нативный клиент сам показывает выбор
// строительных скинов в колесе плана при флаге CreativeMode + конваре creative.freebuild
// (серверно подавить эти пункты нельзя), а скины построек на сервере реализованы плагином RRemove.private readonly Dictionary<ulong, SteamInfo> _cachedSteamInfo =
new Dictionary<ulong, SteamInfo>();
// CHANGE: Экземпляр Harmony для явного применения/снятия патчей при загрузке/выгрузке плагина
private HarmonyLib.Harmony _harmony;
public class SteamInfo {
public string Location {
get;
set;
}
public string[] Avatars {
get;
set;
}
public string RegistrationDate {
get;
set;
}
public string RustHours {
get;
set;
}
}
#endregion
#region Configuration
// CHANGE: Универсальный класс позиционирования согласно строгим правилам формата
public class PanelSettings {
[JsonProperty("Высота")]
public int Height;
[JsonProperty("Ширина")]
public int Width;
[JsonProperty("Вверх/вниз")]
public int OffsetY;
[JsonProperty("Влево/вправо")]
public int OffsetX;
}
public class GeneralSettings {
[JsonProperty("Горячая клавиша для открытия (X | F | OFF)")]
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public ButtonHook ButtonToHook = ButtonHook.X;
[JsonProperty("Отключить загрузку аватарок Steam")]
public bool DisablePlayerAvatars = false;
// CHANGE: ObjectCreationHandling.Replace для предотвращения дублирования избранных плагинов
[JsonProperty("Список избранных плагинов", ObjectCreationHandling = ObjectCreationHandling.Replace )]
public HashSet<string> FavoritePlugins = new HashSet<string>();
[JsonProperty("Фон затемнения экрана")]
public string OverlayColor = "0 0 0 0.70";
}
public class NavigationHeaderSettings {
// CHANGE: Текст заголовка навигации вынесен в локализацию (NAV_HEADER_TITLE)
[JsonProperty("Цвет заголовка")]
public string TextColor = "0.25 0.69 1 1";
[JsonProperty("Размер шрифта заголовка")]
// CHANGE: 20 вместо 18 — мелкий кегль растрируется клиентом с пиксельными ступеньками
public int FontSize = 20;
[JsonProperty("Высота блока заголовка")]
public int Height = 42;
}
public class NavigationButtonSettings {
[JsonProperty("Ширина кнопки навигации")]
public int Width = 174;
[JsonProperty("Высота кнопки навигации")]
public int Height = 42;
[JsonProperty("Отступ сверху первой кнопки")]
public int StartY = 240;
[JsonProperty("Отступ между кнопками навигации")]
public int Spacing = 8;
[JsonProperty("Размер шрифта кнопок навигации")]
public int FontSize = 14;
[JsonProperty("Цвет текста кнопок навигации")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет активной кнопки")]
public string ActiveColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет неактивной кнопки")]
public string InactiveColor = "0.22 0.23 0.25 0.85";
}
public class NavigationSettings {
[JsonProperty("Позиция панели навигации")]
public PanelSettings Panel = new PanelSettings {
Width = 190, Height = 560, // CHANGE: Центрирование всего меню (навигация + контент) относительно экрана
OffsetX = -347, OffsetY = 0,
}
;
[JsonProperty("Фон панели навигации")]
public string BackgroundColor = "0.14 0.15 0.16 0.92";
[JsonProperty("Настройки заголовка")]
public NavigationHeaderSettings Header = new NavigationHeaderSettings();
[JsonProperty("Настройки кнопок")]
public NavigationButtonSettings Buttons = new NavigationButtonSettings();
}
public class HeaderTitleSettings {
[JsonProperty("Отступ заголовка слева (OffsetX)")]
public int OffsetX = 15;
[JsonProperty("Размер шрифта заголовка")]
public int FontSize = 20;
[JsonProperty("Цвет текста заголовка")]
public string TextColor = "0.25 0.69 1 1";
}
public class HeaderInfoSettings {
[JsonProperty("Отступ информации справа (OffsetX)")]
public int OffsetX = -15;
[JsonProperty("Размер шрифта информации об онлайне")]
public int FontSize = 13;
[JsonProperty("Цвет текста информации об онлайне")]
public string TextColor = "0.70 0.72 0.75 1";
}
public class HeaderSettings {
[JsonProperty("Позиция панели заголовка")]
public PanelSettings Panel = new PanelSettings {
Width = 690, Height = 48, // CHANGE: Центрирование всего меню (навигация + контент) относительно экрана
OffsetX = 98, OffsetY = 256,
}
;
[JsonProperty("Фон панели заголовка")]
public string BackgroundColor = "0.14 0.15 0.16 0.92";
[JsonProperty("Заголовок раздела")]
public HeaderTitleSettings Title = new HeaderTitleSettings();
[JsonProperty("Информационный блок (онлайн, FPS)")]
public HeaderInfoSettings Info = new HeaderInfoSettings();
[JsonProperty("Интервал динамического обновления FPS и онлайна (сек)")]
public float UpdateInterval = 1f;
}
public class ContentSettings {
[JsonProperty("Позиция панели контента")]
public PanelSettings Panel = new PanelSettings {
Width = 690, Height = 504, // CHANGE: Центрирование всего меню (навигация + контент) относительно экрана
OffsetX = 98, OffsetY = -28,
}
;
[JsonProperty("Фон панели контента")]
public string BackgroundColor = "0.16 0.17 0.18 0.92";
}
public class QuickMenuTeleportCardSettings {
[JsonProperty("Позиция карточки")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 100, OffsetX = 0, OffsetY = 168,
}
;
[JsonProperty("Фон карточки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ заголовка по X (слева)")]
public int TitleOffsetX = 16;
[JsonProperty("Отступ заголовка по Y (от верха)")]
public int TitleOffsetY = 30;
[JsonProperty("Ширина заголовка")]
public int TitleWidth = 300;
[JsonProperty("Высота заголовка")]
public int TitleHeight = 22;
[JsonProperty("Размер шрифта заголовка")]
public int TitleFontSize = 13;
[JsonProperty("Цвет заголовка")]
public string TitleColor = "0.25 0.69 1 1";
[JsonProperty("Ширина кнопки")]
public int ButtonWidth = 202;
[JsonProperty("Высота кнопки")]
public int ButtonHeight = 42;
[JsonProperty("Отступ кнопок по Y (от центра карточки)")]
public int ButtonsOffsetY = -12;
[JsonProperty("Отступ между кнопками по X")]
public int ButtonSpacingX = 12;
[JsonProperty("Размер шрифта кнопок")]
public int ButtonFontSize = 13;
[JsonProperty("Цвет текста кнопок")]
public string ButtonTextColor = "1 1 1 1";
[JsonProperty("Цвет кнопки")]
public string ButtonDefaultColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет активной кнопки (Метка)")]
public string ButtonActiveColor = "0.25 0.69 1 0.85";
}
public class QuickMenuActionsCardSettings {
[JsonProperty("Позиция карточки")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 100, OffsetX = 0, OffsetY = 56,
}
;
[JsonProperty("Фон карточки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ заголовка по X (слева)")]
public int TitleOffsetX = 16;
[JsonProperty("Отступ заголовка по Y (от верха)")]
public int TitleOffsetY = 30;
[JsonProperty("Ширина заголовка")]
public int TitleWidth = 300;
[JsonProperty("Высота заголовка")]
public int TitleHeight = 22;
[JsonProperty("Размер шрифта заголовка")]
public int TitleFontSize = 13;
[JsonProperty("Цвет заголовка")]
public string TitleColor = "0.25 0.69 1 1";
[JsonProperty("Ширина кнопки")]
public int ButtonWidth = 202;
[JsonProperty("Высота кнопки")]
public int ButtonHeight = 42;
[JsonProperty("Отступ кнопок по Y (от центра карточки)")]
public int ButtonsOffsetY = -12;
[JsonProperty("Отступ между кнопками по X")]
public int ButtonSpacingX = 12;
[JsonProperty("Размер шрифта кнопок")]
public int ButtonFontSize = 13;
[JsonProperty("Цвет текста кнопок")]
public string ButtonTextColor = "1 1 1 1";
[JsonProperty("Цвет кнопки Вылечить себя")]
public string HealButtonColor = "0.28 0.65 0.32 0.85";
[JsonProperty("Цвет кнопки Починить все")]
public string RepairButtonColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет кнопки Очистить инвентарь")]
public string ClearInvButtonColor = "0.75 0.25 0.25 0.85";
}
public class QuickMenuEventsCardSettings {
[JsonProperty("Позиция карточки")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 100, OffsetX = 0, OffsetY = -56,
}
;
[JsonProperty("Фон карточки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ заголовка по X (слева)")]
public int TitleOffsetX = 16;
[JsonProperty("Отступ заголовка по Y (от верха)")]
public int TitleOffsetY = 30;
[JsonProperty("Ширина заголовка")]
public int TitleWidth = 300;
[JsonProperty("Высота заголовка")]
public int TitleHeight = 22;
[JsonProperty("Размер шрифта заголовка")]
public int TitleFontSize = 13;
[JsonProperty("Цвет заголовка")]
public string TitleColor = "0.25 0.69 1 1";
[JsonProperty("Ширина кнопки")]
public int ButtonWidth = 202;
[JsonProperty("Высота кнопки")]
public int ButtonHeight = 42;
[JsonProperty("Отступ кнопок по Y (от центра карточки)")]
public int ButtonsOffsetY = -12;
[JsonProperty("Отступ между кнопками по X")]
public int ButtonSpacingX = 12;
[JsonProperty("Размер шрифта кнопок")]
public int ButtonFontSize = 13;
[JsonProperty("Цвет текста кнопок")]
public string ButtonTextColor = "1 1 1 1";
[JsonProperty("Цвет кнопок событий")]
public string ButtonColor = "0.85 0.55 0.20 0.85";
}
public class QuickMenuCurrentTimeSettings {
[JsonProperty("Отступ текущего времени по X (справа)")]
public int OffsetX = -16;
[JsonProperty("Отступ текущего времени по Y (от верха)")]
public int OffsetY = 30;
[JsonProperty("Ширина блока текущего времени")]
public int Width = 260;
[JsonProperty("Высота блока текущего времени")]
public int Height = 22;
[JsonProperty("Размер шрифта текущего времени")]
public int FontSize = 13;
[JsonProperty("Цвет текста текущего времени")]
public string TextColor = "0.70 0.72 0.75 1";
}
public class QuickMenuTimePresetButtonsSettings {
[JsonProperty("Ширина кнопки пресета")]
public int Width = 202;
[JsonProperty("Высота кнопки пресета")]
public int Height = 42;
[JsonProperty("Отступ кнопок по Y (от центра карточки)")]
public int OffsetY = -12;
[JsonProperty("Отступ между кнопками по X")]
public int SpacingX = 12;
[JsonProperty("Размер шрифта кнопок")]
public int FontSize = 13;
[JsonProperty("Цвет текста кнопок")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет фона кнопок пресетов")]
public string BackgroundColor = "0.22 0.23 0.25 0.85";
}
public class QuickMenuTimeInputSettings {
[JsonProperty("Отступ блока ввода по X (от центра)")]
public int OffsetX = 214;
[JsonProperty("Ширина поля ввода времени")]
public int Width = 104;
[JsonProperty("Высота поля ввода времени")]
public int Height = 42;
[JsonProperty("Размер шрифта поля ввода")]
public int FontSize = 13;
[JsonProperty("Максимальная длина ввода символов")]
public int CharsLimit = 10;
[JsonProperty("Внутренний отступ поля ввода по X")]
public int PaddingX = 0;
[JsonProperty("Внутренний отступ поля ввода по Y")]
public int PaddingY = 0;
[JsonProperty("Цвет фона поля ввода")]
public string BackgroundColor = "0.10 0.10 0.11 0.90";
[JsonProperty("Цвет текста в поле ввода")]
public string TextColor = "1 1 1 1";
// CHANGE: Настройка цвета текста плейсхолдера поля ввода времени
[JsonProperty("Цвет текста подсказки (плейсхолдера)")]
public string PlaceholderColor = "0.60 0.62 0.65 0.60";
}
public class QuickMenuTimeApplyButtonSettings {
[JsonProperty("Ширина кнопки применить")]
public int Width = 94;
[JsonProperty("Высота кнопки применить")]
public int Height = 42;
[JsonProperty("Отступ кнопки применить от поля ввода")]
public int SpacingX = 4;
[JsonProperty("Размер шрифта кнопки применить")]
public int FontSize = 12;
[JsonProperty("Цвет фона кнопки применить")]
public string BackgroundColor = "0.28 0.65 0.32 0.85";
[JsonProperty("Цвет текста кнопки применить")]
public string TextColor = "1 1 1 1";
}
public class QuickMenuTimeCardSettings {
[JsonProperty("Позиция карточки")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 100, OffsetX = 0, OffsetY = -168,
}
;
[JsonProperty("Фон карточки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ заголовка по X (слева)")]
public int TitleOffsetX = 16;
[JsonProperty("Отступ заголовка по Y (от верха)")]
public int TitleOffsetY = 30;
[JsonProperty("Ширина заголовка")]
public int TitleWidth = 250;
[JsonProperty("Высота заголовка")]
public int TitleHeight = 22;
[JsonProperty("Размер шрифта заголовка")]
public int TitleFontSize = 13;
[JsonProperty("Цвет заголовка")]
public string TitleColor = "0.25 0.69 1 1";
[JsonProperty("Блок текущего времени")]
public QuickMenuCurrentTimeSettings CurrentTime = new QuickMenuCurrentTimeSettings();
[JsonProperty("Кнопки пресетов")]
public QuickMenuTimePresetButtonsSettings Presets = new QuickMenuTimePresetButtonsSettings();
[JsonProperty("Поле ввода времени")]
public QuickMenuTimeInputSettings Input = new QuickMenuTimeInputSettings();
[JsonProperty("Кнопка применить")]
public QuickMenuTimeApplyButtonSettings ApplyButton = new QuickMenuTimeApplyButtonSettings();
}
public class QuickMenuWeatherDetailButtonSettings {
[JsonProperty("Ширина кнопки детальных настроек")]
public int Width = 130;
[JsonProperty("Высота кнопки детальных настроек")]
public int Height = 22;
[JsonProperty("Отступ кнопки детальных настроек по X (справа)")]
public int OffsetX = -16;
[JsonProperty("Отступ кнопки детальных настроек по Y (от центра по Y)")]
public int OffsetY = 30;
[JsonProperty("Размер шрифта")]
public int FontSize = 12;
[JsonProperty("Цвет текста")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет фона")]
public string BackgroundColor = "0.25 0.69 1 0.85";
}
public class QuickMenuWeatherButtonsSettings {
[JsonProperty("Ширина кнопки")]
public int Width = 96;
[JsonProperty("Высота кнопки")]
public int Height = 42;
[JsonProperty("Отступ кнопок по Y (от центра карточки)")]
public int OffsetY = -12;
[JsonProperty("Отступ между кнопками по X")]
public int SpacingX = 10;
[JsonProperty("Размер шрифта кнопок")]
public int FontSize = 12;
[JsonProperty("Цвет текста кнопок")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет кнопки Ясно")]
public string ClearColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет кнопки Дождь")]
public string RainColor = "0.22 0.45 0.75 0.85";
[JsonProperty("Цвет кнопки Туман")]
public string FogColor = "0.45 0.50 0.55 0.85";
[JsonProperty("Цвет кнопки Гроза")]
public string StormColor = "0.55 0.35 0.70 0.85";
[JsonProperty("Цвет кнопки Сброс")]
public string ResetColor = "0.80 0.35 0.25 0.90";
// CHANGE: Цвет кнопки Отчет удалён вместе с кнопкой
}
public class QuickMenuWeatherCardSettings {
[JsonProperty("Позиция карточки")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 100, OffsetX = 0, OffsetY = -280,
}
;
[JsonProperty("Фон карточки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ заголовка по X (слева)")]
public int TitleOffsetX = 16;
[JsonProperty("Отступ заголовка по Y (от верха)")]
public int TitleOffsetY = 30;
[JsonProperty("Ширина заголовка")]
public int TitleWidth = 250;
[JsonProperty("Высота заголовка")]
public int TitleHeight = 22;
[JsonProperty("Размер шрифта заголовка")]
public int TitleFontSize = 13;
[JsonProperty("Цвет заголовка")]
public string TitleColor = "0.25 0.69 1 1";
[JsonProperty("Кнопка детальных настроек")]
public QuickMenuWeatherDetailButtonSettings DetailButton = new QuickMenuWeatherDetailButtonSettings();
[JsonProperty("Кнопки погоды")]
public QuickMenuWeatherButtonsSettings Buttons = new QuickMenuWeatherButtonsSettings();
}
public class QuickMenuSettings {
[JsonProperty("Карточка: Телепортация")]
public QuickMenuTeleportCardSettings TeleportCard = new QuickMenuTeleportCardSettings();
[JsonProperty("Карточка: Действия администратора")]
public QuickMenuActionsCardSettings ActionsCard = new QuickMenuActionsCardSettings();
[JsonProperty("Карточка: События")]
public QuickMenuEventsCardSettings EventsCard = new QuickMenuEventsCardSettings();
[JsonProperty("Карточка: Управление временем")]
public QuickMenuTimeCardSettings TimeCard = new QuickMenuTimeCardSettings();
// CHANGE: Карточка управления погодой в QuickMenu
[JsonProperty("Карточка: Управление погодой")]
public QuickMenuWeatherCardSettings WeatherCard = new QuickMenuWeatherCardSettings();
}
public class WeatherTabsSettings {
[JsonProperty("Позиция панели табов")]
public PanelSettings Panel = new PanelSettings {
Width = 660, Height = 34, OffsetX = 0, OffsetY = 180,
}
;
[JsonProperty("Ширина кнопки таба")]
public int TabWidth = 104;
[JsonProperty("Высота кнопки таба")]
public int TabHeight = 32;
[JsonProperty("Отступ между табами")]
public int TabSpacingX = 6;
[JsonProperty("Размер шрифта табов")]
public int FontSize = 12;
[JsonProperty("Цвет текста табов")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет активного таба")]
public string ActiveColor = "0.25 0.69 1 0.90";
[JsonProperty("Цвет неактивного таба")]
public string InactiveColor = "0.20 0.21 0.23 0.75";
}
public class WeatherPresetsGridSettings {
[JsonProperty("Ширина карточки пресета")]
public int CardWidth = 210;
[JsonProperty("Высота карточки пресета")]
public int CardHeight = 64;
[JsonProperty("Отступ по X между карточками")]
public int SpacingX = 14;
[JsonProperty("Отступ по Y между карточками")]
public int SpacingY = 14;
[JsonProperty("Количество колонок в сетке")]
public int Columns = 3;
[JsonProperty("Размер шрифта названия пресета")]
public int TitleFontSize = 13;
[JsonProperty("Размер шрифта команды/описания")]
public int SubtitleFontSize = 10;
[JsonProperty("Цвет текста названия")]
public string TitleColor = "1 1 1 1";
[JsonProperty("Цвет текста описания")]
public string SubtitleColor = "0.70 0.72 0.75 1";
[JsonProperty("Цвет фона карточки пресета")]
public string CardBackgroundColor = "0.20 0.21 0.23 0.85";
[JsonProperty("Цвет фона карточки сброса")]
public string ResetBackgroundColor = "0.65 0.28 0.25 0.85";
}
public class WeatherRowSettings {
[JsonProperty("Ширина строки параметра")]
public int Width = 660;
[JsonProperty("Высота строки параметра")]
public int Height = 52;
[JsonProperty("Фон строки параметра")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Отступ названия параметра слева (X)")]
public int LabelOffsetX = 12;
[JsonProperty("Отступ названия параметра по Y")]
public int LabelOffsetY = 8;
[JsonProperty("Ширина блока названия параметра")]
public int LabelWidth = 200;
[JsonProperty("Высота блока названия параметра")]
public int LabelHeight = 18;
[JsonProperty("Размер шрифта названия")]
public int TitleFontSize = 12;
[JsonProperty("Цвет шрифта названия")]
public string TitleColor = "1 1 1 1";
[JsonProperty("Отступ ConVar имени слева (X)")]
public int ConVarOffsetX = 12;
[JsonProperty("Отступ ConVar имени по Y")]
public int ConVarOffsetY = -10;
[JsonProperty("Ширина блока ConVar имени")]
public int ConVarWidth = 200;
[JsonProperty("Высота блока ConVar имени")]
public int ConVarHeight = 14;
[JsonProperty("Размер шрифта ConVar")]
public int ConVarFontSize = 10;
[JsonProperty("Цвет шрифта ConVar")]
public string ConVarColor = "0.55 0.58 0.62 1";
}
public class WeatherQuickButtonsSettings {
[JsonProperty("Отступ кнопок слева (X)")]
public int OffsetX = 216;
[JsonProperty("Отступ кнопок по Y")]
public int OffsetY = 0;
[JsonProperty("Ширина быстрой кнопки")]
public int ButtonWidth = 44;
[JsonProperty("Высота быстрой кнопки")]
public int ButtonHeight = 32;
[JsonProperty("Отступ между быстрыми кнопками")]
public int SpacingX = 4;
[JsonProperty("Размер шрифта быстрых кнопок")]
public int FontSize = 10;
[JsonProperty("Цвет текста быстрых кнопок")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет фона быстрой кнопки")]
public string BackgroundColor = "0.25 0.27 0.30 0.85";
[JsonProperty("Цвет кнопки Авто")]
public string AutoButtonColor = "0.25 0.55 0.85 0.85";
}
public class WeatherInputBlockSettings {
[JsonProperty("Отступ блока ввода справа (X)")]
public int OffsetX = 490;
[JsonProperty("Отступ блока ввода по Y")]
public int OffsetY = 0;
[JsonProperty("Ширина поля ввода")]
public int Width = 80;
[JsonProperty("Высота поля ввода")]
public int Height = 32;
[JsonProperty("Размер шрифта поля ввода")]
public int FontSize = 12;
[JsonProperty("Максимум символов ввода")]
public int CharsLimit = 8;
[JsonProperty("Внутренний отступ по X")]
public int PaddingX = 0;
[JsonProperty("Внутренний отступ по Y")]
public int PaddingY = 0;
[JsonProperty("Цвет фона поля ввода")]
public string BackgroundColor = "0.10 0.10 0.11 0.90";
[JsonProperty("Цвет текста поля ввода")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет плейсхолдера")]
public string PlaceholderColor = "0.60 0.62 0.65 0.60";
}
public class WeatherApplyButtonSettings {
[JsonProperty("Отступ кнопки применить справа (X)")]
public int OffsetX = 576;
[JsonProperty("Отступ кнопки применить по Y")]
public int OffsetY = 0;
[JsonProperty("Ширина кнопки применить")]
public int Width = 72;
[JsonProperty("Высота кнопки применить")]
public int Height = 32;
[JsonProperty("Размер шрифта кнопки применить")]
public int FontSize = 11;
[JsonProperty("Цвет фона кнопки применить")]
public string BackgroundColor = "0.28 0.65 0.32 0.85";
[JsonProperty("Цвет текста кнопки применить")]
public string TextColor = "1 1 1 1";
}
public class WeatherManagerSettings {
[JsonProperty("Табы категорий")]
public WeatherTabsSettings Tabs = new WeatherTabsSettings();
[JsonProperty("Сетка карточек пресетов")]
public WeatherPresetsGridSettings PresetsGrid = new WeatherPresetsGridSettings();
[JsonProperty("Строка параметра")]
public WeatherRowSettings Row = new WeatherRowSettings();
[JsonProperty("Кнопки быстрой установки")]
public WeatherQuickButtonsSettings QuickButtons = new WeatherQuickButtonsSettings();
[JsonProperty("Поле числового ввода")]
public WeatherInputBlockSettings Input = new WeatherInputBlockSettings();
[JsonProperty("Кнопка применить")]
public WeatherApplyButtonSettings ApplyButton = new WeatherApplyButtonSettings();
}
public class PlayerListFilterSettings {
[JsonProperty("Высота кнопок фильтров")]
public int Height = 32;
[JsonProperty("Ширина кнопки фильтра")]
public int Width = 92;
[JsonProperty("Отступ фильтров сверху (по Y)")]
public int OffsetY = 215;
[JsonProperty("Отступ между фильтрами")]
public int Spacing = 6;
[JsonProperty("Размер шрифта фильтров")]
public int FontSize = 12;
[JsonProperty("Цвет текста фильтров")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет активного фильтра")]
public string ActiveColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет неактивного фильтра")]
public string InactiveColor = "0.22 0.23 0.25 0.85";
}
public class PlayerListSearchSettings {
[JsonProperty("Высота панели поиска")]
public int Height = 32;
[JsonProperty("Ширина панели поиска")]
public int Width = 660;
[JsonProperty("Отступ поиска сверху (по Y)")]
public int OffsetY = 175;
[JsonProperty("Размер шрифта поиска")]
public int FontSize = 13;
[JsonProperty("Внутренний отступ поля ввода по X")]
public int PaddingX = 10;
[JsonProperty("Фон поля ввода поиска")]
public string BackgroundColor = "0.10 0.10 0.11 0.90";
[JsonProperty("Цвет текста в поле поиска")]
public string TextColor = "1 1 1 1";
// CHANGE: Цвет текста подсказки поиска игроков
[JsonProperty("Цвет текста подсказки (плейсхолдера)")]
public string PlaceholderColor = "0.60 0.62 0.65 0.60";
}
public class PlayerListCardSettings {
[JsonProperty("Количество колонок игроков")]
public int Columns = 4;
[JsonProperty("Ширина карточки игрока")]
public int Width = 158;
[JsonProperty("Высота карточки игрока")]
public int Height = 36;
[JsonProperty("Отступ по горизонтали между карточками")]
public int SpacingX = 8;
[JsonProperty("Отступ по вертикали между карточками")]
public int SpacingY = 6;
[JsonProperty("Размер шрифта ника игрока")]
public int FontSize = 12;
[JsonProperty("Цвет текста ника игрока")]
public string TextColor = "1 1 1 1";
[JsonProperty("Фон активной/живой карточки игрока")]
public string ActiveCardColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Фон неактивной карточки игрока")]
public string InactiveCardColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет полосы статуса: Онлайн")]
public string StatusOnlineColor = "0.28 0.65 0.32 1";
[JsonProperty("Цвет полосы статуса: Оффлайн")]
public string StatusOfflineColor = "0.75 0.25 0.25 1";
[JsonProperty("Цвет полосы статуса: Спящий")]
public string StatusSleepingColor = "0.85 0.55 0.20 1";
}
public class PlayerListSettings {
[JsonProperty("Фильтры игроков")]
public PlayerListFilterSettings Filters = new PlayerListFilterSettings();
[JsonProperty("Панель поиска")]
public PlayerListSearchSettings Search = new PlayerListSearchSettings();
[JsonProperty("Карточки игроков")]
public PlayerListCardSettings Card = new PlayerListCardSettings();
}
public class UserInfoBackButtonSettings {
[JsonProperty("Ширина кнопки Назад")]
public int Width = 140;
[JsonProperty("Высота кнопки Назад")]
public int Height = 32;
[JsonProperty("Влево/вправо кнопки Назад (OffsetX)")]
public int OffsetX = -255;
[JsonProperty("Вверх/вниз кнопки Назад (OffsetY)")]
public int OffsetY = 222;
[JsonProperty("Размер шрифта кнопки Назад")]
public int FontSize = 13;
[JsonProperty("Фон кнопки Назад")]
public string BackgroundColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет текста кнопки Назад")]
public string TextColor = "1 1 1 1";
}
public class UserInfoAvatarSettings {
[JsonProperty("Размер аватарки")]
public int Size = 120;
[JsonProperty("Отступ аватарки по X (OffsetX)")]
public int OffsetX = -255;
[JsonProperty("Отступ аватарки по Y (OffsetY)")]
public int OffsetY = 138;
[JsonProperty("Фон рамки аватарки")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
}
public class UserInfoDetailsSettings {
[JsonProperty("Ширина блока инфо")]
public int Width = 500;
[JsonProperty("Высота блока инфо")]
public int Height = 120;
[JsonProperty("Отступ блока инфо по X (OffsetX)")]
public int OffsetX = 75;
[JsonProperty("Отступ блока инфо по Y (OffsetY)")]
public int OffsetY = 138;
[JsonProperty("Фон блока инфо")]
public string BackgroundColor = "0.20 0.21 0.23 0.75";
[JsonProperty("Размер шрифта ника")]
public int NameFontSize = 18;
[JsonProperty("Цвет текста ника")]
public string NameColor = "0.25 0.69 1 1";
[JsonProperty("Размер шрифта деталей")]
public int DetailsFontSize = 13;
[JsonProperty("Цвет текста деталей")]
public string DetailsColor = "0.70 0.72 0.75 1";
[JsonProperty("Отступ левой колонки деталей (OffsetMinX)")]
public int LeftColumnOffsetMinX = 15;
[JsonProperty("Отступ правой колонки деталей (OffsetMaxX)")]
public int RightColumnOffsetMaxX = -15;
}
public class UserInfoActionButtonsSettings {
[JsonProperty("Ширина кнопки действия")]
public int Width = 158;
[JsonProperty("Высота кнопки действия")]
public int Height = 38;
[JsonProperty("Начальный X кнопок действий (OffsetX)")]
public int StartX = -249;
[JsonProperty("Начальный Y кнопок действий (OffsetY)")]
public int StartY = 50;
[JsonProperty("Отступ по X между действиями")]
public int SpacingX = 8;
[JsonProperty("Отступ по Y между действиями")]
public int SpacingY = 8;
[JsonProperty("Размер шрифта кнопок действий")]
public int FontSize = 12;
[JsonProperty("Цвет текста кнопок действий")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет стандартной кнопки")]
public string DefaultButtonColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет активной кнопки")]
public string ActiveButtonColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет кнопки успеха (лечение)")]
public string SuccessButtonColor = "0.28 0.65 0.32 0.85";
// CHANGE: Настройка цвета фона кнопки снятия радиации
[JsonProperty("Цвет кнопки снятия радиации")]
public string RadiationButtonColor = "0.85 0.65 0.15 0.85";
[JsonProperty("Цвет кнопки внимания (опасные/важные действия)")]
public string WarningButtonColor = "0.85 0.55 0.20 0.85";
}
public class UserInfoSettings {
[JsonProperty("Кнопка Назад")]
public UserInfoBackButtonSettings BackButton = new UserInfoBackButtonSettings();
[JsonProperty("Аватарка игрока")]
public UserInfoAvatarSettings Avatar = new UserInfoAvatarSettings();
[JsonProperty("Блок информации")]
public UserInfoDetailsSettings Details = new UserInfoDetailsSettings();
[JsonProperty("Кнопки действий")]
public UserInfoActionButtonsSettings Actions = new UserInfoActionButtonsSettings();
}
public class PermTabsSettings {
[JsonProperty("Ширина переключателя режима")]
public int Width = 130;
[JsonProperty("Высота переключателей режимов")]
public int Height = 32;
[JsonProperty("Отступ переключателей режимов Вверх/Вниз (OffsetY)")]
public int OffsetY = 215;
[JsonProperty("Размер шрифта переключателей")]
public int FontSize = 12;
[JsonProperty("Цвет текста переключателей")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет активного таба")]
public string ActiveColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет неактивного таба")]
public string InactiveColor = "0.22 0.23 0.25 0.85";
}
public class PermCreateGroupBtnSettings {
[JsonProperty("Ширина кнопки создания группы")]
public int Width = 140;
[JsonProperty("Высота кнопки создания группы")]
public int Height = 32;
[JsonProperty("Размер шрифта")]
public int FontSize = 12;
[JsonProperty("Фон кнопки")]
public string BackgroundColor = "0.28 0.65 0.32 0.85";
[JsonProperty("Цвет текста")]
public string TextColor = "1 1 1 1";
}
public class PermGroupsBarSettings {
// CHANGE: Добавлено свойство ScrollWidth для настройки ширины области скролла панели групп
[JsonProperty("Ширина области скролла групп")]
public int ScrollWidth = 720;
[JsonProperty("Ширина кнопки группы")]
public int Width = 110;
[JsonProperty("Высота кнопки группы")]
public int Height = 30;
[JsonProperty("Отступ строки групп Вверх/Вниз (OffsetY)")]
public int OffsetY = 165;
[JsonProperty("Отступ между кнопками групп")]
public int Spacing = 6;
[JsonProperty("Размер шрифта кнопок групп")]
public int FontSize = 12;
[JsonProperty("Цвет текста кнопок групп")]
public string TextColor = "1 1 1 1";
[JsonProperty("Цвет активной группы")]
public string ActiveGroupColor = "0.25 0.69 1 0.85";
[JsonProperty("Цвет неактивной группы")]
public string InactiveGroupColor = "0.22 0.23 0.25 0.85";
}
public class PermSearchSettings {
[JsonProperty("Ширина поля поиска")]
public int Width = 340;
[JsonProperty("Высота поля поиска")]
public int Height = 30;
[JsonProperty("Отступ поля поиска Влево/Вправо (OffsetX)")]
public int OffsetX = -140;
[JsonProperty("Отступ поля поиска Вверх/Вниз (OffsetY)")]
public int OffsetY = 115;
[JsonProperty("Размер шрифта поля поиска")]
public int FontSize = 12;
[JsonProperty("Внутренний отступ поля ввода по X")]
public int PaddingX = 10;
[JsonProperty("Фон поля поиска")]
public string BackgroundColor = "0.10 0.10 0.11 0.90";
[JsonProperty("Цвет текста поля поиска")]
public string TextColor = "1 1 1 1";
// CHANGE: Цвет текста подсказки поиска прав
[JsonProperty("Цвет текста подсказки (плейсхолдера)")]
public string PlaceholderColor = "0.60 0.62 0.65 0.60";
}
public class PermGroupActionButtonsSettings {
[JsonProperty("Ширина кнопки действия над группой")]
public int Width = 140;
[JsonProperty("Высота кнопки действия над группой")]
public int Height = 30;
[JsonProperty("Отступ кнопки клонирования Влево/Вправо (OffsetX)")]
public int CloneOffsetX = 110;
[JsonProperty("Отступ кнопки удаления Влево/Вправо (OffsetX)")]
public int DeleteOffsetX = 260;
[JsonProperty("Отступ кнопок действий Вверх/Вниз (OffsetY)")]
public int OffsetY = 115;
[JsonProperty("Размер шрифта кнопок")]
public int FontSize = 12;
[JsonProperty("Цвет кнопки клонирования")]
public string CloneButtonColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет кнопки удаления")]
public string DeleteButtonColor = "0.75 0.25 0.25 0.85";
[JsonProperty("Цвет текста кнопок")]
public string TextColor = "1 1 1 1";
}
public class PermBulkActionButtonsSettings {
[JsonProperty("Ширина кнопки Назад к плагинам")]
public int BackWidth = 160;
[JsonProperty("Высота кнопки Назад к плагинам")]
public int BackHeight = 30;
[JsonProperty("Отступ кнопки Назад Влево/Вправо (OffsetX)")]
public int BackOffsetX = -240;
[JsonProperty("Ширина кнопки Выдать/Снять все")]
public int ActionWidth = 105;
[JsonProperty("Высота кнопки Выдать/Снять все")]
public int ActionHeight = 30;
[JsonProperty("Отступ кнопки Выдать все Влево/Вправо (OffsetX)")]
public int GrantAllOffsetX = 155;
[JsonProperty("Отступ кнопки Снять все Влево/Вправо (OffsetX)")]
public int RevokeAllOffsetX = 265;
[JsonProperty("Отступ кнопок действий Вверх/Вниз (OffsetY)")]
public int OffsetY = 115;
[JsonProperty("Ширина заголовка плагина в строке действий")]
public int PluginTitleWidth = 240;
[JsonProperty("Отступ заголовка плагина Влево/Вправо (OffsetX)")]
public int PluginTitleOffsetX = -30;
[JsonProperty("Размер шрифта кнопок")]
public int FontSize = 12;
[JsonProperty("Цвет кнопки Назад")]
public string BackButtonColor = "0.22 0.23 0.25 0.85";
[JsonProperty("Цвет кнопки Выдать все")]
public string GrantAllColor = "0.28 0.65 0.32 0.85";
[JsonProperty("Цвет кнопки Снять все")]
public string RevokeAllColor = "0.75 0.25 0.25 0.85";
[JsonProperty("Цвет текста кнопок")]
public string TextColor = "1 1 1 1";
}
public class PermPluginGridSettings {
[JsonProperty("Ширина карточки плагина")]
public int CardWidth = 210;
[JsonProperty("Высота карточки плагина")]
public int CardHeight = 42;
[JsonProperty("Количество колонок плагинов")]
public int Columns = 3;
[JsonProperty("Отступ между плагинами по X")]
public int SpacingX = 10;
[JsonProperty("Отступ между плагинами по Y")]
public int SpacingY = 8;
[JsonProperty("Размер шрифта названия плагина")]
public int FontSize = 12;
// ... [Code preview truncated due to length. Full source in attached file] ...