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

FREE ZealMicroMenu : 1.0.3 1.0.3

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

namespace Oxide.Plugins
{
    [Info("ZealMicroMenu", "https://topplugin.ru/", "1.0.3")]
    [Description("Микро меню для сервера Rust")]
    class ZealMicroMenu : RustPlugin
    {
        #region [Reference] / [Запросы]

        [PluginReference] Plugin ImageLibrary;

        private string GetImg(string name)
        {
            return (string) ImageLibrary?.Call("GetImage", name) ?? "";
        }

        #endregion

        #region [Classes] / [Классы] 

        public class ButtonElement
        {
            [JsonProperty(PropertyName = "Текст кнопки")]
            public string text;

            [JsonProperty(PropertyName = "Команда кнопки")]
            public string command;

            [JsonProperty(PropertyName = "Цвет иконки кнопки, и текста")]
            public string color;

            [JsonProperty(PropertyName = "Иконка кнопки (SPRITE/URL)")]
            public string Image;
        }

        #endregion

        #region [Configuraton] / [Конфигурация]

        static public ConfigData config;

        public class ConfigData
        {
            [JsonProperty(PropertyName = "ZealMicroMenu")]
            public MicroMenu ZealMicroMenu = new MicroMenu();

            public class MicroMenu
            {
                [JsonProperty(PropertyName = "Текст кнопки открытия микро меню")]
                public string MenuTXT;

                [JsonProperty(PropertyName = "Логотип меню (URL/SPRITE)")]
                public string MenuIC;

                [JsonProperty(PropertyName = "Цвет иконки меню (HEX)")]
                public string ColorMenuIC;

                [JsonProperty(PropertyName = "Положение меню по X (AnchorMin)")]
                public string MPosXMin;

                [JsonProperty(PropertyName = "Положение меню по X (AnchorMax)")]
                public string MPosXMax;

                [JsonProperty(PropertyName = "Положение меню по Y (AnchorMin)")]
                public string MPosYMin;

                [JsonProperty(PropertyName = "Положение меню по Y (AnchorMax)")]
                public string MPosYMax;

                [JsonProperty(PropertyName = "Список кнопок")]
                public List<ButtonElement> ButtonElements = new List<ButtonElement>();
            }
        }

        public ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                ZealMicroMenu = new ConfigData.MicroMenu
                {
                    MenuTXT = $"<b>{ConVar.Server.hostname}</b>\n<size=11>НАЖМИ, ЧТОБЫ ОТКРЫТЬ МЕНЮ</size>",
                    MenuIC = "assets/icons/broadcast.png",
                    ColorMenuIC = "#C4C4C4FF",
                    MPosXMin = "0.003653084",
                    MPosXMax = "0.1718864",
                    MPosYMin = "0.925",
                    MPosYMax = "0.999",
                    ButtonElements =
                    {
                        new ButtonElement
                        {
                            text = "МАГАЗИН",
                            color = "#C4C4C4FF",
                            command = "",
                            Image = "assets/icons/store.png"
                        },
                        new ButtonElement
                        {
                            text = "КАРТА ПОКРЫТИЯ РАДИАЦИИ",
                            color = "#C4C4C4FF",
                            command = "",
                            Image = "assets/icons/radiation.png"
                        },
                        new ButtonElement
                        {
                            text = "ЗОО-ПАРК",
                            color = "#C4C4C4FF",
                            command = "",
                            Image = "assets/icons/bite.png"
                        },
                        new ButtonElement
                        {
                            text = "АПТЕКА",
                            color = "#C4C4C4FF",
                            command = "",
                            Image = "assets/icons/pills.png"
                        }
                    }
                }
            };
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();

            try
            {
                config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        } 

        protected override void LoadDefaultConfig()
        {
            PrintError("Файл конфигурации поврежден (или не существует), создан новый!");
            config = GetDefaultConfig();
        }

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

        #endregion

        #region [Dictionary/Vars] / [Словари/Переменные]

        private string Sharp = "assets/content/ui/ui.background.tile.psd";
        private string Blur = "assets/content/ui/uibackgroundblur.mat";
        private string radial = "assets/content/ui/ui.background.transparent.radial.psd";
        private string regular = "robotocondensed-regular.ttf";

        bool hide_open = false;

        public string Layer = "BoxMicroMenu";

        #endregion

        #region [DrawUI] / [Показ UI]  

