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

FREE AdminESP : 0.0.12 0.0.12

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

///Скачано с дискорд сервера Rust Edit [PRO+]
///discord.gg/9vyTXsJyKR

namespace Oxide.Plugins
{
    [Info("AdminESP", "discord.gg/9vyTXsJyKR", "0.0.12")]
    public class AdminESP : RustPlugin
    {
        static Dictionary<ulong, PlayerSetting> PlayerSettings = new Dictionary<ulong, PlayerSetting>();

        public class PlayerSetting
        {
            public bool Enabled;
            public float UpdateTime;
            public int PlayerDistance;
            public bool ShowAdmins;
            public bool DrawNames;
            public bool DrawBoxes;
            public bool DrawEyeLine;
            public int EyeLineDistance;
        }

        [ConsoleCommand("adminesp.toggle")]
        void cmdConsoleEnabledESP(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (player == null) return;
            if (PlayerSettings.ContainsKey(player.userID) && permission.UserHasPermission(player.UserIDString, AdminPermission))
            {
                var data = PlayerSettings[player.userID];
                if (data.Enabled)
                {
                    data.Enabled = false;
                    SendReply(player, "ESP выключен");
                    if (player.GetComponent<ESPPlayer>() != null)
                        player.GetComponent<ESPPlayer>().DestroyComponent();
                }
                else
                {
                    data.Enabled = true;
                    SendReply(player, "ESP включен");

                    if (player.GetComponent<ESPPlayer>() == null)
                        player.gameObject.AddComponent<ESPPlayer>()?.Init(PlayerSettings[player.userID]);

                }
            }
        }

        [ConsoleCommand("adminespUI_toggle")]
        void cmdConsoleEnabledESPUI(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (player == null) return;
            if (!permission.UserHasPermission(player.UserIDString, AdminPermission))
                return;
                var type = args.Args[0];
            var value = args.Args[1];

            if (PlayerSettings.ContainsKey(player.userID))
            {
                var data = PlayerSettings[player.userID];
                switch (type)
                {
                    case "updatetime":
                        if (float.Parse(value) > 0.1f && float.Parse(value) < 15)
                            data.UpdateTime = float.Parse(value);
                        if (float.Parse(value) > 0.1f && float.Parse(value) < 15)
                            SendReply(player, $"Время обновления изменено до {data.UpdateTime} с.");
                        CrateMainMenu(player);

                        break;
                    case "playerdistance":
                        if (int.Parse(value) >= 50 && int.Parse(value) <= 1000)
                            data.PlayerDistance = int.Parse(value);
                        if (int.Parse(value) >= 50 && int.Parse(value) <= 1000)
                            SendReply(player, $"Дистанция видимости измнена до {data.PlayerDistance} м.");
                        CrateMainMenu(player);

                        break;
                    case "showadmins":
                        data.ShowAdmins = bool.Parse(value);
                        SendReply(player, $"Отображение админов изменено на {data.ShowAdmins}");
                        CrateMainMenu(player);

                        break;
                    case "drawnames":
                        data.DrawNames = bool.Parse(value);
                        SendReply(player, $"Отображение имен изменено на {data.DrawNames}");
                        CrateMainMenu(player);

                        break;
                    case "drawboxes":
                        data.DrawBoxes = bool.Parse(value);
                        SendReply(player, $"Отображение боксов изменено на {data.DrawBoxes}");
                        CrateMainMenu(player);

                        break;
                    case "draweyeline":
                        data.DrawEyeLine = bool.Parse(value);
                        SendReply(player, $"Отображение куда смотрит игрок изменено на {data.DrawEyeLine}");
                        CrateMainMenu(player);

                        break;
                    case "eyelinedistance":
                        data.EyeLineDistance = int.Parse(value);
                        SendReply(player, $"Длина линии взгляда игроков изменено на {data.EyeLineDistance}");
                        CrateMainMenu(player);
                        break;
                    case "enable":
                        data.Enabled = bool.Parse(value);
                        if (!data.Enabled)
                        {
                            SendReply(player, "ESP выключен");
                            if (player.GetComponent<ESPPlayer>() != null)
                                player.GetComponent<ESPPlayer>().DestroyComponent();
                        }
                        else
                        {
                            SendReply(player, "ESP включен");

                            if (player.GetComponent<ESPPlayer>() == null)
                                player.gameObject.AddComponent<ESPPlayer>()?.Init(PlayerSettings[player.userID]);

                        }
                        CrateMainMenu(player);
                        break;
                }
            }

        }

