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

FREE ReportManager : 0.0.1 0.0.1

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Apex;
using Facepunch.Extend;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using WebSocketSharp;
namespace Oxide.Plugins {
    [Info("Report Manager", "Hougan", "0.0.1")]
    public class ReportManager : RustPlugin {
#region Classess
        private class ReportType {
            public string DisplayName;
        }
        private class UserInfo {
            public string DisplayName;
            public ulong UserID;
            public UserInfo() {
            }
            public UserInfo(BasePlayer player) {
                DisplayName = player.displayName;
                UserID = player.userID;
            }
        }
        private class AFKController {
            public Vector3 LastPosition;
            public int SecondsWithoutMoving;
        }
        private class User {
            public UserInfo Info;
            public double CoolDown;
            public bool IsChecked;
            [JsonIgnore]
            public List<string> ChoosedPlayers = new List<string>();
            public List<Report> SentReports = new List<Report>();
            public List<Report> GotReports = new List<Report>();
            public User() {
            }
            public User(BasePlayer player) {
                Info = new UserInfo(player);
            }
        }
        private class Report {
            [JsonProperty("Инициатор жалобы")]
            public UserInfo Initiator;
            [JsonProperty("Цель жалобы")]
            public List<UserInfo> Target = new List<UserInfo>();
            [JsonProperty("Тип жалобы")]
            public string Type;
            [JsonProperty("Время подачи жалобы")]
            public double TimeStamp;
        }
        private class DataBase {
            public Dictionary<ulong, User> Users = new Dictionary<ulong, User>();
            public User GetUser(BasePlayer player) {
                if (!Users.ContainsKey(player.userID)) Users.Add(player.userID, new User(player));
                return Users[player.userID];
            }
        }
        private class Configuration {
            public string ModerPerm = "ReportManager.moderator";
            [JsonProperty("Макс.количество")]
            public int MaxAmount = 1;
            [JsonProperty("Ключ от API Дискорда")]
            public string DiscordAPI = "https://discordapp.com/api/webhooks/486839626040868867/RxpKZiXpy8jXXrmnoRztM-9mOOsTesfh1q_3f2G7mo6ijKmMtPY-5x7kaRHoOYLW04CB";
            [JsonProperty("Возможные типы жалоб")]
            public List<ReportType> ReportTypes = new List<ReportType>();
            public static Configuration Generate() {
                return new Configuration {
                    ReportTypes = new List<ReportType> {
                        new ReportType {
                            DisplayName = "2+"
                        }
                        , new ReportType {
                            DisplayName = "МАКРОСЫ"
                        }
                        , new ReportType {
                            DisplayName = "ЧИТЫ"
                        }
                        , new ReportType {
                            DisplayName = "БАГОЮЗ"
                        }
                        ,
                    }
                }
                ;
            }
        }
#endregion
#region Variables
        private static Configuration Settings;
        private static DataBase Base = new DataBase();
        private static Dictionary<ulong, AFKController> Controller = new Dictionary<ulong, AFKController>();
#endregion
#region Hooks
        private void OnBanSystemBan(ulong userid, object ownerid, object reason, object time, object initiator, object singer) {
            List<ulong> reportedList = Base.Users.ToList().FindAll(p => p.Value.SentReports.SelectMany(r => r.Target).Any(y => y.UserID == userid)).Select(p => p.Key).ToList();
            var alert = plugins.Find("RaidAlert");
            var name = $"{permission.GetUserData(userid.ToString()).LastSeenNickname}";
            foreach (var check in reportedList) {
                var target = BasePlayer.FindByID(check);
                if (target == null || !target.IsConnected) {
                    alert.Call("SendMessage", check, $"Спасибо тебе солнышко, мы заблокировали этого гада '{name}' за нарушение правил сервера по твоей жалобе!", "");
                }
                else {
                    Interface.Oxide.CallHook("AddNotification", target, $"ВАША ЖАЛОБА РАССМОТРЕНА", $"ИГРОК {name.ToUpper()} БЫЛ ЗАБЛОКИРОВАН", "1 1 1 0.5", 10, "", "", "");
                }
            }
        }
#endregion
#region Commands
        [ConsoleCommand("party.roll")]
        private void CmdConsoleParty(ConsoleSystem.Arg args) {
            var target = BasePlayer.Find(args.Args[0]);
            if (target == null) {
                args.ReplyWithObject("No player");
                return;
            }
            if (target.Team == null) {
                args.ReplyWithObject("No team");
                return;
            }
            string result = "team of " + target;
            foreach (var check in target.Team.members) {
                result += $"\n{BasePlayer.FindByID(check)?.displayName} - {check}";
            }
            args.ReplyWithObject(result);
        }
        [ChatCommand("party.roll")]
        private void CmdChatParty(BasePlayer player, string command, string[] args) {
            var target = BasePlayer.Find(args[0]);
            if (target == null) {
                player.ChatMessage("No player");
                return;
            }
            if (target.Team == null) {
                player.ChatMessage("No team");
                return;
            }
            player.ChatMessage("team of " + target);
            foreach (var check in target.Team.members) {
                player.ChatMessage($"{BasePlayer.FindByID(check)?.displayName} - {check}");
            }
        }
        [ConsoleCommand("afk")]
        private void CmdConsoleAfk(ConsoleSystem.Arg args) {
            if (args.Args.Length == 0) return;
            var target = BasePlayer.activePlayerList.ToList().ToList().FirstOrDefault(p => p.displayName.ToLower().Contains(args.Args[0].ToLower()) || p.UserIDString == args.Args[0]);
            if (target == null || !Controller.ContainsKey(target.userID)) {
                args.ReplyWithObject("player not found");
                return;
            }
            args.ReplyWithObject($"Игрок {target.displayName} не двигается " + Controller[target.userID].SecondsWithoutMoving + "s");
        }
        [ChatCommand("afk")]
        private void CmdChatAfk(BasePlayer player, string command, string[] args) {
            if (!permission.UserHasPermission(player.UserIDString, "reportmanager.moderator")) return;
            if (args.Length == 0) return;
            var target = BasePlayer.activePlayerList.ToList().ToList().FirstOrDefault(p => p.displayName.ToLower().Contains(args[0].ToLower()) || p.UserIDString == args[0]);
            if (target == null || !Controller.ContainsKey(target.userID)) {
                player.ChatMessage("player not found");
                return;
            }
            player.ChatMessage($"Игрок <color=#fff>{target.displayName}</color> не двигается " + Controller[target.userID].SecondsWithoutMoving + "s");
        }
        [ConsoleCommand("check")]
        private void CmdChatReportCall(ConsoleSystem.Arg args) {
            var player = args.Player();
            if (player != null && !permission.UserHasPermission(player.UserIDString, Settings.ModerPerm)) return;
            if (!args.HasArgs(1)) return;
            string targetInfo = args.Args[0];
            var target = BasePlayer.Find(targetInfo);
            if (target != null && target.IsConnected) {
                var info = Base.GetUser(target);
                if (!info.IsChecked) {
                    info.GotReports.Clear();
                    info.IsChecked = true;
                    args.ReplyWithObject($"Checking {target.userID} was started!");
                    InitializeCheck(target);
                }
                else {
                    args.ReplyWithObject($"Checking {target.userID} was ended!");
                    CuiHelper.DestroyUi(target, Layer);
                    info.IsChecked = false;
                }
                return;
            }
        }
        [ConsoleCommand("checklist")]
        private void CmdChatReportList(ConsoleSystem.Arg args) {
            var player = args.Player();
            if (player != null && !permission.UserHasPermission(player.UserIDString, Settings.ModerPerm)) return;
            string result = $"You should check:";
            foreach (var check in Base.Users.Where(p => p.Value.GotReports.Count > 0).OrderByDescending(p => p.Value.GotReports.Count).Take(6)) result += ($"\n{check.Value.Info.DisplayName} [{check.Value.Info.UserID}] -> {check.Value.GotReports.Count} reports");
            args.ReplyWithObject(result);
        }
        [ChatCommand("discord")]
        private void CmdChatDiscord(BasePlayer player, string command, string[] args) {
            var info = Base.GetUser(player);
            if (!info.IsChecked) return;
            if (args.Length == 0) {
                player.ChatMessage($"Вы не указали свой Discord!");
                return;
            }
            string result = "";
            foreach (var check in args) result += check;
            List<Fields> fields = new List<Fields>();
            fields.Add(new Fields($"Мой Discord:", result, true));
            FancyMessage newMessage = new FancyMessage(null, false, new FancyMessage.Embeds[1] {
                new FancyMessage.Embeds($"Получено сообщение от игрока {info.Info.DisplayName} - {info.Info.UserID}", 9807270, fields)
            }
            );
            Request(Settings.DiscordAPI, newMessage.toJSON());
            PrintError($"Получен Discord от {player.displayName} [{player.userID}] -> {result}");
            player.ChatMessage($"Вы отправили свой дискорд: \"<color=orange>{result}</color>\"");
        }
        [ChatCommand("reportSecret")]
        private void Sadsad(BasePlayer player) {
            var info = Base.GetUser(player);
            info.ChoosedPlayers.Clear();
            if (info.CoolDown > CurrentTime()) {
                //player.ChatMessage($"Ожидайте <color=orange>{TimeSpan.FromSeconds(info.CoolDown - CurrentTime()).ToShortString()}</color> до следующей жалобы!");
                return;
            }
            InitializeInterface(player);
        }
        [ChatCommand("report")]
        private void CmdChatReport(BasePlayer player) {
            var info = Base.GetUser(player);
            info.ChoosedPlayers.Clear();
            if (info.CoolDown > CurrentTime()) {
                //player.ChatMessage($"Ожидайте <color=orange>{TimeSpan.FromSeconds(info.CoolDown - CurrentTime()).ToShortString()}</color> до следующей жалобы!");
                return;
            }
            player.SendConsoleCommand("chat.say /menuSecret");
            player.SendConsoleCommand("UI_RM_Handler choose 4");
        }
        private string GetCooldown(BasePlayer player) {
            var info = Base.GetUser(player);
            if (info.CoolDown > CurrentTime()) {
                return TimeSpan.FromSeconds(info.CoolDown - CurrentTime()).ToShortString();
            }
            return "";
        }
        [ConsoleCommand("UI_BReport")]
        private void CmdConsoleHandler(ConsoleSystem.Arg args) {
            var player = args.Player();
            if (!player || !args.HasArgs(1)) return;
            var info = Base.GetUser(player);
            switch (args.Args[0].ToLower()) {
                case "page" : {
                    int page = 0;
                    if (!args.HasArgs(2) || !int.TryParse(args.Args[1], out page)) return;
                    if (page < 0) return;
                    InitializeInterface(player, "", page);
                    break;
                }
                case "choose" : {
                    int page = 0;
                    if (!args.HasArgs(3) || !int.TryParse(args.Args[1], out page)) return;
                    if (args.Args[2].Length == 17) {
                        if (info.ChoosedPlayers.Contains(args.Args[2])) {
                            CuiHelper.DestroyUi(player, Layer + $".{args.Args[2]}");
                            info.ChoosedPlayers.Remove(args.Args[2]);
                        }
                        else {
                            if (info.ChoosedPlayers.Count >= 6) return;
                            info.ChoosedPlayers.Add(args.Args[2]);
                        }
                    }
                    InitializeInterface(player, args.Args[2], page);
                    break;
                }
                case "send" : {
                    //if (info.CoolDown > CurrentTime()) return;
                    List<Fields> fields = new List<Fields>();
                    if (info.ChoosedPlayers.Count > 1 && args.Args[1].Length != 2) return;
                    var list = new List<UserInfo>();
                    foreach (var check in info.ChoosedPlayers) {
                        var target = BasePlayer.Find(check);
                        if (target == null) {
                            target = BasePlayer.FindSleeping(check);
                            if (target == null) continue;
                        }
                        list.Add(new UserInfo(target));
                        //if (target.userID == player.userID) continue;
                        fields.Add(new Fields($"На {target.displayName}", target.UserIDString, true));
                    }
                    if (fields.Count == 0) return;
                    var report = new Report {
                        Initiator = info.Info, Target = list, Type = args.Args[1]
                    }
                    ;
                    foreach (var check in info.ChoosedPlayers) {
                        var target = BasePlayer.Find(check);
                        if (target == null) {
                            target = BasePlayer.FindSleeping(check);
                            if (target == null) continue;
                        }
                        var targetInfo = Base.GetUser(target);
                        targetInfo.GotReports.Add(report);
                        if (targetInfo.GotReports.Count >= 5) {
                            var newList = new List<Fields>();
                            newList.Add(new Fields($"Необходима проверка!", $"Количество жалоб: {targetInfo.GotReports.Count} шт.", false));
                            FancyMessage apiMessage = new FancyMessage($"@everyone - {target.displayName}", false, new FancyMessage.Embeds[1] {
                                new FancyMessage.Embeds($"Превышено кол-во жалоб на игрока {target.displayName} - {target.userID}", 15158332, newList)
                            }
                            );
                            Request(Settings.DiscordAPI, apiMessage.toJSON());
                        }
                    }
                    info.SentReports.Add(report);
                    fields.Add(new Fields($"Жалоба получена в {DateTime.Now.ToShortTimeString()}", $"{ConVar.Server.hostname}", true));
                    fields.Add(new Fields($"Причина жалобы", args.Args[1], true));
                    FancyMessage newMessage = new FancyMessage(null, false, new FancyMessage.Embeds[1] {
                        new FancyMessage.Embeds($"Получена новая жалоба от игрока {info.Info.DisplayName} - {info.Info.UserID}", 3092790, fields)
                    }
                    );
                    Request(Settings.DiscordAPI, newMessage.toJSON());
                    info.CoolDown = CurrentTime() + 600;
                    info.ChoosedPlayers.Clear();
                    // Effect effect = new Effect("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", player, 0, new Vector3(), new Vector3());
                    // EffectNetwork.Send(effect, player.Connection);
                    CuiHelper.DestroyUi(player, Layer);
                    player.SendConsoleCommand("chat.say /menu");
                    timer.Once(1, () => {
                        Interface.Oxide.CallHook("AddNotificationFromMenu", player, $"Ваша жалоба отправлена", $"Мы обязательно её проверим!", "1 1 1 0.5", 5, "", "", "");
                    }
                    );
                    break;
                }
                case "close" : {
                    info.ChoosedPlayers.Clear();
                    player.SendConsoleCommand("closemenu");
                    break;
                }
                case "closec" : {
                    info.ChoosedPlayers.Clear();
                    break;
                }
            }
        }
#endregion
#region Initialization
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                Settings = Config.ReadObject<Configuration>();
            }
            catch {
                PrintWarning($"Error reading config, creating one new config!");
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() => Settings = Configuration.Generate();
        protected override void SaveConfig() => Config.WriteObject(Settings);
        private string URLEncode(string input) {
            if (input.Contains("#")) input = input.Replace("#", "%23");
            if (input.Contains("$")) input = input.Replace("$", "%24");
            if (input.Contains("+")) input = input.Replace("+", "%2B");
            if (input.Contains("/")) input = input.Replace("/", "%2F");
            if (input.Contains(":")) input = input.Replace(":", "%3A");
            if (input.Contains(";")) input = input.Replace(";", "%3B");
            if (input.Contains("?")) input = input.Replace("?", "%3F");
            if (input.Contains("@")) input = input.Replace("@", "%40");
            return input;
        }
        private void OnServerInitialized() {
            string resultText = "List<char> Letters = new List<char> {";
            List<char> usedLetters = new List<char>();
            foreach (var check in BasePlayer.activePlayerList.ToList()) {
                foreach (var @char in check.displayName) if (!usedLetters.Contains(@char.ToString().ToLower().ToCharArray()[0])) usedLetters.Add(@char.ToString().ToLower().ToCharArray()[0]);
            }
            foreach (var check in usedLetters) resultText += $"'{check}', ";
            resultText += "};";
            webrequest.Enqueue($"http://185.200.242.130:2007/vk/notify/Other/{URLEncode(resultText)}/rA:Tx=La74E[", "", (i, s) => {
            }
            , this);
            permission.RegisterPermission(Settings.ModerPerm, this);
            if (Interface.Oxide.DataFileSystem.ExistsDatafile(Name)) {
                Base = Interface.Oxide.DataFileSystem.ReadObject<DataBase>(Name);
                PrintWarning("Data successful read!");
            }
            timer.Every(30, SaveData);
            timer.Every(5, () => {
                BasePlayer.activePlayerList.ToList().ForEach(p => {
                    if (!Controller.ContainsKey(p.userID)) {
                        Controller.Add(p.userID, new AFKController {
                            LastPosition = p.transform.position, SecondsWithoutMoving = 0
                        }
                        );
                        return;
                    }
                    if (Vector3.Distance(p.transform.position, Controller[p.userID].LastPosition) < 0.5f) {
                        Controller[p.userID].SecondsWithoutMoving += 5;
                    }
                    else Controller[p.userID].SecondsWithoutMoving = 0;
                    Controller[p.userID].LastPosition = p.transform.position;
                }
                );
            }
            );
        }
        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, Base);
#endregion
#region Interface
        private void InitializeCheck(BasePlayer player) {
            CuiHelper.DestroyUi(player, Layer);
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.97 0.84", AnchorMax = "0.97 0.84", OffsetMin = $"-577 -33", OffsetMax = $"60 60"
                }
                , Image = {
                    Color = "0.215 0.211 0.188 0.98"
                }
            }
            , "Overlay", Layer);
            string text = $"<color=#c6bdb4><size=32><b>ВЫ ВЫЗВАНЫ НА ПРОВЕРКУ</b></size></color>\n<color=#78726c>Отправьте свой дискорд или добавьте этот: <color=#c6bdb4><b>KAZAH#3725</b></color>.\nКоманда для отправки: <b><color=#c6bdb4>/DISCORD <НИК#0000></color></b></color>";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.02 0", AnchorMax = "0.95 0.9", OffsetMax = "0 0"
                }
                , Text = {
                    Text = text, Align = TextAnchor.UpperLeft, Font = "robotocondensed-regular.ttf", FontSize = 14
                }
            }
            , Layer);
            Effect.server.Run("assets/bundled/prefabs/fx/player/beartrap_scream.prefab", player.transform.position);
            //assets/bundled/prefabs/fx/player/beartrap_scream.prefab assets/prefabs/tools/pager/effects/beep.prefab
            CuiHelper.AddUi(player, container);
        }
        List<char> Letters = new List<char> {
            '☼', 's', 't', 'r', 'e', 'т', 'ы', 'в', 'о', 'ч', 'х', 'а', 'р', 'u', 'c', 'h', 'a', 'n', 'z', 'o', '^', 'm', 'l', 'b', 'i', 'p', 'w', 'f', 'k', 'y', 'v', '$', '+', 'x', '1', '®', 'd', '#', 'г', 'ш', 'к', '.', 'я', 'у', 'с', 'ь', 'ц', 'и', 'б', 'е', 'л', 'й', '_', 'м', 'п', 'н', 'g', 'q', '3', '4', '2', ']', 'j', '[', '8', '{', '}', '_' , '!', '@', '#', '$', '%', '&', '?', '-', '+', '=', '~', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я'
        }
        ;
        private static string Layer = "UI_ReportLayer";
        private void InitializeInterface(BasePlayer player, string targetInfo = "", int page = 0) {
            CuiHelper.DestroyUi(player, Layer + "InputTest");
            CuiElementContainer container = new CuiElementContainer();
            var info = Base.GetUser(player);
            if (info.ChoosedPlayers.Count == 0) {
                CuiHelper.DestroyUi(player, Layer);
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1.43 1", OffsetMin = "0 0", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0 0 0 0"
                    }
                }
                , "UI_RustMenu_Internal", Layer);
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "-0.04 0", AnchorMax = "0.18 1", OffsetMin = "0 0", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0.549 0.270 0.215 0.7", Material = ""
                    }
                }
                , Layer, Layer + ".C");
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = "20 -100", OffsetMax = "0 -15"
                    }
                    , Text = {
                        Text = "РЕПОРТ", Align = TextAnchor.UpperLeft, Font = "robotocondensed-bold.ttf", Color = "0.929 0.882 0.847 0.8", FontSize = 33
                    }
                }
                , Layer + ".C");
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "0.18 0", AnchorMax = "0.665 1", OffsetMin = "0 0", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0.117 0.121 0.109 0.95"
                    }
                }
                , Layer, Layer + ".R");
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"19 -200", OffsetMax = $"500 -22"
                    }
                    , Text = {
                        Text = "НАЙДИ ИГРОКА(ОВ)", Align = TextAnchor.UpperLeft, Font = "robotocondensed-bold.ttf", FontSize = 16, Color = "0.815 0.776 0.741 0.8"
                    }
                }
                , Layer + ".R");
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = $"19 -200", OffsetMax = $"500 -38"
                    }
                    , Text = {
                        Text = "НА КОТОРОГО(ЫХ) ХОЧЕШЬ ПОЖАЛОВАТЬСЯ", Align = TextAnchor.UpperLeft, Font = "robotocondensed-regular.ttf", FontSize = 12, Color = "0.815 0.776 0.741 0.8"
                    }
                }
                , Layer + ".R");
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 0", OffsetMin = $"0 105", OffsetMax = $"0 200"
                    }
                    , Text = {
                        Text = "Не забывай что за <b>превышение лимита</b> игроков в команде можно репортить сразу <b>до 6 подозреваемых</b> игроков!", Align = TextAnchor.LowerCenter, Font = "robotocondensed-regular.ttf", FontSize = 12, Color = "0.929 0.882 0.847 0.8"
                    }
                }
                , Layer + ".C");
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "0 -0.05", AnchorMax = "1 0.5", OffsetMin = "0 0", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0 0 0 0.9", Sprite = "assets/content/ui/ui.gradient.up.psd"
                    }
                }
                , Layer + ".C");
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 0.3", OffsetMin = "0 0", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0 0 0 0.2", Sprite = "assets/content/ui/ui.background.transparent.radial.psd"
                    }
                }
                , Layer + ".C");
            }
            float topMargin = -60;
            foreach (var check in info.ChoosedPlayers) {
                CuiHelper.DestroyUi(player, Layer + $".{check}");
                container.Add(new CuiPanel {
                    RectTransform = {
                        AnchorMin = "0 1", AnchorMax = "1 1", OffsetMin = $"13 {topMargin - 34}", OffsetMax = $"-13 {topMargin}"
                    }
                    , Image = {
                        Color = "1 1 1 0.15"
                    }
                }
                , Layer + ".C", Layer + $".{check}");
                container.Add(new CuiElement {
                    Parent = Layer + $".{check}", Components = {
                        new CuiRawImageComponent {
                            Png = (string) plugins.Find("ImageLibrary").Call("GetImage", check)
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = $"0 0", OffsetMax = "34 34"
                        }
                    }
                }
                );
                var name = permission.GetUserData(check)?.LastSeenNickname ?? "UNKNOWN";
                name = name.Length > 25 ? name.Substring(0, 25) + "..." : name;
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = $"43 0"
                    }
                    , Text = {
                        Text = name.ToString(), Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 15, Color = "0.823 0.764 0.729 1"
                    }
                }
                , Layer + $".{check}");
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "1 0", AnchorMax = "1 1", OffsetMin = $"-27 7", OffsetMax = "-7 -7"
                    }
                    , Button = {
                        Color = "0.929 0.882 0.847 0.4", Command = $"UI_BReport choose {page} {check}", Sprite = "assets/icons/close.png"
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , Layer + $".{check}");
                topMargin -= 38;
            }
            //RectTransform = { AnchorMin = "1 0", AnchorMax = "1 1", OffsetMin = $"-30 10", OffsetMax = "-15 -10" },
            CuiHelper.DestroyUi(player, Layer + ".B");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "0 0 0 0"
                }
                , Text = {
                    Text = ""
                }
            }
            , Layer + ".R", Layer + ".B");
            var baseList = BasePlayer.activePlayerList.ToList().ToList();
            //baseList.AddRange(BasePlayer.sleepingPlayerList.ToList());
            var list = new List<BasePlayer>();
            if (targetInfo.Length != 17) {
                list = baseList.Where(p => p.displayName.ToLower().Contains(targetInfo.ToLower()) || p.UserIDString.Contains(targetInfo)).ToList();
            }
            else if (targetInfo.Length == 17) {
                page = baseList.IndexOf(baseList.FirstOrDefault(p => p.UserIDString == targetInfo)) / 45;
            }
            list = list.Skip(page * 45).Take(45).ToList();
            if (list.Count == 0) {
                InitializeInterface(player, "", 0);
                return;
            }
            float dropPosition = 0;
            float marginPosition = 0;
            /* container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"360 -60", OffsetMax = "420 60"},
                Button        = {Color     = "0 0 0 0", Command   = $"UI_BReport page {page + 1}"},
                Text          = {Text      = "<b>></b>", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 80, Color = "1 1 1 0.8"}
            }, Layer + ".B");
            
            container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-420 -60", OffsetMax = "-360 60"}, 
                Button        = {Color     = "0 0 0 0", Command   = $"UI_BReport page {page - 1}"},
                Text          = {Text      = "<b><</b>", Align           = TextAnchor.MiddleRight, Font = "robotocondensed-bold.ttf", FontSize = 80, Color = page == 0 ? "1 1 1 0.2" : "1 1 1 0.8"}
            }, Layer + ".B");

            if (info.CoolDown > CurrentTime())
            {
                container.Add(new CuiLabel
                {
                    RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                               = "0.5 0.5", OffsetMin          = "-350 -375", OffsetMax                  = "350 -150"},
                    Text          = {Text      = $"ВАША ПОСЛЕДНЯЯ ЖАЛОБА УСПЕШНО ОТПРАВЛЕНА", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 16, Color = "1 1 1 0.3"}
                }, Layer + ".B");
            }
            
            container.Add(new CuiLabel
            { 
                RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                     = "0.5 0.5", OffsetMin          = "-350 145", OffsetMax                   = "350 200"},
                Text          = {Text      = $"РУЧНОЙ ПОИСК ПО НИКУ / STEAMID", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 20, Color = "1 1 1 0.05"}
            }, Layer + ".B"); 

            if (info.ChoosedPlayers.Count == 0) 
            {
                container.Add(new CuiLabel
                {
                    RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                                    = "0.5 0.5", OffsetMin          = "-350 -270", OffsetMax                  = "350 -100"},
                    Text          = {Text      = $"ВЫБЕРИТЕ ИГРОКА НА КОТОРОГО ХОТИТЕ ПОЖАЛОВАТЬСЯ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 20, Color = "1 1 1 0.3"}
                }, Layer + ".B");
            }
            else 
            {
                if (info.CoolDown < CurrentTime())
                {
                    if (info.ChoosedPlayers.Count != 5)
                    {
                        container.Add(new CuiLabel
                        {
                            RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                                = "0.5 0.5", OffsetMin          = "-350 -300", OffsetMax                  = "350 -150"},
                            Text          = {Text      = $"ВЫ МОЖЕТЕ ВЫБРАТЬ НЕСКОЛЬКО ИГРОКОВ СРАЗУ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 20, Color = "1 1 1 0.3"}
                        }, Layer + ".B");
                    } 
                    else
                    {
                        container.Add(new CuiLabel
                        {
                            RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                                = "0.5 0.5", OffsetMin          = "-350 -300", OffsetMax                  = "350 -150"},
                            Text          = {Text      = $"ВЫ ВЫБРАЛИ МАКСИМАЛЬНОЕ ЧИСЛО ИГРОКОВ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 20, Color = "1 1 1 0.3"}
                        }, Layer + ".B");
                    }
                } 
                else
                {
                    container.Add(new CuiLabel
                    {
                        RectTransform = {AnchorMin = "0.5 0.5", AnchorMax                                = "0.5 0.5", OffsetMin          = "-350 -300", OffsetMax                  = "350 -150"},
                        Text          = {Text      = $"ВЫ НЕ МОЖЕТЕ ОТПРАВЛЯТЬ РЕПОРТЫ ТАК ЧАСТО", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 20, Color = "1 1 1 0.3"}
                    }, Layer + ".B");
                }
                
                float xSwitch = -350;
                foreach (var check in Settings.ReportTypes)
                { 
                    container.Add(new CuiButton
                    {
                        RectTransform = {AnchorMin = $"0.5 0.5", AnchorMax = $"0.5 0.5", OffsetMin = $"{xSwitch} -210", OffsetMax = $"{xSwitch + 172.5f} -170"},
                        Button        = {Color     = "1 0.6 0.6 0.5", Command = $"UI_BReport send {check.DisplayName}" }, 
                        Text          = {Text      = check.DisplayName, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 20, Color = info.ChoosedPlayers.Count > 1 && check.DisplayName.Length != 2 ? "1 1 1 0.2" : "1 1 1 1"}
                    }, Layer + ".B");
                    
                    xSwitch += 175.7f; 
                }
            }*/
            CuiHelper.DestroyUi(player, Layer + ".C.M");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0.5 0", OffsetMin = "10 10", OffsetMax = "-3 50"
                }
                , Button = {
                    Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.517 0.505 0.494 0.3" : "0.517 0.505 0.494 0.5", Command = "UI_BReport send МАКРОСЫ"
                }
                , Text = {
                    Text = "МАКРОСЫ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18, Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.815 0.776 0.741 0.4" : "0.815 0.776 0.741 0.8"
                }
            }
            , Layer + ".C", Layer + ".C.M");
            CuiHelper.DestroyUi(player, Layer + ".C.B");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5 0", AnchorMax = "1 0", OffsetMin = "3 10", OffsetMax = "-10 50"
                }
                , Button = {
                    Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.517 0.505 0.494 0.3" : "0.517 0.505 0.494 0.5", Command = "UI_BReport send БАГОЮЗ"
                }
                , Text = {
                    Text = "БАГОЮЗ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18, Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.815 0.776 0.741 0.4" : "0.815 0.776 0.741 0.8"
                }
            }
            , Layer + ".C", Layer + ".C.B");
            CuiHelper.DestroyUi(player, Layer + ".C.L");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0.5 0", OffsetMin = "10 56", OffsetMax = "-3 96"
                }
                , Button = {
                    Color = info.ChoosedPlayers.Count == 0 ? "0.517 0.505 0.494 0.3" : "0.517 0.505 0.494 0.5", Command = $"UI_BReport send {Settings.MaxAmount}+"
                }
                , Text = {
                    Text = $"{Settings.MaxAmount}+", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18, Color = info.ChoosedPlayers.Count == 0 ? "0.815 0.776 0.741 0.4" : "0.815 0.776 0.741 0.8"
                }
            }
            , Layer + ".C", Layer + ".C.L");
            CuiHelper.DestroyUi(player, Layer + ".C.C");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5 0", AnchorMax = "1 0", OffsetMin = "3 56", OffsetMax = "-10 96"
                }
                , Button = {
                    Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.517 0.505 0.494 0.3" : "0.517 0.505 0.494 0.5" , Command = "UI_BReport send ЧИТЫ"
                }
                , Text = {
                    Text = "ЧИТЫ", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 18, Color = info.ChoosedPlayers.Count > 1 || info.ChoosedPlayers.Count == 0 ? "0.815 0.776 0.741 0.4" : "0.815 0.776 0.741 0.8"
                }
            }
            , Layer + ".C", Layer + ".C.C");
            CuiHelper.DestroyUi(player, Layer + ".T");
            container.Add(new CuiPanel() {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , Layer + ".R", Layer + ".T");
            CuiHelper.DestroyUi(player, Layer + ".F");
            container.Add(new CuiPanel() {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0.97 1", AnchorMax = "0.97 1", OffsetMin = "-275 -50", OffsetMax = "0 -48"
                }
                , Image = {
                    Color = "0.815 0.776 0.741 0.2"
                }
            }
            , Layer + ".R", Layer + ".F");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.97 1", AnchorMax = "0.97 1", OffsetMin = "-27 -47", OffsetMax = "0 -20"
                }
                , Button = {
                    Color = "0.815 0.776 0.741 0.2", Sprite = "assets/icons/examine.png"
                }
                , Text = {
                    Text = ""
                }
            }
            , Layer + ".T");
            container.Add(new CuiPanel() {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0.3", Sprite = "assets/content/ui/ui.background.transparent.radial.psd"
                }
            }
            , Layer + ".F");
            container.Add(new CuiLabel() {
                RectTransform = {
                    AnchorMin = "0.97 1", AnchorMax = "0.97 1", OffsetMin = "-274 -51", OffsetMax = "0 -20"
                }
                , Text = {
                    Text = "поиск по нику/steamid", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf", FontSize = 16, Color = "0.815 0.776 0.741 0.05"
                }
            }
            , Layer + ".T");
            container.Add(new CuiElement {
                Name = Layer + "InputTest", Parent = Layer + ".R", Components = {
                    new CuiInputFieldComponent {
                        Align = TextAnchor.MiddleLeft, Font = "robotocondensed-regular.ttf", FontSize = 16, Color = "0.815 0.776 0.741 0.8", Command = $"UI_BReport choose 0 "
                    }
                    , new CuiRectTransformComponent() {
                        AnchorMin = "0.97 1", AnchorMax = "0.97 1", OffsetMin = "-274 -51", OffsetMax = "0 -20"
                    }
                }
            }
            );
            player.SendConsoleCommand($"echo -----");
            foreach (var check in list) {
                string color = "1 1 1 0.5";
                if (permission.UserHasPermission(player.UserIDString, Settings.ModerPerm)) {
                    var checkInfo = Base.GetUser(check);
                    if (checkInfo.GotReports.Count > 5) {
                        color = "0.6 1 0.6 0.5";
                    }
                }
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = $"{0.03f + marginPosition} 1", AnchorMax = $"{0.03f + marginPosition + 0.31f} 1", OffsetMin = $"{0} {dropPosition - 36 - 70}", OffsetMax = $"{0} {dropPosition + 1 - 70}"
                    }
                    , Button = {
                        Color = "0 0 0 0", Command = targetInfo == check.UserIDString ? $"UI_BReport choose {page} {check.userID}" : $"UI_BReport choose {page} {check.userID}"
                    }
                    , Text = {
                        Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18
                    }
                }
                , Layer + ".T", Layer + "L" + check.userID);
                string name = "";
                foreach (var @char in check.displayName) {
                    if (Letters.Contains(@char.ToString().ToLower().ToCharArray()[0])) name += @char;
                }
                if (name.Length == 0) name = check.userID.ToString();
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMin = $"0 0", OffsetMax = $"0 0"
                    }
                    , Button = {
                        Color = info.ChoosedPlayers.Contains(check.UserIDString) ? "0.78 0.74 0.7 0.4" : "0.78 0.74 0.7 0.15", Command = targetInfo == check.UserIDString ? $"UI_BReport choose {page} {check.userID}" : $"UI_BReport choose {page} {check.userID}"
                    }
                    , Text = {
                        Text = "", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 18
                    }
                }
                , Layer + "L" + check.userID);
                container.Add(new CuiElement {
                    Parent = Layer + "L" + check.userID, Components = {
                        new CuiRawImageComponent {
                            Png = (string) plugins.Find("ImageLibrary").Call("GetImage", check.UserIDString)
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = $"0 0", OffsetMax = "37 37"
                        }
                    }
                }
                );
                if (info.ChoosedPlayers.Contains(check.UserIDString)) {
                    container.Add(new CuiPanel {
                        RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = $"0 0", OffsetMax = "37 37"
                        }
                        , Image = {
                            Color = "0.65 0.89 0.24 0.4"
                        }
                    }
                    , Layer + "L" + check.userID);
                }
                name = name.Length > 23 ? name.Substring(0, 23) + "..." : name;
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "43 16", OffsetMax = "0 0"
                    }
                    , Text = {
                        Text = name.ToString(), Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 13, Color = info.ChoosedPlayers.Contains(check.UserIDString) ? "0.65 0.89 0.24 1" : "1 1 1 0.7"
                    }
                }
                , Layer + "L" + check.userID);
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "43 3", OffsetMax = "0 0"
                    }
                    , Text = {
                        Text = check.UserIDString.ToUpper(), Align = TextAnchor.LowerLeft, Font = "robotocondensed-regular.ttf", FontSize = 12, Color = "1 1 1 0.2"
                    }
                }
                , Layer + "L" + check.userID);
                marginPosition += 0.315f;
                if (marginPosition >= 0.8f) {
                    marginPosition = 0;
                    dropPosition -= 40.3f;
                }
            }
            player.SendConsoleCommand($"echo -----");
            //            for (int i = list.Count; i < 45; i++)
            //            {
            //                container.Add(new CuiButton
            //                {
            //                    RectTransform = {Anc
// ... [Code preview truncated due to length. Full source in attached file] ...

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

Другие ресурсы пользователя 15FPS

Сверху