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

FREE Panel : 1.1.0 1.1.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections.Generic;
using Oxide.Core.Plugins;
using System.Globalization;
using System.Linq;
using System.Text;
using UnityEngine;


namespace Oxide.Plugins
{
    [Info("Panel", "Ryamkk", "1.1.0")]
      //  Слив плагинов server-rust by Apolo YouGame
    class Panel : RustPlugin
    {
		private PluginConfig config;
        private Dictionary<ulong, bool> Paneldata = new Dictionary<ulong, bool>();
		private static string Layer = "PanelGUI";
		
		#region Plugin Reference
		[PluginReference] Plugin ImageLibrary;
		#endregion
		
		#region Initialization
        private void Init() => config = Config.ReadObject<PluginConfig>();
        protected override void LoadDefaultConfig() => Config.WriteObject(PanelConfig(), true);
        
        void OnServerInitialized()
        {
			if (!plugins.Exists("ImageLibrary"))
            {
                PrintError("Плагин ImageLibrary не загружен, плагин выгружен!");
                Unload();
            }
			
			ImageLibrary.Call("AddImage", config.LogoURL,  "LogoURL");
			
            foreach (var player in BasePlayer.activePlayerList) 
			    OnPlayerInit(player);
        }
		
		void OnPlayerInit(BasePlayer player)
        {
            if (player.IsReceivingSnapshot())
            {
                NextTick(() =>
                {
                    OnPlayerInit(player);
                    return;
                });
            }
            
            DrawGUI(player);
        }
		
		void Load()
		{
			foreach (BasePlayer player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, Layer);
		}
		
		void Unload()
        {
			foreach (BasePlayer player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, Layer);
        }
		
        #endregion
		
        #region Configuration
        private class PluginConfig
        {	
		    [JsonProperty("Ссылка на логотип")]
		    public string LogoURL;
			
			[JsonProperty("Названия сервера")]
		    public string ServerName;
			
			[JsonProperty("Цвет названия сервера")]
		    public string ServerNameColor;
			
			[JsonProperty("Названия шрифта")]
		    public string NameFont;
			
			[JsonProperty("Размер названия сервера (Дефолтный размер: 16)")]
		    public int ServerNameSize;
			
			[JsonProperty("Размер кнопки (Дефолтный размер: 12)")]
		    public int ButtonSize;
			
            [JsonProperty("Вкладки меню")]
            public List<AddtionalPanel> panellist = new List<AddtionalPanel>();
        }

        private class AddtionalPanel
        {
            [JsonProperty("Минимальный отступ кнопки")]
            public string PanelButtonAnchorMin;
			
            [JsonProperty("Максимальный отступ кнопки")]
            public string PanelButtonAnchorMax;
			
			[JsonProperty("Минимальный отступ картинки")]
            public string PanelImageAnchorMin;
			
            [JsonProperty("Максимальный отступ картинки")]
            public string PanelImageAnchorMax;
			
            [JsonProperty("Картинка")]
            public string PanelImageUrl;
			
            [JsonProperty("Команда")]
            public string PanelButtonCmd;
			
			[JsonProperty("Названия кнопки")]
            public string PanelButtonName;
			
			[JsonProperty("Цвет кнопки и картинки")]
            public string PanelColor;
			
			[JsonProperty("Размер кнопки (Дефолтный размер: 12)")]
		    public int ButtonSize;
			
			[JsonProperty("Названия шрифта")]
		    public string NameFont;
        }
		
