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

FREE AutoChat : 0.4.9 0.4.9

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Globalization;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Libraries.Covalence;
namespace Oxide.Plugins {
    [Info("AutoChat", "Frenk92", "0.4.9", ResourceId = 2230)]
    [Description("Automatic clans/private chat switching")]
    class AutoChat : RustPlugin {
        [PluginReference]
        Plugin Friends, Clans, BetterChat;
        bool BC = true;
        const string PermAdmin = "autochat.admin";
        const string PermUse = "autochat.use";
        List<string> ChatType = new List<string>();
#region Config
        const string configVersion = "0.2.2";
        ConfigData _config;
        class ConfigData {
            public bool Enabled {
                get;
                set;
            }
            public bool PlayerActive {
                get;
                set;
            }
            public Dictionary<string, List<string>> CustomChat {
                get;
                set;
            }
            public bool UIEnabled {
                get;
                set;
            }
            public UIConfig UISettings {
                get;
                set;
            }
            public string Version {
                get;
                set;
            }
        }
        class UIConfig {
            public string BackgroundColor {
                get;
                set;
            }
            public string TextColor {
                get;
                set;
            }
            public string FontSize {
                get;
                set;
            }
            public string AnchorMin {
                get;
                set;
            }
            public string AnchorMax {
                get;
                set;
            }
        }
        ConfigData DefaultConfig() {
            var config = new ConfigData {
                Enabled = true, PlayerActive = false, CustomChat = new Dictionary<string, List<string>>() {
                    {
                        "Test", new List<string> {
                            "command1", "command2"
                        }
                    }
                }
                , UIEnabled = true, UISettings = new UIConfig {
                    BackgroundColor = "0.29 0.49 0.69 0.5", TextColor = "#0000FF", FontSize = "15", AnchorMin = "0 0.125", AnchorMax = "0.012 0.1655"
                }
                , Version = configVersion
            }
            ;
            return config;
        }
        protected override void LoadDefaultConfig() {
            PrintWarning("Creating a configuration file.");
            Config.Clear();
            _config = DefaultConfig();
            SaveConfigData();
        }
        void UpdateConfig() {
            LoadConfigData();
            if (_config.Version == configVersion) return;
            var oldConfig = _config;
            _config = DefaultConfig();
            SetConfig(oldConfig.Enabled, _config.Enabled);
            SetConfig(oldConfig.PlayerActive, _config.PlayerActive);
            SetConfig(oldConfig.CustomChat, _config.CustomChat);
            SetConfig(oldConfig.UIEnabled, _config.UIEnabled);
            if (oldConfig.UISettings != null) {
                SetConfig(oldConfig.UISettings.BackgroundColor, _config.UISettings.BackgroundColor);
                SetConfig(oldConfig.UISettings.TextColor, _config.UISettings.TextColor);
                SetConfig(oldConfig.UISettings.FontSize, _config.UISettings.FontSize);
                SetConfig(oldConfig.UISettings.AnchorMin, _config.UISettings.AnchorMin);
                SetConfig(oldConfig.UISettings.AnchorMax, _config.UISettings.AnchorMax);
            }
            SaveConfigData();
        }
        void SetConfig<T>(T oldSet, T newSet) {
            if (oldSet != null) newSet = oldSet;
        }
        private void LoadConfigData() => _config = Config.ReadObject<ConfigData>();
        private void SaveConfigData() => Config.WriteObject(_config, true);
#endregion
#region Data
        Dictionary<ulong, string> chatUser = new Dictionary<ulong, string>();
        Dictionary<ulong, PlayerChat> Users = new Dictionary<ulong, PlayerChat>();
        class PlayerChat {
            public string Name {
                get;
                set;
            }
            public bool Active {
                get;
                set;
            }
            public PlayerChat(string Name, bool Active) {
                this.Name = Name;
                this.Active = Active;
            }
        }
        private void LoadData() {
            Users = Interface.GetMod().DataFileSystem.ReadObject<Dictionary<ulong, PlayerChat>>("AutoChat");
        }
        private void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("AutoChat", Users);
        }
        PlayerChat GetPlayerData(BasePlayer player) {
            PlayerChat playerData;
            if (!Users.TryGetValue(player.userID, out playerData)) {
                Users[player.userID] = playerData = new PlayerChat(player.displayName, _config.PlayerActive);
                SaveData();
            }
            if (!chatUser.ContainsKey(player.userID) && Users[player.userID].Active) chatUser.Add(player.userID, "g");
            return playerData;
        }
#endregion
#region Hooks
        void OnServerInitialized() {
            CheckPlugins();
        }
        void Loaded() {
            LoadData();
            UpdateConfig();
            DefaultMessages();
            permission.RegisterPermission(PermAdmin, this);
            permission.RegisterPermission(PermUse, this);
            if (_config.Enabled && _config.UIEnabled) {
                foreach (var p in BasePlayer.activePlayerList) {
                    if ((!Users.ContainsKey(p.userID) && !_config.PlayerActive) || (p.IsSleeping() || p.IsWounded() || p.IsDead())) continue;
                    GetPlayerData(p);
                    ToggleUI(p, true);
                }
            }
        }
        void Unload() {
            chatUser.Clear();
            foreach (var p in chatUI) DestroyUI(p);
            chatUI.Clear();
        }
        void OnPlayerSleep(BasePlayer player) {
            ToggleUI(player);
        }
        void OnPlayerSleepEnded(BasePlayer player) {
            ToggleUI(player, true);
        }
        void OnPlayerWound(BasePlayer player) {
            ToggleUI(player);
        }
        void OnPlayerRecover(BasePlayer player) {
            ToggleUI(player, true);
        }
        void OnPlayerDie(BasePlayer player, HitInfo info) {
            ToggleUI(player);
        }
        void OnPlayerInit(BasePlayer player) {
            if (!_config.Enabled || (!_config.PlayerActive && !Users.ContainsKey(player.userID))) return;
            GetPlayerData(player);
        }
        void OnPlayerDisconnected(BasePlayer player, string reason) {
            if (chatUser.ContainsKey(player.userID)) chatUser.Remove(player.userID);
            ToggleUI(player);
        }
#endregion
#region Commands
        [ChatCommand("ac")]
        private void cmdAutoChat(BasePlayer player, string command, string[] args) {
            if (args.Length == 0 || args == null) return;
            if (!_config.Enabled && !HasPermission(player.UserIDString, PermAdmin)) {
                MessageChat(player, Lang("IsDisabled", player.UserIDString));
                return;
            }
            if (!HasPermission(player.UserIDString, PermUse)) {
                MessageChat(player, Lang("NoPerm", player.UserIDString));
                return;
            }
            try {
                switch (args[0]) {
                    case "help" : {
                        if (HasPermission(player.UserIDString, PermAdmin)) MessageChat(player, Lang("Help", player.UserIDString) + Lang("HelpAdmin", player.UserIDString));
                        else MessageChat(player, Lang("Help", player.UserIDString));
                        break;
                    }
                    case "active" : {
                        var playerData = GetPlayerData(player);
                        var flag = playerData.Active = !playerData.Active;
                        if (args.Length > 1) {
                            if (!bool.TryParse(args[1], out flag)) {
                                MessageChat(player, Lang("ErrorBool", player.UserIDString));
                                break;
                            }
                            playerData.Active = flag;
                        }
                        if (playerData.Active) {
                            if (_config.UIEnabled) {
                                chatUser.Add(player.userID, "g");
                                ToggleUI(player, true);
                            }
                            MessageChat(player, Lang("Activated", player.UserIDString));
                        }
                        else {
                            if (_config.UIEnabled) {
                                ToggleUI(player);
                                chatUser.Remove(player.userID);
                            }
                            MessageChat(player, Lang("Deactivated", player.UserIDString));
                        }
                        SaveData();
                        break;
                    }
                    case "enable" : {
                        if (!HasPermission(player.UserIDString, PermAdmin)) {
                            MessageChat(player, Lang("NoPerm", player.UserIDString));
                            break;
                        }
                        var enabled = _config.Enabled = !_config.Enabled;
                        if (args.Length > 1) {
                            if (!bool.TryParse(args[1], out enabled)) {
                                MessageChat(player, Lang("ErrorBool", player.UserIDString));
                                break;
                            }
                            _config.Enabled = enabled;
                        }
                        if (enabled) {
                            MessageChat(player, Lang("Enabled", player.UserIDString));
                            foreach (var p in BasePlayer.activePlayerList) {
                                if ((!Users.ContainsKey(p.userID) && !_config.PlayerActive) || (p.IsSleeping() || p.IsWounded() || p.IsDead())) continue;
                                GetPlayerData(p);
                                ToggleUI(p, true);
                            }
                        }
                        else {
                            chatUser.Clear();
                            foreach (var p in chatUI) ToggleUI(p);
                            MessageChat(player, Lang("Disabled", player.UserIDString));
                        }
                        SaveConfigData();
                        break;
                    }
                    case "auto" : {
                        if (!HasPermission(player.UserIDString, PermAdmin)) {
                            MessageChat(player, Lang("NoPerm", player.UserIDString));
                            break;
                        }
                        var pa = _config.PlayerActive = !_config.PlayerActive;
                        if (args.Length > 1) {
                            if (!bool.TryParse(args[1], out pa)) {
                                MessageChat(player, Lang("ErrorBool", player.UserIDString));
                                break;
                            }
                            _config.PlayerActive = pa;
                        }
                        if (pa) MessageChat(player, Lang("AutoON", player.UserIDString));
                        else MessageChat(player, Lang("AutoOFF", player.UserIDString));
                        SaveConfigData();
                        break;
                    }
                    case "ui" : {
                        if (!HasPermission(player.UserIDString, PermAdmin)) {
                            MessageChat(player, Lang("NoPerm", player.UserIDString));
                            break;
                        }
                        var ui = _config.UIEnabled = !_config.UIEnabled;
                        if (args.Length > 1) {
                            if (!bool.TryParse(args[1], out ui)) {
                                MessageChat(player, Lang("ErrorBool", player.UserIDString));
                                break;
                            }
                            _config.UIEnabled = ui;
                        }
                        if (ui) {
                            foreach (var p in BasePlayer.activePlayerList) {
                                if ((!Users.ContainsKey(p.userID) && !_config.PlayerActive) || (p.IsSleeping() || p.IsWounded() || p.IsDead())) continue;
                                GetPlayerData(p);
                                ToggleUI(p, true);
                            }
                            MessageChat(player, Lang("UIEnabled", player.UserIDString));
                        }
                        else {
                            foreach (var p in chatUI) DestroyUI(p);
                            chatUI.Clear();
                            MessageChat(player, Lang("UIDisabled", player.UserIDString));
                        }
                        SaveConfigData();
                        break;
                    }
                }
            }
            catch {
            }
        }
        [ChatCommand("g")]
        private void cmdGlobalChat(BasePlayer player, string command, string[] args) {
            if (!_config.Enabled || !isActive(player.userID)) return;
            var flag = false;
            if (args.Length == 0 || args == null) {
                if (chatUser[player.userID] == "g") return;
                MessageChat(player, Lang("GlobalChat", player.UserIDString));
                flag = true;
            }
            if (flag || chatUser[player.userID] != "g") {
                chatUser[player.userID] = "g";
                UpdateUI(player);
            }
            var message = string.Empty;
            for (var i = 0; i < args.Length; i++) message = $"{message} {args[i]}";
            rust.RunClientCommand(player, "chat.say", message);
        }
        [ConsoleCommand("ac")]
        private void consAutoChat(ConsoleSystem.Arg arg) {
            if ((arg.Connection != null && arg.Connection.authLevel < 2) || arg.Args.Length == 0 || arg.Args == null) return;
            switch (arg.Args[0]) {
                case "enable" : {
                    var enabled = _config.Enabled = !_config.Enabled;
                    if (arg.Args.Length > 1) {
                        if (!bool.TryParse(arg.Args[1], out enabled)) {
                            Puts(Lang("ErrorBool"));
                            break;
                        }
                        _config.Enabled = enabled;
                    }
                    if (enabled) {
                        Puts(Lang("Enabled"));
                        foreach (var p in BasePlayer.activePlayerList) {
                            if ((!Users.ContainsKey(p.userID) && !_config.PlayerActive) || (p.IsSleeping() || p.IsWounded() || p.IsDead())) continue;
                            GetPlayerData(p);
                            ToggleUI(p, true);
                        }
                    }
                    else {
                        chatUser.Clear();
                        foreach (var p in chatUI) ToggleUI(p);
                        Puts(Lang("Disabled"));
                    }
                    SaveConfigData();
                    break;
                }
                case "auto" : {
                    var pa = _config.PlayerActive = !_config.PlayerActive;
                    if (arg.Args.Length > 1) {
                        if (!bool.TryParse(arg.Args[1], out pa)) {
                            Puts(Lang("ErrorBool"));
                            break;
                        }
                        _config.PlayerActive = pa;
                    }
                    if (pa) Puts(Lang("AutoON"));
                    else Puts(Lang("AutoOFF"));
                    SaveConfigData();
                    break;
                }
                case "ui" : {
                    var ui = _config.UIEnabled = !_config.UIEnabled;
                    if (arg.Args.Length > 1) {
                        if (!bool.TryParse(arg.Args[1], out ui)) {
                            Puts(Lang("ErrorBool"));
                            break;
                        }
                        _config.UIEnabled = ui;
                    }
                    if (ui) {
                        foreach (var p in BasePlayer.activePlayerList) {
                            if ((!Users.ContainsKey(p.userID) && !_config.PlayerActive) || (p.IsSleeping() || p.IsWounded() || p.IsDead())) continue;
                            GetPlayerData(p);
                            ToggleUI(p, true);
                        }
                        Puts(Lang("UIEnabled"));
                    }
                    else {
                        foreach (var p in chatUI) DestroyUI(p);
                        chatUI.Clear();
                        Puts(Lang("UIDisabled"));
                    }
                    SaveConfigData();
                    break;
                }
            }
        }
#endregion
#region Methods
        private void OnUserCommand(IPlayer player, string command, string[] args) {
            if (!_config.Enabled || !player.IsConnected || args == null) return;
            var bpl = player.Object as BasePlayer;
            if (!bpl || !HasPermission(bpl.UserIDString, PermUse) || !isActive(bpl.userID)) return;
            var cmdtarget = command + " $target";
            if (!ChatType.Contains(command) && !ChatType.Contains(cmdtarget)) return;
            var target = "";
            if (ChatType.Contains(cmdtarget)) {
                if (args.Length > 0) target = " " + args[0];
                else return;
            }
            if (!chatUser[bpl.userID].Contains(command) || (target != "" && !chatUser[bpl.userID].Equals(command + target))) {
                chatUser[bpl.userID] = command + target;
                UpdateUI(bpl);
            }
        }
        object OnPlayerChat(ConsoleSystem.Arg arg) {
            if (!_config.Enabled) return null;
            var player = (BasePlayer)arg.Connection.player;
            if (!player || !HasPermission(player.UserIDString, PermUse) || !isActive(player.userID)) return null;
            var cmd = chatUser[player.userID];
            if (cmd == "g") return null;
            var message = arg.GetString(0, "text");
            rust.RunClientCommand(player, "chat.say", $"/{cmd} {message}");
            if (BC) return null;
            else return false;
        }
        object OnBetterChat(Dictionary<string, object> data) {
            var player = (IPlayer)data["Player"];
            if (!_config.Enabled || !HasPermission(player.Id, PermUse)) return data;
            var bPlayer = Game.Rust.RustCore.FindPlayerByIdString(player.Id);
            if (!bPlayer || !isActive(bPlayer.userID) || chatUser[bPlayer.userID] == "g") return data;
            return false;
        }
#endregion
#region Messages
        void DefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["Enabled"]
                = "AutoChat was enabled.", ["Disabled"] = "AutoChat was disabled.", ["Activated"] = "You have active the autochat.", ["Deactivated"] = "You have deactive the autochat.", ["UIEnabled"] = "UI was enabled.", ["UIDisabled"] = "UI was disabled.", ["AutoON"] = "AutoChat is now auto-activated for new players.", ["AutoOFF"] = "AutoChat is now auto-deactivated for new players.", ["GlobalChat"] = "You switched to the global chat.", ["NoPerm"] = "You don't have permission to use this command.", ["IsDisabled"] = "The plugin is disabled.", ["ErrorBool"] = "Error.Only \"true\" or \"false\".", ["NoPlugins"] = "The plugin was disabled because weren't found supported plugins.", ["ListPlugins"] = "Supported plugins: {0}{1}", ["Help"] = ">> AUTOCHAT HELP <<\n/ac active \"true/false:OPTIONAL\" - to active/deactive autochat.\n/g \"message:OPTIONAL\" - to send message and switch to global chat.", ["HelpAdmin"] = "\nAdmin Commands:\n/ac enable \"true/false:OPTIONAL\" - to enable/disable plugin.\n/ac auto \"true/false:OPTIONAL\" - to auto-active/deactive plugin for new players.",
            }
            , this);
        }
        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        void MessageChat(BasePlayer player, string message, string args = null) => PrintToChat(player, $"{message}", args);
