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

FREE AdminDeepCover : 2.0.2 2.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using ConVar;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;
namespace Oxide.Plugins {
    [Info("Admin Deep Cover", "Tricky", "2.0.2")]
    [Description("Hides admin original identify by using a different steam profile")]
    public class AdminDeepCover : RustPlugin {
#region Plugin References
        [PluginReference]
        private Plugin BetterChat;
#endregion
#region Classes Stored Data
        private static readonly string Perm = "admindeepcover.use";
        private static readonly string RichTextFormat = "<color={1}><size={2}>{0}</size></color>";
        Dictionary<ulong, Identify.RestoreInfo> PlayerData = new Dictionary<ulong, Identify.RestoreInfo>();
        private class Identify {
            public string Name;
            public ulong UserID;
            public class RestoreInfo : Identify {
                public string RestoreName;
                public ulong RestoreUserID;
            }
        }
#endregion
#region Config
        Configuration config;
        class Configuration {
            [JsonProperty("Better Chat Group")]
            public string BetterChatGroup = "default";
            [JsonProperty("Identifies", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<Identify> Identifies = new List<Identify> {
                new Identify {
                    Name = "TheFlow92 skinbet.gg", UserID = 76561198353995677
                }
                , new Identify {
                    Name = "Pr@y magicalrust.ru", UserID = 76561198444436710
                }
                , new Identify {
                    Name = "Tricky", UserID = 76561198976471280
                }
            }
            ;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config == null) throw new Exception();
            }
            catch {
                Config.WriteObject(config, false, $"{Interface.Oxide.ConfigDirectory}/{Name}.jsonError");
                PrintError("The configuration file contains an error and has been replaced with a default config.\n" + "The error configuration file was saved in the.jsonError extension");
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() => config = new Configuration();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Lang
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["No Permission"]
                = "You don't have permission to use this command!", ["Deep Cover Enabled"] = "Deep Cover has been enabled!", ["Deep Cover Disabled"] = "Deep Cover has been disabled!",
            }
            , this);
        }
#endregion
#region Oxide Hooks
        private void Init() => permission.RegisterPermission(Perm, this);
        private void OnServerInitialized() {
            if (BetterChat != null) Unsubscribe(nameof(OnPlayerChat));
            else Unsubscribe(nameof(OnUserChat));
        }
        private void Unload() {
            foreach (BasePlayer player in BasePlayer.activePlayerList) {
                var identify = GetIdentify(player);
                if (identify == null) return;
                Rename(player, identify.RestoreName);
            }
        }
        private void OnPlayerConnected(BasePlayer player) => OnPlayerRespawned(player);
        private void OnPlayerRespawned(BasePlayer player) {
            var identify = GetIdentify(player);
            if (identify == null) return;
            Rename(player, identify.Name);
        }
        private void OnPlayerDeath(BasePlayer player, HitInfo info) {
            if (info == null || info.Initiator == null) return;
            var attacker = info.Initiator.ToPlayer();
            if (attacker == null) return;
            var identify = GetIdentify(attacker);
            if (identify == null) return;
            attacker.userID = identify.UserID;
            timer.Once(0.2f, () => {
                if (attacker != null) attacker.userID = identify.RestoreUserID;
            }
            );
        }
#region Chat Hooks
        private object OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) {
            if (channel == Chat.ChatChannel.Team) return null;
            var identify = GetIdentify(player);
            if (identify == null) return null;
            Server.Broadcast(message, $"<color=#5af>{identify.Name}</color>", identify.UserID);
            return true;
        }
        private object OnUserChat(IPlayer player, string message) => PlayerData.ContainsKey(Convert.ToUInt64(player.Id)) ? true : (object)null;
        private object OnBetterChat(Dictionary<string, object> data) {
            var chatChannel = (Chat.ChatChannel)data["ChatChannel"];
            if (chatChannel == Chat.ChatChannel.Team) return null;
            var player = (IPlayer)data["Player"];
            if (player == null) return null;
            var identify = GetIdentify((BasePlayer)player.Object);
            if (identify == null) return null;
            var groupFields = (Dictionary<string, object>)BetterChat?.Call("API_GetGroupFields", config.BetterChatGroup);
            var message = ((string)groupFields["ChatFormat"]).Replace("{Title}", string.Format(RichTextFormat, groupFields["Title"], groupFields["TitleColor"], groupFields["TitleSize"])).Replace("{Username}", string.Format(RichTextFormat, identify.Name, groupFields["UsernameColor"], groupFields["UsernameSize"])).Replace("{Message}", string.Format(RichTextFormat, data["Message"], groupFields["MessageColor"], groupFields["MessageSize"]));
            Server.Broadcast(message, identify.UserID);
            return true;
        }
#endregion
#endregion
#region Commands
        [ConsoleCommand("deepcover")]
        private void ccmdDeepCover(ConsoleSystem.Arg arg) => cmdDeepCover((BasePlayer)arg.Connection.player, arg.cmd.FullName, arg.Args);
        [ChatCommand("deepcover")]
        private void cmdDeepCover(BasePlayer player, string command, string[] args) {
            if (!HasPermission(player, Perm)) {
                player.ChatMessage(Lang("No Permission"));
                return;
            }
            if (!PlayerData.ContainsKey(player.userID)) {
                var identify = config.Identifies.GetRandom();
                PlayerData.Add(player.userID, new Identify.RestoreInfo {
                    Name = identify.Name, UserID = identify.UserID, RestoreName = player.displayName, RestoreUserID = player.userID
                }
                );
                Rename(player, identify.Name);
                player.ChatMessage(Lang("Deep Cover Enabled"));
            }
            else {
                var identify = GetIdentify(player);
                PlayerData.Remove(player.userID);
                Rename(player, identify.RestoreName);
                player.ChatMessage(Lang("Deep Cover Disabled"));
            }
        }
#endregion
#region Methods
        private Identify.RestoreInfo GetIdentify(BasePlayer player) {
            Identify.RestoreInfo identify;
            if (PlayerData.TryGetValue(player.userID, out identify)) return identify;
            return null;
        }
        private void Rename(BasePlayer player, string newName) {
            player.displayName = newName;
            player.IPlayer.Rename(newName);
        }
#endregion
#region API
        private bool API_IsDeepCovered(BasePlayer player) => PlayerData.ContainsKey(player.userID);
#endregion
#region Helpers
        private string Lang(string key, string id = null) => lang.GetMessage(key, this, id);
        private bool HasPermission(BasePlayer player, string perm) => permission.UserHasPermission(player.UserIDString, perm);
#endregion
    }
}

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