        [ChatCommand("ae")]
        void cmdAdminESP(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, AdminPermission))
            {
                SendReply(player, "У Вас нету доступа к данной команде");
                return;
            }

            if (!PlayerSettings.ContainsKey(player.userID)) OnPlayerConnected(player);
            var data = PlayerSettings[player.userID];
            if (args.Length < 1)
            {
                if (data.Enabled)
                {
                    data.Enabled = false;
                    SendReply(player, "ESP выключен");
                    if (player.GetComponent<ESPPlayer>() != null)
                        player.GetComponent<ESPPlayer>().DestroyComponent();
                }
                else
                {
                    data.Enabled = true;
                    SendReply(player, "ESP включен");
                    if (player.GetComponent<ESPPlayer>() == null)
                        player.gameObject.AddComponent<ESPPlayer>()?.Init(PlayerSettings[player.userID]);

                }
                return;
            }

            if (args.Length < 3 && args[0] == "settings")
            {
                statsUIDisabled.Add(player);
                CrateMainMenu(player);
            }

            if (args.Length < 3 && args[0] == "help")
            {
                SendReply(player, "ESP Настройки:\n"
                     + $"\n/ae settings UpdateTime {data.UpdateTime} - частота обновления данных (0.15 сек)"
                     + $"\n/ae settings PlayerDistance {data.PlayerDistance} - максимальная дистанция отображения игроков (500 метров)"
                     + $"\n/ae settings ShowAdmins {data.ShowAdmins} - нужно ли показывать админов (true - да, false - нет)"
                     + $"\n/ae settings DrawNames {data.DrawNames} - нужно ли показывать имена игроков (true - да, false - нет)"
                     + $"\n/ae settings DrawBoxes {data.DrawBoxes} - нужно ли показывать боксы игроков (true - да, false - нет)"
                     + $"\n/ae settings DrawEyeLine {data.DrawEyeLine} - нужно ли показывать взгляд игроков (true - да, false - нет)"
                     + $"\n/ae settings EyeLineDistance {data.EyeLineDistance} - длина линии взгляда игроков (50 метров)");
                Puts("ESP Настройки:\n"
                     + $"\n/ae settings UpdateTime {data.UpdateTime} - частота обновления данных (0.15 сек)"
                     + $"\n/ae settings PlayerDistance {data.PlayerDistance} - максимальная дистанция отображения игроков (500 метров)"
                     + $"\n/ae settings ShowAdmins {data.ShowAdmins} - нужно ли показывать админов (true - да, false - нет)"
                     + $"\n/ae settings DrawNames {data.DrawNames} - нужно ли показывать имена игроков (true - да, false - нет)"
                     + $"\n/ae settings DrawBoxes {data.DrawBoxes} - нужно ли показывать боксы игроков (true - да, false - нет)"
                     + $"\n/ae settings DrawEyeLine {data.DrawEyeLine} - нужно ли показывать взгляд игроков (true - да, false - нет)"
                     + $"\n/ae settings EyeLineDistance {data.EyeLineDistance} - длина линии взгляда игроков (50 метров)");
            }

