Иконка ресурса

FREE SemMultiPanel : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Reflection.Metadata;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using Oxide.Core;
using UnityEngine.UIElements;
namespace Oxide.Plugins {
    [Info("SemMultiPanel", "FreePlugins", "1.0.0")]
    public class SemMultiPanel : RustPlugin {
#region Vars
        [PluginReference]
        private Plugin ImageLibrary, EventRandomizer, NoEscape, SemNotify;
        private Dictionary<BasePlayer, bool> _menuOpen = new Dictionary<BasePlayer, bool>();
        private const string _menuLayer = "Magix.Menu";
        private bool _isCargoShip = false;
        private bool _isBradley = false;
        private bool _isCh47 = false;
        private bool _isHeli = false;
        private const float fadeout = 0.25f;
        private const float fadein = 1f;
#endregion
#region Config
        private static Configuration _config;
        public class Configuration {
            [JsonProperty("Цвет активного ивента Bradley")]
            public string BradleyColor = "#FF6C0AFF";
            [JsonProperty("Цвет активного ивента Ch47")]
            public string Ch47Color = "#FF6C0AFF";
            [JsonProperty("Цвет активного ивента Heli")]
            public string HeliColor = "#FF6C0AFF";
            [JsonProperty("Время уведомления рейдблока в секундах")]
            public float NotifyTime = 5f;
            [JsonProperty("Цвет активного ивента Cargo")]
            public string CargoColor = "#FF6C0AFF";
            [JsonProperty("Список команд в выпадающем меню")]
            public Dictionary<string, string> MenuCmds = new Dictionary<string, string>();
            [JsonProperty("Картинки")]
            public Dictionary<string, string> Imgs = new Dictionary<string, string>();
            public static Configuration DefaultConfig() {
                return new Configuration {
                    NotifyTime = 5f, BradleyColor = "#FF6C0AFF", Ch47Color = "#FF6C0AFF", HeliColor = "#FF6C0AFF", CargoColor = "#FF6C0AFF", MenuCmds = {
                        ["https://i.imgur.com/RKbohaU.png"]
                        = "chat.say /report", ["https://i.imgur.com/aAhH5iW.png"] = "chat.say /block", ["https://i.imgur.com/HYoXoOu1.png"] = "chat.say /friends1", ["https://i.imgur.com/HYoXoOu2.png"] = "chat.say /friends2", ["https://i.imgur.com/HYoXoOu.png"] = "chat.say /friends3", ["https://i.imgur.com/PDvATmn.png"] = "chat.say /tasks"
                    }
                    , Imgs = {
                        ["Store"]
                        = "https://i.imgur.com/RLMIvK6.png", ["People"] = "https://i.imgur.com/4UivNDU.png", ["Heli"] = "https://i.imgur.com/VupbypK.png", ["CH47"] = "https://i.imgur.com/bAxVttR.png", ["Bradley"] = "https://i.imgur.com/Yr9L8md.png", ["Cargo"] = "https://i.imgur.com/2WcJOIO.png", ["Menu"] = "https://i.imgur.com/naNbo7w.png", ["RaidBlock"] = "https://i.imgur.com/hM8nGlJ.png",
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) LoadDefaultConfig();
                SaveConfig();
            }
            catch (Exception e) {
                Debug.LogException(e);
                PrintWarning("Creating new config file.");
                LoadDefaultConfig();
            }
        }
        protected override void LoadDefaultConfig() => _config = Configuration.DefaultConfig();
        protected override void SaveConfig() => Config.WriteObject(_config);
#endregion
#region Hooks
        private void OnServerInitialized() {
            FirstCheckEvents();
            timer.Once(15f, () => {
                Interface.Oxide.ReloadPlugin("EventRandomizer");
            }
            );
            foreach (var img in _config.Imgs) {
                ImageLibrary.Call("AddImage", img.Value, img.Key);
            }
            foreach (var img in _config.MenuCmds) {
                ImageLibrary.Call("AddImage", img.Key, img.Value);
            }
            foreach (var item in BasePlayer.activePlayerList) {
                OnPlayerConnected(item);
            }
        }
        void OnPlayerSleep(BasePlayer player) {
            CuiHelper.DestroyUi(player, "CH47");
            CuiHelper.DestroyUi(player, "CH47BTN");
            CuiHelper.DestroyUi(player, "Heli");
            CuiHelper.DestroyUi(player, "HeliBTN");
            CuiHelper.DestroyUi(player, "Cargo");
            CuiHelper.DestroyUi(player, "CargoBTN");
            CuiHelper.DestroyUi(player, "Bradley");
            CuiHelper.DestroyUi(player, "BradleyBTN");
            CuiHelper.DestroyUi(player, "People");
            CuiHelper.DestroyUi(player, "MenuIMG");
            CuiHelper.DestroyUi(player, "MenuBTN");
            CuiHelper.DestroyUi(player, "StoreIMG");
            CuiHelper.DestroyUi(player, "StoreBTN");
            CuiHelper.DestroyUi(player, "Online");
            DestroyButtons(player);
            CuiHelper.DestroyUi(player, "LeftPanelLogo");
            CuiHelper.DestroyUi(player, _menuLayer);
        }
        void OnPlayerSleepEnded(BasePlayer player) {
            DrawMenu(player);
        }
        void OnPlayerConnected(BasePlayer player) {
            if (player.IsReceivingSnapshot) {
                NextTick(() => OnPlayerConnected(player));
                return;
            }
            if (!_menuOpen.ContainsKey(player)) {
                _menuOpen.Add(player, true);
            }
            DrawMenu(player);
            timer.Once(1f, () => {
                foreach (var players in BasePlayer.activePlayerList) {
                    if (players.userID == player.userID) continue;
                    bool IsOpen = false;
                    if (_menuOpen.TryGetValue(players, out IsOpen) && IsOpen) {
                        OnlineUi(players);
                    }
                }
            }
            );
        }
        void OnPlayerDisconnected(BasePlayer player) {
            timer.Once(1f, () => {
                foreach (var players in BasePlayer.activePlayerList) {
                    bool IsOpen = false;
                    if (_menuOpen.TryGetValue(players, out IsOpen) && IsOpen) {
                        OnlineUi(players);
                    }
                }
            }
            );
        }
        void OnEntitySpawned(BaseNetworkable entity) {
            if (entity == null) return;
            if (entity is CH47Helicopter) {
                _isCh47 = true;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter) {
                _isHeli = true;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip) {
                _isCargoShip = true;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }
            if (entity is BradleyAPC) {
                _isBradley = true;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Bradley");
                }
                return;
            }
        }
        void OnEntityKill(BaseEntity entity) {
            if (entity == null) return;
            if (entity is CH47Helicopter) {
                _isCh47 = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter) {
                _isHeli = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip) {
                _isCargoShip = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }
            if (entity is BradleyAPC) {
                _isBradley = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Bradley");
                }
                return;
            }
        }
        void OnEntityDeath(BaseEntity entity, HitInfo info) {
            if (entity == null) return;
            if (entity is CH47Helicopter) {
                _isCh47 = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter) {
                _isHeli = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip) {
                _isCargoShip = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }
            if (entity is BradleyAPC) {
                _isBradley = false;
                foreach (var player in BasePlayer.activePlayerList) {
                    RefreshEvents(player, "Bradley");
                }
                return;
            }
        }
        void Unload() {
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, "CH47");
                CuiHelper.DestroyUi(player, "CH47BTN");
                CuiHelper.DestroyUi(player, "Heli");
                CuiHelper.DestroyUi(player, "HeliBTN");
                CuiHelper.DestroyUi(player, "Cargo");
                CuiHelper.DestroyUi(player, "CargoBTN");
                CuiHelper.DestroyUi(player, "Bradley");
                CuiHelper.DestroyUi(player, "BradleyBTN");
                CuiHelper.DestroyUi(player, "People");
                CuiHelper.DestroyUi(player, "MenuIMG");
                CuiHelper.DestroyUi(player, "MenuBTN");
                CuiHelper.DestroyUi(player, "StoreIMG");
                CuiHelper.DestroyUi(player, "StoreBTN");
                CuiHelper.DestroyUi(player, "Online");
                DestroyButtons(player);
                CuiHelper.DestroyUi(player, _menuLayer);
                CuiHelper.DestroyUi(player, "LeftPanelLogo");
            }
        }