		private PluginConfig PanelConfig()
        {
            return new PluginConfig
            {
				LogoURL = "https://i.imgur.com/dFziN7i.png",
				ServerName = "MAGIC RUST • MAX3 • X5",
				ServerNameColor = "#FFFFFF5A",
				NameFont = "robotocondensed-bold.ttf",
				ButtonSize = 12,
				ServerNameSize = 16,
				
				
				
                panellist = new List<AddtionalPanel>
                {
                   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374998 -1.080003",
                        PanelImageAnchorMax = "-0.01249984 -0.0800035",
						PanelImageUrl = "https://i.imgur.com/9FJ1Cqu.png",
						
						NameFont = "robotocondensed-bold.ttf",
						
                        PanelButtonAnchorMin = "0.005895811 -1.06",
						PanelButtonAnchorMax = "0.7558958 -0.0600118",
						PanelButtonName = "НАСТРОЙКА ИГРОВОГО ЧАТА",
                        PanelButtonCmd = "chat.say /chat",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
                   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -2.099999",
                        PanelImageAnchorMax = "-0.01249996 -1.099998",
						PanelImageUrl = "https://i.imgur.com/OPmWEo7.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0.007499999 -2.099999",
						PanelButtonAnchorMax = "0.7574999 -1.099998",
						PanelButtonName = "БЛОКИРОВКА ПРЕДМЕТОВ",
						PanelButtonCmd = "chat.say /block",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -3.099771",
                        PanelImageAnchorMax = "-0.01249985 -2.099771",
						PanelImageUrl = "https://i.imgur.com/uHGxrOc.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0.004999999 -3.099998",
						PanelButtonAnchorMax = "0.7549999 -2.099998",
						PanelButtonName = "НАСТРОЙКИ ПОПАДАНИЙ",
						PanelButtonCmd = "chat.say /marker",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -4.079997",
                        PanelImageAnchorMax = "-0.01249996 -3.079997",
						PanelImageUrl = "https://i.imgur.com/kNEaL90.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0 -4.079997",
						PanelButtonAnchorMax = "0.7499999 -3.079997",
						PanelButtonName = "РАСПИСАНИЯ ВАЙПОВ",
						PanelButtonCmd = "chat.say /wipe",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -5.059996",
                        PanelImageAnchorMax = "-0.01249996 -4.059996",
						PanelImageUrl = "https://i.imgur.com/Vz4GEfE.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0 -5.099996",
						PanelButtonAnchorMax = "0.7499999 -4.099996",
						PanelButtonName = "ДОСТУПНЫЕ НАБОРЫ",
						PanelButtonCmd = "chat.say /kit",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -6.099995",
                        PanelImageAnchorMax = "-0.01249996 -5.099996",
						PanelImageUrl = "https://i.imgur.com/NYZPHuE.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0 -6.099995",
						PanelButtonAnchorMax = "0.7499999 -5.099996",
						PanelButtonName = "СТАТИСТИКА",
						PanelButtonCmd = "chat.say /stat",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -7.099994",
                        PanelImageAnchorMax = "-0.01249996 -6.099995",
						PanelImageUrl = "https://i.imgur.com/hXtyw8a.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0 -7.099994",
						PanelButtonAnchorMax = "0.7499999 -6.099995",
						PanelButtonName = "ПРАВИЛА",
						PanelButtonCmd = "chat.say /rules",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   },
				   new AddtionalPanel
                   {
                        PanelImageAnchorMin = "-0.1374999 -8.099996",
                        PanelImageAnchorMax = "-0.01249996 -7.099997",
						PanelImageUrl = "https://i.imgur.com/A1bpS78.png",
						 
						NameFont = "robotocondensed-bold.ttf",
						 
                        PanelButtonAnchorMin = "0 -8.099996",
						PanelButtonAnchorMax = "0.7499999 -7.099997",
						PanelButtonName = "КОРЗИНА",
						PanelButtonCmd = "chat.say /store",
						ButtonSize = 12,
						PanelColor = "#FFFFFF5A",
                   }
                }
            };
        }
        #endregion

        #region Commands
		[ConsoleCommand("ui.panel")]
        private void cmdMPanel(ConsoleSystem.Arg arg)
        {
			var player = arg.Player();
            if (!Paneldata.ContainsKey(player.userID)) Paneldata.Add(player.userID, false);
            else
            {
                if (Paneldata[player.userID])
                {
                    Paneldata[player.userID] = false;
                    DrawGUI(player);
                }
                else
                {
                    Paneldata[player.userID] = true;
                    DrawGUI(player);
                }
            }
            return;
        }
		#endregion
		
