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

FREE RustMenu : 0.0.1 0.0.1

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

namespace Oxide.Plugins
{
    [Info("Rust Menu", "Hougan", "0.0.1")]
    public class RustMenu : RustPlugin
    {
        #region Variables

        private Dictionary<BasePlayer, MenuPoint> OpenMenu = new Dictionary<BasePlayer, MenuPoint>();

        #endregion
        
        #region Classes

        private class Notification
        {
            public string Title;
            public string Information;
            public string Color;

            public int Duration; 
            public string SoundEffect;
            public string ImageID;
            public string Command;
        }
        
        private static class Interface
        {
            public static string External = "UI_RustMenu_External";
            public static string Internal = "UI_RustMenu_Internal";
            public static string InterInternal = "InterInternal";
            public static string PrivPoint = External + ".PrivPoints";
            public static string MenuPoint = External + ".MenuPoints";
            public static string Header = External + ".Header";
            public static string NotificationImage = "124";
            
            public static void DrawPrivileges(BasePlayer player)
            {
                CuiElementContainer container = new CuiElementContainer();

                float marginTop = -70;
                
                float originalHeight = 30;
                float freeHeight = 20;
                
                float padding = 5; 

                var result = (object) _.plugins.Find("Grant").Call("GetGroups", player.userID);
                if (result == null) return;

                var fetch = (Dictionary<string, int>) result; 
                  
                foreach (var point in fetch.Where(p => Settings.GroupImages.ContainsKey(p.Key)))
                {
                    CuiHelper.DestroyUi(player, PrivPoint + point.Key);

                    float elementHeight = originalHeight;
                    container.Add(new CuiPanel
                    {
                        RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"10 {marginTop - elementHeight}", OffsetMax = $"200 {marginTop}" }, 
                        Image = { Color = "1 1 1 0" }
                    }, PrivPoint, PrivPoint + point.Key);

                    container.Add(new CuiElement
                    {
                        Parent = PrivPoint + point.Key,
                        Components =
                        {
                            new CuiRawImageComponent {Png = (string) _.ImageLibrary.Call("GetImage", "H.Image"), Material = "", Color = TimeSpan.FromSeconds(point.Value).Days < 2 ? "1 0.5 0.5 0.5" : "1 1 1 0.3"},
                            new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "15 0", OffsetMax = "0 0"}
                        }
                    });

                    container.Add(new CuiElement
                    {
                        Parent = PrivPoint + point.Key,
                        Components =
                        {
                            new CuiRawImageComponent {Png = (string) _.ImageLibrary.Call("GetImage", "G" + point.Key)},
                            new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "0 1", OffsetMax = "30 0"}
                        }
                    });

                    container.Add(new CuiLabel
                    {
                        RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "35 0", OffsetMax = "0 0"},
                        Text = {Text = $"ОСТАЛОСЬ: {GetTimeFromSecs(point.Value)}", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf", FontSize = 14, Color = "0.81 0.77 0.74 1"}
                    }, PrivPoint + point.Key);

                    marginTop -= elementHeight + padding;
                }