#endregion
#region Utilities
        void CheckPlugins() {
            var list = new List<string>();
            if (Clans) {
                ChatType.Add("c");
                if (Clans.ResourceId == 2087)  //Universal Clans
                {
                    ChatType.Add("a");
                    list.Add("Clans");
                }
                else list.Add("Rust:IO Clans");
            }
            if (plugins.Exists("PrivateMessage")) {
                ChatType.Add("pm $target");
                ChatType.Add("r");
                list.Add("PrivateMessage");
            }
            if (Friends && Friends.ResourceId == 2120)  //Universal Friends
            {
                ChatType.Add("fm");
                ChatType.Add("f");
                ChatType.Add("pm $target");
                ChatType.Add("m $target");
                ChatType.Add("rm");
                ChatType.Add("r");
                list.Add("Friends");
            }
            var lcus = new List<string>();
            foreach (var p in _config.CustomChat) if (plugins.Exists(p.Key)) {
                foreach (var c in p.Value) ChatType.Add(c);
                lcus.Add(p.Key);
            }
            if (ChatType.Count == 0) {
                _config.Enabled = false;
                PrintWarning(Lang("NoPlugins"));
            }
            else {
                Puts(Lang("ListPlugins", null, string.Join(", ", list.ToArray()), lcus.Count != 0 ? "\nCustomChat: " + string.Join(", ", lcus.ToArray()) : null));
                list.Clear();
                lcus.Clear();
            }
            if (BetterChat) {
                var v = Convert.ToInt32(BetterChat.Version.ToString().Split('.')[0]);
                if (v >= 5) BC = false;
            }
            else BC = false;
        }
        bool isActive(ulong id) => Users.ContainsKey(id) && Users[id].Active;
        bool HasPermission(string id, string perm) => permission.UserHasPermission(id, perm);
