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

FREE SkyReportSystem : 3.2.0 3.2.0

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core;
using System;
using System.Collections.Generic;
using System.Globalization;
using UnityEngine;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Libraries;
using ConVar;
using Newtonsoft.Json.Linq;
namespace Oxide.Plugins {
    [Info("SkyReportSystem", "DezLife", "3.2.0")]
    [Description("Report system for rust")]
    public class SkyReportSystem : RustPlugin {
#region Reference
        [PluginReference]
        Plugin IQChat, ImageLibrary;
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary?.Call("GetImage", shortname, skin);
        Dictionary<ulong, ulong> CheckPlayerModeration = new Dictionary<ulong, ulong>();
#endregion
#region Config
        private Configuration config;
        public class Configuration {
            [JsonProperty(PropertyName = "VK:", Order = 0)]
            public VKontakte vKontakte;
            [JsonProperty(PropertyName = "Discord:", Order = 1)]
            public Discord discord;
            [JsonProperty(PropertyName = "Setting:", Order = 2)]
            public Setting setting;
            [JsonProperty(PropertyName = "Проверка на AFK:", Order = 3)]
            public IsAfk isafk;
            [JsonProperty(PropertyName = "Причины бана:", Order = 4)]
            public List<BanReasons> banReasons;
            [JsonProperty("Настройки плагина", Order = 5)]
            public List<string> Reasonsforcomplaint;
        }
        public class BanReasons {
            [JsonProperty(PropertyName = "Причина бана:", Order = 0)]
            public string BanReason;
            [JsonProperty(PropertyName = "Команда для бана:", Order = 1)]
            public string BanReasonCommand;
        }
        public class IsAfk {
            [JsonProperty(PropertyName = "Включить проверку на AFK ?", Order = 0)]
            public bool usecheckafk;
            [JsonProperty(PropertyName = "Время между проверками на AFK", Order = 2)]
            public float timecheckisafk;
        }
        public class Setting {
            [JsonProperty(PropertyName = "Аватар для сообщений(Для работы с IQChat )", Order = 0)]
            public ulong avatarid;
            [JsonProperty(PropertyName = "Префикс(Для работы с IQChat )", Order = 1)]
            public string prefix;
            [JsonProperty(PropertyName = "Колличевство репортов для вызова на проверку", Order = 3)]
            public int maxreportcall;
            [JsonProperty(PropertyName = "Отправлять сообщения модераторам в чат о том что игрок превысил количевство репортов (Требуется разрешения SkyReportSystem.moderator)", Order = 4)]
            public bool usemodercall;
            [JsonProperty(PropertyName = "Включить логирование ?", Order = 5)]
            public bool uselog;
            [JsonProperty(PropertyName = "Кд на отправку репортов", Order = 6)]
            public int Cooldown;
            [JsonProperty(PropertyName = "Названия сервера", Order = 7)]
            public string servername;
            [JsonProperty(PropertyName = "Команда для открытия репорт меню", Order = 8)]
            public string comandplayer;
            [JsonProperty(PropertyName = "Команда для открытия модер меню", Order = 9)]
            public string comandmoder;
            [JsonProperty(PropertyName = "Сообщения в титле", Order = 10)]
            public string teatletxt;
        }
        public class VKontakte {
            [JsonProperty(PropertyName = "Используем Вконтакте:", Order = 0)]
            public bool UseVK;
            [JsonProperty(PropertyName = "ID Беседы ВК для бота:", Order = 1)]
            public string VK_ChatID;
            [JsonProperty(PropertyName = "Token Группы ВК:", Order = 2)]
            public string VK_Token;
        }
        public class Discord {
            [JsonProperty(PropertyName = "Используем Discord:", Order = 0)]
            public bool UseDiscord;
            [JsonProperty(PropertyName = "Webhook Discrod:", Order = 1)]
            public string Discord_webHook;
        }
        protected override void LoadDefaultConfig() {
            config = new Configuration() {
                vKontakte = new VKontakte() {
                    UseVK = false, VK_ChatID = "ChatID", VK_Token = "VKToken",
                }
                , discord = new Discord() {
                    Discord_webHook = "webHook", UseDiscord = false,
                }
                , setting = new Setting() {
                    avatarid = 76561198854646370, prefix = "SkyReportSystem", maxreportcall = 4, usemodercall = true, uselog = false, Cooldown = 360, servername = "Server Name", comandplayer = "report", comandmoder = "reportm", teatletxt = "ReportSystem by DezLife"
                }
                , isafk = new IsAfk() {
                    usecheckafk = false, timecheckisafk = 15f,
                }
                , banReasons = new List<BanReasons>() {
                    new BanReasons {
                        BanReason = "Читы", BanReasonCommand = "ban {0} 999d Soft",
                    }
                    , new BanReasons {
                        BanReason = "Макросы", BanReasonCommand = "ban {0} 30d Macros",
                    }
                    , new BanReasons {
                        BanReason = "Превышение максимальной численности игроков в команде", BanReasonCommand = "ban {0} 14d 3+",
                    }
                    , new BanReasons {
                        BanReason = "Отказ от проверки", BanReasonCommand = "ban {0} 7d Otkaz",
                    }
                    , new BanReasons {
                        BanReason = "Другое", BanReasonCommand = "ban {0} 999d 5",
                    }
                    ,
                }
                , Reasonsforcomplaint = new List<string> {
                    "3+", "Подозрения в читах", "Макросы", "Реклама в нике", "Спам в чат", "Обман игроков", "Багоюз", "Токсик",
                }
            }
            ;
            SaveConfig(config);
        }
        void SaveConfig(Configuration config) {
            Config.WriteObject(config, true);
            SaveConfig();
        }
        public void LoadConfigVars() {
            config = Config.ReadObject<Configuration>();
            Config.WriteObject(config, true);
        }
#endregion
#region data
        public Dictionary<ulong, ReportUser> ReportData = new Dictionary<ulong, ReportUser>();
        public class ReportUser {
            public int ReportCount;
            public int CheckCount;
            public List<string> complaint = new List<string>();
        }
#endregion
#region Lang
        protected override void LoadDefaultMessages() {
            Dictionary<string, string> Lang = new Dictionary<string, string> {
                ["SKY_REPORT_REPORTING"]
                = "Вы успешно отправили репорт на игрока {0}", ["SKY_REPORT_REPORTING_VK_DISCORD"] = "=====================================================\nСервер : {0}\nИгрок : {1} пожаловался на {2} [{3}]\nПричина : {4}", ["SKY_REPORT_MAXIMUM_REPORT"] = "Игрок: {0} " + " Превысил максимальное количевство репортов!" + "Его колличевство {1}", ["SKY_COLDOWN"] = "Вы недавно отправляли жалобу,подождите еще немного", ["SKY_ERROR_PLAYER"] = "Вы жалуетесь сами на себя!", ["SKY_PLAYER_PERMISSION_IS_FOUND"] = "У вас недостаточно прав для использования данной команды!", ["SKY_NO_CHECK_MODERATION_OR_CHECKING"] = "Вы не можете вызвать игрока {0} на проверку,т.к его проверяет другой модератор", ["SKY_ACESS_CHECKING"] = "Вы вызвали игрока {0} на проверку", ["SKY_MODER_CHECK_PLAYER_GOING"] = "=====================================================\nМодератор {0} вызвал на проверку игрока {1}[{2}]", ["SKY_MODER_CHECK_PLAYER_GOING_CONSOLE"] = "=====================================================\nИгрок {1}[{2}] был вызван с помощью консоли", ["SKY_PLAYER_IS_AFK_VK_DISCORD_OK"] = "=====================================================\nИгрок: {0}  двигался с момента последней проверки на AFK", ["SKY_PLAYER_IS_AFK_VK_DISCORD_NO"] = "=====================================================\nИгрок: {0} не двигался с момента последней проверки на AFK", ["SKY_PLAYER_IS_AFK_OK"] = "Игрок: <color=orange>{0}</color> двигался с момента последней проверки на AFK", ["SKY_PLAYER_IS_AFK_NO"] = "Игрок: <color=orange>{0}</color> не двигался с момента последней проверки на AFK", ["SKY_MODERATOR_STOPID_CHEKING"] = "Вы успешно закончили проверку над игроком : {0} !", ["SKY_PLAYER_STOPID_CHEKING"] = "Проверка успешно окончена.\nПроверял модератор {0} !", ["SKY_PLAYER_CHECKING_MODER_MENU_MODERATION"] = "Игрок проверяется модератором", ["SKY_PLAYER_NOTHING_MESSAGE_SKYPE_DISCORD"] = "Вы ничего не ввели!", ["SKY_MODER_CHECK_P_SKYPE"] = "Вы предоставили свой Skype : {0}", ["SKY_MODER_CHECK_P_DISCORD"] = "Вы предоставили свой Discord : {0}", ["SKY_Menu_Info"] = "В данном окне вам нужно выбрать игрока из списка или ввести его ник в поле ниже что бы оставить на него жалобу", ["SKY_SKYPE_MESSAGE"] = "=====================================================\n" + "Сервер : {0}\n" + "Игровой ник: {1}\n" + "Steam ID: {2}\n" + "Предоставил Skype на проверку : {3}", ["SKY_DISCORD_MESSAGE"] = "=====================================================\n" + "Сервер : {0}\n" + "Игровой ник: {1}\n" + "Steam ID: {2}\n" + "Предоставил Discord на проверку : {3}", ["SKY_SKYPE_DISCORD_ERROR"] = "Вас должны вызвать на проверку,перед тем,как отправлять данные", ["SKY_REPORT_VK_DISCORD_MAXIMUM_BLACK"] = "=====================================================\n" + "Сервер : {0}\n" + "Достигнут предел жалоб на игрока!\n" + "Игровой ник: {1}\n" + "Steam ID: {2}\n" + "Информация о подозрительном игроке:\n" + "Игрок проверялся: {3} раз(-а)\n" + "Стим: https://steamcommunity.com/profiles/{4}", ["SKY_CHECK_STOP"] = "=====================================================\n" + "Сервер : {0}\n" + "Модератор {1} окончил проверку над игроком {2} [{3}]\n", ["SKY_CHECK_STOP_CONSOLE"] = "=====================================================\n" + "Сервер : {0}\n" + "Проверка окончена над игроком {2} [{3}]\n", ["BAN_USER_VK_DISCORD"] = "=====================================================\n" + "Игрок :{0}({1})\n" + "Был забанен на сервере({2}) по причине {3} Модератором {4}\n",
            }
            ;
            lang.RegisterMessages(Lang, this);
            PrintWarning("Языковой файл загружен успешно");
        }
#endregion
#region Hooks
        private void OnServerInitialized() {
            LoadConfigVars();
            if (!ImageLibrary) {
                PrintError("Не найден ImageLibrary, плагин не будет работать!");
                return;
            }
#region Permission
            permission.RegisterPermission("SkyReportSystem.moderator", this);
            permission.RegisterPermission("SkyReportSystem.ban", this);
#endregion
#region DataLoad
            LoadData("ReportData", ref ReportData, true);
            for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) OnPlayerConnected(BasePlayer.activePlayerList[i]);
#endregion
            cmd.AddChatCommand(config.setting.comandplayer, this, nameof(ReportMenu));
            cmd.AddChatCommand(config.setting.comandmoder, this, nameof(modermenu));
            if (config.setting.servername == "Server Name") {
                PrintWarning("Вы не указали названия сервера, плагин будет работать некорректно!");
            }
            PrintError($"-----------------------------------");
            PrintError($"           SkyReportSystem         ");
            PrintError($"          Author = DezLife         ");
            PrintError($"          Version = {Version}      ");
            PrintError($"-----------------------------------");
        }
        void OnPlayerConnected(BasePlayer player) {
            if (!ReportData.ContainsKey(player.userID)) {
                ReportUser NewUser = new ReportUser() {
                    ReportCount = 0, CheckCount = 0, complaint = new List<string> {
                    }
                }
                ;
                ReportData.Add(player.userID, NewUser);
            }
            if (CheckPlayerModeration.ContainsKey(player.userID)) {
                BasePlayer players = BasePlayer.FindByID(CheckPlayerModeration[player.userID]);
                if (players != null) {
                    SendChat(players, "Вызываемый игрок покинул сервер!");
                }
                else {
                    PrintWarning("Вызываемый игрок покинул сервер!");
                }
                BanPlayer.Remove(player.userID);
            }
        }
        void Unload() {
            SaveData("ReportData", ReportData);
            for (int i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                var p = BasePlayer.activePlayerList[i];
                CuiHelper.DestroyUi(p, mainskymenu);
                CuiHelper.DestroyUi(p, ModerMenuSky);
                CuiHelper.DestroyUi(p, ModerAlert);
            }
        }
#endregion
#region Metods
        private void ReportActivity(BasePlayer reportplayer, BasePlayer target, string reason) {
            if (ReportData[target.userID].ReportCount >= config.setting.maxreportcall && target.userID != reportplayer.userID) {
                SendChatMessage("SKY_REPORT_VK_DISCORD_MAXIMUM_BLACK", config.setting.servername, target.displayName, target.userID, ReportData[target.userID].CheckCount, target.userID);
            }
            if (config.discord.UseDiscord == true && ReportData[target.userID].ReportCount >= config.setting.maxreportcall && target.userID != reportplayer.userID) {
                SendDiscordMsg("SKY_REPORT_VK_DISCORD_MAXIMUM_BLACK", config.setting.servername, target.displayName, target.userID, ReportData[target.userID].CheckCount, target.userID);
            }
            if (config.setting.uselog == true && ReportData[target.userID].ReportCount >= config.setting.maxreportcall && target.userID != reportplayer.userID) {
                LogToFile("SkyReportSystemLOG", $"На игрока <color=#816AD0>{target.displayName}</color> пожаловался <color=#816AD0>{reportplayer.displayName}</color>\n" + $"<size=12>Причина: {reason} </size>", this);
            }
        }
#endregion
#region Parent
        public static string mainskymenu = "MAIN_MENU_PLAYER";
        public static string ModerMenuSky = "MAIN_MENU_MODER";
        public static string PlayerAlert = "MAIN_MENU_alert";
        public static string ModerAlert = "MAIN_moder_alert";
#endregion
#region commands
        private void ReportMenu(BasePlayer player) {
            SkyReportPlayers(player);
        }
        [ConsoleCommand("reportplayer")]
        private void cmdreportplayer(ConsoleSystem.Arg args) {
            SkyReportPlayers(args.Player());
        }
        [ConsoleCommand("players")]
        private void cmdreportplayerConsole(ConsoleSystem.Arg args) {
            if (args.Args == null || args.Args.Length == 0 || args.Args.Length < 2) {
                PrintWarning($"Неверный синтаксис, используйте players check/uncheck StemId64");
                return;
            }
            BasePlayer player = BasePlayer.FindByID(ulong.Parse(args.Args[1]));
            if (player == null) {
                PrintWarning("Игрока нет на сервере!");
                return;
            }
            ;
            switch (args.Args[0].ToLower()) {
                case "check" : {
                    CheckPlayerModeration.Add(player.userID, player.userID);
                    PrintWarning($"Вы вызвали игрока {player.displayName} на проверку");
                    SendDiscordMsg("SKY_MODER_CHECK_PLAYER_GOING_CONSOLE", player.displayName, player.userID);
                    SendChatMessage("SKY_MODER_CHECK_PLAYER_GOING_CONSOLE", player.displayName, player.userID);
                    if (config.isafk.usecheckafk == true) {
                        timer.Repeat(config.isafk.timecheckisafk, 3, () => {
                            if (!IsPlayerAfk(player)) {
                                SendDiscordMsg("SKY_PLAYER_IS_AFK_VK_DISCORD_OK", player.displayName);
                                SendChatMessage("SKY_PLAYER_IS_AFK_VK_DISCORD_OK", player.displayName);
                                PrintWarning(String.Format(lang.GetMessage("SKY_PLAYER_IS_AFK_OK", this), player.displayName));
                            }
                            else {
                                SendDiscordMsg("SKY_PLAYER_IS_AFK_VK_DISCORD_NO", player.displayName);
                                SendChatMessage("SKY_PLAYER_IS_AFK_VK_DISCORD_NO", player.displayName);
                                PrintWarning(String.Format(lang.GetMessage("SKY_PLAYER_IS_AFK_NO", this), player.displayName));
                            }
                        }
                        );
                    }
                    AlertPlayerCheck(player, player);
                    break;
                }
                case "uncheck" : {
                    if (CheckPlayerModeration.ContainsKey(player.userID)) {
                        CheckPlayerModeration.Remove(player.userID);
                        CuiHelper.DestroyUi(player, PlayerAlert);
                        PrintWarning(String.Format(lang.GetMessage("SKY_MODERATOR_STOPID_CHEKING", this), player.displayName));
                        SendDiscordMsg("SKY_CHECK_STOP_CONSOLE", config.setting.servername, player.displayName, player.userID);
                        SendChatMessage("SKY_CHECK_STOP_CONSOLE", config.setting.servername, player.displayName, player.userID);
                        ReportData[player.userID].ReportCount = 0;
                        ReportData[player.userID].CheckCount++;
                    }
                    else {
                        PrintWarning("Этого игрока не вызывали на проверку!");
                    }
                    break;
                }
            }
        }
        private void modermenu(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, "SkyReportSystem.moderator") || player.IsAdmin) {
                SkyModerMenu(player);
            }
            else {
                SendChat(player, String.Format(lang.GetMessage("SKY_PLAYER_PERMISSION_IS_FOUND", this)));
            }
        }
        [ConsoleCommand("moderreport")]
        private void cmdreportmenu(ConsoleSystem.Arg args) {
            if (permission.UserHasPermission(args.Player().UserIDString, "SkyReportSystem.moderator") || args.Player().IsAdmin) {
                SkyModerMenu(args.Player());
            }
            else {
                SendChat(args.Player(), String.Format(lang.GetMessage("SKY_PLAYER_PERMISSION_IS_FOUND", this)));
            }
        }
        [ConsoleCommand("closeui")]
        void closeuimain(ConsoleSystem.Arg args) {
            BasePlayer player = args.Player();
            CuiHelper.DestroyUi(player, mainskymenu);
            CuiHelper.DestroyUi(player, "buttoncap");
            CuiHelper.DestroyUi(player, ModerMenuSky);
            CuiHelper.DestroyUi(player, PlayerAlert);
            CuiHelper.DestroyUi(player, ModerAlert);
        }
        [ChatCommand("discord")]
        void discordaccess(BasePlayer player, string cmd, string[] Args) {
            if (Args == null || Args.Length == 0) {
                SendChat(player, lang.GetMessage("SKY_PLAYER_NOTHING_MESSAGE_SKYPE_DISCORD", this));
                return;
            }
            if (CheckPlayerModeration.ContainsKey(player.userID)) {
                string Discord = "";
                foreach (var arg in Args) {
                    Discord += " " + arg;
                }
                SendChatMessage("SKY_DISCORD_MESSAGE", config.setting.servername, player.displayName, player.UserIDString, Discord);
                SendDiscordMsg("SKY_DISCORD_MESSAGE", config.setting.servername, player.displayName, player.UserIDString, Discord);
                BasePlayer moderator = FindPlayer(CheckPlayerModeration[player.userID].ToString());
                if (player == moderator) {
                }
                else {
                    SendChat(moderator, String.Format(lang.GetMessage("SKY_DISCORD_MESSAGE", this), config.setting.servername, player.displayName, player.UserIDString, Discord));
                    SendChat(player, String.Format(lang.GetMessage("SKY_MODER_CHECK_P_DISCORD", this), Discord));
                }
            }
            else {
                SendChat(player, lang.GetMessage("SKY_SKYPE_DISCORD_ERROR", this));
            }
        }
        [ConsoleCommand("openinfoplayer")]
        void consolego(ConsoleSystem.Arg args) {
            if (!args.HasArgs(2)) return;
            BasePlayer targetPlayer = BasePlayer.FindByID(ulong.Parse(args.Args[1]));
            BasePlayer player = args.Player();
            bool CanUse = permission.UserHasPermission(player.UserIDString, "SkyReportSystem.moderator") || player.IsAdmin;
            if (!CanUse) return;
            if (args.Args[0].ToLower() == "chooseplayers") {
                if (CanUse) {
                    playerinfomenu(player, args.Args[1], targetPlayer);
                }
                else {
                    SendChat(player, String.Format(lang.GetMessage("SKY_PLAYER_PERMISSION_IS_FOUND", this)));
                }
            }
            if (args.Args[0].ToLower() == "checkinplayer") {
                if (CheckPlayerModeration.ContainsKey(targetPlayer.userID)) {
                    SendChat(player, String.Format(lang.GetMessage("SKY_NO_CHECK_MODERATION_OR_CHECKING", this), targetPlayer.displayName));
                }
                else {
                    if (CanUse) {
                        CheckPlayerModeration.Add(targetPlayer.userID, args.Player().userID);
                        SendChat(player, String.Format(lang.GetMessage("SKY_ACESS_CHECKING", this), targetPlayer.displayName));
                        SendDiscordMsg("SKY_MODER_CHECK_PLAYER_GOING", player.displayName, targetPlayer.displayName, targetPlayer.userID);
                        SendChatMessage("SKY_MODER_CHECK_PLAYER_GOING", player.displayName, targetPlayer.displayName, targetPlayer.userID);
                        if (config.isafk.usecheckafk == true) {
                            timer.Repeat(config.isafk.timecheckisafk, 3, () => {
                                if (!IsPlayerAfk(targetPlayer)) {
                                    SendDiscordMsg("SKY_PLAYER_IS_AFK_VK_DISCORD_OK", targetPlayer.displayName);
                                    SendChatMessage("SKY_PLAYER_IS_AFK_VK_DISCORD_OK", targetPlayer.displayName);
                                    SendChat(args.Player(), String.Format(lang.GetMessage("SKY_PLAYER_IS_AFK_OK", this), targetPlayer.displayName));
                                }
                                else {
                                    SendDiscordMsg("SKY_PLAYER_IS_AFK_VK_DISCORD_NO", targetPlayer.displayName);
                                    SendChatMessage("SKY_PLAYER_IS_AFK_VK_DISCORD_NO", targetPlayer.displayName);
                                    SendChat(args.Player(), String.Format(lang.GetMessage("SKY_PLAYER_IS_AFK_NO", this), targetPlayer.displayName));
                                }
                            }
                            );
                        }
                        AlertPlayerCheck(BasePlayer.FindByID(targetPlayer.userID), player);
                        CuiHelper.DestroyUi(player, ModerMenuSky);
                    }
                    else {
                        SendChat(player, String.Format(lang.GetMessage("SKY_PLAYER_PERMISSION_IS_FOUND", this)));
                    }
                }
            }
            if (args.Args[0] == "stopcheckingplayers") {
                if (CanUse) {
                    CheckPlayerModeration.Remove(targetPlayer.userID);
                    CuiHelper.DestroyUi(targetPlayer, PlayerAlert);
                    CuiHelper.DestroyUi(player, ModerMenuSky);
                    SendChat(player, String.Format(lang.GetMessage("SKY_MODERATOR_STOPID_CHEKING", this), targetPlayer.displayName));
                    SendChat(targetPlayer, String.Format(lang.GetMessage("SKY_PLAYER_STOPID_CHEKING", this), args.Player().displayName));
                    SendDiscordMsg("SKY_CHECK_STOP", config.setting.servername, args.Player().displayName, targetPlayer.displayName, targetPlayer.userID);
                    SendChatMessage("SKY_CHECK_STOP", config.setting.servername, args.Player().displayName, targetPlayer.displayName, targetPlayer.userID);
                    ReportData[targetPlayer.userID].ReportCount = 0;
                    ReportData[targetPlayer.userID].CheckCount++;
                }
                else {
                    SendChat(player, String.Format(lang.GetMessage("SKY_PLAYER_PERMISSION_IS_FOUND", this)));
                }
            }
            if (args.Args[0] == "moderatorcheckbanreason") {
                PlayerBanIPlayerModeration(player, BasePlayer.FindByID(targetPlayer.userID));
            }
        }
        [ConsoleCommand("Banplayers")]
        void ReportSystemBanReason(ConsoleSystem.Arg arg) {
            rust.RunClientCommand(arg.Player(), String.Format(config.banReasons[Convert.ToInt32(arg.Args[1])].BanReasonCommand, arg.Args[0]));
            CuiHelper.DestroyUi(arg.Player(), ModerMenuSky);
            BasePlayer player = BasePlayer.Find(arg.Args[0]);
            BasePlayer moderator = arg.Player();
            ReportData[player.userID].ReportCount = 0;
            string BanReason = $"{String.Format(config.banReasons[Convert.ToInt32(arg.Args[1])].BanReason, arg.Args[0])}";
            SendChatMessage("BAN_USER_VK_DISCORD", player.displayName, player.UserIDString, config.setting.servername, BanReason, moderator.displayName);
            SendDiscordMsg("BAN_USER_VK_DISCORD", player.displayName, player.UserIDString, config.setting.servername, BanReason, moderator.displayName);
            BanPlayer.Add(player.userID);
        }
        public List<ulong> BanPlayer = new List<ulong>();