		#region GUI Interface
        private void DrawGUI(BasePlayer player)
        {
            if (player == null) return;

            if (!Paneldata.ContainsKey(player.userID)) Paneldata.Add(player.userID, false);

			CuiElementContainer container = new CuiElementContainer();
			
			#region Создаём элемент родитель интерфейса панели.container.Add(new CuiPanel
            {
                Image = { Color = "0 0 0 0" },
                RectTransform = { AnchorMin = "0.03121747 0.9491682", AnchorMax = "0.239334 0.9953789" },
                CursorEnabled = false,
            }, "Overlay", Layer);
			#endregion
			
			#region Создаём логотоип и названия сервера.container.Add(new CuiElement
            {
                Parent = Layer,
                Components =
                {
                    new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", $"LogoURL") },
                    new CuiRectTransformComponent { AnchorMin = "-0.1384371 -0.01343705", AnchorMax = "-0.01593705 0.9975058" }
                }
            });
			
			container.Add(new CuiElement
            {
                Parent = Layer,
                Components = {
                    new CuiTextComponent() { Text = config.ServerName, FontSize = config.ServerNameSize, Align = TextAnchor.UpperLeft, Font = config.NameFont, Color = HexToCuiColor(config.ServerNameColor) },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" },
                }
            });
			#endregion
			
			#region Запоминаем информацию #1
            if(config.panellist.Count() < 1)
            {
                CuiHelper.DestroyUi(player, Layer);
                CuiHelper.AddUi(player, container);
                return;
            }
			#endregion
			
			#region Создаём переключатель.string textswitsh = Paneldata[player.userID] ? "НАЖМИТЕ ЧТОБЫ ОТКРЫТЬ МЕНЮ":"НАЖМИТЕ ЧТОБЫ ЗАКРЫТЬ МЕНЮ";
			container.Add(new CuiElement
			{
				Parent = Layer,
		        Name = Layer,
				Components = {
					new CuiTextComponent() { Text = textswitsh, FontSize = config.ButtonSize, Align = TextAnchor.LowerLeft, Color = HexToCuiColor(config.ServerNameColor), Font = config.NameFont },
                    new CuiRectTransformComponent { AnchorMin = "0 0.1600001", AnchorMax = "1 1.16", OffsetMin = "0 0" },
				}
			});
			
			container.Add(new CuiButton
            {
				RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" },
                Button = { Color = "0 0 0 0", Command = "ui.panel" },
                Text = { Text = "" }
            }, Layer);
			#endregion
			
			#region Запоминаем информацию #2
            if (Paneldata[player.userID])
            {
                CuiHelper.DestroyUi(player, Layer);
                CuiHelper.AddUi(player, container);
                return;
            }
			#endregion

			#region Создаём кнопки для меню.int i = 0;
            foreach(var panel in config.panellist)
            {
				CuiHelper.DestroyUi(player, Layer);
				container.Add(new CuiElement
				{
					Parent = Layer,
                    Name = Layer,
					Components = {
						new CuiRawImageComponent { FadeIn = 3.0f, Url = panel.PanelImageUrl, Color = HexToCuiColor(panel.PanelColor) },
                        new CuiRectTransformComponent { AnchorMin = panel.PanelImageAnchorMin, AnchorMax = panel.PanelImageAnchorMax }
					}
				});
				
                container.Add(new CuiButton
                {
                    RectTransform = { AnchorMin = panel.PanelButtonAnchorMin, AnchorMax = panel.PanelButtonAnchorMax },
                    Button = { FadeIn = 3.0f, Color = "0 0 0 0", Command = panel.PanelButtonCmd },
                    Text = { Text = panel.PanelButtonName, FontSize = panel.ButtonSize, Align = TextAnchor.MiddleLeft, Color = HexToCuiColor(panel.PanelColor), Font = panel.NameFont }
                }, Layer);
                i++;
            }
			#endregion

            CuiHelper.DestroyUi(player, Layer);
            CuiHelper.AddUi(player, container);
        }
        #endregion
		
		#region Utilits and Others
		private static string HexToCuiColor(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 $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }
		#endregion
    }
}

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