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

FREE MicroPanel : 1.2.0 1.2.0

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("MicroPanel", "Server-rust.ru", "1.2.0")]
    [Description("Server-rust.ru")]
    public class MicroPanel : RustPlugin
    {
        private void OnServerInitialized()
        {
            foreach (var baseEntity in BaseEntity.saveList)
            {
                if (baseEntity is BaseHelicopter)
                    IsHeli = true;
                if (baseEntity is BradleyAPC)
                    isTank = true;
                if (baseEntity is CargoPlane)
                    IsAir = true;
                if (baseEntity is CargoShip)
                    IsCargo = true;
            }

            AddImage("https://i.ibb.co/cXNqzNd/1.png", "heli");
            AddImage("https://i.ibb.co/pLg31pD/2.png", "bradley");
            AddImage("https://i.ibb.co/02pf3wR/3.png", "air");
            AddImage("https://i.ibb.co/pLg31pD/4.png", "cargp");
            AddImage(cfg.icon, "lyble");
            foreach (var basePlayer in BasePlayer.activePlayerList)
                OnPlayerConnected(basePlayer);
        }

        private void OnUserDisconnected(IPlayer player)
        {
            foreach (var basePlayer in BasePlayer.activePlayerList)
                OnlinePlayer(basePlayer);
        }
        private void OnPlayerConnected(BasePlayer player)
        {
            timer.Once(1f, () => StartUi(player));
            foreach (var basePlayer in BasePlayer.activePlayerList)
                OnlinePlayer(basePlayer);
        }
        private void Unload()
        {
            foreach (var basePlayer in BasePlayer.activePlayerList)
                CuiHelper.DestroyUi(basePlayer, Layer);
        }
        #region Cfg

        private static ConfigData cfg { get; set; }

        private class ConfigData
        {
            [JsonProperty("Лейбел")] public string ServerName = "<b>RUST_102RU</b>";
            [JsonProperty("Ссылка на картинку иконки")] public string icon = "https://imgur.com/07zYtds.png";
            [JsonProperty("Включен ивент цвет")] public string coloron = "0.00 1.00 0.98 1.00";
            [JsonProperty("Выключен ивент цвет")] public string coloroff = "0.45 0.45 0.45 0.86";
            [JsonProperty("Кнопки")] public List<Buttons> buttonList = new List<Buttons>();
            public static ConfigData GetNewConf()
            {
                var newConfig = new ConfigData
                {
                    buttonList = new List<Buttons>()
                    {
                        new Buttons()
                        {
                            Commnad = "chat.say /store",
                            Name = "МАГАЗИН",
                        }
                    }
                };
                return newConfig;
            }
        }

        internal class Buttons
        {
            public string Commnad;
            public string Name;
        }
        protected override void LoadDefaultConfig()
        {
            cfg = ConfigData.GetNewConf();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(cfg);
        }

        protected override void LoadConfig()
        {
            base.LoadConfig(); try { cfg = Config.ReadObject<ConfigData>(); }catch { LoadDefaultConfig(); } NextTick(SaveConfig);
        }

        #endregion
        private string Layer = "MicroPanelByLAGZYA";
        private readonly List<ulong> listPlayer = new List<ulong>();
        private CuiButton _menuButtons = new CuiButton()
        {
            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.75069132 0.7090913"},
            Button = {Color = "0.88 0.01 0.58 1.00", Command = "Ui_MicroPanel menu", Sprite = "assets/icons/gear.png"},
            Text = {Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", Color = "0.86 0.86 0.86 1", FontSize = 10}
        };
        private CuiButton _menuButton = new CuiButton()
        {
            RectTransform = {AnchorMin = "0.04962963 0.04962971", AnchorMax = "0.18 0.377037"},
            Button = {Color = "0.88 0.01 0.58 1.00", Command = "Ui_MicroPanel menu", Sprite = "assets/icons/circle_open.png"},
            Text = {Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", Color = "1 1 1 1", FontSize = 10}
        };
        private CuiPanel _mainPanel = new CuiPanel()
        {
            RectTransform = {AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -90", OffsetMax = "225 0"},
            Image = {Color = "0 0 0 0"}
        };
        object OnPlayerSleep(BasePlayer player)
        {
            OnPlayerSleepEnded(null);
            return null;
        }
        void OnPlayerSleepEnded(BasePlayer player)
        {
            timer.Once(0.1f, (() =>
            {
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    OnlinePlayer(basePlayer);
            }));
        }
        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity is BaseHelicopter)
            {
                IsHeli = true;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "heli"); 
            }
            if (entity is BradleyAPC)
            {
                isTank = true;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "bradley");
            }
            if (entity is CargoPlane)
            {
                IsAir = true;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "air"); 
            }
            if (entity is CargoShip)
            {
                IsCargo = true;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "cargo");
            }
        }
        void OnEntityKill(BaseNetworkable entity)
        {
            if (entity is CargoPlane)
            {
                IsAir = true;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "air");
            }
            if (entity is CargoShip)
            {
                IsCargo = false;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "cargo");  
            }
            if (entity is BaseHelicopter)
            {
                IsHeli = false;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "heli");
            }
            if (entity is BradleyAPC)
            {
                isTank = false;
                foreach (var basePlayer in BasePlayer.activePlayerList)
                    EventInit(basePlayer, "bradley");
            }
        }
        private void OnlinePlayer(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Layer + "Online");
            CuiHelper.DestroyUi(player, Layer + "Sleep");
            var cont = new CuiElementContainer();
            cont.Add(new CuiButton()
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
                Button = { Command = "", Color = "0.15 0.86 0.1 0"},
                Text = {Text = $"{BasePlayer.activePlayerList.Count}/{ConVar.Server.maxplayers}", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 10}
            }, Layer + "Onlinefon", Layer + "Online");
            cont.Add(new CuiButton()
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
                Button = { Command = "", Color = "0.25 0.86 0.86 0"},
                Text = {Text = $"{BasePlayer.sleepingPlayerList.Count}", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 10}
            }, Layer + "SleepFon", Layer + "Sleep");
            CuiHelper.AddUi(player, cont);
        }
        private bool IsAir, IsHeli, isTank, IsCargo;
        private void EventInit(BasePlayer player, string type)
        {
            var cont = new CuiElementContainer();
            switch (type)
            {
                case "air":
                    CuiHelper.DestroyUi(player, Layer + "Air");
                    if(IsAir)
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "0.8165272 0.5999999", AnchorMax = "0.9688864 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloron, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Air");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloron, Png = GetImage("air")},
                        }, Layer + "Air");
                    }
                    else
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "0.8165272 0.5999999", AnchorMax = "0.9688864 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloroff, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Air");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloroff, Png = GetImage("air")},
                        }, Layer + "Air");
                    }
                    CuiHelper.AddUi(player, cont);
                    break;
                case "heli":
                    CuiHelper.DestroyUi(player, Layer + "Heli");
                    if(IsHeli)
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "0.9943045 0.5999999", AnchorMax = "1.146664 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloron, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Heli");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloron, Png = GetImage("heli")},
                        }, Layer + "Heli");
                    }
                    else
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "0.9943045 0.5999999", AnchorMax = "1.146664 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloroff, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Heli");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloroff, Png = GetImage("heli")},
                        },Layer + "Heli");
                    }
                    CuiHelper.AddUi(player, cont);
                    break;
                case "bradley":
                    CuiHelper.DestroyUi(player, Layer + "Bradley");
                    if(isTank)
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "1.175045 0.5999999", AnchorMax = "1.327404 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloron, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Bradley");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloron, Png = GetImage("bradley")},
                        },Layer + "Bradley");
                    }
                    else
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "1.175045 0.5999999", AnchorMax = "1.327404 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloroff, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Bradley");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloroff, Png = GetImage("bradley")},
                        },Layer + "Bradley");
                    }
                    CuiHelper.AddUi(player, cont);
                    break;
                case "cargo":
                    CuiHelper.DestroyUi(player, Layer + "Cargo");
                    if(IsCargo)
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "1.355785 0.5999999", AnchorMax = "1.508144 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloron, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Cargo");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloron, Png = GetImage("cargo")},
                        },Layer + "Cargo");
                    }
                    else
                    {
                        cont.Add(new CuiButton()
                        {
                            RectTransform = {AnchorMin = "1.355785 0.5999999", AnchorMax = "1.508144 0.977778"},
                            Button =
                            {
                                Command = "", Color = cfg.coloroff, Sprite = "assets/icons/circle_open.png"
                            },
                            Text = {Text = $"",}
                        }, Layer, Layer + "Cargo");
                        cont.Add(new CuiPanel()
                        {
                            RectTransform = {AnchorMin = "0.2241479 0.2363638", AnchorMax = "0.7069132 0.7090913"},
                            Image = {Color = cfg.coloroff, Png = GetImage("cargo")},
                        },Layer + "Cargo");
                    }
                    CuiHelper.AddUi(player, cont);
                    break;
            }
        }
        private void StartUi(BasePlayer player)
        {
            var cont = new CuiElementContainer();
            cont.Add(_mainPanel, "Overlay", Layer);
            cont.Add(new CuiElement()
            {
                Parent = Layer,
                Components =
                {
                    new CuiTextComponent(){Text = cfg.ServerName, Align = TextAnchor.UpperLeft, Font = "robotocondensed-regular.ttf"},
                    new CuiRectTransformComponent(){AnchorMin = "0.2476391 0.6740742", AnchorMax = "0.7851852 0.8740749"}
                }
            });
            cont.Add(new CuiElement()
            {
                Parent = Layer,
                Name = Layer + "Onlinefon",
                Components =
                {
                    new CuiImageComponent(){Color = "0.34 0.34 0.34 0.25"},
                    new CuiRectTransformComponent(){AnchorMin = "0.2518518 0.5481482", AnchorMax = "0.4533333 0.6592584"}
                }
            });
            cont.Add(new CuiElement()
            {
                Parent = Layer,
                Name = Layer + "SleepFon",
                Components =
                {
                    new CuiImageComponent(){Color = "0.34 0.34 0.34 0.25"},
                    new CuiRectTransformComponent(){AnchorMin = "0.474075 0.5481482", AnchorMax = "0.6755549 0.6592584"}
                }
            });
            cont.Add(new CuiElement()
            {
                Parent = Layer + "Onlinefon",
                Components =
                {
                    new CuiImageComponent(){Color = "0.00 1.00 0.98 1.00", Sprite = "assets/icons/circle_closed_toedge.png"},
                    new CuiRectTransformComponent(){AnchorMin = "0.1 0.35", AnchorMax = "0.15 0.65"}
                }
            });
            cont.Add(new CuiElement()
            {
                Parent =  Layer + "SleepFon",
                Components =
                {
                    new CuiImageComponent(){Color = "0.34 0.34 0.34 1", Sprite = "assets/icons/circle_closed_toedge.png"},
                    new CuiRectTransformComponent(){AnchorMin = "0.1 0.35", AnchorMax = "0.15 0.65"}
                }
            });
            cont.Add(_menuButton, Layer, Layer + "Button");
            cont.Add(_menuButtons, Layer + "Button");
            cont.Add(new CuiElement()
            {
                Parent = Layer,
                Components =
                {
                    new CuiRawImageComponent(){Png = GetImage("lyble")},
                    new CuiRectTransformComponent(){AnchorMin = "0.002962894 0.4666666", AnchorMax = "0.237037 0.9925921"}
                }
            });
            CuiHelper.AddUi(player, cont);
            OnlinePlayer(player);
            EventInit(player, "air");
            EventInit(player, "heli");
            EventInit(player, "cargo");
            EventInit(player, "bradley");
        }

        [ConsoleCommand("Ui_MicroPanel")]
        private void CommandUi(ConsoleSystem.Arg arg)
        {
            if(arg?.Player() == null) return;
            if (arg.Args[0] == "menu")
            {
                if (!listPlayer.Contains(arg.Player().userID))
                {
                    listPlayer.Add(arg.Player().userID);
                    MenuUpdate(arg.Player(), "menu");
                }
                else
                {
                    listPlayer.Remove(arg.Player().userID);
                    CuiHelper.DestroyUi(arg.Player(), Layer + "Mouse");
                    foreach (var buttonse in cfg.buttonList)
                        CuiHelper.DestroyUi(arg.Player(), Layer + "Mouse" + buttonse.Name);
                }
            }
        }
        private void MenuUpdate(BasePlayer player, string type)
        {
            var cont = new CuiElementContainer();
            float i = 0;
            switch (type)
            {
                case "menu":
                    cont.Add(new CuiPanel()
                    {
                        CursorEnabled = true,
                        RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
                        Image = {Color = "0 0 0 0"}
                    }, Layer + "Button", Layer + "Mouse");
                    foreach (var check in cfg.buttonList)
                    {
                        cont.Add(new CuiElement
                        {
                            Parent = Layer,
                            Name = Layer + "Mouse" + check.Name,
                            Components =
                            {
                                new CuiImageComponent
                                {
                                    Color = "1 0.32 0.32 1", Sprite = "assets/icons/circle_closed_toedge.png"
                                },
                                new CuiRectTransformComponent
                                {
                                    AnchorMin = $"0.1155556 {-0.1555557- i}", AnchorMax = $"0.1274074 {-0.1259255 - i}"
                                }
                            }
                        });
                        cont.Add(new CuiElement
                        {
                            Parent = Layer + "Mouse" + check.Name,
                            Components =
                            {
                                new CuiTextComponent(){Text = check.Name, Align = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf"},
                                new CuiRectTransformComponent
                                {
                                    AnchorMin = $"2.299999 -3.499928", AnchorMax = $"52.99999 3.499928"
                                }
                            }
                        });
                        cont.Add(
                            new CuiButton
                            {
                                RectTransform = {AnchorMin = "0 -3.499928", AnchorMax = $"52.99999 3.499928"},
                                Button = {Command = check.Commnad, Color = "0 0 0 0"}, 
                                Text = {Text = ""}
                            },
                            Layer + "Mouse" + check.Name);
                        i += 0.3240007f;
                    }

                    CuiHelper.AddUi(player, cont);
                    break;
            }
        }

        #region [Help]

        private string GetImage(string shortname, ulong skin = 0) =>
            (string) ImageLibrary.Call("GetImage", shortname, skin);

        private bool AddImage(string url, string shortname, ulong skin = 0) =>
            (bool) ImageLibrary.Call("AddImage", url, shortname, skin);

        [PluginReference] private Plugin ImageLibrary;

        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);
            }

            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 $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }

        #endregion
    }
}

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