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

FREE MenuSystem : 1.0.3 1.0.3

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

namespace Oxide.Plugins
{
    [Info("MenuSystem", "Я и Я", "1.0.3")]
    class MenuSystem : RustPlugin
    {
        #region Вар
        private string Layer = "Menu_UI";

        [PluginReference] Plugin ImageLibrary, GameStoresRUST, WipeCalendar, WipeBlock, ReportManager, SkillSystem, InfoMenu, TopChat, Battlepass, ShopSystemRevolution, Batia, RustKits, Cases, Clans, Craft;

        Dictionary<ulong, string> ActiveButton = new Dictionary<ulong, string>();
        Dictionary<ulong, string> ActiveButton2 = new Dictionary<ulong, string>();
        Dictionary<ulong, string> ActiveButton3 = new Dictionary<ulong, string>();

		//Управляет высотой пункта меню
		readonly float HEIGHT_MENU_ELEMENT = 0.118f;

        Dictionary<string, string> Command = new Dictionary<string, string>()
        {
            ["МАГАЗИН"] = "shop",              
            ["КВЕСТЫ"] = "pass",
            ["КОРЗИНА"] = "store",
            ["КАЛЕНДАРЬ"] = "cal",
            ["ВАЙПБЛОК"] = "block",
            ["РЕПОРТ"] = "report",
            ["УМЕНИЯ"] = "skill",
            ["ВИКИПЕДИЯ"] = "info",     
            ["КЕЙСЫ"] = "case",      
            ["КЛАНЫ"] = "clan",    
            ["-"] = "-",
            ["НАСТРОЙКИ"] = "settings",
            ["СНАРЯЖЕНИЕ"] = "equipment",            
            ["БАТЯ"] = "batia"        
        };

        Dictionary<string, string> Equi = new Dictionary<string, string>()
        {
            ["КРАФТ"] = "craft",            
            ["РАЗРАБОТКА"] = "kit1"

        };

        Dictionary<string, string> Set = new Dictionary<string, string>()
        {
            ["ЧАТ"] = "chat",
            ["ТЕЛЕПОРТ"] = "tpset",        
            ["СКИНЫ"] = "set1",
            ["ХИТМАРКЕР"] = "set2"

        };

        void EquipmentActions(BasePlayer player, string name){
			switch(name){
				case "kit1": RustKits.Call("RenderKits", player);break;
                case "craft": Craft.Call("CraftUI", player); break;
			}
		}
		
		void SettingsActions(BasePlayer player, string name){
			switch(name){
				case "chat":TopChat.Call("InitializeInterface", player);break;
				case "tpset":if (plugins.Find("Detonator")) plugins.Find("Detonator").Call("InitializeInterface", player);break;
				case "set1":InfoMenu?.Call("CreateTab", player, "settings", 0);break;
				case "set2":InfoMenu?.Call("CreateTab", player, "settings", 1);break;
				case "set3":InfoMenu?.Call("CreateTab", player, "settings", 2);break;
				case "set5":InfoMenu?.Call("CreateTab", player, "settings", 4);break;
			}
		}
        #endregion

        #region Хуки
        void OnServerInitialized()
        {
            ImageLibrary.Call("AddImage", "https://ic.wampi.ru/2021/04/21/MENY.png", "Background");
        }
        #endregion

        #region Команды
        [ChatCommand("menu")]
        void ChatMenu(BasePlayer player) => MenuUI(player, "info");

        [ChatCommand("store")]
        void ChatStore(BasePlayer player) => MenuUI(player, "store");
		
        [ChatCommand("info")]
        void ChatInfo(BasePlayer player) => MenuUI(player, "info");

        [ChatCommand("wipe")]
        void ChatCal(BasePlayer player) => MenuUI(player, "cal");

        [ChatCommand("block")]
        void ChatBlock(BasePlayer player) => MenuUI(player, "block");

        [ChatCommand("report")]
        void ChatReport(BasePlayer player) => MenuUI(player, "report");

        [ChatCommand("skill")]
        void ChatSkill(BasePlayer player) => MenuUI(player, "skill");