#endregion
#region Methods
        private void FirstCheckEvents() {
            foreach (var entity in BaseEntity.serverEntities) {
                if (entity is CargoShip) {
                    _isCargoShip = true;
                }
                if (entity is BradleyAPC) {
                    _isBradley = true;
                }
                if (entity is CH47Helicopter) {
                    _isCh47 = true;
                }
                if (entity is BaseHelicopter) {
                    _isHeli = true;
                }
            }
        }
        private void DrawMenu(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "CH47");
            CuiHelper.DestroyUi(player, "CH47BTN");
            CuiHelper.DestroyUi(player, "Heli");
            CuiHelper.DestroyUi(player, "HeliBTN");
            CuiHelper.DestroyUi(player, "Cargo");
            CuiHelper.DestroyUi(player, "CargoBTN");
            CuiHelper.DestroyUi(player, "Bradley");
            CuiHelper.DestroyUi(player, "BradleyBTN");
            CuiHelper.DestroyUi(player, "People");
            CuiHelper.DestroyUi(player, "MenuIMG");
            CuiHelper.DestroyUi(player, "MenuBTN");
            CuiHelper.DestroyUi(player, "StoreIMG");
            CuiHelper.DestroyUi(player, "StoreBTN");
            CuiHelper.DestroyUi(player, "Online");
            DestroyButtons(player);
            CuiHelper.DestroyUi(player, _menuLayer);
            CuiHelper.DestroyUi(player, "LeftPanelLogo");
            container.Add(new CuiPanel {
                FadeOut = fadeout, Image = {
                    Color = $"0 0 0 0", FadeIn = fadein
                }
                , RectTransform = {
                    AnchorMin = $"0.006249996 0.9546296", AnchorMax = $"0.1734375 0.9981481"
                }
            }
            , "Overlay", $"LeftPanelLogo");
            container.Add(new CuiPanel {
                FadeOut = fadeout, Image = {
                    Color = $"0 0 0 0", FadeIn = fadein
                }
                , RectTransform = {
                    AnchorMin = $"0.8322843 0.9546296", AnchorMax = $"0.9994677 0.9981481"
                }
            }
            , "Overlay", _menuLayer);
            container.Add(new CuiButton {
                FadeOut = fadeout, RectTransform = {
                    AnchorMin = $"4.423782E-09 0.1489384", AnchorMax = $"0.09968854 0.8297893"
                }
                , Button = {
                    FadeIn = fadein, Color = "0 0 0 0", Command = $"chat.say /store",
                }
                , Text = {
                    Text = ""
                }
            }
            , "LeftPanelLogo", $"StoreBTN");
            container.Add(new CuiElement {
                Name = "StoreIMG", Parent = $"StoreBTN", FadeOut = fadeout, Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Store"), FadeIn = fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            container.Add(new CuiButton {
                FadeOut = fadeout, RectTransform = {
                    AnchorMin = $"0.8664309 0.1489384", AnchorMax = $"0.9661204 0.8297893"
                }
                , Button = {
                    FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.logo",
                }
                , Text = {
                    Text = ""
                }
            }
            , _menuLayer, $"MenuBTN");
            container.Add(new CuiElement {
                Name = "MenuIMG", Parent = $"MenuBTN", FadeOut = fadeout, Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Menu"), FadeIn = fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            container.Add(new CuiElement {
                Name = "People", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                    new CuiRawImageComponent {
                        Color = "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "People"), FadeIn = fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.1214953 0.1489384", AnchorMax = "0.2211839 0.82979"
                    }
                }
            }
            );
            bool IsOpen = false;
            _menuOpen.TryGetValue(player, out IsOpen);
            CuiHelper.AddUi(player, container);
            if (IsOpen) {
                RefreshEvents(player, "All");
                OnlineUi(player);
                ButtonUi(player);
            }
            if (player == null) return;
            if(NoEscape != null) {
                if (NoEscape.Call<bool>("IsBlocked", player)) {
                    RaidBlockUi(player, NoEscape.Call<double>("NoEscape_Time", player));
                }
            }
        }
        private void DestroyButtons(BasePlayer player) {
            foreach (var x in _config.MenuCmds) {
                CuiHelper.DestroyUi(player, _menuLayer + x.Value);
                CuiHelper.DestroyUi(player, _menuLayer + x.Value + "IMG");
            }
        }
        private void ButtonUi(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            DestroyButtons(player);
            double anchormin = 0.7418166, anchormax = 0.8415062, margin = 0.8415062 - 0.7106612;
            foreach (var x in _config.MenuCmds) {
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"{anchormin} 0.1489384", AnchorMax = $"{anchormax} 0.8297893"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"{x.Value}",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , _menuLayer, _menuLayer + x.Value);
                container.Add(new CuiElement {
                    Name = _menuLayer + x.Value + "IMG", Parent = _menuLayer + x.Value, FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = "1 1 1 0.7", Png = ImageLibrary?.Call<string>("GetImage", x.Value), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                    }
                }
                );
                anchormin -= margin;
                anchormax -= margin;
            }
            CuiHelper.AddUi(player, container);
        }
        private void OnlineUi(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "Online");
            bool IsOpen = false;
            _menuOpen.TryGetValue(player, out IsOpen);
            if (IsOpen) {
                container.Add(new CuiElement {
                    Parent = $"LeftPanelLogo", Name = "Online", FadeOut = fadeout, Components = {
                        new CuiTextComponent {
                            Color = $"{HexToRustFormat("#E8E2D9E5")}", Text = $"{BasePlayer.activePlayerList.Count}/{ConVar.Server.maxplayers}", Align = TextAnchor.MiddleCenter, FontSize = 13, Font = "robotocondensed-bold.ttf", FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.2545756 0.2415287", AnchorMax = "0.4695288 0.6883376"
                        }
                    }
                }
                );
            }
            CuiHelper.AddUi(player, container);
        }
        private void SendNotify(BasePlayer player, string message, int show = 5, string type = "Event") {
            if (SemNotify != null) SemNotify?.Call("SendNotify", player, type, message, show);
            else SendReply(player, message);
        }
        private void RefreshEvents(BasePlayer player, string events) {
            CuiElementContainer container = new CuiElementContainer();
            bool IsOpen = false;
            _menuOpen.TryGetValue(player, out IsOpen);
            if (!IsOpen) return;
            switch (events) {
                case "All" : CuiHelper.DestroyUi(player, "CH47");
                CuiHelper.DestroyUi(player, "CH47BTN");
                CuiHelper.DestroyUi(player, "Heli");
                CuiHelper.DestroyUi(player, "HeliBTN");
                CuiHelper.DestroyUi(player, "Cargo");
                CuiHelper.DestroyUi(player, "CargoBTN");
                CuiHelper.DestroyUi(player, "Bradley");
                CuiHelper.DestroyUi(player, "BradleyBTN");
                container.Add(new CuiElement {
                    Name = "CH47", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isCh47 ? $"{HexToRustFormat(_config.Ch47Color)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "CH47"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.632399 0.1489384", AnchorMax = "0.7320886 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info CH47",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "CH47", $"CH47BTN");
                container.Add(new CuiElement {
                    Name = "Heli", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isHeli ? $"{HexToRustFormat(_config.HeliColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Heli"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5077883 0.1489384", AnchorMax = "0.6074779 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Heli",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Heli", $"HeliBTN");
                container.Add(new CuiElement {
                    Name = "Cargo", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isCargoShip ? $"{HexToRustFormat(_config.CargoColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Cargo"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.8820077 0.1489384", AnchorMax = "0.9816972 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Cargo",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Cargo", $"CargoBTN");
                container.Add(new CuiElement {
                    Name = "Bradley", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isBradley ? $"{HexToRustFormat(_config.BradleyColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Bradley"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.7573982 0.1489384", AnchorMax = "0.8570878 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Bradley",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Bradley", $"BradleyBTN");
                break;
                case "CH47" : CuiHelper.DestroyUi(player, "CH47");
                CuiHelper.DestroyUi(player, "CH47BTN");
                container.Add(new CuiElement {
                    Name = "CH47", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isCh47 ? $"{HexToRustFormat(_config.Ch47Color)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "CH47"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.632399 0.1489384", AnchorMax = "0.7320886 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info CH47",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "CH47", $"CH47BTN");
                break;
                case "Heli" : CuiHelper.DestroyUi(player, "Heli");
                CuiHelper.DestroyUi(player, "HeliBTN");
                container.Add(new CuiElement {
                    Name = "Heli", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isHeli ? $"{HexToRustFormat(_config.HeliColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Heli"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.5077883 0.1489384", AnchorMax = "0.6074779 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Heli",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Heli", $"HeliBTN");
                break;
                case "Cargo" : CuiHelper.DestroyUi(player, "Cargo");
                CuiHelper.DestroyUi(player, "CargoBTN");
                container.Add(new CuiElement {
                    Name = "Cargo", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isCargoShip ? $"{HexToRustFormat(_config.CargoColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Cargo"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.8820077 0.1489384", AnchorMax = "0.9816972 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Cargo",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Cargo", $"CargoBTN");
                break;
                case "Bradley" : CuiHelper.DestroyUi(player, "Bradley");
                CuiHelper.DestroyUi(player, "BradleyBTN");
                container.Add(new CuiElement {
                    Name = "Bradley", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = _isBradley ? $"{HexToRustFormat(_config.BradleyColor)}" : "1 1 1 0.7", Png = ImageLibrary.Call<string>("GetImage", "Bradley"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.7573982 0.1489384", AnchorMax = "0.8570878 0.82979"
                        }
                    }
                }
                );
                container.Add(new CuiButton {
                    FadeOut = fadeout, RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1"
                    }
                    , Button = {
                        FadeIn = fadein, Color = "0 0 0 0", Command = $"magix.info Bradley",
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , "Bradley", $"BradleyBTN");
                break;
            }
            CuiHelper.AddUi(player, container);
        }
        [HookMethod("RaidBlockMagix")]
        public void RaidBlockUi(BasePlayer player, double time) {
            bool IsOpen = false;
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "RB");
            CuiHelper.DestroyUi(player, "RBText");
            if (_menuOpen.TryGetValue(player, out IsOpen) && IsOpen) {
                container.Add(new CuiElement {
                    Name = "RB", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = $"{HexToRustFormat("#C34D4D")}", Png = ImageLibrary.Call<string>("GetImage", "RaidBlock"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "1.003507 0.1489384", AnchorMax = "1.103196 0.82979"
                        }
                    }
                }
                );
            }
            else {
                container.Add(new CuiElement {
                    Name = "RB", Parent = $"LeftPanelLogo", FadeOut = fadeout, Components = {
                        new CuiRawImageComponent {
                            Color = $"{HexToRustFormat("#C34D4D")}", Png = ImageLibrary.Call<string>("GetImage", "RaidBlock"), FadeIn = fadein
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0.2429907 0.1489384", AnchorMax = "0.3426793 0.82979"
                        }
                    }
                }
                );
            }
            container.Add(new CuiElement {
                Parent = $"RB", Name = "RBText", FadeOut = fadeout, Components = {
                    new CuiTextComponent {
                        Color = $"1 1 1 0.7", Text = $"{GetFormatTime(TimeSpan.FromSeconds(time))}", Align = TextAnchor.MiddleCenter, FontSize = 8, Font = "robotocondensed-bold.ttf", FadeIn = fadein
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "25 0", OffsetMax = "45 20"
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
        }
        [HookMethod("IsOpen")]
        public bool IsOpened(BasePlayer player) {
            bool isOpen = false;
            _menuOpen.TryGetValue(player, out isOpen);
            return isOpen;
        }
#endregion
#region Helpers
        private static string HexToRustFormat(string hex) {
            if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
            var str = hex.Trim('#');
            if (str.Length == 6) str += "FF";
            if (str.Length != 8) {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r, g, b, a);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }
        [ConsoleCommand("magix.logo")]
        private void MenuHandler(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (player == null) return;
            if (!_menuOpen.ContainsKey(player)) _menuOpen.Add(player, false);
            if (!_menuOpen[player]) {
                _menuOpen[player] = true;
                DrawMenu(player);
                return;
            }
            if (_menuOpen[player]) {
                _menuOpen[player] = false;
                DrawMenu(player);
                return;
            }
        }
        [ConsoleCommand("magix.info")]
        private void InfoHandler(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            if (player == null) return;
            var text = string.Empty;
            switch (args.Args[0]) {
                case "CH47" : if (_isCh47) {
                    text = "Статус ивента:\nАктивен";
                }
                else {
                    text = $"Ивент <color=#55C4E7>''ЧИНУК''</color> начнётся через:\n<color=#55C4E7>{EventRandomizer?.Call<string>("Ch47Time")}</color>";
                }
                SendNotify(player, text);
                break;
                case "Heli" : if (_isHeli) {
                    text = "Статус ивента:\nАктивен";
                }
                else {
                    text = $"Ивент <color=#55C4E7>''ВЕРТОЛЁТ''</color> начнётся через:\n<color=#55C4E7>{EventRandomizer?.Call<string>("HeliTime")}</color>";
                }
                SendNotify(player, text);
                break;
                case "Bradley" : if (_isBradley) {
                    text = "Статус ивента:\nАктивен";
                }
                else {
                    text = $"Ивент <color=#55C4E7>''ТАНК''</color> начнётся через:\n<color=#55C4E7>{EventRandomizer?.Call<string>("BradleyTime")}</color>";
                }
                SendNotify(player, text);
                break;
                case "Cargo" : if (_isCargoShip) {
                    text = "Статус ивента:\nАктивен";
                }
                else {
                    text = $"Ивент <color=#55C4E7>''КАРГО''</color> начнётся через:\n<color=#55C4E7>{EventRandomizer?.Call<string>("CargoTime")}</color>";
                }
                SendNotify(player, text);
                break;
            }
        }
        private string GetFormatTime(TimeSpan timespan) {
            return string.Format(timespan.TotalHours >= 1 ? "{2:00}:{0:00}:{1:00}" : "{0:00}:{1:00}", timespan.Minutes, timespan.Seconds, System.Math.Floor(timespan.TotalHours));
        }
#endregion
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху