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

FREE LogoStorm : 2.2.0 2.2.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6


using System;
using System.Collections.Generic;
using Network;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("StormLogo", "CCore", "2.2.0")]
    public class LogoStorm : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;

         string logo = "https://imgur.com/Ao6JTUA.png";
         string open = "https://i.imgur.com/kVda4YB.png";
       
         public static string Commnad1 = "/stat";
         public static string Commnad2 = "/store";
         public static string Commnad3 = "/block";
         public static string Commnad4 = "/report";
         
        
        #region ImageLibrary
        
        
        private string GetImage(string fileName, ulong skin = 0)
        {
            var imageId = (string)plugins.Find("ImageLibrary").CallHook("GetImage", fileName, skin);
            if (!string.IsNullOrEmpty(imageId))
                return imageId;
            return string.Empty;
        }
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
        
        

        void LoadImage()
        {
            AddImage(logo, "logo");
            AddImage(open, "open");
        }
        
        #endregion
        
        private const string Layer = "UI.Menu";
        
        List<string> MSGList = new List<string>
        {
            "Максимум человек в команде - <color=#8e6874>[ 4 ]</color>", 
            "Наша группа ВК - <color=#8e6874>vk.com/storm.rust</color>", 
            "Магазин/сайт сервера - <color=#8e6874>stormrust.store</color>",
            "Включи оповощение о рейде! - <color=#8e6874>/raid</color>",    
            "Отобразить статистику игроков <color=#8e6874>/stat</color>", 
            "<color=#8e6874>/report</color> - отправить жалобу на игрока"
        };

        private PluginData _data;

        private void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject(Name, _data);
        }

        private void LoadData()
        {
            try
            {
                _data = Interface.Oxide.DataFileSystem.ReadObject<PluginData>(Name);
            }
            catch (Exception e)
            {
                PrintError(e.ToString());
            }

            if (_data == null) _data = new PluginData();
        }

        private class PluginData
        {
            [JsonProperty(PropertyName = "Hided Players", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<ulong> HidedPlayers = new List<ulong>();

            public bool IsHided(BasePlayer player)
            {
                return HidedPlayers.Contains(player.userID);
            }

            public bool ChangeStatus(BasePlayer player)
            {
                if (player == null) return false;

                if (IsHided(player))
                {
                    HidedPlayers.Remove(player.userID);
                    return false;
                }

                HidedPlayers.Add(player.userID);
                return true;
            }
        }

        void Loaded()
        {

        }

        #region command

        [ChatCommand("online")]
        void CommanndOnline(BasePlayer sender, string command, string[] args) => CommandPlayers(sender, command, args);

        [ChatCommand("player")]
        void CommandPlayer(BasePlayer sender, string command, string[] args) => CommandPlayers(sender, command, args);

        [ChatCommand("players")]
        void CommandPlayers(BasePlayer sender, string command, string[] args)
        {
            string playerList = ("<color=#8e6874>Онлайн игроки:</color>");

            foreach (BasePlayer player in BasePlayer.activePlayerList)
                playerList += $"\n- {player.displayName}";

            if (BasePlayer.activePlayerList.Count < 20)
                PrintToChat(sender, playerList);
            else
                PrintToChat(sender, "Список игроков слишком длинный для чата.\n Нажмите F1, затем снова введите /players в чате, затем F1, чтобы посмотреть полный список игроков.");
            sender.Command("echo", $"{playerList}");
        }

        #endregion

        private void OnServerInitialized()
        {
            LoadData();
            LoadImage();
            timer.Every(20f, () =>
            {
                foreach(var player in BasePlayer.activePlayerList)
                {
                    DrawLower(player);
                }
            });


            foreach (var player in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(player);
            }

            AddCovalenceCommand("hide", nameof(CmdMenuHide));
        }

        private void Unload()
        {
            foreach (var player in BasePlayer.activePlayerList)
            {
                CuiHelper.DestroyUi(player, Layer);
            }
            
            SaveData();
        }

        void OnClientAuth(Connection connection)
        {
            foreach (var player in BasePlayer.activePlayerList)
            {
                timer.In(0.21f, RefreshOnline);
            }
        }

        private void OnPlayerConnected(BasePlayer player)
        {
            if (player == null) return;

            if (player.IsReceivingSnapshot)
            {
                timer.Once(2, () => OnPlayerConnected(player));
                return;
            }

            MainUi(player);
            DrawLower(player);
            RefreshOnline();
        }

        private void OnPlayerDisconnected(BasePlayer player)
        {
            timer.In(0.21f, RefreshOnline);
        }

        private void CmdMenuHide(IPlayer cov, string command, string[] args)
        {
            var player = cov?.Object as BasePlayer;
            if (player == null) return;

            _data.ChangeStatus(player);

            MainUi(player);
        }

        private void MainUi(BasePlayer player)
        {
            var container = new CuiElementContainer();
            

            var SleepingPlayer = BasePlayer.sleepingPlayerList.Count;
            var OnlinePlayer = BasePlayer.activePlayerList.Count;
            var JoiningPlayer = ServerMgr.Instance.connectionQueue.Joining;
            
            container.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image = { Color = "0 0 0 0" },
                RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -68", OffsetMax = "190 -1" }
            }, "Hud", Layer);

            if (!_data.IsHided(player))
            {
                container.Add(new CuiElement
                {
                    Parent = Layer,
                    Name = Layer + ".Image",
                    FadeOut = 1f,
                    Components =
                    {
                        new CuiImageComponent {Png = GetImage("open") ,  Material = "assets/icons/greyout.mat" },
                        new CuiRectTransformComponent { AnchorMin = "0.2894738 0.175", AnchorMax = "0.9421054 0.8532338"}
                    }
                });

                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.1732883 0.5392601", AnchorMax = "0.2969442 0.8725935" },
                    Text = 
                    {
                        Text = $"{JoiningPlayer + OnlinePlayer}", Color = HexToRustFormat("#9e5167FF"), FontSize = 9, 
                        Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" 
                    }
                }, Layer + ".Image", Layer + ".Online");
                
                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.7324276 0.5537528", AnchorMax = "0.8560835 0.8870862" },
                    Text = { Text = $"{SleepingPlayer}", FontSize = 9, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" }
                }, Layer + ".Image", Layer + ".Sleepers");
                
                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.4474816 0.5537528", AnchorMax = "0.5711375 0.8870862" },
                    Text = { Text = $"{JoiningPlayer}", FontSize = 9, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" }
                }, Layer + ".Image", Layer + ".Joining");
                
                container.Add(new CuiButton
                {
                    Button = { Color = "0 0 0 0", Command = $"chat.say {Commnad1}" },
                    RectTransform = { AnchorMin = "0.188908 0.1773738", AnchorMax = "0.2856822 0.4382434" },
                    Text = { Text = "" }
                }, Layer + ".Image", Layer + ".Image.1");
            
                container.Add(new CuiButton
                {
                    Button = { Color = "0 0 0 0", Command = $"chat.say {Commnad2}" },
                    RectTransform = { AnchorMin = "0.3609509 0.1773738", AnchorMax = "0.457725 0.4382434" },
                    Text = { Text = "" }
                }, Layer + ".Image", Layer + ".Image.2");
            
                container.Add(new CuiButton
                {
                    Button = { Color = "0 0 0 0", Command = $"chat.say {Commnad3}" },
                    RectTransform = { AnchorMin = "0.5329937 0.1773738", AnchorMax = "0.6297679 0.4382434" },
                    Text = { Text = "" }
                }, Layer + ".Image", Layer + ".Image.3");
            
                container.Add(new CuiButton
                {
                    Button = { Color = "0 0 0 0", Command = $"chat.say {Commnad4}" },
                    RectTransform = { AnchorMin = "0.7050366 0.1918665", AnchorMax = "0.8018107 0.4527361" },
                    Text = { Text = "" }
                }, Layer + ".Image", Layer + ".Image.4");
            }

            container.Add(new CuiElement
            {
                Parent = Layer,
                Name = Layer + ".SummerImage",
                Components =
                {
                    new CuiImageComponent { Png = GetImage("logo") , Material = "assets/icons/greyout.mat" },
                    new CuiRectTransformComponent { AnchorMin = "-0.03859668 -0.08706465", AnchorMax = "0.3578931 1.186567" }
                }
            });

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0 0", AnchorMax = "0.96 1" },
                Text = { Text = "" },
                Button = { Color = "0 0 0 0", Command = "hide" }
            }, Layer + ".SummerImage");

            CuiHelper.DestroyUi(player, Layer);
            CuiHelper.AddUi(player, container);

        }

        private void RefreshOnline()
        {
            var container = new CuiElementContainer();
                
            var SleepingPlayer = BasePlayer.sleepingPlayerList.Count;
            var OnlinePlayer = BasePlayer.activePlayerList.Count;
            var JoiningPlayer = ServerMgr.Instance.connectionQueue.Joining;

                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.1732883 0.5392601", AnchorMax = "0.2969442 0.8725935" },
                    Text = 
                    {
                        Text = $"{JoiningPlayer + OnlinePlayer}", Color = HexToRustFormat("#9e5167FF"), FontSize = 9, 
                        Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" 
                    }
                }, Layer + ".Image", Layer + ".Online");
                
                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.7324276 0.5537528", AnchorMax = "0.8560835 0.8870862" },
                    Text = { Text = $"{SleepingPlayer}", FontSize = 9, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" }
                }, Layer + ".Image", Layer + ".Sleepers");
                
                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0.4474816 0.5537528", AnchorMax = "0.5711375 0.8870862" },
                    Text = { Text = $"{JoiningPlayer}", FontSize = 9, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" }
                }, Layer + ".Image", Layer + ".Joining");

            foreach (var player in BasePlayer.activePlayerList)
            {
                if (_data.IsHided(player)) continue;

                CuiHelper.DestroyUi(player, Layer + ".Online");
                CuiHelper.DestroyUi(player, Layer + ".Sleepers");
                CuiHelper.DestroyUi(player, Layer + ".Joining");
                CuiHelper.AddUi(player, container);
            }
        }

        private void DrawLower(BasePlayer player)
        {
            var container = new CuiElementContainer();
            
            container.Add(new CuiPanel
            {
                Image = { Color = HexToRustFormat("#00000000") },
                RectTransform = { AnchorMin = "0.3462664 0.003906242", AnchorMax = "0.6449488 0.02473958" },
                CursorEnabled = false,
            }, "Under", "DVLower");
            
            container.Add(new CuiElement
            {
                Parent = "DVLower",
                Components =
                {
                    new CuiTextComponent { Text = MSGList.GetRandom(), Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "RobotoCondensed-regular.ttf"},
                    new CuiOutlineComponent { Color = "0 0 0 1", Distance = "0.5 0.5" },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
                }
            });

            CuiHelper.DestroyUi(player, "DVLower");
            CuiHelper.AddUi(player, container);
        }

        private static string HexToRustFormat(string hex)
        { 
            Color color;
            ColorUtility.TryParseHtmlString(hex, out color);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }
    }
}

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