                CuiHelper.AddUi(player, container);
            }

            private static string GetTimeFromSecs(int sec)
            {
                var span = TimeSpan.FromSeconds(sec);
                var result = $"{(span.Days > 0 ? span.Days + "д" + " " + span.Hours + "ч" : (span.Hours > 0 ? span.Hours + "ч" + " " + span.Minutes + "м" : span.Minutes + " мин"))}";
                
                return result;
            }
            public static void DrawMenuWithoutPoints(BasePlayer player)
            {
                CuiElementContainer container = new CuiElementContainer();

                float marginTop = -250;
                
                float originalHeight = 35;
                float freeHeight = 20;
                
                float padding = 5;
                 
                foreach (var point in Settings.Points)
                {
                    CuiHelper.DestroyUi(player, MenuPoint + Settings.Points.IndexOf(point) + ".OverflowText");

                    float elementHeight = point.DisplayName.Length > 0 ? originalHeight : freeHeight;

                    marginTop -= elementHeight + padding;
                    string text = point.TextMethod; 
                    if (!string.IsNullOrEmpty(point.TextMethod)) 
                    { 
                        if (text.StartsWith("call"))
                        {
                            if (text.Contains("report"))
                            {
                                text = (string) _.plugins.Find("ReportManager").Call("GetCooldown", player);
                                if (text == "")
                                {
                                    CuiHelper.DestroyUi(player, MenuPoint + Settings.Points.IndexOf(point) + ".Overflow");
                                    continue;
                                }

                                text = text.Substring(4, 4);
                            } 
                            if (text.Contains("store"))
                            {
                                text = (string) _.plugins.Find("RustStore").Call("GetAmount", player);
                                if (text == "")
                                {
                                    CuiHelper.DestroyUi(player, MenuPoint + Settings.Points.IndexOf(point) + ".Overflow");
                                    continue;
                                }
                            }
                        } 
                        
                        container.Add(new CuiLabel
                            {
                                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                                Text = { Text = text, Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "robotocondensed-bold.ttf", Color = "1 1 1 0.7"}
                            }, MenuPoint + Settings.Points.IndexOf(point) + ".Overflow" ,MenuPoint + Settings.Points.IndexOf(point) + ".OverflowText"); 
                    }  
                }

                CuiHelper.AddUi(player, container);
            }
            
            public static void DrawMenuPoints(BasePlayer player, MenuPoint choosed = null)
            {
                CuiElementContainer container = new CuiElementContainer();

                float marginTop = -250;
                
                float originalHeight = 35;
                float freeHeight = 20;
                
                float padding = 5;
                 
                foreach (var point in Settings.Points)
                {
                    CuiHelper.DestroyUi(player, MenuPoint + Settings.Points.IndexOf(point));

                    string color = point == choosed ? "0.929 0.882 0.847 1" : "0.929 0.882 0.847 0.2";
                    if (point.DrawMethod?.Contains("report") ?? false)
                    {
                        string text = (string) _.plugins.Find("ReportManager").Call("GetCooldown", player);
                        if (text != "") color = "0.81 0.77 0.74 0.3";
                    }
                    float elementHeight = point.DisplayName.Length > 0 ? originalHeight : freeHeight;
                    container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"70 {marginTop - elementHeight}", OffsetMax = $"300 {marginTop}" }, 
                        Button = { Command = $"UI_RM_Handler choose {Settings.Points.IndexOf(point)}", Color = "0 0 0 0" },
                        Text = { Text = point.DisplayName, Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 26, Color = color }
                    }, MenuPoint, MenuPoint + Settings.Points.IndexOf(point));


                    marginTop -= elementHeight + padding;
                    if (!string.IsNullOrEmpty(point.TextMethod)) 
                    { 
                        string text = point.TextMethod;
                        if (text.StartsWith("call"))
                        {
                            if (text.Contains("report"))
                            {
                                text = (string) _.plugins.Find("ReportManager").Call("GetCooldown", player);
                                if (text == "") continue;

                                text = text.Substring(4, 4);
                            } 
                            if (text.Contains("store"))
                            {
                                text = (string) _.plugins.Find("RustStore").Call("GetAmount", player);
                                if (text == "") continue;
                            }
                        }
                        
                        container.Add(new CuiPanel
                        {
                            RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = $"{-11 + point.TextMargin} -11", OffsetMax = $"{11 + point.TextMargin} 1" },
                            Image = { Color = "0.73 0.3 0.27 1" } 
                        }, MenuPoint + Settings.Points.IndexOf(point), MenuPoint + Settings.Points.IndexOf(point) + ".Overflow");
                        
                        container.Add(new CuiLabel
                        {
                            RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                            Text = { Text = text, Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "robotocondensed-bold.ttf", Color = "1 1 1 0.8"}
                        }, MenuPoint + Settings.Points.IndexOf(point) + ".Overflow" ,MenuPoint + Settings.Points.IndexOf(point) + ".OverflowText"); 
                    }  
                }

                CuiHelper.AddUi(player, container);
            }
            
            public static void DrawExternalLayer(BasePlayer player)
            {
                CuiElementContainer container = new CuiElementContainer();
                CuiHelper.DestroyUi(player, External);
                CuiHelper.DestroyUi(player, Internal);
                CuiHelper.DestroyUi(player, InterInternal);

                container.Add(new CuiPanel
                {
                    CursorEnabled = true,
                    RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Image = { Color = "0.235 0.227 0.180 0.90" } 
                }, "Overlay", External);
                
                container.Add(new CuiPanel
                {
                    RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Image = { Color = "0 0 0 0.2" } 
                }, External);

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

                container.Add(new CuiPanel
                { 
                    CursorEnabled = true,
                    RectTransform = {AnchorMin = "0.95 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Image = { Color = "0 0 0 0" } 
                }, "Overlay", InterInternal);
                container.Add(new CuiPanel
                {
                    CursorEnabled = true,
                    RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Image = {Color = "0.141 0.137 0.109 1", Sprite = "assets/content/ui/ui.background.transparent.radial.psd"}
                }, External, MenuPoint);

                container.Add(new CuiPanel
                {
                    CursorEnabled = true,
                    RectTransform = {AnchorMin = "0 0.8", AnchorMax = "1 1", OffsetMax = "0 0"},
                    Image = {Color = "0 0 0 0", Sprite = "assets/content/ui/ui.background.transparent.radial.psd"}
                }, External, PrivPoint);

                container.Add(new CuiButton 
                {
                    RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = $"-35 -35", OffsetMax = "-10 -10" },
                    Button = { Color = "0.929 0.882 0.847 0.6", Command = "UI_RM_Handler close", Sprite = "assets/icons/close.png", Close = Interface.InterInternal }, 
                    Text = { Text = "" }
                }, InterInternal);
                
                CuiHelper.AddUi(player, container);
            }

            public static void OpenMenu(BasePlayer player)
            {
                if (!_.OpenMenu.ContainsKey(player))
                    _.OpenMenu.Add(player, Settings.Points.FirstOrDefault(p => p.DisplayName.ToLower() == "календарь")); 
                
                DrawExternalLayer(player); 
                DrawMenuPoints(player);
                DrawPrivileges(player); 
                
                _.plugins.Find("Menu").Call("ShowMenu", player); 
                //DrawTopImage(player); 
            }
            
            
        }

        private class MenuPoint
        {
            public string DisplayName;
            public string DrawMethod;

            public float TextMargin;
            public string TextMethod;
            public bool NewInfo;
        }

        private class Configuration
        {
            [JsonProperty("Название сервера")]
            public string ServerName;
            [JsonProperty("Список доступных разделов меню")]
            public List<MenuPoint> Points = new List<MenuPoint>();

            public Dictionary<string, string> GroupImages = new Dictionary<string, string>();
            public Dictionary<float, string> RawImages = new Dictionary<float, string>();
            

            public static Configuration Generate()
            {
                return new Configuration
                {
                    ServerName = "BLOOD RED MAX2",
                    GroupImages = new Dictionary<string, string>
                    {
                        ["kabanchik"] = "https://i.imgur.com/8p7yiVh.png",
                        ["joker"] = "https://i.imgur.com/TH9qtZ7.png",  
                        ["masnik"] = "https://i.imgur.com/XIQQXSo.png",
						["smert"] = "https://i.imgur.com/oqfU7RT.png",  
                    },
                    RawImages = new Dictionary<float, string>
                    {
                        
                    },
                    Points = new List<MenuPoint>
                    {
                        new MenuPoint
                        {
                            DisplayName = "КОРЗИНА",
                            TextMethod = "call:store",  
                            TextMargin = -120,
                            DrawMethod = "storeSecret"
                        },
                        new MenuPoint
                        {
                            DisplayName = "৑"
                        },
                        new MenuPoint
                        {
                            DisplayName = "НАЁМНИКИ",
                            DrawMethod = "chat.say /furySecret"
                        },
                        new MenuPoint
                        { 
                            DisplayName = "КАЛЕНДАРЬ", 
                            DrawMethod = "chat.say /wipe" 
                        },
                        new MenuPoint 
                        {
                            DisplayName = "РЕПОРТ",
                            DrawMethod = "chat.say /reportSecret",
                            TextMethod = "call:report",
                            TextMargin = -140
                        },
                        new MenuPoint
                        {
                            DisplayName = "ВАЙПБЛОК",
                            DrawMethod = "chat.say /block" 
                        },
                        new MenuPoint
                        {
                            DisplayName = "ИНФОРМАЦИЯ",
                            DrawMethod = "chat.say /help",
                        },
                        new MenuPoint
                        {
                            DisplayName = ""
                        },
                        new MenuPoint
                        {
                            DisplayName = "НАСТРОЙКИ",
                            DrawMethod = "chat.say /settings",
                        },
                        new MenuPoint
                        {
                            DisplayName = ""
                        },
                        new MenuPoint
                        {
                            DisplayName = "ЗАКРЫТЬ",
                            DrawMethod = "UI_RM_Handler close"
                        },
                    }
                };
            }
        }
        
        #endregion

        #region Variables

        [PluginReference] private Plugin ImageLibrary;
        private static RustMenu _;
        private static Configuration Settings = Configuration.Generate();

        #endregion

        #region Hooks

        private void OnServerInitialized()
        {
            _ = this;

            foreach (var check in Settings.GroupImages)
            {
                ImageLibrary.Call("AddImage", check.Value, "G" + check.Key);
            }
            
            timer.Every(1, () =>
            {
                foreach (var check in OpenMenu)
                {
                    if (check.Key.IsConnected)
                    {
                        Interface.DrawPrivileges(check.Key);
                        Interface.DrawMenuWithoutPoints(check.Key);
                    }
                }
                
            });
            
            //foreach (var check in FileSystem.FindAll("", "psd"))
            //    LogToFile("SAfd", check, this);  
            
            foreach (var check in Settings.RawImages)
            {
                ImageLibrary.Call("AddImage", check.Value, $"I.{check.Key}");
            }
 
            ImageLibrary.Call("AddImage", "https://i.imgur.com/c3DqDdw.png", $"H.Image");
            Interface.NotificationImage = (string) ImageLibrary.Call("GetImage", "NotificationImage");
        } 
        
        #endregion

        #region Commands

        [ConsoleCommand("UI_RM_Handler")]
        private void CmdConsoleRustMenu(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (player == null || !args.HasArgs(1)) return;

            switch (args.Args[0].ToLower())
            {
                case "close":
                { 
                    if (OpenMenu.ContainsKey(player))
                        OpenMenu.Remove(player);
                    
                    CuiHelper.DestroyUi(player, Interface.External);
                    CuiHelper.DestroyUi(player, Interface.Internal);
                    CuiHelper.DestroyUi(player, Interface.InterInternal);

                    plugins.Find("Menu").Call("CloseMenu", player);
                    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, Interface.Internal); 
                    CuiHelper.DestroyUi(player, Interface.InterInternal); 
                    CuiElementContainer container = new CuiElementContainer();
                    container.Add(new CuiPanel
                    { 
                        CursorEnabled = true,
                        RectTransform = {AnchorMin = "0.3 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                        Image = { Color = "0 0 0 0" } 
                    }, "Overlay", Interface.Internal);

                    /*container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = $"-35 -35", OffsetMax = "-10 -10" },
                        Button = { Color = "1 1 1 0.6", Command = "UI_RM_Handler close", Sprite = "assets/icons/close.png" }, 
                        Text = { Text = "" }
                    }, Interface.Internal);*/
                    
                    CuiHelper.AddUi(player, container);
                    
                    player.SendConsoleCommand(chooseElement.DrawMethod);
                    
                    Interface.DrawPrivileges(player);  
                    Interface.DrawMenuPoints(player, chooseElement);
                    
                    //Effect effect = new Effect("", player, 0, new Vector3(), new Vector3());
                    //EffectNetwork.Send(effect, player.Connection);

                    OpenMenu[player] = chooseElement;
 
                    container.Clear();
                    container.Add(new CuiPanel
                    { 
                        CursorEnabled = true,
                        RectTransform = {AnchorMin = "0.95 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                        Image = { Color = "0 0 0 0" } 
                    }, "Overlay", Interface.InterInternal);
                    container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = $"-35 -35", OffsetMax = "-10 -10" },
                        Button = { Color = "0.929 0.882 0.847 0.6", Command = "UI_RM_Handler close", Sprite = "assets/icons/close.png", Close = Interface.InterInternal}, 
                        Text = { Text = "" } 
                    }, Interface.InterInternal);
                    
                    CuiHelper.AddUi(player, container); 
                    break;
                }
            }
        }

        #endregion

        #region Unload

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        [ChatCommand("menuSecret")]
        private void CmdChatXs(BasePlayer player)
        {
            Interface.OpenMenu(player);

            Interface.DrawPrivileges(player); 
        } 
        [ChatCommand("menu")]
        private void CmdChatX(BasePlayer player)
        {
            Interface.OpenMenu(player);

            var first = Settings.Points.FirstOrDefault(p => p.DisplayName.Contains("৑"));
            OpenMenu[player] = Settings.Points.FirstOrDefault(p => p.DisplayName.ToLower() == "৑");
            Interface.DrawMenuPoints(player, first);
            Interface.DrawPrivileges(player); 
            player.SendConsoleCommand(first.DrawMethod);
        }

        private void Unload()
        {
            BasePlayer.activePlayerList.ToList().ToList().ForEach(p =>
            {
                CuiHelper.DestroyUi(p, Interface.External);
                CuiHelper.DestroyUi(p, Interface.Internal);
                CuiHelper.DestroyUi(p, Interface.InterInternal);
            });
        }

        #endregion
    }
}

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