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

FREE MultiMenu : 0.0.1 0.0.1

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

namespace Oxide.Plugins
{
    [Info("Multi Menu", "MYSTERY", "0.0.1")]
    [Description("")]
    class MultiMenu : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;
        public static string LOGOa = "UI_a";
        public static string LOGOb = "UI_b";
        
        private static string Poi = "UI_P";
        private static string Internal = "MYSTERY";
        protected override void LoadDefaultMessages()
         {
             lang.RegisterMessages(new Dictionary<string, string>
             {
                 ["1"] = "Wipe calendar",
                 ["2"] = "Report",
                 ["3"] = "Statistics",

                 ["Online"] = "<color=#B0F394FF>Time:</color> {0}    ||    <color=#B0F394FF>Players online:</color> {1}",
             }, this);
             lang.RegisterMessages(new Dictionary<string, string>
             {
                 ["1"] = "Календарь вайпов",
                 ["2"] = "Report",
                 ["3"] = "Статистика",

                 ["Online"] = "<color=#B0F394FF>Время:</color> {0}    ||    <color=#B0F394FF>Игроков онлайн:</color> {1}",
             }, this, "ru");
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["1"] = "Календар вайпів",
                ["2"] = "Report",
                ["3"] = "Статистика",


                ["Online"] = "<color=#B0F394FF>Час:</color> {0}    ||    <color=#B0F394FF>Гравців онлайн:</color> {1}",
            }, this, "uk");

        }
         private string Msg(string key, string userid = null, params object[] obj)
         {
             return string.Format(lang.GetMessage(key, this, userid), obj);
         }
         // Msg("Modal tryopen", player.UserIDString, Case.DisplayName),
        private void OnServerInitialized()
        {
            PrintWarning("  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            PrintWarning($"     {Name} v{Version} loading");
            if (!ImageLibrary)
            {
                PrintError("   Install plugin: 'ImageLibrary'");
                Core.Interface.Oxide.UnloadPlugin(Name);
                PrintWarning("        Plugin loaded - ERROR");
                PrintWarning("  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                return;
            }
            PrintWarning("        Plugin loaded - OK");
            PrintWarning("  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            ImageLibrary.Call("AddImage", "https://rustplugins.top/api/RSystem/online.png", "Logoa");
            ImageLibrary.Call("AddImage", "https://rustplugins.top/api/RSystem/Menu.png", "Logob");
            ImageLibrary.Call("AddImage", "https://rustplugins.top/api/RSystem/active.png", "ac");
            ImageLibrary.Call("AddImage", "https://rustplugins.top/api/RSystem/not.png", "noac");
            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);
            timer.Every(Settings.TIME, () =>
            {
                BasePlayer.activePlayerList.ToList().ForEach(logoA);
            });
        }
        private void Unload()
        {
            BasePlayer.activePlayerList.ToList().ForEach(p =>
            {
                CuiHelper.DestroyUi(p, LOGOa);
                CuiHelper.DestroyUi(p, LOGOb);
                CuiHelper.DestroyUi(p, Poi);
                CuiHelper.DestroyUi(p, Internal);

            });
        }
        private void OnPlayerConnected(BasePlayer player)
        {
            logoA(player);
            logoB(player);
        }
        private void OnPlayerDisconnected(BasePlayer p)
        {
            CuiHelper.DestroyUi(p, LOGOa);
            CuiHelper.DestroyUi(p, LOGOb);
            CuiHelper.DestroyUi(p, Poi);
            CuiHelper.DestroyUi(p, Internal);
        }
        void logoA(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, LOGOa);
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel
            {

                RectTransform = { AnchorMin = "0.836 0", AnchorMax = "0.9876 0.02", OffsetMax = "0 0" },
                Image = { Color = "0.25 0.50 0.50 0" },
            }, "Overlay", LOGOa);
            container.Add(new CuiElement
            {

                Parent = LOGOa,
                Name = LOGOa + "t",
                Components =
                    {
                        new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "Logoa")},
                        new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "1 1" },
                    }
            });
            var text = Msg("Online", player.UserIDString, covalence.Server.Time.ToShortTimeString(), BasePlayer.activePlayerList.ToList().Count);
            container.Add(new CuiElement
            {

                Parent = LOGOa + "t",
                Components =
                {
                    new CuiTextComponent {Text = text, Align = TextAnchor.MiddleCenter, FontSize = 10},
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax        = "1 1" },
                    new CuiOutlineComponent { Color = "0 0 0 1", Distance = "1 1" }
                }
            });
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" },
                Button = { Command = "menu open", Color = "1.00 0.00 0.00 0" },
                Text = { Text = "", FontSize = 50, Align = TextAnchor.MiddleCenter }
            }, LOGOa);
            CuiHelper.AddUi(player, container);
        }
       
        void logoB(BasePlayer player)
        {
            
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, LOGOb);
            CuiHelper.DestroyUi(player, Internal);
            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = { AnchorMin = "0.1 0.1", AnchorMax = "0.9 0.9", OffsetMax = "0 0" },
                Image = { Color = "0.25 0.50 0.50 0" },
            }, "Overlay", LOGOb);
            container.Add(new CuiElement
            {

                Parent = LOGOb,

                Components =
                    {
                        new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "Logob")},
                        new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "1 1" },
                    }
            });

            container.Add(new CuiPanel
            {

                RectTransform = { AnchorMin = "0.008 0.012", AnchorMax = "0.15 0.75", OffsetMax = "0 0" },
                Image = { Color = "1.00 0.50 0.25 0" },
            }, LOGOb, Poi);


            container.Add(new CuiPanel
            {

                RectTransform = { AnchorMin = "0.16 0.012", AnchorMax = "0.995 0.9", OffsetMax = "0 0" },
                Image = { Color = "1.00 0.50 0.25 0", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" },
            }, LOGOb, Internal);


            container.Add(new CuiPanel
            {

                RectTransform = { AnchorMin = "0.16 0.91", AnchorMax = "1 0.99", OffsetMax = "0 0" },
                Image = { Color = "1.00 0.50 0.25 0" },
            }, LOGOb, LOGOb + "w");




            int playersG = 1;
            int playersS = 2;
            float playersR =3;
            int playersP = 4;




            container.Add(new CuiElement
            {

                Parent = LOGOb + "w",
                Components =
                {
                    new CuiTextComponent {Text = $"X{playersR}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
                    new CuiRectTransformComponent { AnchorMin = "0.06 0.1", AnchorMax = "0.145 0.9" },
                    new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
                }
            });
            container.Add(new CuiElement
            {

                Parent = LOGOb + "w",
                Components =
                {
                    new CuiTextComponent {Text = $"{playersP}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
                    new CuiRectTransformComponent { AnchorMin = "0.21 0.1", AnchorMax = "0.295 0.9" },
                    new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
                }
            });
            container.Add(new CuiElement
            {

                Parent = LOGOb + "w",
                Components =
                {
                    new CuiTextComponent {Text = $"{playersG}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
                    new CuiRectTransformComponent { AnchorMin = "0.36 0.1", AnchorMax = "0.43 0.9" },
                    new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
                }
            });

            container.Add(new CuiElement
            {

                Parent = LOGOb + "w",
                Components =
                {
                    new CuiTextComponent {Text = $"{playersS}", Align = TextAnchor.MiddleRight, FontSize = 12, Color = "0.72 0.83 0.71 1.00"},
                    new CuiRectTransformComponent { AnchorMin = "0.51 0.1", AnchorMax = "0.587 0.9" },
                    new CuiOutlineComponent { Color = "0.90 0.66 0.64 0.5", Distance = "0.1 0.1" }
                }
            });


            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.93 0.01", AnchorMax = "0.99 0.99" },
                Button = { Command = "menu close", Color = "1.00 0.00 0.00 0" },
                Text = { Text = "", FontSize = 50, Align = TextAnchor.MiddleCenter }
            }, LOGOb + "w");

            CuiHelper.AddUi(player, container);
            DrawPoints(player);
        }
        private void DrawPoints(BasePlayer player, MenuPoint choosed = null)
        {
            CuiElementContainer container = new CuiElementContainer();

            float marginTop = -2;

            float originalHeight = 35;
            float freeHeight = 35;

            float padding = 0;
            foreach (var point in Settings.Points)
            {
                CuiHelper.DestroyUi(player, Poi + Settings.Points.IndexOf(point));
                string color = point == choosed ? "1.00 0.53 0.53 0.5" : "0.86 0.77 0.67 0.5";
                string color1 = point == choosed ? "0.84 0.17 0.37 0" : "1 1 1 0";
                string img = point == choosed ? (string)ImageLibrary.Call("GetImage", "ac") : (string)ImageLibrary.Call("GetImage", "noac");
                float elementHeight = point.DisplayName.Length > 0 ? originalHeight : freeHeight;

                container.Add(new CuiElement
                {

                    Parent = Poi,
                    Name = Poi + Settings.Points.IndexOf(point),
                    Components =
                    {
                        new CuiRawImageComponent { Png = img},
                        new CuiRectTransformComponent{ AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"0 {marginTop - elementHeight}", OffsetMax = $"150 {marginTop}" },
                    }
                });
                container.Add(new CuiElement
                {

                    Parent = Poi + Settings.Points.IndexOf(point),
                    Components =
                {
                    new CuiTextComponent {Color = color,Text = Msg(point.DisplayName,player.UserIDString), Align = TextAnchor.MiddleLeft, FontSize = 12},
                    new CuiRectTransformComponent { AnchorMin = "0.3 0", AnchorMax        = "1 1" },
                    new CuiOutlineComponent { Color = "0 0 0 1", Distance = "1 1" }
                }
                });
                container.Add(new CuiButton
                {
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" },
                    Button = { Command = $"menu choose {Settings.Points.IndexOf(point)}", Color = color1 },
                    Text = { Text = "", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 20, Color = color }
                }, Poi + Settings.Points.IndexOf(point));
                marginTop -= elementHeight + padding;
            }
            CuiHelper.AddUi(player, container);
        }
        [ChatCommand("menu")]
        private void CmdChatStore(BasePlayer player, string command, string[] args)
        {
            logoB(player);
        }
        [ConsoleCommand("menu")]
        private void CmdConsoleRustMenu(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (player == null || !args.HasArgs(1)) return;

            switch (args.Args[0].ToLower())
            {
                case "open":
                    {
                        logoB(player);
                        break;
                    }
                case "close":
                    {
                        CuiHelper.DestroyUi(player, LOGOb);
                        CuiHelper.DestroyUi(player, Poi);
                        CuiHelper.DestroyUi(player, Internal);
                        break;
                    }
                case "choose":
                    {
                        int chooseIndex = -1;
                        if (!int.TryParse(args.Args[1], out chooseIndex)) return;

                        var chooseElement = Settings.Points.ElementAtOrDefault(chooseIndex);
                        if (chooseElement == null) return;

                        CuiHelper.DestroyUi(player, Internal);

                        CuiElementContainer container = new CuiElementContainer();
                        container.Add(new CuiPanel
                        {

                            RectTransform = { AnchorMin = "0.16 0.012", AnchorMax = "0.995 0.9", OffsetMax = "0 0" },
                            Image = { Color = "1.00 0.50 0.25 0", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" },
                        }, LOGOb, Internal);

                        CuiHelper.AddUi(player, container);


                        player.SendConsoleCommand(chooseElement.DrawMethod);
                        DrawPoints(player, chooseElement);
                        Effect effect = new Effect("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", player, 0, new Vector3(), new Vector3());
                        EffectNetwork.Send(effect, player.Connection);
                        break;
                    }

            }
        }






        private class MenuPoint
        {
            [JsonProperty("Name Button {Lang (1.2.3.4.5.6.7.8.9.10.11)}")]
            public string DisplayName;
            [JsonProperty("Button")]
            public string DrawMethod;
        }
        private class Configuration
        {

            public int TIME;

            [JsonProperty("Button")]
            public List<MenuPoint> Points = new List<MenuPoint>();

            public static Configuration Generate()
            {
                return new Configuration
                {
                    TIME = 5,
                    
                    Points = new List<MenuPoint>
                    {
                        new MenuPoint
                        {
                            DisplayName = "1",
                            DrawMethod = "chat.say /wipe"
                        },
                        new MenuPoint
                        {
                            DisplayName = "2",
                            DrawMethod = "chat.say /report"
                        },
                         new MenuPoint
                        {
                            DisplayName = "3",
                            DrawMethod = "chat.say /top"
                        }
                    }
                   
                
                };
               
            }
        }
        private static Configuration Settings;

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                Settings = Config.ReadObject<Configuration>();
            }
            catch
            {
                PrintWarning($"Error reading config, creating one new config!");
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig() => Settings = Configuration.Generate();
        protected override void SaveConfig() => Config.WriteObject(Settings);
    }
}

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