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

FREE XMenu : 1.0.3 1.0.3

Нет прав для скачивания
C#:
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using Oxide.Game.Rust.Cui;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("XMenu", "https://topplugin.ru / https://discord.com/invite/5DPTsRmd3G", "1.0.3")]
    class XMenu : RustPlugin {
        public bool eCargoShip;
        public bool eCargoPlane;
        public bool eBradleyAPC;
        public bool eBaseHelicopter;
        public bool eCH47Helicopter;
        public List<BasePlayer> players = new List<BasePlayer>();
#region Reference
        [PluginReference]
        private Plugin ImageLibrary, IQFakeActive;
#endregion
#region IQFakeActive
        int FakeOnline => (int)IQFakeActive?.Call("GetOnline");
        void SyncReservedFinish() {
            PrintWarning($"{Name} - успешно синхронизирована с IQFakeActive");
            PrintWarning("=============SYNC==================");
        }
#endregion
#region Configuration
        private MenuConfig config;
        private class MenuConfig {
            internal class GeneralSetting {
                [JsonProperty("Отображать ивенты")]
                public bool AEvents;
                [JsonProperty("Обновлять меню [ Обновляется только открытое меню ]")]
                public bool Reload;
                [JsonProperty("Интервал обновления открытого меню")]
                public float IReload;
            }
            internal class LogoSetting {
                [JsonProperty("Ссылка на картинку логотипа")]
                public string LogoURL;
                [JsonProperty("Цвет логотипа")]
                public string LogoColor;
                [JsonProperty("Материал логотипа")]
                public string LogoMaterial;
            }
            internal class MenuSetting {
                [JsonProperty("Название сервера + инфа")]
                public string NameServerInfo;
                [JsonProperty("Цвет меню")]
                public string MenuColor;
                [JsonProperty("Материал меню")]
                public string MenuMaterial;
                [JsonProperty("Цвет кнопок")]
                public string ButtonColor;
                [JsonProperty("Цвет текста кнопок")]
                public string ButtonTextColor;
                [JsonProperty("Размер текста кнопок")]
                public int ButtonSize;
            }
            internal class EventSetting {
                [JsonProperty("Ссылка на картинку ивента")]
                public string EventURL;
                [JsonProperty("Цвет активного ивента")]
                public string EventAColor;
                [JsonProperty("Цвет неактивного ивента")]
                public string EventDColor;
            }
            internal class EventsSetting {
                [JsonProperty("Цвет меню ивентов")]
                public string EMenuColor;
                [JsonProperty("Материал меню ивентов")]
                public string EMenuMaterial;
                [JsonProperty("Цвет фона иконок ивентов")]
                public string EBackgroundColor;
                [JsonProperty("Настройка иконок ивентов")]
                public Dictionary<string, EventSetting> Events;
            }
            [JsonProperty("Общие настройки")]
            public GeneralSetting Setting;
            [JsonProperty("Настройка логотипа")]
            public LogoSetting Logo;
            [JsonProperty("Настройка меню")]
            public MenuSetting Menu;
            [JsonProperty("Настройка кнопок [ Текст | Команда ]")]
            public Dictionary<string, string> Button;
            [JsonProperty("Настройка дополнительных кнопок [ Команда | Иконка ]")]
            public Dictionary<string, string> ButtonP;
            [JsonProperty("Настройка ивентов")]
            public EventsSetting Event;
            public static MenuConfig GetNewConfiguration() {
                return new MenuConfig {
                    Setting = new GeneralSetting {
                        AEvents = true, Reload = false, IReload = 12.5f
                    }
                    , Logo = new LogoSetting {
                        LogoURL = "https://i.imgur.com/Hh7W3hz.png", LogoColor = "1 1 1 1", LogoMaterial = "assets/icons/greyout.mat"
                    }
                    , Menu = new MenuSetting {
                        NameServerInfo = "ДОБРО ПОЖАЛОВАТЬ НА МОЙ КРУТОЙ СЕРВЕР\n<size=10>ОНЛАЙН: {0}/{1} | ЗАХОДЯТ: {2} | СЛИПЕРЫ: {3} | ВРЕМЯ: {4}</size>", MenuColor = "1 0.27 0 0.5", MenuMaterial = "assets/icons/greyout.mat", ButtonColor = "0.217 0.221 0.209 0.75", ButtonTextColor = "1 1 1 1", ButtonSize = 9
                    }
                    , Button = new Dictionary<string, string> {
                        ["НАГРАДЫ"]
                        = "chat.say /reward", ["КАЛЕНДАРЬ"] = "chat.say /calendar", ["МАГАЗИН"] = "chat.say /s", ["КРАФТ"] = "chat.say /craft", ["ИНФА"] = "chat.say /info"
                    }
                    , ButtonP = new Dictionary<string, string> {
                        ["store"]
                        = "assets/icons/open.png", ["chat.say /s"] = "assets/icons/community_servers.png", ["chat.say /stats"] = "assets/icons/market.png"
                    }
                    , Event = new EventsSetting {
                        EMenuColor = "1 0.27 0 0.5", EMenuMaterial = "assets/icons/greyout.mat", EBackgroundColor = "0.217 0.221 0.209 0.75", Events = new Dictionary<string, EventSetting> {
                            ["BradleyAPC"]
                            = new EventSetting {
                                EventURL = "https://i.imgur.com/Hzu44wb.png", EventAColor = "1 1 0.5 1", EventDColor = "1 1 1 1"
                            }
                            , ["CH47Helicopter"] = new EventSetting {
                                EventURL = "https://i.imgur.com/2PkTyzw.png", EventAColor = "0.5 1 1 1", EventDColor = "1 1 1 1"
                            }
                            , ["CargoShip"] = new EventSetting {
                                EventURL = "https://i.imgur.com/ff7ZCBI.png", EventAColor = "0.5 0.5 1 1", EventDColor = "1 1 1 1"
                            }
                            , ["BaseHelicopter"] = new EventSetting {
                                EventURL = "https://i.imgur.com/BrJrI8Q.png", EventAColor = "1 0.5 1 1", EventDColor = "1 1 1 1"
                            }
                            , ["CargoPlane"] = new EventSetting {
                                EventURL = "https://i.imgur.com/UctMlPy.png", EventAColor = "1 0.5 0.5 1", EventDColor = "1 1 1 1"
                            }
                            ,
                        }
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<MenuConfig>();
            }
            catch {
                PrintWarning("Ошибка чтения конфигурации! Создание дефолтной конфигурации!");
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() => config = MenuConfig.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Hooks
        private void OnServerInitialized() {
            PrintWarning("\n-----------------------------\n" + "     Author - Monster\n" + "     VK - vk.com/idannopol\n" + "     Discord - Monster#4837\n" + "     Config - v.2124\n" + "-----------------------------");
            //if (!ImageLibrary.Call<bool>("HasImage", ".LogoIMG"))
            ImageLibrary.Call("AddImage", config.Logo.LogoURL, ".LogoIMG");
            foreach (var image in config.Event.Events) {
                if (!ImageLibrary.Call<bool>("HasImage", image.Key)) ImageLibrary.Call("AddImage", image.Value.EventURL, $".{image.Key}");
            }
            foreach (var entity in BaseNetworkable.serverEntities) {
                if (entity is CargoShip) eCargoShip = true;
                if (entity is CargoPlane) eCargoPlane = true;
                if (entity is BradleyAPC) eBradleyAPC = true;
                if (entity is BaseHelicopter) eBaseHelicopter = true;
                if (entity is CH47Helicopter) eCH47Helicopter = true;
            }
            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerInit);
            if (config.Setting.Reload) timer.Every(config.Setting.IReload, () => {
                foreach(var i in players) {
                    GUIMenuInfo(i);
                    if (config.Setting.AEvents) GUIEvent(i);
                }
            }
            );
        }
        private void Unload() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, ".LogoGUI");
                CuiHelper.DestroyUi(player, ".MenuGUI");
            }
        }
        private void OnPlayerInit(BasePlayer player) {
            if (player.IsReceivingSnapshot) {
                NextTick(() => OnPlayerInit(player));
                return;
            }
            GUILogo(player);
        }
        private void OnPlayerDisconnected(BasePlayer player) {
            if (config.Setting.Reload) players.Remove(player);
        }
        private void OnEntitySpawned(BaseNetworkable entity) {
            if (entity is CargoShip) eCargoShip = true;
            if (entity is CargoPlane) eCargoPlane = true;
            if (entity is BradleyAPC) eBradleyAPC = true;
            if (entity is BaseHelicopter) eBaseHelicopter = true;
            if (entity is CH47Helicopter) eCH47Helicopter = true;
        }
        private void OnEntityKill(BaseNetworkable entity) {
            if (entity is CargoShip) eCargoShip = false;
            if (entity is CargoPlane) eCargoPlane = false;
            if (entity is BradleyAPC) eBradleyAPC = false;
            if (entity is BaseHelicopter) eBaseHelicopter = false;
            if (entity is CH47Helicopter) eCH47Helicopter = false;
        }
#endregion
#region Commands
        [ConsoleCommand("ui_menu")]
        void cmdOpenGUI(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            Effect x = new Effect("assets/bundled/prefabs/fx/notice/loot.drag.grab.fx.prefab", player, 0, new Vector3(), new Vector3());
            switch(args.Args[0]) {
                case "open" : {
                    GUIMenu(player);
                    if (config.Setting.Reload) players.Add(player);
                    break;
                }
                case "close" : {
                    GUILogo(player);
                    if (config.Setting.Reload) players.Remove(player);
                    break;
                }
            }
            EffectNetwork.Send(x, player.Connection);
        }
#endregion
#region GUI
        private void GUILogo(BasePlayer player) {
            CuiHelper.DestroyUi(player, ".LogoGUI");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "10 -77", OffsetMax = "80 -8"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".LogoIMG"), Color = config.Logo.LogoColor, Material = config.Logo.LogoMaterial
                }
            }
            , "Overlay", ".LogoGUI");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "0 0 0 0", Command = "ui_menu open"
                }
                , Text = {
                    Text = ""
                }
            }
            , ".LogoGUI");
            CuiHelper.AddUi(player, container);
        }
        private void GUIMenu(BasePlayer player) {
            CuiHelper.DestroyUi(player, ".MenuGUI");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "45 -72.5", OffsetMax = "400 -12.5"
                }
                , Image = {
                    Color = config.Menu.MenuColor, Material = config.Menu.MenuMaterial
                }
            }
            , "Overlay", ".MenuGUI");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "-35 -64.5", OffsetMax = "35 4.5"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".LogoIMG"), Color = config.Logo.LogoColor, Material = config.Logo.LogoMaterial
                }
            }
            , ".MenuGUI");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "-35 -64.5", OffsetMax = "35 4.5"
                }
                , Button = {
                    Color = "0 0 0 0", Close = ".MenuGUI", Command = "ui_menu close"
                }
                , Text = {
                    Text = ""
                }
            }
            , ".MenuGUI");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "40 -55", OffsetMax = "42.5 -5"
                }
                , Image = {
                    Color = "1 1 1 1"
                }
            }
            , ".MenuGUI");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "322.5 -55", OffsetMax = "325 -5"
                }
                , Image = {
                    Color = "1 1 1 1"
                }
            }
            , ".MenuGUI");
            int count = config.Button.Count, count1 = config.ButtonP.Count;
            foreach(var i in config.Button) {
                double offset = (26 * count--) + (1.75 * count--);
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{5 + offset - 52} -25", OffsetMax = $"{5 + offset} -10"
                    }
                    , Button = {
                        Color = config.Menu.ButtonColor, Command = i.Value
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , ".MenuGUI", ".BUTTON");
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                    }
                    , Text = {
                        Text = i.Key, Align = TextAnchor.MiddleCenter, FontSize = config.Menu.ButtonSize, Color = config.Menu.ButtonTextColor
                    }
                }
                , ".BUTTON");
            }
            foreach(var i in config.ButtonP) {
                double offset = (6.5 * count1--) + (2.5 * count1--);
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"155 {0.75 + offset - 15}", OffsetMax = $"170 {0.75 + offset}"
                    }
                    , Button = {
                        Color = "1 1 1 1", Sprite = i.Value, Command = i.Key
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , ".MenuGUI", ".BUTTON");
            }
            CuiHelper.AddUi(player, container);
            GUIMenuInfo(player);
            if (config.Setting.AEvents) GUIEvent(player);
        }
        private void GUIMenuInfo(BasePlayer player) {
            CuiHelper.DestroyUi(player, ".MenuInfoGUI");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "47.5 -40", OffsetMax = "318 -5"
                }
                , Text = {
                    Text = string.Format(config.Menu.NameServerInfo, IQFakeActive ? FakeOnline : BasePlayer.activePlayerList.Count, ConVar.Server.maxplayers, ServerMgr.Instance.connectionQueue.Joining, BasePlayer.sleepingPlayerList.Count, TOD_Sky.Instance.Cycle.DateTime.ToString("HH:mm")), Align = TextAnchor.UpperCenter, FontSize = 13, Color = "1 1 1 1"
                }
            }
            , ".MenuGUI", ".MenuInfoGUI");
            CuiHelper.AddUi(player, container);
        }
        private void GUIEvent(BasePlayer player) {
            CuiHelper.DestroyUi(player, ".EventGUI");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "117.75 -90", OffsetMax = "247 -62.5"
                }
                , Image = {
                    Color = config.Event.EMenuColor, Material = config.Event.EMenuMaterial
                }
            }
            , ".MenuGUI", ".EventGUI");
            int count = config.Event.Events.Count;
            foreach(var i in config.Event.Events) {
                double offset = (11.25 * count--) + (1.5 * count--);
                container.Add(new CuiPanel {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{0 + offset - 22.5} -11.25", OffsetMax = $"{0 + offset} 11.25"
                    }
                    , Image = {
                        Color = config.Event.EBackgroundColor
                    }
                }
                , ".EventGUI", $".{i.Key}");
            }
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "1.75 1.75", OffsetMax = "-1.75 -1.75"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".CargoShip"), Color = eCargoShip ? config.Event.Events["CargoShip"].EventAColor : config.Event.Events["CargoShip"].EventDColor
                }
            }
            , ".CargoShip");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "1.75 1.75", OffsetMax = "-1.75 -1.75"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".CargoPlane"), Color = eCargoPlane ? config.Event.Events["CargoPlane"].EventAColor : config.Event.Events["CargoPlane"].EventDColor
                }
            }
            , ".CargoPlane");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "1.75 1.75", OffsetMax = "-1.75 -1.75"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".BradleyAPC"), Color = eBradleyAPC ? config.Event.Events["BradleyAPC"].EventAColor : config.Event.Events["BradleyAPC"].EventDColor
                }
            }
            , ".BradleyAPC");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "1.75 1.75", OffsetMax = "-1.75 -1.75"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".BaseHelicopter"), Color = eBaseHelicopter ? config.Event.Events["BaseHelicopter"].EventAColor : config.Event.Events["BaseHelicopter"].EventDColor
                }
            }
            , ".BaseHelicopter");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "1.75 1.75", OffsetMax = "-1.75 -1.75"
                }
                , Image = {
                    Png = (string) ImageLibrary.Call("GetImage", ".CH47Helicopter"), Color = eCH47Helicopter ? config.Event.Events["CH47Helicopter"].EventAColor : config.Event.Events["CH47Helicopter"].EventDColor
                }
            }
            , ".CH47Helicopter");
            CuiHelper.AddUi(player, container);
        }
#endregion
    }
}

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