        [ChatCommand("settings")]
        void ChatSet(BasePlayer player) => MenuUI(player, "settings");

        [ChatCommand("pass")]
        void ChaPass(BasePlayer player) => MenuUI(player, "pass");

        [ChatCommand("shop")]
        void ChatShop(BasePlayer player) => MenuUI(player, "shop");
		
        [ChatCommand("batia")]
        void ChatBatia(BasePlayer player) => MenuUI(player, "batia");

        [ChatCommand("case")]
        void ChatCase(BasePlayer player) => MenuUI(player, "case");

        [ChatCommand("clans")]
        void ChatClans(BasePlayer player) => MenuUI(player, "clan");

        [ConsoleCommand("closemenusystem")]
        void ConsoleCloseMenu(ConsoleSystem.Arg args)
        {
            var player = args.Player();            
            DestroyUI(player);			
            if (plugins.Find("Menu")) plugins.Find("Menu").Call("CloseMenu", player);			
			player.Command("UI_Batia close");
            CuiHelper.DestroyUi(player, Layer);
        }
        [ConsoleCommand("menu")]
        void ConsoleMenu(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            ActiveButton[player.userID] = args.Args[0];
            UI(player, args.Args[0]);
            ButtonUI(player);
        }

        [ConsoleCommand("batiaMenu")]
        void ConsoleBatiaMenu(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            ActiveButton[player.userID] = "batia";			
			MenuUI(player, "batia");
            ButtonUI(player);
        }
        [ConsoleCommand("settings")]
        void ConsoleSettings(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            SettingsUI(player);
        }

        [ConsoleCommand("equi")]
        void ConsoleEqui(ConsoleSystem.Arg args)
        {
            var player = args.Player();
			if (args.Args==null || args.Args.Length<1) return;
            ActiveButton3[player.userID] = args.Args[0];
            EquiUI(player, args.Args[0]);
        }

        [ConsoleCommand("set")]
        void ConsoleSet(ConsoleSystem.Arg args)
        {
            var player = args.Player();
			if (args.Args==null || args.Args.Length<1) return;
            ActiveButton3[player.userID] = args.Args[0];
            SettingsUI(player, args.Args[0]);
        }
        #endregion
        
        #region Интерфейс
        void MenuUI(BasePlayer player, string name = "info")
        {
            ActiveButton[player.userID] = name;
            CuiHelper.DestroyUi(player, Layer);
            var container = new CuiElementContainer();

            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0.9" },
            }, "Overlay", Layer);