#region MetodsCooldown
        public Dictionary<ulong, int> CooldownPC = new Dictionary<ulong, int>();
        static DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        static double CurrentTime() => DateTime.UtcNow.Subtract(epoch).TotalSeconds;
        void Metods_GiveCooldown(ulong ID, int cooldown) {
            CooldownPC[ID] = cooldown + (int)CurrentTime();
        }
        bool Metods_GetCooldown(ulong ID) {
            if (!CooldownPC.ContainsKey(ID) || Math.Max(0, CooldownPC[ID]) < 1 || CooldownPC[ID] <= (int)CurrentTime()) return false;
            else return true;
        }
#endregion
        [ConsoleCommand("SkyReportGo")]
        private void PlayerReportSystem(ConsoleSystem.Arg args) {
            string ReasonReport = "";
            if (args.Args.Length == 0) {
                SkyReportPlayers(args.Player());
                return;
            }
            if (args.Args[0] == "chooseplayers") {
                SkyReportPlayers(args.Player(), args.Args[1]);
                return;
            }
            if (args.Args[0].Length != 17) {
                for (int t = 0; t < 44; t++) {
                    CuiHelper.DestroyUi(args.Player(), "Button" + $".ChoosePlayer.{t}");
                    CuiHelper.DestroyUi(args.Player(), "Button" + $".ChoosePlayer.{t}.Text");
                }
                SkyReportPlayers(args.Player(), args.Args[0]);
                return;
            }
            if (args.Args.Length >= 2) {
                int ReasonIndex = int.Parse(args.Args[1]);
                ReasonReport = config.Reasonsforcomplaint[ReasonIndex];
                BasePlayer target = BasePlayer.Find(args.Args[0]);
                ReportActivity(args.Player(), target, ReasonReport);
                if (args.Player() != target) {
                    if (Metods_GetCooldown(args.Player().userID) == true) {
                        SendChat(args.Player(), lang.GetMessage("SKY_COLDOWN", this));
                        return;
                    }
                    ReportData[target.userID].ReportCount++;
                    ReportData[target.userID].complaint.Insert(0, ReasonReport);
                    SendChat(args.Player(), String.Format(lang.GetMessage("SKY_REPORT_REPORTING", this), target.displayName));
                    SendDiscordMsg("SKY_REPORT_REPORTING_VK_DISCORD", config.setting.servername, args.Player().displayName, target.displayName, target.userID, ReasonReport);
                    SendChatMessage("SKY_REPORT_REPORTING_VK_DISCORD", config.setting.servername, args.Player().displayName, target.displayName, target.userID, ReasonReport);
                    Metods_GiveCooldown(args.Player().userID, config.setting.Cooldown);
                    if (ReportData[target.userID].ReportCount > config.setting.maxreportcall) {
                        if (config.setting.usemodercall == true) {
                            for (int u = 0; u < BasePlayer.activePlayerList.Count; u++) {
                                BasePlayer player = BasePlayer.activePlayerList[u];
                                if (permission.UserHasPermission(player.UserIDString, "SkyReportSystem.moderator")) {
                                    SendChat(player, String.Format(lang.GetMessage("SKY_REPORT_MAXIMUM_REPORT", this), target, ReportData[target.userID].ReportCount));
                                    ModerAlertCheck(player, target);
                                    timer.Once(5f, () => {
                                        CuiHelper.DestroyUi(player, ModerAlert);
                                    }
                                    );
                                }
                            }
                        }
                        if (config.setting.uselog == true) {
                            LogToFile("SkyReportSystemLOG", $"Игрок {target} превысил максимальное количество репортов! [{ReportData[target.userID].ReportCount}]", this);
                        }
                        return;
                    }
                }
                else {
                    SendChat(args.Player(), lang.GetMessage("SKY_ERROR_PLAYER", this));
                }
                return;
            }
        }
