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

FREE IQReportSystem : 0.2.7 0.2.7

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Libraries.Covalence;
using ConVar;
using Newtonsoft.Json.Linq;
using Oxide.Core.Libraries;
using System.Linq;
using Oxide.Core.Plugins;
using System.Text;
namespace Oxide.Plugins {
    [Info("IQReportSystem", "Menevt", "0.2.7")]
    class IQReportSystem : RustPlugin {
        /// <summary>
        /// Обновление 0.2.4 :
        /// - Добавил возможность записывать Demo игроков во время скрытой проверки афк и во время проверке (Если у вас их нет, значит у вас нет доступа к данной папке)
        /// - Изменен метод форматирования сообщения из Lang
        /// - Добавлена поддержка чекера ozProtect
        /// - Поправлено растягивание UI при извращении с разрешением экрана
        /// - Корректировка UI
        /// - Добавлена поддержка будущего IQModalMenu ( Больше новостей на счёт моих наработках и IQModalMenu в моей группе вк - https://vk.com/mercurydev )
        /// Обновление 0.2.5
        /// - Поправлен UI
        /// - Добавлена проверка синтаксиса на консольную команду call
        /// - Добавлена возможность вызыать по нику и стимИд через команду call
        /// /// </summary>
#region Reference
        [PluginReference]
        Plugin GameWerAC, ImageLibrary, MultiFighting, IQChat, Friends, IQPersonal, IQFakeActive, NoEscape, IQModalMenu, SLMenu;
#region Image Library
        public string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary?.Call("GetImage", shortname, skin);
        public bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
#endregion
#region IQPersonal
        public void SetCheck(BasePlayer player) => IQPersonal?.CallHook("API_SET_CHECK", player.userID);
        public void SetBans(BasePlayer player) => IQPersonal?.CallHook("API_SET_BANS", player.userID);
        public void SetScore(ulong UserID, int Amount) => IQPersonal?.CallHook("API_SET_SCORE", UserID, Amount);
        public void RemoveScore(ulong UserID, int Amount) => IQPersonal?.CallHook("API_REMOVE_SCORE", UserID, Amount);
#endregion
#region NoEcape
        public bool IsRaidBlocked(BasePlayer player) {
            if (NoEscape) return (bool)NoEscape?.Call("IsRaidBlocked", player);
            else return false;
        }
#endregion
#region IQFakeActive
        public bool IsFake(ulong userID) {
            if (!IQFakeActive) return false;
            if (!config.IQFakeActiveSettings.UseIQFakeActive) return false;
            return (bool)IQFakeActive?.Call("IsFake", userID);
        }
        public string FindFakeName(ulong userID) => (string)IQFakeActive?.Call("FindFakeName", userID);
        public void StartSysncFakeActive() => IQFakeActive?.Call("SyncReserved");
        void SyncReservedFinish(string JSON) {
            if (!config.IQFakeActiveSettings.UseIQFakeActive) return;
            List<FakePlayer> ContentDeserialize = JsonConvert.DeserializeObject<List<FakePlayer>>(JSON);
            PlayerBases = ContentDeserialize;
            PrintWarning("IQReportSystem - успешно синхронизирована с IQFakeActive");
            PrintWarning("=============SYNC==================");
        }
        public List<FakePlayer> PlayerBases = new List<FakePlayer>();
        public class FakePlayer {
            public ulong UserID;
            public string DisplayName;
            public string IQChatPreifx;
            public string IQChatColorChat;
            public string IQChatColorNick;
        }
#endregion
#region IQModalMenu
        bool IQModalMenuConnected() => (bool)IQModalMenu.Call("API_Connected_Plugin", this, config.Setting.IQModalMenuSettings.Avatar, config.Setting.IQModalMenuSettings.Sprite, "iq.report.modal");
        bool IQModalMenuDisconnected() => (bool)IQModalMenu.Call("API_Disconnected_Plugin", this);
        void IQModalSend(BasePlayer player) => IQModalMenu.Call("API_Send_Menu", player, this);
#endregion
#endregion
#region Vars
#region Permission
        string PermissionModeration = "iqreportsystem.moderation";
        string PermissionAdmin = "iqreportsystem.admin";
#endregion
#region Lists
        public Dictionary<ulong, int> CooldownPC = new Dictionary<ulong, int>();
        public Dictionary<ulong, PlayerSaveCheckClass> PlayerSaveCheck = new Dictionary<ulong, PlayerSaveCheckClass>();
        public class PlayerSaveCheckClass {
            public string Discord;
            public string NickName;
            public string StatusNetwork;
            public ulong ModeratorID;
        }
#endregion
#region JSON
        private class Response {
            public List<string> last_ip;
            public string last_nick;
            public List<ulong> another_accs;
            public List<last_checks> last_check;
            public class last_checks {
                public ulong moderSteamID;
                public string serverName;
                public int time;
            }
            public List<RustCCBans> bans;
            public class RustCCBans {
                public int banID;
                public string reason;
                public string serverName;
                public int OVHserverID;
                public int banDate;
            }
        }
#endregion
#endregion
#region Configuration
        private static Configuration config = new Configuration();
        public class Configuration {
            [JsonProperty("Основные настройки")]
            public Settings Setting = new Settings();
            [JsonProperty("Причины репорта")]
            public List<string> ReasonReport = new List<string>();
            [JsonProperty("Причины блокировки")]
            public List<BanReason> ReasonBan = new List<BanReason>();
            [JsonProperty("Настройки RustCheatCheck(Будет при проверке выдавать доступ в чекер и выводить информацию модератору)")]
            public RCCSettings RCCSetting = new RCCSettings();
            [JsonProperty("Настройки ozProtect, поддержка чекера ozProtect")]
            public ozProtectSettings ozProtectSetting = new ozProtectSettings();
            [JsonProperty("Настройка репутации для проверяющих")]
            public RaitingSettings RaitingSetting = new RaitingSettings();
            [JsonProperty("Настройка совместной работы с IQFakeActive")]
            public IQFakeActive IQFakeActiveSettings = new IQFakeActive();
            internal class BanReason {
                [JsonProperty("Название")]
                public string DisplayName;
                [JsonProperty("Команда")]
                public string Command;
            }
            internal class ozProtectSettings {
                [JsonProperty("Включить поддержку ozProtect чекера")]
                public bool ozPUse;
                [JsonProperty("Ключ от ozProtect")]
                public string Key;
            }
            internal class RCCSettings {
                [JsonProperty("Включить поддержку RCC")]
                public bool RCCUse;
                [JsonProperty("Ключ от RCC")]
                public string Key;
            }
            internal class RaitingSettings {
                [JsonProperty("Сколько репутации снимать за 1-2 звезды(IQPersonal)")]
                public int RemoveAmountOneTwo;
                [JsonProperty("Сколько репутации давать за 3-4 звезды(IQPersonal)")]
                public int GiveAmountThreeFour;
                [JsonProperty("Сколько репутации давать за 5 звезд(IQPersonal)")]
                public int GiveAmountFive;
            }
            internal class IQFakeActive {
                [JsonProperty("Использовать IQFakeActive")]
                public bool UseIQFakeActive;
            }
            internal class Settings {
                [JsonProperty("Настройка IQModalMenu")]
                public IQModalMenu IQModalMenuSettings = new IQModalMenu();
                [JsonProperty("Настройки IQChat")]
                public ChatSettings ChatSetting = new ChatSettings();
                [JsonProperty("Настройки интерфейса")]
                public InterfaceSetting Interface = new InterfaceSetting();
                [JsonProperty("NoEscape: Перенести проверку игрока если у него есть рейдблок")]
                public bool NoEscapeCheckStop;
                [JsonProperty("Включение проверки на AFK(true - включена/false - выключена)(Если будет выключена - игроку сразу придет уведомление о проверки)")]
                public bool AfkUse;
                [JsonProperty("Включение записывания экрана игрока в demos сервера?")]
                public bool DemosActivate;
                [JsonProperty("Включить/отключить общее оповоещение для всех игроков(если игрока вызвали на проверку или вынесли вердикт,сообщение будет видно всем)")]
                public bool UseAlertUsers;
                [JsonProperty("Включить/отключить оповещение о максимальном кол-во репортов")]
                public bool MaxReportAlert;
                [JsonProperty("Максимальное количество репортов")]
                public int MaxReport;
                [JsonProperty("Перезарядка для отправки репорта(секунды)")]
                public int CooldownTime;
                [JsonProperty("Запретить друзьям репортить друг друга")]
                public bool FriendNoReport;
                [JsonProperty("Включить логирование в беседу ВК")]
                public bool VKMessage;
                [JsonProperty("Включить логирование в Discord")]
                public bool DiscrodMessage;
                [JsonProperty("Webhooks для дискорда")]
                public string WebHook;
                [JsonProperty("Настройки ВК")]
                public VKSetting VKSettings = new VKSetting();
                internal class ChatSettings {
                    [JsonProperty("IQChat : Кастомный префикс в чате")]
                    public string CustomPrefix;
                    [JsonProperty("IQChat : Кастомный аватар в чате(Если требуется)")]
                    public string CustomAvatar;
                }
                internal class VKSetting {
                    [JsonProperty("Токен от группы ВК(От группы будут идти сообщения в беседу.Вам нужно добавить свою группу в беседу!)")]
                    public string Token;
                    [JsonProperty("ID беседы для группы")]
                    public string ChatID;
                }
                internal class IQModalMenu {
                    [JsonProperty("Спрайт на кнопку в модальном меню")]
                    public string Sprite;
                    [JsonProperty("Ссылка на кнопку в модальном меню(имеет приоритет над спрайтом)")]
                    public string Avatar;
                    [JsonProperty("HEX : Для задней панели")]
                    public string HexPanel;
                    [JsonProperty("HEX : Для боковой панели")]
                    public string HexRightPanel;
                    [JsonProperty("Цвет текста в плагине")]
                    public string HexLabels;
                    [JsonProperty("Цвет кнопок боковой панели")]
                    public string HexButtonRightMenu;
                    [JsonProperty("Цвет кнопки у игрока для перехода к действию")]
                    public string HexPlayerButton;
                    [JsonProperty("Sprite кнопки у игрока для преехода к действию")]
                    public string SpritePlayerButton;
                    [JsonProperty("Спрайт для рейтинга(звезды)")]
                    public string SpriteRaiting;
                    [JsonProperty("Спрайт для кнопки жалоб в панели модератора")]
                    public string SpriteReportModeration;
                    [JsonProperty("Спрайт для иконки жалоб")]
                    public string SpriteReport;
                    [JsonProperty("HEX : Блюра для меню")]
                    public string HexBlurMute;
                }
                internal class InterfaceSetting {
                    [JsonProperty("Настройка интерфейса для отправки жалобы")]
                    public ReasonInterfaceSetting ReasonInterface = new ReasonInterfaceSetting();
                    [JsonProperty("Настройка интерфейса для уведомления")]
                    public AlertInterfaceSettings AlertInterface = new AlertInterfaceSettings();
                    [JsonProperty("Настройка интерфейса для мини-панели модератора")]
                    public ModeratorPanelInterfaceSettings ModderatorPanel = new ModeratorPanelInterfaceSettings();
                    [JsonProperty("Настройка интерфейса для рейтинга")]
                    public RaitingInterfaceSettings RaitingInterface = new RaitingInterfaceSettings();
                    [JsonProperty("Sprite для рейтинга(звезды)")]
                    public string SpriteRaiting;
                    [JsonProperty("Sprite для кнопки жалоб в панели модератора")]
                    public string SpriteReportModeration;
                    [JsonProperty("Sprite для иконки жалоб")]
                    public string SpriteReport;
                    [JsonProperty("Цвет текста в плагине")]
                    public string HexLabels;
                    [JsonProperty("Цвет боковой панели")]
                    public string HexRightMenu;
                    [JsonProperty("Цвет кнопок боковой панели")]
                    public string HexButtonRightMenu;
                    [JsonProperty("Цвет основной панели")]
                    public string HexMainPanel;
                    [JsonProperty("Цвет панели поиска и заднего фона игроков")]
                    public string HexSearchPanel;
                    [JsonProperty("Цвет кнопки у игрока для перехода к действию")]
                    public string HexPlayerButton;
                    [JsonProperty("Sprite кнопки у игрока для преехода к действию")]
                    public string SpritePlayerButton;
                    internal class ReasonInterfaceSetting {
                        [JsonProperty("Цвет основной панели")]
                        public string HexMain;
                        [JsonProperty("Цвет панели с заголовком")]
                        public string HexTitlePanel;
                        [JsonProperty("Цвет жалоб")]
                        public string HexButton;
                        [JsonProperty("Цвет текста с жалобами")]
                        public string HexLabel;
                        [JsonProperty("Sprite кнопки закрыть")]
                        public string SpriteClose;
                        [JsonProperty("Sprite панели с заголовком")]
                        public string SpriteTitlePanel;
                        [JsonProperty("Цвет кнопки закрыть")]
                        public string HexClose;
                    }
                    internal class AlertInterfaceSettings {
                        [JsonProperty("Цвет основной панели")]
                        public string HexMain;
                        [JsonProperty("Цвет заголовка и полоски")]
                        public string HexTitle;
                        [JsonProperty("Цвет текста")]
                        public string HexLabel;
                    }
                    internal class ModeratorPanelInterfaceSettings {
                        [JsonProperty("Цвет основной панели")]
                        public string HexMain;
                        [JsonProperty("Цвет панели с заголовком")]
                        public string HexTitlePanel;
                        [JsonProperty("Sprite панели с заголовком")]
                        public string SpriteTitlePanel;
                        [JsonProperty("Цвет текста")]
                        public string HexLabel;
                        [JsonProperty("Цвет кнопки вердикт и задний фон причин")]
                        public string HexBanButton;
                        [JsonProperty("Цвет кнопки окончания проверки")]
                        public string HexStopButton;
                    }
                    internal class RaitingInterfaceSettings {
                        [JsonProperty("Цвет основной панели")]
                        public string HexMain;
                        [JsonProperty("Цвет панели с заголовком")]
                        public string HexTitlePanel;
                        [JsonProperty("Sprite панели с заголовком")]
                        public string SpriteTitlePanel;
                        [JsonProperty("Цвет текста")]
                        public string HexLabel;
                        [JsonProperty("Цвет иконок с рейтингом")]
                        public string HexRaitingButton;
                        [JsonProperty("Sprite рейтинга")]
                        public string SpriteRaiting;
                    }
                }
            }
            public static Configuration GetNewConfiguration() {
                return new Configuration {
                    Setting = new Settings {
                        AfkUse = true, DemosActivate = false, NoEscapeCheckStop = false, UseAlertUsers = true, FriendNoReport = false, MaxReport = 3, MaxReportAlert = true, CooldownTime = 600, VKMessage = true, DiscrodMessage = false, WebHook = "", ChatSetting = new Settings.ChatSettings {
                            CustomAvatar = "", CustomPrefix = ""
                        }
                        , VKSettings = new Settings.VKSetting {
                            Token = "", ChatID = ""
                        }
                        , IQModalMenuSettings = new Settings.IQModalMenu {
                            Sprite = "assets/icons/broadcast.png", Avatar = "", HexPanel = "#3B3A2EFF", HexRightPanel = "#1c211b", HexLabels = "#efedee", HexButtonRightMenu = "#252a24", SpriteRaiting = "assets/icons/favourite_servers.png", SpriteReportModeration = "assets/icons/subtract.png", SpriteReport = "assets/icons/examine.png", SpritePlayerButton = "assets/icons/vote_up.png", HexPlayerButton = "#45542BFF", HexBlurMute = "#3B3A2E71",
                        }
                        , Interface = new Settings.InterfaceSetting {
                            SpriteRaiting = "assets/icons/favourite_servers.png", SpriteReportModeration = "assets/icons/subtract.png", SpriteReport = "assets/icons/examine.png", SpritePlayerButton = "assets/icons/vote_up.png", HexPlayerButton = "#45542BFF", HexLabels = "#DAD1C7FF", HexButtonRightMenu = "#802A2AFF", HexMainPanel = "#21211AF2", HexRightMenu = "#762424FF", HexSearchPanel = "#3B3D37FF", ReasonInterface = new Settings.InterfaceSetting.ReasonInterfaceSetting {
                                HexMain = "#585450FF", HexTitlePanel = "#54514DFF", HexButton = "#3E482EFF", HexClose = "#B4371EFF", HexLabel = "#bdd197", SpriteClose = "assets/icons/vote_down.png", SpriteTitlePanel = "assets/icons/connection.png"
                            }
                            , AlertInterface = new Settings.InterfaceSetting.AlertInterfaceSettings {
                                HexMain = "#21211AF2", HexLabel = "#DAD1C7FF", HexTitle = "#B4371EFF",
                            }
                            , ModderatorPanel = new Settings.InterfaceSetting.ModeratorPanelInterfaceSettings {
                                HexMain = "#575450FF", HexTitlePanel = "#54514DFF", HexLabel = "#DAD1C7FF", SpriteTitlePanel = "assets/icons/study.png", HexBanButton = "#B4371EFF", HexStopButton = "#3E482EFF"
                            }
                            , RaitingInterface = new Settings.InterfaceSetting.RaitingInterfaceSettings {
                                HexMain = "#575450FF", HexTitlePanel = "#54514DFF", HexLabel = "#DAD1C7FF", HexRaitingButton = "#cdb980", SpriteTitlePanel = "assets/icons/ignite.png", SpriteRaiting = "assets/icons/favourite_servers.png"
                            }
                        }
                    }
                    , ReasonReport = new List<string> {
                        "Использование читов", "Макросы", "Игра 3+",
                    }
                    , ReasonBan = new List<BanReason> {
                        new BanReason {
                            DisplayName = "Использование читов", Command = "ban {0} soft",
                        }
                        , new BanReason {
                            DisplayName = "Макросы", Command = "ban {0} 30d macros",
                        }
                        , new BanReason {
                            DisplayName = "Игра 3+", Command = "ban {0} 14d 3+",
                        }
                        , new BanReason {
                            DisplayName = "Отказ", Command = "ban {0} 7d otkaz",
                        }
                        ,
                    }
                    , RCCSetting = new RCCSettings {
                        RCCUse = false, Key = "xxxxxxxxxxxxxxRCCKey",
                    }
                    , ozProtectSetting = new ozProtectSettings {
                        ozPUse = false, Key = "xxxozProtectIDxxx",
                    }
                    , IQFakeActiveSettings = new IQFakeActive {
                        UseIQFakeActive = false,
                    }
                    , RaitingSetting = new RaitingSettings {
                        RemoveAmountOneTwo = 4, GiveAmountThreeFour = 3, GiveAmountFive = 5
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
                if(config.ozProtectSetting == null) {
                    config.ozProtectSetting = new Configuration.ozProtectSettings {
                        Key = "", ozPUse = false,
                    }
                    ;
                }
                if(config.Setting.IQModalMenuSettings == null) {
                    config.Setting.IQModalMenuSettings = new Configuration.Settings.IQModalMenu {
                        Sprite = "assets/icons/broadcast.png", Avatar = "", HexPanel = "#3B3A2EFF", HexRightPanel = "#1c211b", HexLabels = "#efedee", HexButtonRightMenu = "#252a24", SpriteRaiting = "assets/icons/favourite_servers.png", SpriteReportModeration = "assets/icons/subtract.png", SpriteReport = "assets/icons/examine.png", SpritePlayerButton = "assets/icons/vote_up.png", HexPlayerButton = "#45542BFF", HexBlurMute = "#3B3A2EC4",
                    }
                    ;
                }
                if (config.Setting.IQModalMenuSettings.Sprite == null) config.Setting.IQModalMenuSettings.Sprite = "assets/icons/broadcast.png";
                if (config.Setting.IQModalMenuSettings.Avatar == null) config.Setting.IQModalMenuSettings.Avatar = "";
                if (config.Setting.IQModalMenuSettings.HexPanel == null) config.Setting.IQModalMenuSettings.HexPanel = "#3B3A2EFF";
                if (config.Setting.IQModalMenuSettings.HexRightPanel == null) config.Setting.IQModalMenuSettings.HexRightPanel = "#1c211b";
                if (config.Setting.IQModalMenuSettings.HexButtonRightMenu == null) config.Setting.IQModalMenuSettings.HexButtonRightMenu = "#252a24";
                if (config.Setting.IQModalMenuSettings.HexLabels == null) config.Setting.IQModalMenuSettings.HexLabels = "#efedee";
                if (config.Setting.IQModalMenuSettings.SpriteRaiting == null) config.Setting.IQModalMenuSettings.SpriteRaiting = "assets/icons/favourite_servers.png";
                if (config.Setting.IQModalMenuSettings.SpriteReportModeration == null) config.Setting.IQModalMenuSettings.SpriteReportModeration = "assets/icons/subtract.png";
                if (config.Setting.IQModalMenuSettings.SpriteReport == null) config.Setting.IQModalMenuSettings.SpriteReport = "assets/icons/examine.png";
                if (config.Setting.IQModalMenuSettings.SpritePlayerButton == null) config.Setting.IQModalMenuSettings.SpritePlayerButton = "assets/icons/vote_up.png";
                if (config.Setting.IQModalMenuSettings.HexPlayerButton == null) config.Setting.IQModalMenuSettings.HexPlayerButton = "#45542BFF";
                if (config.Setting.IQModalMenuSettings.HexBlurMute == null) config.Setting.IQModalMenuSettings.HexBlurMute = "#3B3A2EC4";
            }
            catch {
                PrintWarning($"Ошибка чтения конфигурации #93 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Data
        public Dictionary<ulong, PlayerInfo> ReportInformation = new Dictionary<ulong, PlayerInfo>();
        public Dictionary<ulong, ModeratorInfo> ModeratorInformation = new Dictionary<ulong, ModeratorInfo>();
        public class PlayerInfo {
            [JsonProperty("Отображаемое имя")]
            public string DisplayName;
            [JsonProperty("IP Адреса")]
            public List<string> IP;
            [JsonProperty("Последняя жалоба")]
            public string LastReport;
            [JsonProperty("Последний проверяющий модератор")]
            public string LastCheckModerator;
            [JsonProperty("Количество проверок")]
            public int CheckCount;
            [JsonProperty("История жалоб")]
            public List<string> ReportHistory;
            [JsonProperty("Количество жалоб")]
            public int ReportCount;
            [JsonProperty("Игровой статус")]
            public string GameStatus;
        }
        public class ModeratorInfo {
            [JsonProperty("Проверки игроков с вердиктами")]
            public Dictionary<string, string> CheckPlayerModerator = new Dictionary<string, string>();
            [JsonProperty("Блокировки игроков с вердиктом")]
            public Dictionary<string, string> BanPlayerModerator = new Dictionary<string, string>();
            [JsonProperty("Общее количество проверок")]
            public int CheckCount;
            [JsonProperty("История оценок модератора")]
            public List<int> Arrayrating;
            [JsonProperty("Средняя оценка качества")]
            public float AverageRating;
        }
#endregion
#region Metods
#region MetodsReport
        void Metods_PlayerConnected(BasePlayer player) {
            if (player == null) return;
            if (!ReportInformation.ContainsKey(player.userID)) {
                PlayerInfo pInfo = new PlayerInfo {
                    DisplayName = player.displayName, IP = new List<string>(), LastReport = "", LastCheckModerator = "", CheckCount = 0, ReportCount = 0, GameStatus = IsSteam(player.UserIDString), ReportHistory = new List<string>(),
                }
                ;
                ReportInformation.Add(player.userID, pInfo);
            }
            else {
                var User = ReportInformation[player.userID];
                var IP = covalence.Players.FindPlayerById(player.UserIDString).Address;
                User.GameStatus = IsSteam(player.UserIDString);
                if (!String.IsNullOrWhiteSpace(IP)) if (!User.IP.Contains(IP)) User.IP.Add(IP);
            }
            if (permission.UserHasPermission(player.UserIDString, PermissionModeration)) {
                if (!ModeratorInformation.ContainsKey(player.userID)) {
                    ModeratorInfo mInfo = new ModeratorInfo {
                        CheckCount = 0, BanPlayerModerator = new Dictionary<string, string>(), CheckPlayerModerator = new Dictionary<string, string>(), Arrayrating = new List<int>(), AverageRating = 0,
                    }
                    ;
                    ModeratorInformation.Add(player.userID, mInfo);
                }
            }
            else {
                if (ModeratorInformation.ContainsKey(player.userID)) ModeratorInformation.Remove(player.userID);
            }
            Metods_StatusNetwork(player, GetLang("NETWORD_STATUS_ONLINE", player.UserIDString));
        }
        void Metods_Report(BasePlayer target, int ReasonIndex) {
            if (permission.UserHasPermission(target.UserIDString, PermissionAdmin)) return;
            if (IsSteam(target.UserIDString) == GetLang("IS_STEAM_STATUS_PIRATE", target.UserIDString)) {
                if (GameWerAC != null) {
                    GameWerAC.Call("GetScreenReport", target);
                    Puts("Выполнен скриншот экрана для пирата");
                }
            }
            string ReasonReport = config.ReasonReport[ReasonIndex];
            var User = ReportInformation[target.userID];
            User.ReportCount++;
            User.LastReport = ReasonReport;
            User.ReportHistory.Insert(0, ReasonReport);
            if (config.Setting.MaxReportAlert) if (User.ReportCount >= config.Setting.MaxReport) {
                foreach (var MList in BasePlayer.activePlayerList) if (permission.UserHasPermission(MList.UserIDString, PermissionModeration)) SendChat(MList, GetLang("METODS_HELP_MODERS", MList.UserIDString, target.displayName, User.ReportCount));
                VKSendMessage(GetLang("METODS_HELP_MODERS_VK", null, target.displayName, User.ReportCount));
                DiscordSendMessage(GetLang("METODS_HELP_MODERS_VK", null, target.displayName, User.ReportCount));
            }
        }
#endregion
#region MetodsCooldown
        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
#region MetodsModeration
        void Metods_CheckModeration(BasePlayer Suspect, BasePlayer Moderator) {
            if (PlayerSaveCheck.ContainsKey(Suspect.userID)) {
                if (IQModalMenu) AlertModal(Moderator, GetLang("PLAYER_CHECKED_IQMODAL", Moderator.UserIDString));
                else SendChat(Moderator, GetLang("PLAYER_CHECKED", Moderator.UserIDString));
                return;
            }
            if (config.Setting.NoEscapeCheckStop) if (IsRaidBlocked(Suspect)) {
                if (IQModalMenu) AlertModal(Moderator, GetLang("RAID_BLOCK_TRUE_STOP_IQMODAL", Moderator.UserIDString, Moderator.UserIDString));
                else SendChat(Moderator, GetLang("RAID_BLOCK_TRUE_STOP", Moderator.UserIDString, Moderator.UserIDString));
                return;
            }
            PlayerSaveCheck.Add(Suspect.userID, new PlayerSaveCheckClass {
                Discord = GetLang("DISCORD_NULL"), NickName = Suspect.displayName, StatusNetwork = GetLang("NETWORD_STATUS_ONLINE", null, Suspect.UserIDString), ModeratorID = Moderator.userID,
            }
            );
            if (IQModalMenu) AlertModal(Moderator, GetLang("METODS_MODER_START_CHECK_IQMODAL", Moderator.UserIDString, Suspect.displayName));
            else SendChat(Moderator, GetLang("METODS_MODER_START_CHECK", Moderator.UserIDString, Suspect.displayName));
            VKSendMessage(GetLang("METODS_MODER_START_CHECK_VK", null, Moderator.displayName, Moderator.UserIDString, Suspect.displayName, Suspect.UserIDString));
            Metods_AFK(Suspect.userID, Moderator);
            if(config.Setting.UseAlertUsers) foreach(var p in BasePlayer.activePlayerList) SendChat(p, GetLang("METODS_MODER_START_CHECK_VK", p.UserIDString, Moderator.displayName, Moderator.UserIDString, Suspect.displayName, Suspect.UserIDString));
        }
        void Metods_CheckModerationFinish(BasePlayer moderator, ulong SuspectID) {
            IPlayer Suspect = covalence.Players.FindPlayerById(SuspectID.ToString());
            if (Suspect.IsConnected) {
                BasePlayer SOnline = BasePlayer.FindByID(ulong.Parse(Suspect.Id));
                CuiHelper.DestroyUi(SOnline, PARENT_UI_ALERT_SEND);
                SendChat(SOnline, GetLang("MSG_CHECK_CHECK_STOP", moderator.UserIDString));
            }
            CuiHelper.DestroyUi(moderator, PARENT_UI_MODERATOR_MINI_PANEL);
            PlayerSaveCheck.Remove(ulong.Parse(Suspect.Id));
            var User = ReportInformation[ulong.Parse(Suspect.Id)];
            var Moderator = ModeratorInformation[moderator.userID];
            Moderator.CheckCount++;
            if (!Moderator.CheckPlayerModerator.ContainsKey(Suspect.Name)) Moderator.CheckPlayerModerator.Add(Suspect.Name, User.LastReport);
            User.ReportCount = 0;
            User.ReportHistory.Clear();
            User.LastReport = GetLang("NON_REPORT");
            User.CheckCount++;
            User.LastCheckModerator = moderator.displayName;
            SendChat(moderator, GetLang("METODS_MODER_STOP_CHECK", moderator.UserIDString));
            VKSendMessage(GetLang("METODS_MODER_STOP_CHECK_VK", null, moderator.displayName));
            DiscordSendMessage(GetLang("METODS_MODER_STOP_CHECK_VK", null, moderator.displayName));
            SetCheck(moderator);
            if (config.Setting.UseAlertUsers) foreach (var p in BasePlayer.activePlayerList) SendChat(p, GetLang("METODS_MODER_STOP_CHECK_ALERT", p.UserIDString, moderator.displayName, Suspect.Name));
            if (config.Setting.DemosActivate) if (BasePlayer.FindByID(SuspectID) != null) BasePlayer.FindByID(SuspectID).StopDemoRecording();
        }
        void Metods_StatusNetwork(BasePlayer Suspect, string Reason) {
            if (Suspect == null) return;
            if (PlayerSaveCheck.ContainsKey(Suspect.userID)) {
                if (Suspect.IsConnected) if (Suspect.IsReceivingSnapshot) {
                    timer.Once(3, () => Metods_StatusNetwork(Suspect, GetLang("NETWORD_STATUS_ONLINE", null)));
                    return;
                }
                PlayerSaveCheck[Suspect.userID].StatusNetwork = Reason;
                BasePlayer Moderator = BasePlayer.FindByID(PlayerSaveCheck[Suspect.userID].ModeratorID);
                CuiHelper.DestroyUi(Moderator, UI_MODERATION_CHECK_MENU_NETWORK);
                CuiElementContainer container = new CuiElementContainer();
                container.Add(new CuiLabel {
                    RectTransform = {
                        AnchorMin = "0.6782616 0.5478261", AnchorMax = "0.9884076 0.7333333"
                    }
                    , Text = {
                        Text = $"{PlayerSaveCheck[Suspect.userID].StatusNetwork}", FontSize = 12, Font = "robotocondensed-regular.ttf", Align = TextAnchor.UpperCenter, Color = HexToRustFormat("#FFFFFFFF")
                    }
                }
                , PARENT_UI_MODERATOR_MINI_PANEL, UI_MODERATION_CHECK_MENU_NETWORK);
                CuiHelper.AddUi(Moderator, container);
                UI_AlertSendPlayer(Suspect);
                SendChat(Moderator, GetLang("STATUS_CHANGED", Moderator.UserIDString, Suspect.displayName, Reason));
                VKSendMessage(GetLang("STATUS_CHANGED_VK", null, Suspect.displayName, Reason));
                DiscordSendMessage(GetLang("STATUS_CHANGED_VK", null, Suspect.displayName, Reason));
            }
        }
        public Timer ModerTimeOutTimer;
        void Metods_ModeratorExitCheck(BasePlayer Moderator) {
            foreach (var ModeratorCritical in PlayerSaveCheck) if (ModeratorCritical.Value.ModeratorID == Moderator.userID) {
                IPlayer ModeratorOffline = covalence.Players.FindPlayerById(ModeratorCritical.Value.ModeratorID.ToString());
                IPlayer Suspect = covalence.Players.FindPlayerById(ModeratorCritical.Key.ToString());
                int TimeOutCount = 0;
                ModerTimeOutTimer = timer.Repeat(5, 10, () => {
                    if (ModeratorOffline.IsConnected) {
                        UI_MiniPanelModerator(Moderator, ModeratorCritical.Key);
                        SendChat(Moderator, GetLang("MODERATOR_RETURN_WELCOME", Moderator.UserIDString));
                        if (ModerTimeOutTimer != null) {
                            ModerTimeOutTimer.Destroy();
                            ModerTimeOutTimer = null;
                        }
                        return;
                    }
                    else {
                        TimeOutCount++;
                        if (TimeOutCount >= 10) {
                            PlayerSaveCheck.Remove(ModeratorCritical.Key);
                            foreach (var OnlineModeration in BasePlayer.activePlayerList) if (permission.UserHasPermission(OnlineModeration.UserIDString, PermissionModeration)) if (Suspect.IsConnected) {
                                BasePlayer SOnline = BasePlayer.FindByID(ulong.Parse(Suspect.Id));
                                CuiHelper.DestroyUi(SOnline, PARENT_UI_ALERT_SEND);
                                SendChat(SOnline, GetLang("MODERATOR_DISCONNECTED_STOP_CHECK", Moderator.UserIDString, ModeratorOffline.Name));
                                SendChat(OnlineModeration, GetLang("MODERATOR_DISCONNECTED_STOP_RESEND", Moderator.UserIDString, ModeratorOffline.Name, Suspect.Name));
                                VKSendMessage(GetLang("MODERATOR_DISCONNECTED_STOP_RESEND", null, ModeratorOffline.Name, Suspect.Name));
                                DiscordSendMessage(GetLang("MODERATOR_DISCONNECTED_STOP_RESEND", null, ModeratorOffline.Name, Suspect.Name));
                                if (ModerTimeOutTimer != null) {
                                    ModerTimeOutTimer.Destroy();
                                    ModerTimeOutTimer = null;
                                }
                            }
                            return;
                        }
                    }
                }
                );
            }
        }
        void Metods_ModeratorBanned(BasePlayer Moderator, ulong SuspectID, int i) {
            CuiHelper.DestroyUi(Moderator, PARENT_UI_MODERATOR_MINI_PANEL);
            IPlayer Suspect = covalence.Players.FindPlayerById(SuspectID.ToString());
            string Reason = config.ReasonBan[i].DisplayName;
            rust.RunClientCommand(Moderator, String.Format(config.ReasonBan[i].Command, SuspectID));
            PlayerSaveCheck.Remove(SuspectID);
            var ModeratorInfo = ModeratorInformation[Moderator.userID];
            ModeratorInfo.CheckCount++;
            if (!ModeratorInfo.CheckPlayerModerator.ContainsKey(Suspect.Name)) ModeratorInfo.CheckPlayerModerator.Add(Suspect.Name, Reason);
            if (!ModeratorInfo.BanPlayerModerator.ContainsKey(Suspect.Name)) ModeratorInfo.BanPlayerModerator.Add(Suspect.Name, Reason);
            SendChat(Moderator, GetLang("MODERATOR_COMPLETED_CHECK", Moderator.UserIDString, Reason));
            VKSendMessage(GetLang("MODERATOR_COMPLETED_CHECK_VK", null, Moderator.displayName, Moderator.UserIDString, Suspect.Name, SuspectID, Reason));
            DiscordSendMessage(GetLang("MODERATOR_COMPLETED_CHECK_VK", null, Moderator.displayName, Moderator.UserIDString, Suspect.Name, SuspectID, Reason));
            SetBans(Moderator);
            if (config.Setting.UseAlertUsers) foreach (var p in BasePlayer.activePlayerList) SendChat(p, GetLang("MODERATOR_COMPLETED_CHECK_ALERT", p.UserIDString, Moderator.displayName, Suspect.Name, Reason));
        }
#endregion
#region MetodsAFK
        void Metods_CheckStopInAFK(BasePlayer moderator, string ID) {
            IPlayer Suspect = covalence.Players.FindPlayerById(ID);
            if (Suspect.IsConnected) {
                BasePlayer SOnline = BasePlayer.FindByID(ulong.Parse(Suspect.Id));
                CuiHelper.DestroyUi(SOnline, PARENT_UI_ALERT_SEND);
            }
            CuiHelper.DestroyUi(moderator, PARENT_UI_MODERATOR_MINI_PANEL);
            PlayerSaveCheck.Remove(ulong.Parse(Suspect.Id));
            SendChat(moderator, GetLang("PLAYER_AFK_CHECK_STOP", moderator.UserIDString));
            VKSendMessage(GetLang("PLAYER_AFK_CHECK_STOP_VK", null, moderator.displayName, moderator.userID, Suspect.Name));
            DiscordSendMessage(GetLang("PLAYER_AFK_CHECK_STOP_VK", null, moderator.displayName, moderator.userID, Suspect.Name));
            if (config.Setting.DemosActivate) if (BasePlayer.FindByID(ulong.Parse(ID)) != null) BasePlayer.FindByID(ulong.Parse(ID)).StopDemoRecording();
        }
        public Dictionary<ulong, GenericPosition> AFKPositionTry = new Dictionary<ulong, GenericPosition>();
        public Dictionary<ulong, int> AFKCheckedTry = new Dictionary<ulong, int>();
        void Metods_AFK(ulong SuspectID, BasePlayer Moderator) {
            if (config.Setting.AfkUse) {
                IPlayer Suspect = covalence.Players.FindPlayerById(SuspectID.ToString());
                if (!AFKCheckedTry.ContainsKey(SuspectID)) AFKCheckedTry.Add(SuspectID, 0);
                else AFKCheckedTry[SuspectID] = 0;
                StartAFKCheck(Suspect, Moderator);
            }
            else {
                BasePlayer SuspectOnline = BasePlayer.FindByID(SuspectID);
                if (SuspectOnline == null || !SuspectOnline.IsConnected) {
                    SendChat(Moderator, GetLang("PLAYER_LEAVE_AFK_METOD", Moderator.UserIDString));
                    CuiHelper.DestroyUi(Moderator, PARENT_UI_MODERATOR_MINI_PANEL);
                    if (PlayerSaveCheck.ContainsKey(SuspectID)) PlayerSaveCheck.Remove(SuspectID);
                    return;
                }
                if (config.Setting.DemosActivate) if(SuspectOnline != null) SuspectOnline.StartDemoRecording();
                UI_AlertSendPlayer(SuspectOnline);
                PlayerSaveCheck = new Dictionary<ulong, PlayerSaveCheckClass> {
                    [SuspectOnline.userID]
                    = new PlayerSaveCheckClass {
                        Discord = GetLang("DISCORD_NULL"), NickName = SuspectOnline.displayName, StatusNetwork = GetLang("NETWORD_STATUS_ONLINE", SuspectOnline.UserIDString), ModeratorID = Moderator.userID,
                    }
                }
                ;
                UI_MiniPanelModerator(Moderator, SuspectOnline.userID);
                SendChat(Moderator, GetLang("PLAYER_NON_AFK", Moderator.UserIDString));
                if (config.RCCSetting.RCCUse) {
                    string Key = config.RCCSetting.Key;
                    if (String.IsNullOrEmpty(Key)) return;
                    try {
                        string API = $"https://rustcheatcheck.ru/panel/api?action=addPlayer&key={Key}&player={SuspectID}";
                        webrequest.Enqueue(API, null, (code, response) => {
                        }
                        , this);
                    }
                    catch {
                    }
                }
                if (config.ozProtectSetting.ozPUse) {
                    string Key = config.ozProtectSetting.Key;
                    if (String.IsNullOrEmpty(Key)) return;
                    try {
                        string API = $"https://api.ozliginus.ru/ozprotect/addusertocheck?ozprotectid={Key}&minutes=15&checking={Moderator.UserIDString}&suspect={SuspectID}";
                        webrequest.Enqueue(API, null, (code, response) => {
                            Puts("[ozProtect][ozApi][Response]: " + response);
                        }
                        , this);
                    }
                    catch {
                    }
                }
            }
        }
        public void StartAFKCheck(IPlayer Suspect, BasePlayer Moderator) {
            ulong SuspectID = ulong.Parse(Suspect.Id);
            var Postion = Suspect.Position();
            if (!AFKPositionTry.ContainsKey(SuspectID)) AFKPositionTry.Add(SuspectID, Postion);
            if (config.Setting.DemosActivate) if (BasePlayer.FindByID(SuspectID) != null) BasePlayer.FindByID(SuspectID).StartDemoRecording();
            int Try = 1;
            timer.Repeat(5f, 5, () => {
                Postion = Suspect.Position();
                if (AFKPositionTry[SuspectID] != Postion) {
                    SendChat(Moderator, GetLang("PLAYER_AFK_CHANGE_POS", Moderator.UserIDString, Try));
                    AFKCheckedTry[SuspectID]++;
                }
                else SendChat(Moderator, GetLang("PLAYER_AFK_CHANGE_NO_POS", Moderator.UserIDString, Try));
                AFKPositionTry[SuspectID] = Postion;
                Try++;
            }
            );
            timer.Once(30f, () => {
                if(AFKCheckedTry[SuspectID] < 3) Metods_CheckStopInAFK(Moderator, Suspect.Id);
                else {
                    BasePlayer SuspectOnline = BasePlayer.FindByID(ulong.Parse(Suspect.Id));
                    if (SuspectOnline == null || !SuspectOnline.IsConnected) {
                        SendChat(Moderator, GetLang("PLAYER_LEAVE_AFK_METOD", Moderator.UserIDString));
                        CuiHelper.DestroyUi(Moderator, PARENT_UI_MODERATOR_MINI_PANEL);
                        if (PlayerSaveCheck.ContainsKey(SuspectID)) PlayerSaveCheck.Remove(SuspectID);
                        return;
                    }
                    UI_AlertSendPlayer(SuspectOnline);
                    PlayerSaveCheck = new Dictionary<ulong, PlayerSaveCheckClass> {
                        [SuspectOnline.userID]
                        = new PlayerSaveCheckClass {
                            Discord = GetLang("DISCORD_NULL"), NickName = SuspectOnline.displayName, StatusNetwork = GetLang("NETWORD_STATUS_ONLINE"), ModeratorID = Moderator.userID,
                        }
                    }
                    ;
                    UI_MiniPanelModerator(Moderator, SuspectOnline.userID);
                    SendChat(Moderator, GetLang("PLAYER_NON_AFK", Moderator.UserIDString));
                    if (config.RCCSetting.RCCUse) {
                        string Key = config.RCCSetting.Key;
                        if (String.IsNullOrEmpty(Key)) return;
                        try {
                            string API = $"https://rustcheatcheck.ru/panel/api?action=addPlayer&key={Key}&player={Suspect.Id}";
                            webrequest.Enqueue(API, null, (code, response) => {
                            }
                            , this);
                        }
                        catch {
                        }
                    }
                    if (config.ozProtectSetting.ozPUse) {
                        string Key = config.ozProtectSetting.Key;
                        if (String.IsNullOrEmpty(Key)) return;
                        try {
                            string API = $"https://api.ozliginus.ru/ozprotect/addusertocheck?ozprotectid={Key}&minutes=15&checking={Moderator.UserIDString}&suspect={SuspectID}";
                            webrequest.Enqueue(API, null, (code, response) => {
                                Puts("[ozProtect][ozApi][Response]: " + response);
                            }
                            , this);
                        }
                        catch {
                        }
                    }
                }
                if (AFKCheckedTry.ContainsKey(SuspectID)) AFKCheckedTry.Remove(SuspectID);
            }
            );
        }
#endregion
#endregion
#region Comma
// ... [Code preview truncated due to length. Full source in attached file] ...

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

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

Сверху