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

FREE IQChat : 2.2.35 2.2.35

Нет прав для скачивания
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using CompanionServer;
using ConVar;
using Facepunch;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using UnityEngine.Networking;
///Скачано с дискорд сервера Rust Edit [PRO+]
///discord.gg/9vyTXsJyKR
namespace Oxide.Plugins {
    [Info("IQChat", "discord.gg/9vyTXsJyKR", "2.2.35")]
    [Description("Самый приятный чат для вашего сервера из ветки IQ")]
    class IQChat : RustPlugin {
        /// <summary>
        /// Обновление 2.0.x
        /// - Поправил страницы в категории игнорирования
        /// - Добавлены права чтобы скрыть коннект игрока - iqchat.hideconnection (в логи всеравно будет записываться)
        /// - Добавлены права чтобы скрыть дисконнект игрока - iqchat.hidedisconnection (в логи всеравно будет записываться)
        /// - Добавлено логирование дисконнекта игроков
        /// - Добавлены права, которые открывают доступ к кнопка "Заблокировать весь чат" и "Заблокировать всем голос" - iqchat.adminmuted
        /// - Исправлены пробелы в префиксах (когда нельзя было установить префикс с пробелом)
        /// - Исправил реагирование автоответчика на префикс в чате
        /// /// /// </summary>
#region Reference
        [PluginReference]
        Plugin ImageLibrary, IQPersonal, IQFakeActive, IQRankSystem;
#region ImageLibrary
        private String GetImage(String fileName, UInt64 skin = 0) {
            var imageId = (String)plugins.Find("ImageLibrary").CallHook("ImageUi.GetImage", fileName, skin);
            if (!string.IsNullOrEmpty(imageId)) return imageId;
            return String.Empty;
        }
        public Boolean AddImage(String url, String shortname, UInt64 skin = 0) => (Boolean)ImageLibrary?.Call("AddImage", url, shortname, skin);
#endregion
#region IQPersonal
        public void IQPersonalSendSetMute(BasePlayer player) => IQPersonal?.CallHook("API_SET_MUTE", player.userID);
        public void IQPersonalSendBadWords(BasePlayer player) => IQPersonal?.CallHook("API_DETECTED_BAD_WORDS", player.userID);
#endregion
#region IQFakeActive
        public bool IsFake(string DisplayName) => (bool)IQFakeActive?.Call("IsFake", DisplayName);
        void SyncReservedFinish() {
            if (!config.ReferenceSetting.IQFakeActiveSettings.UseIQFakeActive) return;
            PrintWarning("IQChat - успешно синхронизирована с IQFakeActive");
            PrintWarning("=============SYNC==================");
        }
#endregion
#region IQRankSystem
        String IQRankGetRank(ulong userID) => (string)(IQRankSystem?.Call("API_GET_RANK_NAME", userID));
        String IQRankGetTimeGame(ulong userID) => (string)(IQRankSystem?.Call("API_GET_TIME_GAME", userID));
        List<String> IQRankListKey(ulong userID) => (List<string>)(IQRankSystem?.Call("API_RANK_USER_KEYS", userID));
        String IQRankGetNameRankKey(string Key) => (string)(IQRankSystem?.Call("API_GET_RANK_NAME", Key));
        void IQRankSetRank(ulong userID, string RankKey) => IQRankSystem?.Call("API_SET_ACTIVE_RANK", userID, RankKey);
#endregion
#endregion
#region Vars
        private static IQChat _;
        static Double CurrentTime => Facepunch.Math.Epoch.Current;
        public enum MuteType {
            Chat, Voice
        }
        private enum SelectedAction {
            Mute, Ignore
        }
        private enum SelectedParametres {
            DropList, Slider
        }
        private enum TakeElementUser {
            Prefix, Nick, Chat, Rank, MultiPrefix
        }
        private enum ElementsSettingsType {
            PM, Broadcast, Alert, Sound
        }
        public Dictionary<BasePlayer, BasePlayer> PMHistory = new Dictionary<BasePlayer, BasePlayer>();
        public Dictionary<BasePlayer, List<String>> LastMessagesChat = new Dictionary<BasePlayer, List<String>>();
        private const String PermissionHideOnline = "iqchat.onlinehide";
        private const String PermissionMute = "iqchat.muteuse";
        private const String PermissionAlert = "iqchat.alertuse";
        private const String PermissionRename = "iqchat.renameuse";
        private const String PermissionAntiSpam = "iqchat.antispamabuse";
        private const String PermissionHideConnection = "iqchat.hideconnection";
        private const String PermissionHideDisconnection = "iqchat.hidedisconnection";
        private const String PermissionMutedAdmin = "iqchat.adminmuted";
        class Response {
            [JsonProperty("country")]
            public string Country {
                get;
                set;
            }
        }
        public static StringBuilder sb = new StringBuilder();
        public string GetLang(string LangKey, string userID = null, params object[] args) {
            sb.Clear();
            if (args != null) {
                sb.AppendFormat(lang.GetMessage(LangKey, this, userID), args);
                return sb.ToString();
            }
            return lang.GetMessage(LangKey, this, userID);
        }
#endregion
#region Configuration
        private static Configuration config = new Configuration();
        private class Configuration {
#region Controller Connection
            [JsonProperty("Настройка информации о игроке")]
            public ControllerConnection ControllerConnect = new ControllerConnection();
            internal class ControllerConnection {
                [JsonProperty("Перключатели функций")]
                public Turned Turneds = new Turned();
                [JsonProperty("Настройка стандартных значений")]
                public SetupDefault SetupDefaults = new SetupDefault();
                internal class SetupDefault {
                    [JsonProperty("Данный префикс установится если игрок впервые зашел на сервер или в случае окончания прав на префикс, который у него стоял ранее")]
                    public String PrefixDefault = "<color=#CC99FF>[ИГРОК]</color>";
                    [JsonProperty("Данный цвет ника установится если игрок впервые зашел на сервер или в случае окончания прав на цвет ника, который у него стоял ранее")]
                    public String NickDefault = "#33CCCC";
                    [JsonProperty("Данный цвет чата установится если игрок впервые зашел на сервер или в случае окончания прав на цвет чата, который у него стоял ранее")]
                    public String MessageDefault = "#0099FF";
                }
                internal class Turned {
                    [JsonProperty("Устанавливать автоматически префикс игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupPrefix;
                    [JsonProperty("Устанавливать автоматически цвет ника игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupColorNick;
                    [JsonProperty("Устанавливать автоматически цвет чата игроку, когда он получил права на него")]
                    public Boolean TurnAutoSetupColorChat;
                    [JsonProperty("Сбрасывать автоматически префикс при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropPrefix;
                    [JsonProperty("Сбрасывать автоматически цвет ника при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropColorNick;
                    [JsonProperty("Сбрасывать автоматически цвет чата при окончании прав на него у игрока")]
                    public Boolean TurnAutoDropColorChat;
                }
            }
#endregion
#region Controller Parameters
            [JsonProperty("Настройка параметров для игрока")]
            public ControllerParameters ControllerParameter = new ControllerParameters();
            internal class ControllerParameters {
                [JsonProperty("Настройка отображения параметров для выбора игрока")]
                public VisualSettingParametres VisualParametres = new VisualSettingParametres();
                [JsonProperty("Список и настройка цветов для ника")]
                public List<AdvancedFuncion> NickColorList = new List<AdvancedFuncion>();
                [JsonProperty("Список и настройка цветов для сообщений в чате")]
                public List<AdvancedFuncion> MessageColorList = new List<AdvancedFuncion>();
                [JsonProperty("Список и настройка префиксов в чате")]
                public PrefixSetting Prefixes = new PrefixSetting();
                internal class PrefixSetting {
                    [JsonProperty("Включить поддержку нескольких префиксов сразу (true - можно установить несколько префиксов/false - установить можно только 1 на выбор)")]
                    public Boolean TurnMultiPrefixes;
                    [JsonProperty("Максимальное количество префиксов, которое можно установить за раз(Данный параметр работает только если включена установка нескольких префиксов)")]
                    public Int32 MaximumMultiPrefixCount;
                    [JsonProperty("Список префиксов и их настройка")]
                    public List<AdvancedFuncion> Prefixes = new List<AdvancedFuncion>();
                }
                internal class AdvancedFuncion {
                    [JsonProperty("Права")]
                    public String Permissions;
                    [JsonProperty("Значение")]
                    public String Argument;
                }
                internal class VisualSettingParametres {
                    [JsonProperty("Тип отображения выбора префикса для игрока - (0 - выпадающий список, 1 - слайдер (Учтите, что если у вас включен мульти-префикс, будет установлен выпадающий список))")]
                    public SelectedParametres PrefixType;
                    [JsonProperty("Тип отображения выбора цвета ника для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres NickColorType;
                    [JsonProperty("Тип отображения выбора цвета сообщения для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres ChatColorType;
                    [JsonProperty("IQRankSystem : Тип отображения выбора ранга для игрока - (0 - выпадающий список, 1 - слайдер)")]
                    public SelectedParametres IQRankSystemType;
                }
            }
#endregion
#region Controller Mute
            [JsonProperty("Настройка мута в плагине")]
            public ControllerMute ControllerMutes = new ControllerMute();
            internal class ControllerMute {
                [JsonProperty("Настройка автоматического мута")]
                public AutoMute AutoMuteSettings = new AutoMute();
                internal class AutoMute {
                    [JsonProperty("Включить автоматический мут по запрещенным словам(true - да/false - нет)")]
                    public Boolean UseAutoMute;
                    [JsonProperty("Причина автоматического мута")]
                    public Muted AutoMuted;
                }
                [JsonProperty("Дополнительная настройка для логирования о мутах в дискорд")]
                public LoggedFuncion LoggedMute = new LoggedFuncion();
                internal class LoggedFuncion {
                    [JsonProperty("Поддержка логирования последних N сообщений (Должно быть включено логирование в дискорд о мутах)")]
                    public Boolean UseHistoryMessage;
                    [JsonProperty("Сколько последних сообщений игрока отправлять в логировании")]
                    public Int32 CountHistoryMessage;
                }
                [JsonProperty("Причины для блокировки чата")]
                public List<Muted> MuteChatReasons = new List<Muted>();
                [JsonProperty("Причины для блокировки голоса")]
                public List<Muted> MuteVoiceReasons = new List<Muted>();
                internal class Muted {
                    [JsonProperty("Причина для блокировки")]
                    public String Reason;
                    [JsonProperty("Время блокировки(в секундах)")]
                    public Int32 SecondMute;
                }
            }
#endregion
#region Controller Message
            [JsonProperty("Настройка обработки сообщений")]
            public ControllerMessage ControllerMessages = new ControllerMessage();
            internal class ControllerMessage {
                [JsonProperty("Основная настройка сообщений в чат от плагина")]
                public GeneralSettings GeneralSetting = new GeneralSettings();
                [JsonProperty("Настройка переключения функционала в чате")]
                public TurnedFuncional TurnedFunc = new TurnedFuncional();
                [JsonProperty("Настройка форматирования сообщений игроков")]
                public FormattingMessage Formatting = new FormattingMessage();
                internal class GeneralSettings {
                    [JsonProperty("Настройка формата оповещения в чате")]
                    public BroadcastSettings BroadcastFormat = new BroadcastSettings();
                    [JsonProperty("Настройка формата упоминания в чате, через @")]
                    public AlertSettings AlertFormat = new AlertSettings();
                    [JsonProperty("Дополнительная настройка")]
                    public OtherSettings OtherSetting = new OtherSettings();
                    internal class BroadcastSettings {
                        [JsonProperty("Наименование оповещения в чат")]
                        public String BroadcastTitle;
                        [JsonProperty("Цвет сообщения оповещения в чат")]
                        public String BroadcastColor;
                        [JsonProperty("Steam64ID для аватарки в чате")]
                        public String Steam64IDAvatar;
                    }
                    internal class AlertSettings {
                        [JsonProperty("Цвет сообщения упоминания игрока в чате")]
                        public String AlertPlayerColor;
                        [JsonProperty("Звук при при получении и отправки упоминания через @")]
                        public String SoundAlertPlayer;
                    }
                    internal class OtherSettings {
                        [JsonProperty("Время,через которое удалится сообщение с UI от администратора")]
                        public Int32 TimeDeleteAlertUI;
                        [JsonProperty("Размер сообщения от игрока в чате")]
                        public Int32 SizeMessage = 14;
                        [JsonProperty("Размер ника игрока в чате")]
                        public Int32 SizeNick = 14;
                        [JsonProperty("Размер префикса игрока в чате (будет использовано, если в самом префиксе не установвлен <size=N></size>)")]
                        public Int32 SizePrefix = 14;
                    }
                }
                internal class TurnedFuncional {
                    [JsonProperty("Настройка защиты от спама")]
                    public AntiSpam AntiSpamSetting = new AntiSpam();
                    [JsonProperty("Настройка личных сообщений")]
                    public PM PMSetting = new PM();
                    internal class AntiSpam {
                        [JsonProperty("Включить защиту от спама (Анти-спам)")]
                        public Boolean AntiSpamActivate;
                        [JsonProperty("Время через которое игрок может отправлять сообщение (АнтиСпам)")]
                        public Int32 FloodTime;
                    }
                    internal class PM {
                        [JsonProperty("Включить личные сообщения")]
                        public Boolean PMActivate;
                        [JsonProperty("Звук при при получении личного сообщения")]
                        public String SoundPM;
                    }
                    [JsonProperty("Включить игнор ЛС игрокам(/ignore nick или через интерфейс)")]
                    public Boolean IgnoreUsePM;
                    [JsonProperty("Скрыть из чата выдачу предметов Админу")]
                    public Boolean HideAdminGave;
                    [JsonProperty("Переносить мут в командный чат(В случае мута, игрок не сможет писать даже в командный чат)")]
                    public Boolean MuteTeamChat;
                }
                internal class FormattingMessage {
                    [JsonProperty("Включить форматирование сообщений [Будет контроллировать капс, формат сообщения] (true - да/false - нет)")]
                    public Boolean FormatMessage;
                    [JsonProperty("Использовать список запрещенных слов (true - да/false - нет)")]
                    public Boolean UseBadWords;
                    [JsonProperty("Слово которое будет заменять запрещенное слово")]
                    public String ReplaceBadWord;
                    [JsonProperty("Список запрещенных слов")]
                    public List<String> BadWords = new List<String>();
                }
            }
#endregion
#region Controller Alert
            [JsonProperty("Настройка оповещений в чате")]
            public ControllerAlert ControllerAlertSetting;
            internal class ControllerAlert {
                [JsonProperty("Настройка оповещений в чате")]
                public Alert AlertSetting;
                [JsonProperty("Настройка оповещений о статусе сессии игрока")]
                public PlayerSession PlayerSessionSetting;
                [JsonProperty("Настройка оповещений о статусе сессии администратора")]
                public AdminSession AdminSessionSetting;
                [JsonProperty("Настройка персональных оповоещений игроку при коннекте")]
                public PersonalAlert PersonalAlertSetting;
                internal class Alert {
                    [JsonProperty("Включить автоматические сообщения в чат (true - да/false - нет)")]
                    public Boolean AlertMessage;
                    [JsonProperty("Тип автоматических сообщений : true - поочередные/false - случайные")]
                    public Boolean AlertMessageType;
                    [JsonProperty("Список автоматических сообщений в чат")]
                    public List<String> MessageList;
                    [JsonProperty("Интервал отправки сообщений в чат (Броадкастер) (в секундах)")]
                    public Int32 MessageListTimer;
                }
                internal class PlayerSession {
                    [JsonProperty("При уведомлении о входе/выходе игрока отображать его аватар напротив ника (true - да/false - нет)")]
                    public Boolean ConnectedAvatarUse;
                    [JsonProperty("Уведомлять в чате о входе игрока (true - да/false - нет)")]
                    public Boolean ConnectedAlert;
                    [JsonProperty("Включить случайные уведомления о входе игрока из списка (true - да/false - нет)")]
                    public Boolean ConnectionAlertRandom;
                    [JsonProperty("Отображать страну зашедшего игрока (true - да/false - нет")]
                    public Boolean ConnectedWorld;
                    [JsonProperty("Уведомлять о выходе игрока в чат(выбираются из списка) (true - да/false - нет)")]
                    public Boolean DisconnectedAlert;
                    [JsonProperty("Включить случайные уведомления о выходе игрока (true - да/false - нет)")]
                    public Boolean DisconnectedAlertRandom;
                    [JsonProperty("Отображать причину выхода игрока (true - да/false - нет)")]
                    public Boolean DisconnectedReason;
                    [JsonProperty("Случайные уведомления о входе игрока({0} - ник игрока, {1} - страна(если включено отображение страны)")]
                    public List<String> RandomConnectionAlert = new List<String>();
                    [JsonProperty("Случайные уведомления о выходе игрока({0} - ник игрока, {1} - причина выхода(если включена причина)")]
                    public List<String> RandomDisconnectedAlert = new List<String>();
                }
                internal class AdminSession {
                    [JsonProperty("Уведомлять о входе админа на сервер в чат (true - да/false - нет)")]
                    public Boolean ConnectedAlertAdmin;
                    [JsonProperty("Уведомлять о выходе админа на сервер в чат (true - да/false - нет)")]
                    public Boolean DisconnectedAlertAdmin;
                }
                internal class PersonalAlert {
                    [JsonProperty("Включить случайное сообщение зашедшему игроку (true - да/false - нет)")]
                    public Boolean UseWelcomeMessage;
                    [JsonProperty("Список сообщений игроку при входе")]
                    public List<String> WelcomeMessage = new List<String>();
                }
            }
#endregion
#region Rust Plus
            [JsonProperty("Настройка Rust+")]
            public RustPlus RustPlusSettings;
            internal class RustPlus {
                [JsonProperty("Использовать Rust+")]
                public Boolean UseRustPlus;
                [JsonProperty("Название для уведомления Rust+")]
                public String DisplayNameAlert;
            }
#endregion
#region Reference Setting
            [JsonProperty("Настройка плагинов поддержки")]
            public ReferenceSettings ReferenceSetting = new ReferenceSettings();
            internal class ReferenceSettings {
                [JsonProperty("Настройка IQFakeActive")]
                public IQFakeActive IQFakeActiveSettings = new IQFakeActive();
                [JsonProperty("Настройка IQRankSystem")]
                public IQRankSystem IQRankSystems = new IQRankSystem();
                internal class IQRankSystem {
                    [JsonProperty("Формат отображения ранга в чате ( {0} - это ранг юзера, не удаляйте это значение)")]
                    public String FormatRank = "[{0}]";
                    [JsonProperty("Формат отображения времени с IQRankSystem в чате ( {0} - это время юзера, не удаляйте это значение)")]
                    public String FormatRankTime = "[{0}]";
                    [JsonProperty("Использовать поддержку рангов")]
                    public Boolean UseRankSystem;
                    [JsonProperty("Отображать игрокам их отыгранное время рядом с рангом")]
                    public Boolean UseTimeStandart;
                }
                internal class IQFakeActive {
                    [JsonProperty("Использовать поддержку IQFakeActive")]
                    public Boolean UseIQFakeActive;
                }
            }
#endregion
#region Anwser Setting
            [JsonProperty("Настройка автоответчика")]
            public AnswerMessage AnswerMessages = new AnswerMessage();
            internal class AnswerMessage {
                [JsonProperty("Включить автоответчик?(true - да/false - нет)")]
                public bool UseAnswer;
                [JsonProperty("Настройка сообщений [Ключевое слово] = Ответ")]
                public Dictionary<String, String> AnswerMessageList = new Dictionary<String, String>();
            }
#endregion
#region Other Setting
            [JsonProperty("Дополнительная настройка")]
            public OtherSettings OtherSetting;
            internal class OtherSettings {
                [JsonProperty("Настройка логирования сообщений")]
                public LoggedChat LogsChat = new LoggedChat();
                [JsonProperty("Настройка логирования личных сообщений игроков")]
                public General LogsPMChat = new General();
                [JsonProperty("Настройка логирования блокировок/разблокировок чата/голоса")]
                public General LogsMuted = new General();
                [JsonProperty("Настройка логирования чат-команд от игроков")]
                public General LogsChatCommands = new General();
                internal class LoggedChat {
                    [JsonProperty("Настройка логирования общего чата")]
                    public General GlobalChatSettings = new General();
                    [JsonProperty("Настройка логирования тим чата")]
                    public General TeamChatSettings = new General();
                }
                internal class General {
                    [JsonProperty("Включить логирование (true - да/false - нет)")]
                    public Boolean UseLogged = false;
                    [JsonProperty("Webhooks канала для логирования")]
                    public String Webhooks = "";
                }
            }
#endregion
            public static Configuration GetNewConfiguration() {
                return new Configuration {
#region Controller Parameter
                    ControllerParameter = new ControllerParameters {
                        VisualParametres = new ControllerParameters.VisualSettingParametres {
                            PrefixType = SelectedParametres.DropList, ChatColorType = SelectedParametres.DropList, NickColorType = SelectedParametres.Slider, IQRankSystemType = SelectedParametres.Slider,
                        }
                        , Prefixes = new ControllerParameters.PrefixSetting {
                            TurnMultiPrefixes = false, MaximumMultiPrefixCount = 5, Prefixes = new List<ControllerParameters.AdvancedFuncion> {
                                new ControllerParameters.AdvancedFuncion {
                                    Argument = "<color=#CC99FF>[ИГРОК]</color>", Permissions = "iqchat.default",
                                }
                                , new ControllerParameters.AdvancedFuncion {
                                    Argument = "<color=#ffff99>[VIP]</color>", Permissions = "iqchat.admin",
                                }
                                , new ControllerParameters.AdvancedFuncion {
                                    Argument = "<color=#ff9999>[АДМИН]</color>", Permissions = "iqchat.admin",
                                }
                                ,
                            }
                            ,
                        }
                        , MessageColorList = new List<ControllerParameters.AdvancedFuncion> {
                            new ControllerParameters.AdvancedFuncion {
                                Argument = "#CC99FF", Permissions = "iqchat.default",
                            }
                            , new ControllerParameters.AdvancedFuncion {
                                Argument = "#ffff99", Permissions = "iqchat.admin",
                            }
                            , new ControllerParameters.AdvancedFuncion {
                                Argument = "#ff9999", Permissions = "iqchat.admin",
                            }
                            ,
                        }
                        , NickColorList = new List<ControllerParameters.AdvancedFuncion> {
                            new ControllerParameters.AdvancedFuncion {
                                Argument = "#CC99FF", Permissions = "iqchat.default",
                            }
                            , new ControllerParameters.AdvancedFuncion {
                                Argument = "#ffff99", Permissions = "iqchat.admin",
                            }
                            , new ControllerParameters.AdvancedFuncion {
                                Argument = "#ff9999", Permissions = "iqchat.admin",
                            }
                            ,
                        }
                        ,
                    }
                    ,
#endregion
#region Controller Connect
                    ControllerConnect = new ControllerConnection {
                        SetupDefaults = new ControllerConnection.SetupDefault {
                            PrefixDefault = "<color=#CC99FF>[ИГРОК]</color>", MessageDefault = "#33CCCC", NickDefault = "#0099FF",
                        }
                        , Turneds = new ControllerConnection.Turned {
                            TurnAutoDropColorChat = true, TurnAutoDropColorNick = true, TurnAutoDropPrefix = true, TurnAutoSetupColorChat = true, TurnAutoSetupColorNick = true, TurnAutoSetupPrefix = true,
                        }
                    }
                    ,
#endregion
#region Controller Mute
                    ControllerMutes = new ControllerMute {
                        LoggedMute = new ControllerMute.LoggedFuncion {
                            UseHistoryMessage = false, CountHistoryMessage = 10,
                        }
                        , AutoMuteSettings = new ControllerMute.AutoMute {
                            UseAutoMute = true, AutoMuted = new ControllerMute.Muted {
                                Reason = "Автоматическая блокировка чата", SecondMute = 300,
                            }
                        }
                        , MuteChatReasons = new List<ControllerMute.Muted> {
                            new ControllerMute.Muted {
                                Reason = "Агрессивное поведение", SecondMute = 100,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Оскорбления", SecondMute = 300,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Оскорбление (повторное нарушение)", SecondMute = 1000,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Реклама", SecondMute = 5000,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Унижение", SecondMute = 300,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Спам", SecondMute = 60,
                            }
                            ,
                        }
                        , MuteVoiceReasons = new List<ControllerMute.Muted> {
                            new ControllerMute.Muted {
                                Reason = "Агрессивное поведение", SecondMute = 100,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Оскорбления", SecondMute = 300,
                            }
                            , new ControllerMute.Muted {
                                Reason = "Срыв мероприятия криками", SecondMute = 300,
                            }
                            ,
                        }
                    }
                    ,
#endregion
#region Controller Message
                    ControllerMessages = new ControllerMessage {
                        Formatting = new ControllerMessage.FormattingMessage {
                            UseBadWords = true, BadWords = new List<String> {
                                "бля", "сука", "говно", "тварь"
                            }
                            , FormatMessage = true, ReplaceBadWord = "***",
                        }
                        , TurnedFunc = new ControllerMessage.TurnedFuncional {
                            HideAdminGave = true, IgnoreUsePM = true, MuteTeamChat = true, AntiSpamSetting = new ControllerMessage.TurnedFuncional.AntiSpam {
                                AntiSpamActivate = true, FloodTime = 10,
                            }
                            , PMSetting = new ControllerMessage.TurnedFuncional.PM {
                                PMActivate = true, SoundPM = "assets/bundled/prefabs/fx/notice/stack.world.fx.prefab",
                            }
                            ,
                        }
                        , GeneralSetting = new ControllerMessage.GeneralSettings {
                            BroadcastFormat = new ControllerMessage.GeneralSettings.BroadcastSettings {
                                BroadcastColor = "#efedee", BroadcastTitle = "<color=#68cacd><b>[ОПОВЕЩЕНИЕ]</b></color>", Steam64IDAvatar = "0",
                            }
                            , AlertFormat = new ControllerMessage.GeneralSettings.AlertSettings {
                                AlertPlayerColor = "#efedee", SoundAlertPlayer = "assets/bundled/prefabs/fx/notice/item.select.fx.prefab",
                            }
                            , OtherSetting = new ControllerMessage.GeneralSettings.OtherSettings {
                                TimeDeleteAlertUI = 5, SizePrefix = 14, SizeMessage = 14, SizeNick = 14,
                            }
                        }
                        ,
                    }
                    ,
#endregion
#region Controller Alert
                    ControllerAlertSetting = new ControllerAlert {
                        AlertSetting = new ControllerAlert.Alert {
                            AlertMessage = true, AlertMessageType = false, MessageList = new List<String> {
                                "Автоматическое сообщение #1 (Редактировать в конфигурации)", "Автоматическое сообщение #2 (Редактировать в конфигурации)", "Автоматическое сообщение #3 (Редактировать в конфигурации)", "Автоматическое сообщение #4 (Редактировать в конфигурации)", "Автоматическое сообщение #5 (Редактировать в конфигурации)", "Автоматическое сообщение #6 (Редактировать в конфигурации)",
                            }
                            , MessageListTimer = 60,
                        }
                        , AdminSessionSetting = new ControllerAlert.AdminSession {
                            ConnectedAlertAdmin = false, DisconnectedAlertAdmin = false,
                        }
                        , PlayerSessionSetting = new ControllerAlert.PlayerSession {
                            ConnectedAlert = true, ConnectedAvatarUse = true, ConnectedWorld = true, ConnectionAlertRandom = false, DisconnectedAlert = true, DisconnectedAlertRandom = false, DisconnectedReason = true, RandomConnectionAlert = new List<String> {
                                "{0} влетел как дурачок из {1}", "{0} залетел на сервер из {1}, соболезнуем", "{0} прыгнул на сервачок"
                            }
                            , RandomDisconnectedAlert = new List<String> {
                                "{0} ушел в мир иной", "{0} вылетел с сервера с причиной {1}", "{0} пошел на другой сервачок"
                            }
                            ,
                        }
                        , PersonalAlertSetting = new ControllerAlert.PersonalAlert {
                            UseWelcomeMessage = true, WelcomeMessage = new List<String> {
                                "Добро пожаловать на сервер SUPERSERVER\nРады,что выбрал именно нас!", "С возвращением на сервер!\nЖелаем тебе удачи", "Добро пожаловать на сервер\nУ нас самые лучшие плагины",
                            }
                        }
                    }
                    ,
#endregion
#region Reference Setting
                    ReferenceSetting = new ReferenceSettings {
                        IQFakeActiveSettings = new ReferenceSettings.IQFakeActive {
                            UseIQFakeActive = true,
                        }
                        , IQRankSystems = new ReferenceSettings.IQRankSystem {
                            FormatRank = "[{0}]", FormatRankTime = "[{0}]", UseRankSystem = false, UseTimeStandart = true
                        }
                        ,
                    }
                    ,
#endregion
#region Rust Plus
                    RustPlusSettings = new RustPlus {
                        UseRustPlus = true, DisplayNameAlert = "СУПЕР СЕРВЕР",
                    }
                    ,
#endregion
#region Anwser Setting
                    AnswerMessages = new AnswerMessage {
                        UseAnswer = true, AnswerMessageList = new Dictionary<string, string> {
                            ["вайп"]
                            = "Вайп будет 27.06", ["wipe"] = "Вайп будет 27.06", ["читер"] = "Нашли читера?Напиши /report и отправь жалобу"
                        }
                    }
                    ,
#endregion
#region Other Setting
                    OtherSetting = new OtherSettings {
                        LogsChat = new OtherSettings.LoggedChat {
                            GlobalChatSettings = new OtherSettings.General {
                                UseLogged = false, Webhooks = "",
                            }
                            , TeamChatSettings = new OtherSettings.General {
                                UseLogged = false, Webhooks = "",
                            }
                        }
                        , LogsChatCommands = new OtherSettings.General {
                            UseLogged = false, Webhooks = "",
                        }
                        , LogsPMChat = new OtherSettings.General {
                            UseLogged = false, Webhooks = "",
                        }
                        , LogsMuted = new OtherSettings.General {
                            UseLogged = false, Webhooks = "",
                        }
                        ,
                    }
                    ,
#endregion
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning("Ошибка #132" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        private void RegisteredPermissions() {
            Configuration.ControllerParameters Controller = config.ControllerParameter;
            IEnumerable<Configuration.ControllerParameters.AdvancedFuncion> Parametres = Controller.Prefixes.Prefixes.Concat(Controller.NickColorList).Concat(Controller.MessageColorList);
            foreach (Configuration.ControllerParameters.AdvancedFuncion Permission in Parametres.Where(perm => !permission.PermissionExists(perm.Permissions, this))) permission.RegisterPermission(Permission.Permissions, this);
            permission.RegisterPermission(PermissionHideOnline, this);
            permission.RegisterPermission(PermissionRename, this);
            permission.RegisterPermission(PermissionMute, this);
            permission.RegisterPermission(PermissionAlert, this);
            permission.RegisterPermission(PermissionAntiSpam, this);
            permission.RegisterPermission(PermissionHideConnection, this);
            permission.RegisterPermission(PermissionHideDisconnection, this);
            permission.RegisterPermission(PermissionMutedAdmin, this);
            PrintWarning("Permissions - completed");
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Data
        public GeneralInformation GeneralInfo = new GeneralInformation();
        public Dictionary<UInt64, User> UserInformation = new Dictionary<UInt64, User>();
        public class User {
            public Information Info = new Information();
            public Setting Settings = new Setting();
            public Mute MuteInfo = new Mute();
            internal class Information {
                public String Prefix;
                public String ColorNick;
                public String ColorMessage;
                public String Rank;
                public List<String> PrefixList = new List<String>();
            }
            internal class Setting {
                public Boolean TurnPM = true;
                public Boolean TurnAlert = true;
                public Boolean TurnBroadcast = true;
                public Boolean TurnSound = true;
                public List<UInt64> IgnoreUsers = new List<UInt64>();
                public Boolean IsIgnored(UInt64 TargetID) => IgnoreUsers.Contains(TargetID);
                public void IgnoredAddOrRemove(UInt64 TargetID) {
                    if (IsIgnored(TargetID)) IgnoreUsers.Remove(TargetID);
                    else IgnoreUsers.Add(TargetID);
                }
            }
            internal class Mute {
                public Double TimeMuteChat;
                public Double TimeMuteVoice;
                public Double GetTime(MuteType Type) {
                    Double TimeMuted = 0;
                    switch (Type) {
                        case MuteType.Chat : TimeMuted = TimeMuteChat - CurrentTime;
                        break;
                        case MuteType.Voice : TimeMuted = TimeMuteVoice - CurrentTime;
                        break;
                        default : break;
                    }
                    return TimeMuted;
                }
                public void SetMute(MuteType Type, Int32 Time) {
                    switch (Type) {
                        case MuteType.Chat : TimeMuteChat = Time + CurrentTime;
                        break;
                        case MuteType.Voice : TimeMuteVoice = Time + CurrentTime;
                        break;
                        default : break;
                    }
                }
                public void UnMute(MuteType Type) {
                    switch (Type) {
                        case MuteType.Chat : TimeMuteChat = 0;
                        break;
                        case MuteType.Voice : TimeMuteVoice = 0;
                        break;
                        default : break;
                    }
                }
                public Boolean IsMute(MuteType Type) => GetTime(Type) > 0;
            }
        }
        public class GeneralInformation {
            public Boolean TurnMuteAllChat;
            public Boolean TurnMuteAllVoice;
            public Dictionary<UInt64, RenameInfo> RenameList = new Dictionary<UInt64, RenameInfo>();
            internal class RenameInfo {
                public String RenameNick;
                public UInt64 RenameID;
            }
            public RenameInfo GetInfoRename(UInt64 UserID) {
                if (!RenameList.ContainsKey(UserID)) return null;
                return RenameList[UserID];
            }
        }
        private void UserConnecteionData(BasePlayer player) {
            Configuration.ControllerConnection ControllerConntect = config.ControllerConnect;
            Configuration.ControllerParameters ControllerParameter = config.ControllerParameter;
            if (ControllerConntect == null || ControllerParameter == null || UserInformation.ContainsKey(player.userID)) return;
            User Info = new User();
            if (ControllerConntect.Turneds.TurnAutoSetupPrefix)  // Включена ли выдача автоматического префикса
            {
                if (ControllerParameter.Prefixes.TurnMultiPrefixes)  // Проверка на мультипрефикс
                Info.Info.PrefixList.Add(ControllerConntect.SetupDefaults.PrefixDefault ?? "");
                // Установка мультипрефикса
                else Info.Info.Prefix = ControllerConntect.SetupDefaults.PrefixDefault ?? "";
                // Установка одного префикса
            }
            if (ControllerConntect.Turneds.TurnAutoSetupColorNick)  // Включена ли выдача автоматического цвета ника
            Info.Info.ColorNick = ControllerConntect.SetupDefaults.NickDefault;
            // Установка цвета ника
            if (ControllerConntect.Turneds.TurnAutoSetupColorChat)  // Включена ли выдача автоматического цвета сообщений
            Info.Info.ColorMessage = ControllerConntect.SetupDefaults.MessageDefault;
            // Установка цвета сообщений
            Info.Info.Rank = String.Empty;
            UserInformation.Add(player.userID, Info);
            // Запись в дата-файл
        }
        void ReadData() {
            GeneralInfo = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<GeneralInformation>("IQChat/Information");
            UserInformation = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<UInt64, User>>("IQChat/Users");
        }
        void WriteData() {
            Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQChat/Information", GeneralInfo);
            Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("IQChat/Users", UserInformation);
        }
#endregion
#region Hooks
        private bool OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) {
            if (Interface.Oxide.CallHook("CanChatMessage", player, message) != null) return false;
            SeparatorChat(channel, player, message);
            return false;
        }
        private object OnServerMessage(String message, String name) {
            if (config.ControllerMessages.TurnedFunc.HideAdminGave) if (message.Contains("gave") && name == "SERVER") return true;
            return null;
        }
        void OnPlayerCommand(BasePlayer player, string command, string[] args) {
            DiscordLoggCommand(player, command, args);
        }
#region Auto Setup/Remove Permission
#region User
        void OnUserPermissionGranted(string id, string permName) => SetupParametres(id, permName);
        void OnUserPermissionRevoked(string id, string permName) => RemoveParametres(id, permName);
        void OnUserGroupAdded(string id, string groupName) {
            String[] PermissionsGroup = permission.GetGroupPermissions(groupName);
            if (PermissionsGroup == null) return;
            foreach (String permName in PermissionsGroup) SetupParametres(id, permName);
        }
        void OnUserGroupRemoved(string id, string groupName) {
            String[] PermissionsGroup = permission.GetGroupPermissions(groupName);
            if (PermissionsGroup == null) return;
            foreach (String permName in PermissionsGroup) RemoveParametres(id, permName);
        }
#endregion
#region Group
        void OnGroupPermissionGranted(string name, string perm) {
            String[] PlayerGroups = permission.GetUsersInGroup(name);
            if (PlayerGroups == null) return;
            foreach (String playerInfo in PlayerGroups) {
                BasePlayer player = BasePlayer.FindByID(UInt64.Parse(playerInfo.Substring(0, 17)));
                if (player == null) return;
                SetupParametres(player.UserIDString, perm);
            }
        }
        void OnGroupPermissionRevoked(string name, string perm) {
            String[] PlayerGroups = permission.GetUsersInGroup(name);
            if (PlayerGroups == null) return;
            foreach (String playerInfo in PlayerGroups) {
                BasePlayer player = BasePlayer.FindByID(UInt64.Parse(playerInfo.Substring(0, 17)));
                if (player == null) return;
                RemoveParametres(player.UserIDString, perm);
            }
        }
#endregion
#endregion
        object OnPlayerVoice(BasePlayer player, Byte[] data) {
            if (UserInformation[player.userID].MuteInfo.
// ... [Code preview truncated due to length. Full source in attached file] ...

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