#endregion
#region cui
        private void PlayerBanIPlayerModeration(BasePlayer player, BasePlayer targetinfoban) {
            CuiHelper.DestroyUi(player, "BanMunuReason");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.168753 0.1509259", AnchorMax = "0.6302084 0.3185185"
                }
                , Image = {
                    FadeIn = 1f, Color = HexToCuiColor("#00000064")
                }
            }
            , "InfoPlayerSky", "BanMunuReason");
#region BanReasonPanel
            for (int U = 0, x = 0, y = 0, i = 0; U < config.banReasons.Count; U++) {
                var reason = config.banReasons[U];
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = $"{0.005902235 + (x * 0.33)} {0.6906075 - (y * 0.31)}", AnchorMax = $"{0.3318241 + (x * 0.33)} {0.9613256 - (y * 0.31)}"
                    }
                    , Button = {
                        Command = $"Banplayers {targetinfoban.userID} {i}", Color = HexToCuiColor("#000000B2")
                    }
                    , Text = {
                        Text = reason.BanReason, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 16
                    }
                }
                , "BanMunuReason");
                x++;
                i++;
                if (x == 3) {
                    x = 0;
                    y++;
                }
            }
#endregion
            CuiHelper.AddUi(player, container);
        }
        private void ModerAlertCheck(BasePlayer player, BasePlayer target) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, ModerAlert);
            container.Add(new CuiPanel {
                FadeOut = 0.1f, RectTransform = {
                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "1 -150", OffsetMax = "230 -60"
                }
                , Image = {
                    Color = "0 0 0 0", FadeIn = 0.3f
                }
            }
            , "Overlay", ModerAlert);
            container.Add(new CuiElement {
                Parent = ModerAlert, Name = "AlerModer", FadeOut = 0.1f, Components = {
                    new CuiImageComponent {
                        Material = "assets/content/ui/uibackgroundblur.mat", Color = "0 0 0 0.3", Sprite = "assets/content/ui/ui.background.transparent.radial.psd", FadeIn = 0.3f
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            container.Add(new CuiLabel {
                FadeOut = 0.1f, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Text = {
                    Text = $"Игрок: {target.displayName}\nПревысил максимальное количевство жалоб! ", FontSize = 18, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, FadeIn = 0.3f
                }
            }
            , "AlerModer");
            CuiHelper.AddUi(player, container);
        }
        private void AlertPlayerCheck(BasePlayer player, BasePlayer moderinformation) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, PlayerAlert);
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-200 150", OffsetMax = "180 300"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , "Overlay", PlayerAlert);
            container.Add(new CuiElement {
                Parent = PlayerAlert, Name = "MainAlert", Components = {
                    new CuiImageComponent {
                        Material = "assets/content/ui/uibackgroundblur.mat", Color = "0 0 0 0.5", Sprite = "assets/content/ui/ui.background.transparent.radial.psd"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0.7644448", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = "Вас вызвали на проверку", FontSize = 19, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , "MainAlert");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0.6311106", AnchorMax = "1 0.7422219", OffsetMax = "0 0.764444"
                }
                , Text = {
                    Text = "Вы обязаны предоставить Skype или Discord!", FontSize = 15, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , "MainAlert");
            if (player.userID == moderinformation.userID) {
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0.0684208 0.05777803", AnchorMax = "0.9087719 0.6266667", OffsetMax = "0 0"
                    }
                    , Text = {
                        Text = $"Kоманды :\n<color=orange>/skype</color> \n<color=orange>/discord</color>\nВызвавший модератор : НЕИЗВЕСТНО", FontSize = 17, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                    }
                }
                , "MainAlert");
            }
            else {
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0.0684208 0.057778234", AnchorMax = "0.9087719 0.6266667", OffsetMax = "0 0"
                    }
                    , Text = {
                        Text = $"Kоманды :\n<color=orange>/skype</color> \n<color=orange>/discord</color>\nВызвавший модератор : {moderinformation.displayName}", FontSize = 17, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                    }
                }
                , "MainAlert");
            }
            CuiHelper.AddUi(player, container);
        }
        private void SkyModerMenu(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, ModerMenuSky);
            container.Add(new CuiPanel {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , "Hud", ModerMenuSky);
            container.Add(new CuiElement {
                Parent = ModerMenuSky, Components = {
                    new CuiImageComponent {
                        Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", Color = HexToCuiColor("#00000069")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "-100 -100", AnchorMax = "100 100"
                }
                , Button = {
                    Close = ModerMenuSky, Color = "0 0 0 0"
                }
                , Text = {
                    Text = ""
                }
            }
            , ModerMenuSky);
#region title
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.2796874 0.9157416", AnchorMax = "0.7052073 0.968505"
                }
                , Image = {
                    Color = HexToCuiColor("#00000064")
                }
            }
            , ModerMenuSky, "TitlePanel");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = "Меню Модератора!", FontSize = 18, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , "TitlePanel");