        void DrawUI_MicroMenu(BasePlayer player)
        {
            CuiElementContainer Gui = new CuiElementContainer();
            CuiHelper.DestroyUi(player, Layer);
            var cfg = config.ZealMicroMenu;

            Gui.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = $"{cfg.MPosXMin} {cfg.MPosYMin}",
                    AnchorMax = $"{cfg.MPosXMax} {cfg.MPosYMax}"
                }
            }, "Overlay", Layer);

            if (config.ZealMicroMenu.MenuIC.Contains("assets"))
            {
                Gui.Add(new CuiElement
                {
                    Name = "MenuIC",
                    Parent = Layer,
                    Components =
                    {
                        new CuiImageComponent
                        {
                            Color = HexToRustFormat(config.ZealMicroMenu.ColorMenuIC),
                            Sprite = config.ZealMicroMenu.MenuIC
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = "0.01857769 0.1749995",
                            AnchorMax = "0.1795644 0.8249998"
                        }
                    }
                });
            }
            else
            {
                Gui.Add(new CuiElement
                {
                    Name = "MenuIC",
                    Parent = Layer,
                    Components =
                    {
                        new CuiRawImageComponent
                        {
                            Color = HexToRustFormat("#C4C4C4FF"),
                            Png = GetImg(config.ZealMicroMenu.MenuIC)
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = "0.01857769 0.1749995",
                            AnchorMax = "0.1795644 0.8249998"
                        }
                    }
                });
            }

            Gui.Add(new CuiButton
            {
                Button =
                {
                    Command = "micromenu",
                    Color = "0 0 0 0"
                },
                Text =
                {
                    Align = TextAnchor.MiddleLeft,
                    Color = HexToRustFormat("#C4C4C4FF"),
                    FontSize = 17,
                    Text = config.ZealMicroMenu.MenuTXT,
                    Font = "robotocondensed-regular.ttf"
                },
                RectTransform =
                {
                    AnchorMin = "0.2024794 0",
                    AnchorMax = "1 1"
                }
            }, Layer, "ButtonOpen");

            if (hide_open == false)
            {
                int y = 0, num = 1;
                foreach (var button in config.ZealMicroMenu.ButtonElements)
                {
                    if (button.Image.Contains("assets"))
                    {
                        Gui.Add(new CuiElement
                        {
                            Name = "ButtonIC" + num,
                            Parent = Layer,
                            Components =
                            {
                                new CuiImageComponent
                                {
                                    Color = HexToRustFormat(button.color),
                                    Sprite = button.Image,
                                    FadeIn = 0.1f + (num * 0.1f)
                                },
                                new CuiRectTransformComponent
                                {
                                    AnchorMin = $"{0.05882474} {-0.36 - (y * 0.5)}",
                                    AnchorMax = $"{0.1393183} {-0.037 - (y * 0.5)}"
                                }
                            }
                        });
                    }
                    else
                    {
                        Gui.Add(new CuiElement
                        {
                            Name = "ButtonIC" + num,
                            Parent = Layer,
                            Components =
                            {
                                new CuiRawImageComponent
                                {
                                    Color = HexToRustFormat(button.color),
                                    Png = GetImg(button.Image),
                                    FadeIn = 0.1f + (num * 0.1f)
                                },
                                new CuiRectTransformComponent
                                {
                                    AnchorMin = $"{0.05882474} {-0.36 - (y * 0.5)}",
                                    AnchorMax = $"{0.1393183} {-0.037 - (y * 0.5)}"
                                }
                            }
                        });
                    }

                    Gui.Add(new CuiButton
                        {
                            Button =
                            {
                                Command = button.command,
                                Color = "0 0 0 0",
                            },
                            Text =
                            {
                                Align = TextAnchor.MiddleLeft,
                                Color = HexToRustFormat(button.color),
                                FontSize = 15,
                                Text = $"{button.text}",
                                Font = "robotocondensed-regular.ttf",
                                FadeIn = 0.1f + (num * 0.1f)
                            },
                            RectTransform =
                            {
                                AnchorMin = $"{0.2012334} {-0.412 - (y * 0.5)}",
                                AnchorMax = $"{1} {0.05 - (y * 0.5)}"
                            }
                        }, Layer, "but" + num);
                    y++;
                    num++;
                }

                hide_open = true;
            }
            else
            {
                for (int i = 0; i <= config.ZealMicroMenu.ButtonElements.Count; i++)
                {
                    CuiHelper.DestroyUi(player, "but" + i);
                }

                hide_open = false;
            }

            CuiHelper.AddUi(player, Gui);
        }

        #endregion

        #region [Hooks] / [Крюки]

        void OnServerInitialized()
        {
            if (!ImageLibrary)
            {
                PrintError("На сервере не установлен плагин [ImageLibrary]");
                return;
            }

            foreach (var button in config.ZealMicroMenu.ButtonElements)
            {
                if (!button.Image.Contains("assets"))
                {
                    ImageLibrary.Call("AddImage", button.Image, button.Image);
                } 
            }

            if (!config.ZealMicroMenu.MenuIC.Contains("assets"))
            {
                ImageLibrary.Call("AddImage", config.ZealMicroMenu.MenuIC, config.ZealMicroMenu.MenuIC);
            }
            
            foreach (var player in BasePlayer.activePlayerList)
            {
                DrawUI_MicroMenu(player);
            }

            Puts(" ");
            Puts("----------------------Контакты----------------------");
            Puts(" ");
            Puts(" Вконтакте : vk.com/rustnastroika");
            Puts(" VK : vk.com/nastroikarust");
            Puts(" Группа вконтакте : vk.com/top__plugin");
            Puts(" ");
            Puts("---^-^----Приятного пользования----^-^---");
            Puts(" ");
        }

        void OnPlayerConnected(BasePlayer player)
        {
            NextTick(() => DrawUI_MicroMenu(player));
        }

        #endregion

        #region [ChatCommand] / [Чат команды]

        [ConsoleCommand("micromenu")]
        private void DrawUI(ConsoleSystem.Arg args)
        {
            if (!args.Player()) return;
            DrawUI_MicroMenu(args.Player());
        }

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

        #endregion
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху