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

FREE WoundedLogo : 2.0.0 2.0.0

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

namespace Oxide.Plugins
{
    [Info("WoundedLogo", "Frizen", "2.0.0")]
    internal class WoundedLogo: RustPlugin
    {
        #region Vars
        [PluginReference] private Plugin ImageLibrary;
        private bool _isCH47 = false;
        private bool _isHeli = false;
        private bool _isShip = false;
        private const string _layer = "WoundedLogo";
        #endregion

        #region Config
        private static Configuration _config;
        public class Configuration
        {

            [JsonProperty("Картинки")]
            public Dictionary<string, string> Imgs = new Dictionary<string, string>();

            public static Configuration DefaultConfig()
            {
                return new Configuration
                {
                    Imgs =
                    {
                        ["LogoText"] = "https://i.imgur.com/sJKehAZ.png",
                        ["LogoBTN"] = "https://i.imgur.com/9XZ2Dwg.png",
                        ["Heli"] = "https://i.imgur.com/x7aKqvw.png",
                        ["Heli_Active"] = "https://i.imgur.com/L2g9Kdm.png",
                        ["CargoShip"] = "https://i.imgur.com/kmH4Qb0.png",
                        ["CargoShip_Active"] = "https://i.imgur.com/solQ9MA.png",
                        ["CH47"] = "https://i.imgur.com/75zWb8a.png",
                        ["CH47_Active"] = "https://i.imgur.com/ezGZZIm.png",
                        ["BackgroundLogo"] = "https://i.imgur.com/3cxM5iR.png",
                        ["OnlineBar"] = "https://i.imgur.com/u7nshQU.png",
                        ["ActiveOnlineBar"] = "https://i.imgur.com/rL5rfVA.png",
                        ["PeopleIcon"] = "https://i.imgur.com/6NFZW4B.png",
                    }
                };
            }
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) LoadDefaultConfig();
                SaveConfig();
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                PrintWarning("Creating new config file.");
                LoadDefaultConfig();
            }
        }

        protected override void LoadDefaultConfig() => _config = Configuration.DefaultConfig();
        protected override void SaveConfig() => Config.WriteObject(_config);
        #endregion

        #region Hooks
        private void OnServerInitialized()
        {
            FirstCheckEvents();

            foreach (var img in _config.Imgs)
            {
                ImageLibrary.Call("AddImage", img.Value, img.Key);
            }

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

        void OnPlayerConnected(BasePlayer player)
        {
            if (player.IsReceivingSnapshot)
            {
                NextTick(() => OnPlayerConnected(player));
                return;
            }

            if (!MenuOpened.ContainsKey(player.userID))
            {
                MenuOpened.Add(player.userID, true);
            }

            DrawMenu(player);

            timer.Once(1f, () =>
            {
                foreach (var players in BasePlayer.activePlayerList)
                {
                    if (players.userID == player.userID) continue;
                    bool IsOpen;
                    if (MenuOpened.TryGetValue(player.userID, out IsOpen) && IsOpen)
                    {
                        OnlineUI(players);
                    }
                }
            });
        }

        void OnPlayerDisconnected(BasePlayer player)
        {
            timer.Once(1f, () =>
            {
                foreach (var players in BasePlayer.activePlayerList)
                {
                    OnlineUI(players);
                }
            });
        }

        void OnEntitySpawned(BaseNetworkable entity)
        {
            if (entity == null) return;
            if (entity is CH47Helicopter)
            {
                _isCH47 = true;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter)
            {
                _isHeli = true;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip)
            {
                _isShip = true;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }

        }

        void OnEntityKill(BaseEntity entity)
        {
            if (entity == null) return;
            if (entity is CH47Helicopter)
            {
                _isCH47 = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter)
            {
                _isHeli = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip)
            {
                _isShip = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }

        }

        void OnEntityDeath(BaseEntity entity, HitInfo info)
        {
            if (entity == null) return;
            if (entity is CH47Helicopter)
            {
                _isCH47 = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "CH47");
                }
                return;
            }
            if (entity is BaseHelicopter)
            {
                _isHeli = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Heli");
                }
                return;
            }
            if (entity is CargoShip)
            {
                _isShip = false;
                foreach (var player in BasePlayer.activePlayerList)
                {
                    RefreshEvents(player, "Cargo");
                }
                return;
            }

        }

        void Unload()
        {
            foreach (var player in BasePlayer.activePlayerList)
            {
                CuiHelper.DestroyUi(player, _layer);
            }
        }
        #endregion

        #region UI
        private void DrawMenu(BasePlayer player)
        {
            var container = new CuiElementContainer();

            CuiHelper.DestroyUi(player, "WoundedLogo");

            container.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image = { Color = "1 1 1 0" },
                RectTransform = { AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "30 -90.5", OffsetMax = "209.5 -21.5" }
            }, "Overlay", "WoundedLogo");

            bool IsOpen;
            if (MenuOpened.TryGetValue(player.userID, out IsOpen) && IsOpen)
            {
                container.Add(new CuiElement
                {
                    Name = "LogoBG",
                    Parent = "WoundedLogo",
                    Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("BackgroundLogo") },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
                }
                });

                container.Add(new CuiElement
                {
                    Name = "LogoBTN",
                    Parent = "WoundedLogo",
                    Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("LogoText") },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-77.673 -14.558", OffsetMax = "-21.121 14.558" }
                }
                });
            }
            else
            {
                container.Add(new CuiElement
                {
                    Name = "LogoBTN",
                    Parent = "WoundedLogo",
                    Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("LogoBTN") },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-89.579 -34.61", OffsetMax = "-20.494 34.611" }
                }
                });
            }

            container.Add(new CuiButton
            {
                Button = { Color = "0 0 0 0", Command = "wounded.menu" },
                Text = { Text = $"", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.LowerCenter, Color = "1 1 1 1" },
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
            }, "LogoBTN");

            CuiHelper.AddUi(player, container);

            CuiHelper.DestroyUi(player, "BarActive");
            CuiHelper.DestroyUi(player, "OnlineBar");
            CuiHelper.DestroyUi(player, "Peoples");
            CuiHelper.DestroyUi(player, "Online");
            if (IsOpen)
            {
                OnlineUI(player);
                RefreshEvents(player, "All");
            }
        }

        private void RefreshEvents(BasePlayer player, string type)
        {
            var container = new CuiElementContainer();

            string HeliImage = _isHeli ? "Heli_Active" : "Heli";
            string CargoImage = _isShip ? "CargoShip_Active" : "CargoShip";
            string CH47Image = _isCH47 ? "CH47_Active" : "CH47";

            switch (type)
            {
                case "Heli":
                    CuiHelper.DestroyUi(player, "Heli");
                    container.Add(new CuiElement
                    {
                        Name = "Heli",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(HeliImage) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "58.13 -20.75", OffsetMax = "79.47 0.787" }
                }
                    });

                    break;
                case "Cargo":
                    CuiHelper.DestroyUi(player, "Cargo");

                    container.Add(new CuiElement
                    {
                        Name = "Cargo",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(CargoImage) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "22.252 -20.75", OffsetMax = "43.592 0.787" }
                }
                    });

                    break;
                case "CH47":
                    CuiHelper.DestroyUi(player, "CH47");
                    container.Add(new CuiElement
                    {
                        Name = "CH47",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(CH47Image) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-12.156 -20.75", OffsetMax = "9.185 0.787" }
                }
                    });

                    break;
                case "All":
                    CuiHelper.DestroyUi(player, "Heli");
                    CuiHelper.DestroyUi(player, "Cargo");
                    CuiHelper.DestroyUi(player, "CH47");

                    container.Add(new CuiElement
                    {
                        Name = "CH47",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(CH47Image) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-12.156 -20.75", OffsetMax = "9.185 0.787" }
                }
                    });

                    container.Add(new CuiElement
                    {
                        Name = "Cargo",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(CargoImage) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "22.252 -20.75", OffsetMax = "43.592 0.787" }
                }
                    });

                    container.Add(new CuiElement
                    {
                        Name = "Heli",
                        Parent = "WoundedLogo",
                        Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage(HeliImage) },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "58.13 -20.75", OffsetMax = "79.47 0.787" }
                }
                    });

                    break;
            }

            bool IsOpen;
            if (MenuOpened.TryGetValue(player.userID, out IsOpen) && !IsOpen)
            {
                return;
            }

            CuiHelper.AddUi(player, container);
        }

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

            CuiHelper.DestroyUi(player, "BarActive");
            CuiHelper.DestroyUi(player, "OnlineBar");
            CuiHelper.DestroyUi(player, "Peoples");
            CuiHelper.DestroyUi(player, "Online");

            float onlinebar = GetOnline() / Convert.ToSingle(ConVar.Server.maxplayers);

            container.Add(new CuiElement
            {
                Name = "OnlineBar",
                Parent = "WoundedLogo",
                Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("OnlineBar") },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-12.156 5.086", OffsetMax = "78 20.34" }
                }
            });

            container.Add(new CuiElement
            {
                Name = "BarActive",
                Parent = "OnlineBar",
                Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("ActiveOnlineBar") },
                    new CuiRectTransformComponent {  AnchorMin = "0 0", AnchorMax = onlinebar > 0.2 ? $"{onlinebar} 1" : "0.2 1", OffsetMin = "1 2", OffsetMax = "-1 -2" }
                }
            });

            container.Add(new CuiElement
            {
                Name = "Peoples",
                Parent = "OnlineBar",
                Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = GetImage("PeopleIcon") },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-40.499 -4.013", OffsetMax = "-31.901 4.013" }
                }
            });

            container.Add(new CuiElement
            {
                Name = "Online",
                Parent = "OnlineBar",
                Components = {
                    new CuiTextComponent { Text = $"{GetOnline()} / {Convert.ToSingle(ConVar.Server.maxplayers)}", Font = "robotocondensed-bold.ttf", FontSize = 7, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1" },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "8.83 -7.628", OffsetMax = "45.078 7.627" }
                }
            });

            bool IsOpen;
            if (MenuOpened.TryGetValue(player.userID, out IsOpen) && !IsOpen)
            {
                return;
            }

            CuiHelper.AddUi(player, container);


        }
        #endregion

        #region Helpers

        public Dictionary<ulong, bool> MenuOpened = new Dictionary<ulong, bool>();

        [ConsoleCommand("wounded.menu")]
        private void MenuHandler(ConsoleSystem.Arg args)
        {
            BasePlayer player = args.Player();
            if (player == null) return;
            if (!MenuOpened.ContainsKey(player.userID)) MenuOpened.Add(player.userID, true);

            if (!MenuOpened[player.userID])
            {
                MenuOpened[player.userID] = true;
                DrawMenu(player);
                return;
            }
            if (MenuOpened[player.userID])
            {
                MenuOpened[player.userID] = false;
                CuiHelper.DestroyUi(player, "BarActive");
                CuiHelper.DestroyUi(player, "OnlineBar");
                CuiHelper.DestroyUi(player, "Peoples");
                CuiHelper.DestroyUi(player, "Online");
                DrawMenu(player);
                return;
            }
        }

        [PluginReference] private Plugin FreeOnline;
        float GetOnline()
        {
            float online;
            if (FreeOnline)
                online = FreeOnline.Call<int>("GetOnline");
            else online = 20;

            return online;
        }
        private static string HexToRustFormat(string hex)
        {
            if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
            var str = hex.Trim('#');
            if (str.Length == 6) str += "FF";
            if (str.Length != 8)
            {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r, g, b, a);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }

        private void FirstCheckEvents()
        {

            foreach (var entity in BaseEntity.serverEntities)
            {
                if (entity is CargoShip)
                {
                    _isShip = true;
                }
                if (entity is CH47Helicopter)
                {
                    _isCH47 = true;
                }
                if (entity is BaseHelicopter)
                {
                    _isHeli = true;
                }
            }

        }

        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary?.Call("GetImage", shortname, skin);
        #endregion

    }
}

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