            if (args.Length == 3 && args[0] == "settings")
            {
                switch (args[1].ToLower())
                {
                    case "updatetime":
                        data.UpdateTime = float.Parse(args[2]);
                        SendReply(player, $"Время обновления изменено до {data.UpdateTime} с.");
                        break;
                    case "playerdistance":
                        data.PlayerDistance = int.Parse(args[2]);
                        SendReply(player, $"Дистанция видимости измнена до {data.PlayerDistance} м.");
                        break;
                    case "showadmins":
                        data.ShowAdmins = bool.Parse(args[2]);
                        SendReply(player, $"Отображение админов изменено на {data.ShowAdmins}");
                        break;
                    case "drawnames":
                        data.DrawNames = bool.Parse(args[2]);
                        SendReply(player, $"Отображение имен изменено на {data.DrawNames}");
                        break;
                    case "drawboxes":
                        data.DrawBoxes = bool.Parse(args[2]);
                        SendReply(player, $"Отображение боксов изменено на {data.DrawBoxes}");
                        break;
                    case "draweyeline":
                        data.DrawEyeLine = bool.Parse(args[2]);
                        SendReply(player, $"Отображение куда смотрит игрок изменено на {data.DrawEyeLine}");
                        break;
                    case "eyelinedistance":
                        data.EyeLineDistance = int.Parse(args[2]);
                        SendReply(player, $"Длина линии взгляда игроков изменено на {data.EyeLineDistance}");
                        break;
                   
                }

            }
        }

        static AdminESP ins;

        string AdminPermission = "adminesp.use";

        void OnServerInitialized()
        {
            ins = this;
            LoadData();
            permission.RegisterPermission(AdminPermission, this);
            foreach (var plobj in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(plobj);
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (player == null) return;
             if (player.HasPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot))
            {
                timer.In(1f, () => OnPlayerConnected(player));
                return;
            }
            if (PlayerSettings.ContainsKey(player.userID) && !permission.UserHasPermission(player.UserIDString, AdminPermission))
            {
                PlayerSettings.Remove(player.userID);
                return;
            }
            if (!permission.UserHasPermission(player.UserIDString, AdminPermission)) return;
            if (PlayerSettings.ContainsKey(player.userID))
            {
                if (PlayerSettings[player.userID].Enabled)
                {
                    if (player.GetComponent<ESPPlayer>() == null)
                        player.gameObject.AddComponent<ESPPlayer>()?.Init(PlayerSettings[player.userID]);
                }
            }
            else
            {
                PlayerSettings.Add(player.userID, new PlayerSetting()
                {
                    Enabled = false,
                    DrawBoxes = false,
                    DrawEyeLine = true,
                    DrawNames = true,
                    EyeLineDistance = 50,
                    PlayerDistance = 200,
                    ShowAdmins = true,
                    UpdateTime = 0.15f
                });
            }
            CrateButtonMenu(player);

        }

        public List<BasePlayer> statsUIDisabled = new List<BasePlayer>();

        public static string Main = "AdminESP";

        void CrateButtonMenu(BasePlayer player)
        {

            CuiHelper.DestroyUi(player, Main);
            if (!permission.UserHasPermission(player.UserIDString, AdminPermission)) return;

            var elements = new CuiElementContainer();

            var mainName = elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.2"
                },
                RectTransform =
                {
                    AnchorMin = "0 0.025",  AnchorMax = $"0.05 0.053"
                }
            }, "Hud.Menu", Main);

            var type = statsUIDisabled.Contains(player) ? "<" : ">";
            elements.Add(new CuiElement
            {
                Parent = Main,
                Components =
                            {
                                new CuiTextComponent { Text = "ESP", FontSize = 18, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "1 1" }
                            }
            });



            elements.Add(new CuiElement
            {
                Parent = Main,
                Components =
                            {
                                new CuiButtonComponent { Color = "1 1 1 0", Command = "adminEsp_mainmenu" },
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "1 1" }
                            }
            });

            CuiHelper.AddUi(player, elements);

        }

        [ConsoleCommand("adminEsp_mainmenu")]
        void cmdMainMenuESP(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (!permission.UserHasPermission(player.UserIDString, AdminPermission)) return;
            if (!statsUIDisabled.Contains(player))
            {
                statsUIDisabled.Add(player);
                CrateMainMenu(player);
            }
            else
            {
                CuiHelper.DestroyUi(player, $"{Main}MenuPanel");
                statsUIDisabled.Remove(player);
            }
        }


        void CrateMainMenu(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, $"{Main}MenuPanel");
            var elements = new CuiElementContainer();

            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0"
                },
                RectTransform =
                {
                    AnchorMin = "0.052 0.005",  AnchorMax = $"0.3 0.2"
                },
                CursorEnabled = true
            }, "Hud.Menu", $"{Main}MenuPanel");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}MenuPanel",
                Components =
                            {
                                new CuiTextComponent { Text = "НАСТРОЙКА ESP", FontSize = 18, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0.8", AnchorMax = "1 1" }
                            }
            });

            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.2"
                },
                RectTransform =
                {
                    AnchorMin = "0 0",  AnchorMax = $"1 0.8"
                },
            }, $"{Main}MenuPanel", $"{Main}CurrentPanel");

            var position = GetPositions(2, 4, 0.01f, 0.05f);
            for (int i = 0; i < 8; i++)
            {
                elements.Add(new CuiPanel
                {
                    Image =
                {
                    Color = "1 1 1 0"
                },
                    RectTransform =
                {
                    AnchorMin = position[i].AnchorMin,  AnchorMax = position[i].AnchorMax
                },
                }, $"{Main}CurrentPanel", $"{Main}CurrentPanel.{i}");


            }
            if (!PlayerSettings.ContainsKey(player.userID)) OnPlayerConnected(player);
            var data = PlayerSettings[player.userID];


            elements.Add(new CuiButton
            {
                Button =
                        {
                            Color = !data.Enabled ? "0.60 0.82 0.55 0.5" : "0.94 0.43 0.44 0.5",
                            Command = $"adminespUI_toggle enable {!data.Enabled}",
                        },
                RectTransform =
                        {
                            AnchorMin = "0 0",
                            AnchorMax = "1 1"
                        },
                Text =
                        {
                            Text = data.Enabled ? "ВЫКЛЮЧИТЬ" : "ВКЛЮЧИТЬ",
                            FontSize = 14,
                            Align = TextAnchor.MiddleCenter,
                            //Color = labelColor
                        }
            }, $"{Main}CurrentPanel.0");



            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.1");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.1",
                Components =
                            {
                                new CuiTextComponent { Text = "Обновление: ", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.1",
                Components =
                            {
                                new CuiTextComponent { Text = $"{data.UpdateTime.ToString("0.0")}", FontSize = 12, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0.5 0", AnchorMax = "1 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.85 0", AnchorMax = "1 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle updatetime {data.UpdateTime + 0.1f}" },
                Text = { Text = "+", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18 },
            }, $"{Main}CurrentPanel.1");

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.65 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle updatetime {data.UpdateTime - 0.1f}" },
                Text = { Text = "-", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 20 },
            }, $"{Main}CurrentPanel.1");

            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.2");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.2",
                Components =
                            {
                                new CuiTextComponent { Text = "Дистанция: ", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });


            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.2",
                Components =
                            {
                                new CuiTextComponent { Text = $"{data.PlayerDistance.ToString("0")}", FontSize = 12, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0.5 0", AnchorMax = "1 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.85 0", AnchorMax = "1 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle playerdistance {data.PlayerDistance + 50}" },
                Text = { Text = "+", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18 },
            }, $"{Main}CurrentPanel.2");

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.65 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle playerdistance {data.PlayerDistance - 50}" },
                Text = { Text = "-", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 20 },
            }, $"{Main}CurrentPanel.2");


            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.3");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.3",
                Components =
                            {
                                new CuiTextComponent { Text = "Админы: ", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });


            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "1 0.997" },
                Button = { Color = !data.ShowAdmins ? "0.60 0.82 0.55 0.5" : "0.94 0.43 0.44 0.5", Command = $"adminespUI_toggle showadmins {!data.ShowAdmins}" },
                Text = { Text = data.ShowAdmins ? "ВЫКЛЮЧИТЬ" : "ВКЛЮЧИТЬ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 12 },
            }, $"{Main}CurrentPanel.3");


            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.4");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.4",
                Components =
                            {
                                new CuiTextComponent { Text = "Имена: ", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "1 0.997" },
                Button = { Color = !data.DrawNames ? "0.60 0.82 0.55 0.5" : "0.94 0.43 0.44 0.5", Command = $"adminespUI_toggle drawnames {!data.DrawNames}" },
                Text = { Text = data.DrawNames ? "ВЫКЛЮЧИТЬ" : "ВКЛЮЧИТЬ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 12 },
            }, $"{Main}CurrentPanel.4");

            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.5");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.5",
                Components =
                            {
                                new CuiTextComponent { Text = "Боксы: ", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "1 0.997" },
                Button = { Color = !data.DrawBoxes ? "0.60 0.82 0.55 0.5" : "0.94 0.43 0.44 0.5", Command = $"adminespUI_toggle drawboxes {!data.DrawBoxes}" },
                Text = { Text = data.DrawBoxes ? "ВЫКЛЮЧИТЬ" : "ВКЛЮЧИТЬ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 12 },
            }, $"{Main}CurrentPanel.5");

            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.6");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.6",
                Components =
                            {
                                new CuiTextComponent { Text = "Линия взгяда: ", FontSize = 12, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "1 0.997" },
                Button = { Color = !data.DrawEyeLine ? "0.60 0.82 0.55 0.5" : "0.94 0.43 0.44 0.5", Command = $"adminespUI_toggle draweyeline {!data.DrawEyeLine}" },
                Text = { Text = data.DrawEyeLine ? "ВЫКЛЮЧИТЬ" : "ВКЛЮЧИТЬ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 12 },
            }, $"{Main}CurrentPanel.6");


            elements.Add(new CuiPanel
            {
                Image =
                {
                    Color = "1 1 1 0.5"
                },
                RectTransform =
                {
                   AnchorMin = "0.5 0", AnchorMax = "1 1"
                },
            }, $"{Main}CurrentPanel.7");

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.7",
                Components =
                            {
                                new CuiTextComponent { Text = "Длина линии: ", FontSize = 12, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0 0", AnchorMax = "0.5 1" }
                            }
            });

            elements.Add(new CuiElement
            {
                Parent = $"{Main}CurrentPanel.7",
                Components =
                            {
                                new CuiTextComponent { Text = $"{data.EyeLineDistance.ToString("0")}", FontSize = 12, Align = TextAnchor.MiddleCenter, Color = "1 1 1 1"},
                                new CuiRectTransformComponent{ AnchorMin = "0.5 0", AnchorMax = "1 1" }
                            }
            });

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.85 0", AnchorMax = "1 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle eyelinedistance {data.EyeLineDistance + 10}" },
                Text = { Text = "+", Align = TextAnchor.MiddleCenter, /*Font = "robotocondensed-bold.ttf",*/ FontSize = 18 },
            }, $"{Main}CurrentPanel.7");

            elements.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0", AnchorMax = "0.65 0.997" },
                Button = { Color = "1 1 1 0.5", Command = $"adminespUI_toggle eyelinedistance {data.EyeLineDistance - 10}" },
                Text = { Text = "-", Align = TextAnchor.MiddleCenter, /*Font = "robotocondensed-bold.ttf", */FontSize = 20 },
            }, $"{Main}CurrentPanel.7");


            CuiHelper.AddUi(player, elements);

        }

        void OnPlayerDisconected(BasePlayer player)
        {
            if (player == null) return;
            if (player.GetComponent<ESPPlayer>() != null)
                UnityEngine.GameObject.Destroy(player.GetComponent<ESPPlayer>());
        }


        static void DestroyAll<T>()
        {
            var objects = GameObject.FindObjectsOfType(typeof(T));
            if (objects != null)
                foreach (var gameObj in objects)
                    GameObject.Destroy(gameObj);
        }


        void LoadData()
        {
            try
            {
                PlayerSettings = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, PlayerSetting>>($"{Title}");
                if (PlayerSettings == null)
                {
                    PrintError("File is null! Create new data files");
                    PlayerSettings = new Dictionary<ulong, PlayerSetting>();
                }
            }
            catch
            {
                PlayerSettings = new Dictionary<ulong, PlayerSetting>();
            }
        }

        void DestroyUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Main);
            CuiHelper.DestroyUi(player, $"{Main}MenuPanel");
        }

        void Unload()
        {
            DestroyAll<ESPPlayer>();
            SaveData();
            foreach (var plobj in BasePlayer.activePlayerList)
            {
                DestroyUI(plobj);
            }
        }


        void SaveData()
        {
            if (PlayerSettings != null) Interface.Oxide.DataFileSystem.WriteObject($"{Title}", PlayerSettings);
        }

        class ESPPlayer : BaseEntity
        {
            BasePlayer player;
            PlayerSetting data;

            public float LastUpdate = 0f;

            void Awake()
            {
                player = GetComponent<BasePlayer>();
            }

            public void Init(PlayerSetting dates)
            {
                data = dates;
            }

            void FixedUpdate()
            {
                if (player == null || player.IsSleeping()) return;
                if (data == null) return;
                if (!player.IsConnected)
                {
                    OnDestroy();
                    return;
                }
                LastUpdate += Time.deltaTime;
                if (LastUpdate > data.UpdateTime)
                {
                    LastUpdate = 0;
                    foreach (var target in BasePlayer.activePlayerList)
                    {
                        if (target == null || target.transform == null || target == player)
                            continue;
                        var currDistance = Math.Floor(Vector3.Distance(target.transform.position, player.transform.position));
                        if (target.IsAdmin && !data.ShowAdmins) continue;
                        if (currDistance > data.PlayerDistance)
                            continue;
                        if (currDistance < data.PlayerDistance)
                        {
                            if (currDistance > 2 && data.DrawNames)
                                DDraw("text", target, $"{target.displayName} ({currDistance.ToString("#0")} м.)\nHealth: {Math.Floor(target.health)}");
                            if (currDistance > 2 && data.DrawBoxes)
                                DDraw("box", target);
                            if (data.DrawEyeLine)
                                DDraw("line", target);
                           
                        }
                    }
                }
            }

            void DDraw(string type, BasePlayer target, string messages = null)
            {
                switch (type)
                {
                    case "text":
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, true);
                            player.SendConsoleCommand("ddraw.text", data.UpdateTime + Time.deltaTime, Color.white, target.eyes.position + new Vector3(0, 0.4f, 0), messages);
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, false);
                        break;
                    case "box":
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, true);
                        player.SendConsoleCommand("ddraw.box", data.UpdateTime + Time.deltaTime, Color.white, target.transform.position + new Vector3(0f, 1f, 0f), target.GetHeight(target.modelState.ducked));
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, false);

                        break;
                    case "line":
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, true);
                        player.SendConsoleCommand("ddraw.line", data.UpdateTime + Time.deltaTime, Color.white, target.eyes.position, target.eyes.position + target.eyes.HeadRay().direction * data.EyeLineDistance);
                        if (player.Connection.authLevel < 2) SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, false);

                        break;

                }

            }

            void SetPlayerFlag(BasePlayer player, BasePlayer.PlayerFlags f, bool b)
            {
                var reply = 1;
                if (reply == 0) { }
                if (b)
                {
                    if (player.HasPlayerFlag(f)) return;
                    player.playerFlags |= f;
                }
                else
                {
                    if (!player.HasPlayerFlag(f)) return;
                    player.playerFlags &= ~f;
                }
                player.SendNetworkUpdateImmediate(false);
            }

            public void DestroyComponent() => OnDestroy();
            void OnDestroy() =>
                Destroy(this);
        }


        class Position
        {
            public float Xmin;
            public float Xmax;
            public float Ymin;
            public float Ymax;

            public string AnchorMin =>
                $"{Math.Round(Xmin, 4).ToString(CultureInfo.InvariantCulture)} {Math.Round(Ymin, 4).ToString(CultureInfo.InvariantCulture)}";
            public string AnchorMax =>
                $"{Math.Round(Xmax, 4).ToString(CultureInfo.InvariantCulture)} {Math.Round(Ymax, 4).ToString(CultureInfo.InvariantCulture)}";

            public override string ToString()
            {
                return $"----------\nAmin:{AnchorMin}\nAmax:{AnchorMax}\n----------";
            }
        }

        [SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator")]
        private static List<Position> GetPositions(int colums, int rows, float colPadding = 0, float rowPadding = 0, bool columsFirst = false, ulong playerid = 1)
        {
            if (colums == 0)
                throw new ArgumentException("Can't create positions for gui!", nameof(colums));
            if (rows == 0)
                throw new ArgumentException("Can't create positions for gui!", nameof(rows));

            List<Position> result = new List<Position>();
            result.Clear();
            var colsDiv = 1f / colums;
            var rowsDiv = 1f / rows;
            if (colPadding == 0) colPadding = colsDiv / 2;
            if (rowPadding == 0) rowPadding = rowsDiv / 2;
            if (!columsFirst)
                for (int j = rows; j >= 1; j--)
                {
                    for (int i = 1; i <= colums; i++)
                    {
                        Position pos = new Position
                        {
                            Xmin = (i - 1) * colsDiv + colPadding / 2f,
                            Xmax = i * colsDiv - colPadding / 2f,
                            Ymin = (j - 1) * rowsDiv + rowPadding / 2f,
                            Ymax = j * rowsDiv - rowPadding / 2f
                        };
                        result.Add(pos);
                    }
                }
            else
                for (int i = 1; i <= colums; i++)
                {
                    for (int j = rows; j >= 1; j--)
                    {
                        Position pos = new Position
                        {
                            Xmin = (i - 1) * colsDiv + colPadding / 2f,
                            Xmax = i * colsDiv - colPadding / 2f,
                            Ymin = (j - 1) * rowsDiv + rowPadding / 2f,
                            Ymax = j * rowsDiv - rowPadding / 2f
                        };
                        result.Add(pos);
                    }
                }
            return result;
        }

        public string ParseColorFromRGBA(string cssColor)
        {
            cssColor = cssColor.Trim();
            string[] parts = cssColor.Split(' ');
            int r = int.Parse(parts[0], CultureInfo.InvariantCulture);
            int g = int.Parse(parts[1], CultureInfo.InvariantCulture);
            int b = int.Parse(parts[2], CultureInfo.InvariantCulture);
            float a = float.Parse(parts[3], CultureInfo.InvariantCulture);
            var finish = System.Drawing.Color.FromArgb((int)(a * 255), r, g, b);
            cssColor = "#" + finish.R.ToString("X2") + finish.G.ToString("X2") + finish.B.ToString("X2") + finish.A.ToString("X2");
            var str = cssColor.Trim('#');
            if (str.Length == 6)
                str += "FF";
            if (str.Length != 8)
            {
                throw new Exception(cssColor);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r1 = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g1 = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b1 = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a1 = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r1, g1, b1, a1);
            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 оценок
Сверху