#endregion
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.2302083 0.2972222", AnchorMax = "0.7557291 0.8268524"
                }
                , Image = {
                    Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat", Color = HexToCuiColor("#423A3898")
                }
            }
            , ModerMenuSky, "MainPanelModer");
            container.Add(new CuiElement {
                Name = "playerlisd", Parent = "MainPanelModer", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            );
#region PlayerList
            for (int x = 0, y = 0, i = 0; i < BasePlayer.activePlayerList.Count; i++) {
                var mplayer = BasePlayer.activePlayerList[i];
                if (mplayer == null || !ReportData.ContainsKey(mplayer.userID) || mplayer.userID == player.userID) continue;
                if (ReportData[mplayer.userID].ReportCount >= config.setting.maxreportcall) {
                    container.Add(new CuiButton {
                        RectTransform = {
                            AnchorMin = $"{0.01333263 + (x * 0.245)} {0.9033457 - (y * 0.090)}", AnchorMax = $"{0.252307 + (x * 0.245)} {0.9758366 - (y * 0.090)}"
                        }
                        , Button = {
                            Command = $"openinfoplayer chooseplayers {mplayer.userID}", Color = HexToCuiColor("#000000B2")
                        }
                        , Text = {
                            Text = $"({mplayer.displayName})" + " [" + ReportData[mplayer.userID].ReportCount + "]", Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 16
                        }
                    }
                    , "playerlisd", "playerlisd" + $".Player.{i}.Text");
                    x++;
                    if (x == 4) {
                        x = 0;
                        y++;
                        if (y == 11) {
                            break;
                        }
                    }
                }
            }
#endregion
            CuiHelper.AddUi(player, container);
        }
        private void playerinfomenu(BasePlayer player, string target, BasePlayer targetinfocheck) {
#region SupportMetods
            string ImageAvatar = GetImage(target, 0);
#endregion
            BasePlayer targets = BasePlayer.FindByID(ulong.Parse(target));
            CuiElementContainer container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "MainPanelModer");
            container.Add(new CuiPanel {
                FadeOut = 0.5f, CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1"
                }
                , Image = {
                    FadeIn = 0.5f, Color = "0 0 0 0"
                }
                ,
            }
            , ModerMenuSky, "InfoPlayerSky");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "-100 -100", AnchorMax = "100 100"
                }
                , Button = {
                    Close = ModerMenuSky, Color = "0 0 0 0"
                }
                , Text = {
                    Text = ""
                }
            }
            , "InfoPlayerSky");
            container.Add(new CuiElement {
                Parent = "InfoPlayerSky", Components = {
                    new CuiRawImageComponent {
                        Png = ImageAvatar, Url = null , Sprite = "assets/content/textures/generic/fulltransparent.tga"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0.16875 0.5842593", AnchorMax = "0.3151042 0.8796296"
                    }
                    ,
                }
            }
            );
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.3229166 0.8203703", AnchorMax = "0.5739583 0.8740742"
                }
                , Text = {
                    Text = $"{targets.displayName} ({targets.UserIDString})", FontSize = 22, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleLeft
                }
            }
            , "InfoPlayerSky");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.3203125 0.7574074", AnchorMax = "0.5020834 0.8037037"
                }
                , Text = {
                    Text = $"Количевство репортов: {ReportData[targetinfocheck.userID].ReportCount}", FontSize = 15, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleLeft
                }
            }
            , "InfoPlayerSky");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.3203126 0.7101846", AnchorMax = "0.4828126 0.7564811"
                }
                , Text = {
                    Text = $"Количевство проверок: {ReportData[targetinfocheck.userID].CheckCount}", FontSize = 15, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleLeft
                }
            }
            , "InfoPlayerSky");
            container.Add(new CuiPanel {
                FadeOut = 0.5f, CursorEnabled = true, RectTransform = {
                    AnchorMin = "0.6703124 0.462963", AnchorMax = "0.8505208 0.8925924"
                }
                , Image = {
                    FadeIn = 0.5f, Color = HexToCuiColor("#0000006E"),
                }
                ,
            }
            , "InfoPlayerSky", "captain");
            container.Add(new CuiElement {
                Parent = "captain", Components = {
                    new CuiImageComponent {
                        Color = HexToCuiColor("#FFFFFFFF")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0.886463", AnchorMax = "1 0.8886465"
                    }
                }
            }
            );
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.03468214 0.8995634", AnchorMax = "0.9624277 0.9825329"
                }
                , Text = {
                    Text = "Последнии жалобы", FontSize = 16, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                }
            }
            , "captain");
            int i = 0;
            for (int j = 0; j < ReportData[targets.userID].complaint.Count; j++) {
                var captainlist = ReportData[targets.userID].complaint[j];
                if (i <= 7) {
                    container.Add(new CuiElement {
                        Parent = "captain", Name = "listcap", Components = {
                            new CuiImageComponent {
                                Color = HexToCuiColor("#FF7575BB"), Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = $"0.0231214 {0.7758622 - (i * 0.107)}", AnchorMax = $"0.9739881 {0.8668124 - (i * 0.107)}"
                            }
                        }
                    }
                    );
                    container.Add(new CuiLabel {
                        RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                        , Text = {
                            Text = captainlist, FontSize = 17, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter
                        }
                    }
                    , "listcap");
                    i++;
                }
                else {
                    break;
                }
            }
            if (!CheckPlayerModeration.ContainsKey(targetinfocheck.userID)) {
                CuiHelper.DestroyUi(player, "StopPlayerBtn");
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.16875 0.5018519", Ancho
// ... [Code preview truncated due to length. Full source in attached file] ...

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

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

Сверху