C#:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
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;
namespace Oxide.Plugins {
[Info("IQChat", "Skuli Dropek", "2.2.38.2")]
[Description("Самый приятный чат для вашего сервера из ветки IQ")]
class IQChat : RustPlugin {
//TODO : /raname - без ника выдает ошибку
/// <summary>
/// Обновление 2.2.x
/// - Корректировка в ренейме
/// - Поправил ошибку, когда модератор не мог размутить игрока
/// - Теперь при дисконнекте и коннекте будут заменяться "Запрещенные ники"
#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 void RemoveReserved(UInt64 userID) {
if (!IQFakeActive) return;
IQFakeActive?.Call("RemoveReserver", userID);
}
public bool IsFake(UInt64 userID) {
if (!IQFakeActive) return false;
return (bool)IQFakeActive?.Call("IsFake", userID);
}
public bool IsFake(String DisplayName) {
if (!IQFakeActive) return false;
return (bool)IQFakeActive?.Call("IsFake", DisplayName);
}
void SyncReservedFinish(string JSON) {
if (!config.ReferenceSetting.IQFakeActiveSettings.UseIQFakeActive) return;
List<FakePlayer> ContentDeserialize = JsonConvert.DeserializeObject<List<FakePlayer>>(JSON);
PlayerBases = ContentDeserialize;
PrintWarning("IQChat - успешно синхронизирована с IQFakeActive");
PrintWarning("=============SYNC==================");
}
public string FindFakeName(ulong userID) => (string)IQFakeActive?.Call("FindFakeName", userID);
public List<FakePlayer> PlayerBases = new List<FakePlayer>();
public class FakePlayer {
public ulong UserID;
public string DisplayName;
}
#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();
[JsonProperty("Картинки")]
public Dictionary<String, String> KeyImages = new Dictionary<string, string>();
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;
[JsonProperty("Дополнительная настройка Анти-Спама")]
public AntiSpamDuples AntiSpamDuplesSetting = new AntiSpamDuples();
internal class AntiSpamDuples {
[JsonProperty("Включить дополнительную защиту от спама (Анти-дубликаты, повторяющие сообщения)")]
public Boolean AntiSpamDuplesActivate = true;
[JsonProperty("Сколько дублирующих сообщений нужно сделать игроку чтобы его замутила система")]
public Int32 TryDuples = 3;
[JsonProperty("Настройка автоматического мута за дубликаты")]
public ControllerMute.Muted MuteSetting = new ControllerMute.Muted {
Reason = "Блокировка за дублирующие сообщения (СПАМ)", SecondMute = 300,
}
;
}
}
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>();
[JsonProperty("Настройка контроллера ников")]
public NickController ControllerNickname = new NickController();
internal class NickController {
[JsonProperty("Включить форматирование ников игроков (должно быть включено форматирование сообщений)")]
public Boolean UseNickController = true;
[JsonProperty("Слово которое будет заменять запрещенное слово (Вы можете оставить пустым и будет просто удалять)")]
public String ReplaceBadNick = "****";
[JsonProperty("Список запрещенных ников")]
public List<String> BadNicks = 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
KeyImages = new Dictionary<String, String>() {
{
"UI_IQCHAT_CONTEXT_NO_RANK", "https://imgur.com/7AV4eG5.png"
}
, {
"UI_IQCHAT_CONTEXT_RANK", "https://imgur.com/dQ0ptBE.png"
}
, {
"IQCHAT_INFORMATION_ICON", "https://imgur.com/phcCykw.png"
}
, {
"IQCHAT_SETTING_ICON", "https://imgur.com/foT3lUr.png"
}
, {
"IQCHAT_IGNORE_INFO_ICON", "https://imgur.com/MEhsbTM.png"
}
, {
"IQCHAT_MODERATION_ICON", "https://imgur.com/2vJP8qM.png"
}
, {
"IQCHAT_ELEMENT_PANEL_ICON", "https://imgur.com/afRp7O0.png"
}
, {
"IQCHAT_ELEMENT_PREFIX_MULTI_TAKE_ICON", "https://imgur.com/6ohxadb.png"
}
, {
"IQCHAT_ELEMENT_SLIDER_ICON", "https://imgur.com/cx8ZoA7.png"
}
, {
"IQCHAT_ELEMENT_SLIDER_LEFT_ICON", "https://imgur.com/ZZP2kuy.png"
}
, {
"IQCHAT_ELEMENT_SLIDER_RIGHT_ICON", "https://imgur.com/g0VTWKD.png"
}
, {
"IQCHAT_ELEMENT_DROP_LIST_OPEN_ICON", "https://imgur.com/p9pIfXR.png"
}
, {
"IQCHAT_ELEMENT_DROP_LIST_OPEN_ARGUMENT_ICON", "https://imgur.com/HM1AuCF.png"
}
, {
"IQCHAT_ELEMENT_DROP_LIST_OPEN_TAKED", "https://imgur.com/gBvkzy0.png"
}
, {
"IQCHAT_ELEMENT_SETTING_CHECK_BOX", "https://imgur.com/tjkGj46.png"
}
, {
"IQCHAT_ALERT_PANEL", "https://i.imgur.com/sKKsKrs.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_PANEL", "https://imgur.com/bOS905f.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_ICON", "https://imgur.com/15myNzk.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_SEARCH", "https://imgur.com/S4c4Hc9.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_PAGE_PANEL", "https://imgur.com/Yo0You9.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_PLAYER", "https://imgur.com/JfDmg3P.png"
}
, {
"IQCHAT_MUTE_AND_IGNORE_PLAYER_STATUS", "https://imgur.com/dLiAv1i.png"
}
, {
"IQCHAT_IGNORE_ALERT_PANEL", "https://imgur.com/bJgQV1b.png"
}
, {
"IQCHAT_IGNORE_ALERT_ICON", "https://imgur.com/qKTHf8N.png"
}
, {
"IQCHAT_IGNORE_ALERT_BUTTON_YES", "https://imgur.com/NjQ9OVL.png"
}
, {
"IQCHAT_IGNORE_ALERT_BUTTON_NO", "https://imgur.com/Gzn47GY.png"
}
, {
"IQCHAT_MUTE_ALERT_PANEL", "https://imgur.com/f8dBS6M.png"
}
, {
"IQCHAT_MUTE_ALERT_ICON", "https://imgur.com/seBCx8G.png"
}
, {
"IQCHAT_MUTE_ALERT_PANEL_REASON", "https://imgur.com/OhyZVNY.png"
}
,
}
, 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 = "***", ControllerNickname = new ControllerMessage.FormattingMessage.NickController {
BadNicks = new List<String> {
"Администратор", "Модератор", "Админ", "Модер", "Овнер", "skulidropek", "IQchat"
}
, ReplaceBadNick = "", UseNickController = true,
}
,
}
, TurnedFunc = new ControllerMessage.TurnedFuncional {
HideAdminGave = true, IgnoreUsePM = true, MuteTeamChat = true, AntiSpamSetting = new ControllerMessage.TurnedFuncional.AntiSpam {
AntiSpamActivate = true, FloodTime = 10, AntiSpamDuplesSetting = new ControllerMessage.TurnedFuncional.AntiSpam.AntiSpamDuples {
AntiSpamDuplesActivate = true, MuteSetting = new ControllerMute.Muted {
Reason = "Повторяющиеся сообщения (СПАМ)", SecondMute = 300,
}
, TryDuples = 3,
}
}
, 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>();
// ... [Code preview truncated due to length. Full source in attached file] ...