#endregion
#region CUI
        static string cuiJson = @"[
        {
            ""name"": ""backAC"",
            ""parent"": ""Hud"",
            ""components"": [
              {
                ""type"": ""UnityEngine.UI.Image"",
                ""color"": ""{BackColor}""
              },
              {
                ""type"": ""RectTransform"",
                ""anchormin"": ""{AnchorMin}"",
                ""anchormax"": ""{AnchorMax}""
              }
            ]
          },
          {
            ""name"": ""lblAC"",
            ""parent"": ""backAC"",
            ""components"": [
              {
                ""text"": ""{Command}"",
                ""type"": ""UnityEngine.UI.Text"",
                ""color"": ""{TextColor}"",
                ""fontSize"": {FontSize},
                ""align"": ""MiddleCenter""
              },
              {
                ""type"": ""RectTransform"",
                ""anchormin"": ""0 0"",
                ""anchormax"": ""1 1""
              }
            ]
          }
        ]";
        List<BasePlayer> chatUI = new List<BasePlayer>();
        void ToggleUI(BasePlayer player, bool show=false) {
            try {
                if (!_config.Enabled || !_config.UIEnabled || (!isActive(player.userID) && show)) return;
                if (!chatUI.Contains(player) && show) {
                    AddUI(player);
                    chatUI.Add(player);
                }
                else if (chatUI.Contains(player) && !show) {
                    DestroyUI(player);
                    chatUI.Remove(player);
                }
            }
            catch {
            }
        }
        void AddUI(BasePlayer player) {
            var backColor = Color(_config.UISettings.BackgroundColor);
            var textColor = Color(_config.UISettings.TextColor);
            var command = chatUser[player.userID].Split(' ')[0];
            var cui = cuiJson.Replace("{BackColor}", backColor).Replace("{TextColor}", textColor).Replace("{FontSize}", _config.UISettings.FontSize).Replace("{AnchorMin}", _config.UISettings.AnchorMin).Replace("{AnchorMax}", _config.UISettings.AnchorMax).Replace("{Command}", command);
            CuiHelper.AddUi(player, cui);
        }
        void UpdateUI(BasePlayer player) {
            DestroyUI(player);
            AddUI(player);
        }
        void DestroyUI(BasePlayer player) => CuiHelper.DestroyUi(player, "backAC");
        public static string Color(string hexColor) {
            if (!hexColor.StartsWith("#")) return hexColor;
            if (hexColor.StartsWith("#")) hexColor = hexColor.TrimStart('#');
            int red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier);
            int green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier);
            int blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier);
            return $"{(double)red / 255} {(double)green / 255} {(double)blue / 255} 1";
        }
#endregion
    }
}

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