            container.Add(new CuiElement
            {
                Parent = Layer,
                Components =
                {
                    new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "Background") },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" }
                }
            });

            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0.05 0.8", AnchorMax = "0.24 0.88", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0" }
            }, Layer, "Logo");

            container.Add(new CuiElement
            {
                Parent = "Logo",
                Components =
                {
                    new CuiImageComponent { Sprite = "assets/content/ui/menuui/rustlogo-normal-transparent.png" },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "0 0", OffsetMax = "0 0" }
                }
            });

            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0.068 0.17", AnchorMax = "0.2 0.73", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0" }
            }, Layer, "Button");

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.964 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
                Button = { Color = "0 0 0 0", Command = "closemenusystem" },
                Text = { Text = $"✖", Color = "0.929 0.882 0.847 1", Align = TextAnchor.MiddleCenter, FontSize = 40, Font = "robotocondensed-bold.ttf" }
            }, Layer);

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0 0.03", AnchorMax = $"0.165 0.12", OffsetMax = "0 0" },
                Button = { Color = "0 0 0 0", Close = Layer },
                Text = { Text = $"ЗАКРЫТЬ", Color = "0.471 0.447 0.424 1", Align = TextAnchor.MiddleCenter, FontSize = 22, Font = "robotocondensed-bold.ttf" }
            }, Layer);

            CuiHelper.AddUi(player, container);
            ButtonUI(player);
            UI(player, name);
			if (plugins.Find("Menu")) plugins.Find("Menu").Call("ShowMenu", player); 
        }

        void UI(BasePlayer player, string name)
        {						
            DestroyUI(player);
			if (name == "info")
                InfoMenu?.Call("CreateMenu", player, "main");
			if (name == "wiki")
                InfoMenu?.Call("CreateMenu", player, "wiki");
            if (name == "store")
                GameStoresRUST?.Call("InitializeStore", player);
            if (name == "cal")
                WipeCalendar.Call("CreateGui", player);
            if (name == "block")
                WipeBlock.Call("DrawBlockGUI", player);
            if (name == "report")
                ReportManager.Call("InitializeInterface", player);
            if (name == "skill")
                SkillSystem.Call("SkillUI", player);
            if (name == "case")
                Cases.Call("RenderCases", player);
            if (name == "clan")
                Clans.Call("NewClanUI", player);
            if (name == "equipment")
                EquiUI(player);
            if (name == "settings")
                SettingsUI(player);
            if (name == "pass")
                Battlepass.Call("MainUI", player, true);
            if (name == "shop")
                ShopSystemRevolution.Call("ShopMainUI", player);
            if (name == "batia"){
				Batia.Call("DrawNPCUI", player);
			}else player.Command("UI_Batia close");
        }

        void ButtonUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, "Command");
            var container = new CuiElementContainer();

            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0 0.26", AnchorMax = "1 1", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0"  }
            }, "Button", "Command");

            float width = 1f, height = HEIGHT_MENU_ELEMENT, startxBox = -0.16f, startyBox = 1.1f - height, xmin = startxBox, ymin = startyBox;
            foreach (var check in Command)
            {
				if (check.Key!="-"){
					var color = ActiveButton[player.userID] == check.Value ? "0.929 0.882 0.847 1" : "0.471 0.447 0.424 1";
					container.Add(new CuiButton
					{	
						RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
						Button = { Color = "0 0 0 0", Command = $"menu {check.Value}" },
						Text = { Text = check.Key, Color = color, Align = TextAnchor.MiddleLeft, FontSize = 22, Font = "robotocondensed-bold.ttf" }
					}, "Command");

					xmin += width;
					if (xmin + width >= 1)
					{
						xmin = startxBox;
						ymin -= height;
					}
				}else{
					ymin -= (float)(height/3);
				}
            }

            CuiHelper.AddUi(player, container);
        }

        void EquiUI(BasePlayer player, string name = "craft")
        {
			if (player==null) return;
			ActiveButton3[player.userID] = name;
            CuiHelper.DestroyUi(player, "Settingsmain");
            CuiHelper.DestroyUi(player, "XMenu.Content");
            CuiHelper.DestroyUi(player, "Crafts");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0.260 0", AnchorMax = "0.966 1", OffsetMax = "0 0" },
                Image = { Color = "0.117 0.121 0.109 0" }
            }, Layer, "Settingsmain");

            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0 0", AnchorMax = "0.289 1", OffsetMax = "0 0" },
                Image = { Color = "0.13 0.12 0.12 1", Material = "" }
            }, "Settingsmain", "Left");

            container.Add(new CuiLabel
            {
                RectTransform = { AnchorMin = "0.09 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
                Text = { Text = $"СНАРЯЖЕНИЕ", Color = "0.929 0.882 0.847 0.8", Align = TextAnchor.MiddleLeft, FontSize = 33, Font = "robotocondensed-bold.ttf" }
            }, "Left");

            float width = 1f, height = 0.06f, startxBox = 0f, startyBox = 0.6f - height, xmin = startxBox, ymin = startyBox;
            foreach (var check in Equi)
            {
                var color = ActiveButton3[player.userID] == check.Value ? "0.149 0.145 0.137 0.8" : "0 0 0 0";
                container.Add(new CuiButton
                {
                    RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
                    Button = { Color = color, Command = $"equi {check.Value}" },
                    Text = { Text = $"{check.Key}      ", Color = "1 1 1 0.8", Align = TextAnchor.MiddleRight, FontSize = 18, Font = "robotocondensed-bold.ttf" }
                }, "Left");

                xmin += width;
                if (xmin + width >= 1)
                {
                    xmin = startxBox;
                    ymin -= height;
                }
            }

            CuiHelper.AddUi(player, container);
			EquipmentActions(player,name);
        }

        void SettingsUI(BasePlayer player, string name = "chat")
        {
			if (player==null) return;
			ActiveButton3[player.userID] = name;
            CuiHelper.DestroyUi(player, "Settingsmain");
            CuiHelper.DestroyUi(player, "UI_SettingsLayer.WINDOW_FRAME");
            CuiHelper.DestroyUi(player, "InfoMenu_base");
            CuiHelper.DestroyUi(player, "InfoMenu_main");
            CuiHelper.DestroyUi(player, "InfoMenu_content");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0.260 0", AnchorMax = "0.966 1", OffsetMax = "0 0" },
                Image = { Color = "0.117 0.121 0.109 0" }
            }, Layer, "Settingsmain");

            container.Add(new CuiPanel
            {
                RectTransform = { AnchorMin = "0 0", AnchorMax = "0.289 1", OffsetMax = "0 0" },
                Image = { Color = "0.13 0.12 0.12 1", Material = "" }
            }, "Settingsmain", "Left");

            container.Add(new CuiLabel
            {
                RectTransform = { AnchorMin = "0.09 0.91", AnchorMax = $"1 1", OffsetMax = "0 0" },
                Text = { Text = $"НАСТРОЙКИ", Color = "0.929 0.882 0.847 0.8", Align = TextAnchor.MiddleLeft, FontSize = 33, Font = "robotocondensed-bold.ttf" }
            }, "Left");

            float width = 1f, height = 0.06f, startxBox = 0f, startyBox = 0.6f - height, xmin = startxBox, ymin = startyBox;
            foreach (var check in Set)
            {
                var color = ActiveButton3[player.userID] == check.Value ? "0.149 0.145 0.137 0.8" : "0 0 0 0";
                container.Add(new CuiButton
                {
                    RectTransform = { AnchorMin = $"{xmin} {ymin}", AnchorMax = $"{xmin + width} {ymin + height * 1}", OffsetMin = "0 1", OffsetMax = "0 -1" },
                    Button = { Color = color, Command = $"set {check.Value}" },
                    Text = { Text = $"{check.Key}      ", Color = "1 1 1 0.8", Align = TextAnchor.MiddleRight, FontSize = 18, Font = "robotocondensed-bold.ttf" }
                }, "Left");

                xmin += width;
                if (xmin + width >= 1)
                {
                    xmin = startxBox;
                    ymin -= height;
                }
            }

            CuiHelper.AddUi(player, container);
			SettingsActions(player,name);
        }
        
        void MapUI(BasePlayer player) {
            player.Command("map.open");
            player.Command("map_settings");
        }
        #endregion

        #region Хелпер
        void DestroyUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, "Info");
            CuiHelper.DestroyUi(player, "Calendar");
            CuiHelper.DestroyUi(player, "Block");
            CuiHelper.DestroyUi(player, "Skill_UI");
            CuiHelper.DestroyUi(player, "settings");
            CuiHelper.DestroyUi(player, "Settingsmain");
            CuiHelper.DestroyUi(player, "UI_SettingsLayer.WINDOW_FRAME");
            CuiHelper.DestroyUi(player, "Pass");
            CuiHelper.DestroyUi(player, "UI_GameStoresRUST_Store");
            CuiHelper.DestroyUi(player, "UI_ReportLayer");
            CuiHelper.DestroyUi(player, "InfoMenu_base");
            CuiHelper.DestroyUi(player, "InfoMenu_main");
            CuiHelper.DestroyUi(player, "InfoMenu_content");
            CuiHelper.DestroyUi(player, "UI.Battlepass");
            CuiHelper.DestroyUi(player, "SHOP_MAIN");
            CuiHelper.DestroyUi(player, "UI_Batia_External");
            CuiHelper.DestroyUi(player, "XMenu.Content");
            CuiHelper.DestroyUi(player, "Case");
            CuiHelper.DestroyUi(player, "Clan.NewLayer");
            CuiHelper.DestroyUi(player, "Main");
            CuiHelper.DestroyUi(player, "Crafts");
        }
        #endregion
    }
}

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