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

FREE MoonInfoMenu : 1.0.2 1.0.2

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

namespace Oxide.Plugins
{
    [Info("MoonInfoMenu", "Kira", "1.0.2")]
    [Description("ads")]
    public class MoonInfoMenu : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;

        #region [Vars]

        private const string UIMain = "UI.InfoMenu";
        private const string Regular = "robotocondensed-regular.ttf";

        public class Page
        {
            public string Name;
            public Dictionary<int, PageImg> PagesMap = new Dictionary<int, PageImg>();
        }

        #endregion

        #region [Classes]

        public class PageImg
        {
            public string ImageRU;
            public string ImageENG;
        }

        #endregion

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

        private ConfigData _config;

        public class ConfigData
        {
            [JsonProperty(PropertyName = "MoonInfoMenu - Config")]
            public InfoMenuCFG InfoMenuSettings = new InfoMenuCFG();

            public class InfoMenuCFG
            {
                [JsonProperty(PropertyName = "Задний фон")]
                public string Background;

                [JsonProperty(PropertyName = "Количество кнопок в одном ряду")]
                public int Buttons;

                [JsonProperty(PropertyName = "Кнопки")]
                public Dictionary<string, string> Categories = new Dictionary<string, string>();

                [JsonProperty(PropertyName = "Страницы кнопок")]
                public Dictionary<string, Page> Pages = new Dictionary<string, Page>();
            }
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                InfoMenuSettings = new ConfigData.InfoMenuCFG
                {
                    Buttons = 6,
                    Background = "https://i.imgur.com/2NY1J9G.png",
                    Pages =
                    {
                        ["RULES"] = new Page
                        {
                            Name = "RULES",
                            PagesMap = new Dictionary<int, PageImg>
                            {
                                [0] = new PageImg
                                {
                                    ImageRU = "link",
                                    ImageENG = "link"
                                }
                            }
                        }
                    },
                    Categories =
                    {
                        ["RULES"] = "https://i.imgur.com/EZoMuMq.png",
                        ["UNIQITEMS"] = "https://i.imgur.com/KNjibpZ.png",
                        ["PAINT"] = "https://i.imgur.com/VgrnLNr.png",
                        ["SERVERDESC"] = "https://i.imgur.com/PbNXveR.png",
                        ["STOCKS"] = "https://i.imgur.com/9aPImkc.png",
                        ["WHITENIGHT"] = "https://i.imgur.com/IU4UtT5.png",
                        ["GAMES"] = "https://i.imgur.com/lwBB7la.png",
                        ["COMMANDS"] = "https://i.imgur.com/TEOXLNh.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 [DrawUI] / [Отрисовка UI]

        private void DrawUI_Main(BasePlayer player)
        {
            var ui = new CuiElementContainer();

            ui.Add(new CuiPanel
            {
                CursorEnabled = true,
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = "-0.005 -0.005",
                    AnchorMax = "1.007 1.007"
                }
            }, "Overlay", UIMain);

            ui.Add(new CuiElement
            {
                Name = $"{UIMain}.Background",
                Parent = UIMain,
                Components =
                {
                    new CuiRawImageComponent
                    {
                        Png = GetImage($"{UIMain}.MoonBackground")
                    },
                    new CuiRectTransformComponent
                    {
                        AnchorMin = "0 0",
                        AnchorMax = "1 1"
                    }
                }
            });

            ui.Add(new CuiButton
            {
                Button =
                {
                    Close = UIMain,
                    Color = "0 0 0 0"
                },
                Text =
                {
                    Text = " "
                },
                RectTransform =
                {
                    AnchorMin = "0 0",
                    AnchorMax = "0.06770833 0.03240741"
                }
            }, UIMain);

            CuiHelper.DestroyUi(player, UIMain);
            CuiHelper.AddUi(player, ui);
            DrawUI_Buttons(player);
        }

        private void DrawUI_Buttons(BasePlayer player)
        {
            var ui = new CuiElementContainer();

            int num = 0, x = 0, y = 0;
            foreach (var category in _config.InfoMenuSettings.Categories)
            {
                if (!_config.InfoMenuSettings.Pages.ContainsKey(category.Key)) continue;
                CuiHelper.DestroyUi(player, $"{UIMain}.Window.{num}");
                if (y >= _config.InfoMenuSettings.Buttons)
                {
                    x++;
                    y = 0;
                }

                ui.Add(new CuiElement
                {
                    Name = $"{UIMain}.Button.{num}",
                    Parent = UIMain,
                    Components =
                    {
                        new CuiRawImageComponent
                        {
                            Png = GetImage(category.Key),
                            FadeIn = 0.5f * num
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = $"{0.01822919 + (x * 0.05f)} {0.9370369 - (y * 0.1f)}",
                            AnchorMax = $"{0.04687502 + (x * 0.05f)} {0.9879628 - (y * 0.1f)}"
                        }
                    }
                });

                ui.Add(new CuiButton
                {
                    Button =
                    {
                        Color = "0 0 0 0",
                        Command = $"infomenu.category {category.Key}"
                    },
                    Text =
                    {
                        Align = TextAnchor.LowerCenter,
                        Color = "1 1 1 1",
                        FontSize = 9,
                        Text = _config.InfoMenuSettings.Pages[category.Key]?.Name,
                        Font = Regular,
                        FadeIn = 0.5f * num
                    },
                    RectTransform =
                    {
                        AnchorMin = "-0.3 -0.3",
                        AnchorMax = "1.3 1.3"
                    }
                }, $"{UIMain}.Button.{num}");
                y++;
                num++;
            }

            CuiHelper.AddUi(player, ui);
        }

        private void DrawUI_Window(BasePlayer player, Page page, int num, string key)
        {
            var ui = new CuiElementContainer();

            ui.Add(new CuiPanel
            {
                CursorEnabled = true,
                Image =
                {
                    Color = "0 0 0 0"
                },
                RectTransform =
                {
                    AnchorMin = "0 0",
                    AnchorMax = "1 1"
                }
            }, UIMain, $"{UIMain}.Window");

            ui.Add(new CuiButton
            {
                Button =
                {
                    Close = $"{UIMain}.Window",
                    Color = "0 0 0 0"
                },
                Text =
                {
                    Text = " "
                },
                RectTransform =
                {
                    AnchorMin = "0 0",
                    AnchorMax = "1 1"
                }
            }, $"{UIMain}.Window");

            ui.Add(new CuiElement
            {
                Name = $"{UIMain}.Window.Image",
                Parent = $"{UIMain}.Window",
                Components =
                {
                    new CuiRawImageComponent
                    {
                        Png = GetImage(lang.GetLanguage(player.UserIDString) == "en"
                            ? $"PageENG.{page.Name}.{num}"
                            : $"PageRU.{page.Name}.{num}")
                    },
                    new CuiRectTransformComponent
                    {
                        AnchorMin = "0.5 0.5",
                        AnchorMax = "0.5 0.5",
                        OffsetMin = "-400 -300",
                        OffsetMax = "400 300"
                    }
                }
            });

            CuiHelper.DestroyUi(player, $"{UIMain}.Window");
            CuiHelper.AddUi(player, ui);
            DrawUI_Pagination(player, num, key);
        }

        private void DrawUI_Pagination(BasePlayer player, int page, string category)
        {
            var ui = new CuiElementContainer();
            ui.Add(new CuiElement
            {
                Name = $"{UIMain}.Button.Page",
                Parent = $"{UIMain}.Window",
                Components =
                {
                    new CuiRawImageComponent
                    {
                        Png = GetImage($"{UIMain}.Button.Page")
                    },
                    new CuiRectTransformComponent
                    {
                        AnchorMin = "0.460938 0.1212963",
                        AnchorMax = "0.5385412 0.1574073"
                    }
                }
            });

            ui.Add(new CuiButton
            {
                Button =
                {
                    Command = $"infomenu.page {page - 1} {category}",
                    Color = "0 0 0 0"
                },
                Text = {Text = " "},
                RectTransform =
                {
                    AnchorMin = "0.460938 0.1212963",
                    AnchorMax = "0.5 0.1574073"
                }
            }, $"{UIMain}.Window", $"{UIMain}.Pages.Left");

            ui.Add(new CuiButton
            {
                Button =
                {
                    Command = $"infomenu.page {page + 1} {category}",
                    Color = "0 0 0 0"
                },
                Text = {Text = " "},
                RectTransform =
                {
                    AnchorMin = "0.4994792 0.1212963",
                    AnchorMax = "0.5385412 0.1574073"
                }
            }, $"{UIMain}.Window", $"{UIMain}.Pages.Right");

            CuiHelper.DestroyUi(player, $"{UIMain}.Pages.Left");
            CuiHelper.DestroyUi(player, $"{UIMain}.Pages.Right");
            CuiHelper.AddUi(player, ui);
        }

        #endregion

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

        // ReSharper disable once UnusedMember.Local
        private void OnServerInitialized()
        {
            ImageLibrary.Call("AddImage", _config.InfoMenuSettings.Background, $"{UIMain}.MoonBackground");
            ImageLibrary.Call("AddImage", "https://i.imgur.com/lm8Q8Ea.png", $"{UIMain}.Button.Page");
            ServerMgr.Instance.StartCoroutine(LoadImages());
        }

        #endregion

        #region [Commands] / [Команды]

        [ConsoleCommand("infomenu")]
        // ReSharper disable once UnusedMember.Local
        private void OpenMenu(ConsoleSystem.Arg args)
        {
            DrawUI_Main(args.Player());
        }

        [ChatCommand("infomenu")]
        // ReSharper disable once UnusedMember.Local
        private void OpenMenu(BasePlayer player)
        {
            DrawUI_Main(player);
        }

        [ConsoleCommand("infomenu.category")]
        // ReSharper disable once UnusedMember.Local
        private void CategoryMenu(ConsoleSystem.Arg args)
        {
            if (!_config.InfoMenuSettings.Pages.ContainsKey(args.Args[0])) return;
            DrawUI_Window(args.Player(), _config.InfoMenuSettings.Pages[args.Args[0]], 0, args.Args[0]);
        }

        [ConsoleCommand("infomenu.page")]
        // ReSharper disable once UnusedMember.Local
        private void InfoMenuPage(ConsoleSystem.Arg args)
        {
            if (args.Player() == null) return;
            var num = args.Args[0].ToInt();
            var category = args.Args[1];
            var page = _config.InfoMenuSettings.Pages[category];
            if (num < 0) return;
            if (num > page.PagesMap.Count - 1) return;
            DrawUI_Window(args.Player(), page, num, category);
        }

        #endregion
 
        #region [Helpers] / [Вспомогательный код]

        private IEnumerator LoadImages()
        {
            foreach (var category in _config.InfoMenuSettings.Categories)
                ImageLibrary.Call("AddImage", category.Value, category.Key);
            foreach (var pages in _config.InfoMenuSettings.Pages)
            {
                foreach (var image in pages.Value.PagesMap)
                {
                    ImageLibrary.Call("AddImage", image.Value.ImageRU, $"PageRU.{pages.Value.Name}.{image.Key}");
                    ImageLibrary.Call("AddImage", image.Value.ImageENG, $"PageENG.{pages.Value.Name}.{image.Key}");
                }
            }
  
            yield return 0;
        }

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

        #endregion
    }
}

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