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

FREE PrefixVisibility : 1.0.2 1.0.2

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Timers;
using Facepunch;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;

namespace Oxide.Plugins
{
    [Info("Prefix Visibility", "Reheight", "1.0.2")]
    [Description("Allows players to prevent their titles from showing in chat.")]
    class PrefixVisibility : CovalencePlugin
    {
        #region Global Declarations
        private PluginConfig _config;
        private List<string> _hiddenPlayers = Pool.Get<List<string>>();
        #endregion

        #region Configuration Management
        protected override void LoadDefaultConfig() => _config = GetDefaultConfig();
        protected override void SaveConfig() => Config.WriteObject(_config);
        protected override void LoadConfig()
        {
            base.LoadConfig();

            try
            {
                _config = Config.ReadObject<PluginConfig>();

                if (_config == null)
                {
                    throw new JsonException();
                }

                if (!_config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys))
                {
                    PrintWarning($"PluginConfig file {Name}.json updated.");

                    SaveConfig();
                }
            }
            catch
            {
                LoadDefaultConfig();

                PrintError("Config file contains an error and has been replaced with the default file.");
            }

        }

        private class PluginConfig
        {
            [JsonProperty(PropertyName = "Prefix", Order = 0)]
            public string Prefix { get; set; }

            [JsonProperty(PropertyName = "Commands", Order = 1)]
            public string[] ToggleCommands { get; set; }

            [JsonProperty(PropertyName = "Permission Required", Order = 2)]
            public bool PermissionRequired { get; set; }

            [JsonProperty(PropertyName = "Permission", Order = 3)]
            public string Permission { get; set; }

            [JsonProperty(PropertyName = "Remove Only Listed", Order = 4)]
            public bool BlacklistedEnabled { get; set; }

            [JsonProperty(PropertyName = "Remove Titles", Order = 5)]
            public string[] BlacklistedTitles { get; set; }

            public string ToJson() => JsonConvert.SerializeObject(this);

            public Dictionary<string, object> ToDictionary() => JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson());
        }

        private PluginConfig GetDefaultConfig()
        {
            return new PluginConfig
            {
                Prefix = "<color=#42f566>Prefix Visibility:</color>",
                ToggleCommands = new string[]
                {
                    "tag",
                    "prefix",
                    "toggleprefix",
                    "toggletag",
                    "hideprefix",
                    "hidetag"
                },
                PermissionRequired = false,
                Permission = "prefixvisibility.use",
                BlacklistedEnabled = true,
                BlacklistedTitles = new string[] { "[Owner]", "[Administrator]", "[Moderator]" }
            };
        }
        #endregion

        #region Data Management
        private void LoadData()
        {
            _hiddenPlayers.Clear();

            var data = Interface.Oxide.DataFileSystem.GetDatafile("PrefixVisibility");

            if (data["hiddenPlayers"] != null)
            {
                List<object> hiddenPlayers = (List<object>)data["hiddenPlayers"];

                foreach (string steamid in hiddenPlayers)
                {
                    _hiddenPlayers.Add(steamid);
                }
            }
        }

        private void SaveData()
        {
            var data = Interface.Oxide.DataFileSystem.GetDatafile("PrefixVisibility");

            data["hiddenPlayers"] = _hiddenPlayers;

            Interface.Oxide.DataFileSystem.SaveDatafile("PrefixVisibility");
        }
        #endregion

        #region Language Management
        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["Enabled"] = "Your tags will now show in chat.",
                ["Disabled"] = "Your tags will no longer show in chat.",
                ["NoPermission"] = "You do not have the permissions required to use this!"
            }, this);
        }

        private string Lang(string key, string pid, params object[] args) => _config.Prefix + " " + String.Format(lang.GetMessage(key, this, pid), args);
        #endregion

        private void Init()
        {

            if (_config.PermissionRequired)
                permission.RegisterPermission(_config.Permission, this);

            AddCovalenceCommand(_config.ToggleCommands, nameof(ToggleCommand));

            LoadData();
        }

        private void Unload()
        {
            SaveData();
            Pool.FreeUnmanaged(ref _hiddenPlayers);
        }

        #region ToggleCommand
        private void ToggleCommand(IPlayer player, string command, string[] args)
        {
            if (_config.PermissionRequired &&
                !permission.UserHasPermission(player.Id, _config.Permission))
            {
                player.Reply(Lang("NoPermissions", player.Id));
                return;
            }

            if (_hiddenPlayers.Contains(player.Id))
            {
                _hiddenPlayers.Remove(player.Id);
                player.Reply(Lang("Enabled", player.Id));
            }
            else
            {
                _hiddenPlayers.Add(player.Id);
                player.Reply(Lang("Disabled", player.Id));
            }
        }
        #endregion

        #region BetterChat Handling
        private object OnBetterChat(Dictionary<string, object> data)
        {
            List<string> titles = (List<string>)data["Titles"];
            List<string> _temp = titles.ToList();
            IPlayer player = (IPlayer)data["Player"];

            if (!titles.Any() || player == null)
                return null;

            if (!_hiddenPlayers.Contains(player.Id))
                return null;

            // Filtering Begins
            if (_temp.Count() > 0)
                foreach (var title in _temp)
                {
                    if (title == null || title.Length <= 0) continue; // Sanity Check

                    var formattedTitle = Formatter.ToPlaintext(title);

                    if (formattedTitle == null || formattedTitle.Length <= 0) continue; // 2nd Sanity Check


                    Puts(formattedTitle);
                    if (Regex.IsMatch(formattedTitle, @"^\[[#][0-9A-Fa-f]{3,6}\]$")) continue; // Skip Colors
                    if (Regex.IsMatch(formattedTitle, @"^\[[+][0-9]{1,6}\]$")) continue; // Skip Size
                    if (Regex.IsMatch(formattedTitle, @"^\[/#]$")) continue; // Skip Closing

                    if (_config.BlacklistedEnabled && !_config.BlacklistedTitles.Contains(formattedTitle))
                    {
                        continue;
                    }

                    titles.Remove(title);
                }
            // End Of Filtering

            return data;
        }
        #endregion
    }
}

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