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

FREE Autokick : 1.1.2 1.1.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Linq;
using System.Collections.Generic;

using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Core.Libraries.Covalence;
using Newtonsoft.Json;

namespace Oxide.Plugins
{
    [Info("Autokick", "Exel80", "1.1.2", ResourceId = 2138)]
    [Description("Autokick help you change your server to \"maintenance break\" mode, if you need it!")]
    class Autokick : CovalencePlugin
    {
        #region Initialize
        public bool DEBUG = false;
        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);

        private void Loaded()
        {
            LoadConfigValues();

            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["Toggle"] = "Autokick is [#yellow]{0}[/#]",
                ["KickHelp"] = "When Autokick is [#yellow]{0}[/#], use [#yellow]{1}[/#] to kick all online players.",
                ["Kicked"] = "All online players has been kicked! Except players that have [#yellow]{0}[/#] permission or is admin.",
                ["Set"] = "Kick message is now setted to \"[#yellow]{0}[/#]\"",
                ["Message"] = "Kick message is \"[#yellow]{0}[/#]\"",
                ["ToggleHint"] = "Autokick must be [#yellow]{0}[/#], before can execute [#yellow]{1}[/#] command!",
                ["Usage"] = "[#cyan]Usage:[/#] [#silver]{0}[/#] [#grey]{1}[/#]"
            }, this);
        }
        #endregion

        #region Commands
        [Command("ak", "autokick")]
        private void cmdAK(IPlayer player, string command, string[] args)
        {
            // Checking that player has permission to use commands
            if (!hasPermission(player, "autokick.use"))
                return;

            string _name = player.Name;
            string _id = player.Id.ToString();

            // Check that args isn't empty.if (args?.Length < 1)
            {
                _chat(player, Lang("Usage", _id, $"/{command}", "on/off | kick | set | message"));
                return;
            }

            _debug(player, $"arg: {args[0]} - Name: {_name} - Id: {_id} - isAdmin: {player.IsAdmin}");

            switch (args[0])
            {
                case "on":
                    {
                        // Change Toggle from config file
                        _config.Settings["Enabled"] = "true";
                        Config["Settings", "Enabled"] = "true";

                        // Save config
                        Config.Save();

                        // Print Toggle
                        _chat(player, Lang("Toggle", _id, "ACTIVATED!") + "\n" + Lang("KickHelp", _id, "true", "/ak kick"));
                        _debug(player, $"Changed Toggle to {_config.Settings["Enabled"]}");
                    }
                    break;
                case "kick":
                    {
                        // Check if Toggle isn't False
                        if (_config.Settings["Enabled"] != "true")
                        {
                            _chat(player, Lang("ToggleHint", _id, "true", "/ak kick"));
                            return;
                        }
                        // Kick all players (Except if config allow auth 1 and/or 2 to stay)
                        foreach (IPlayer clients in players.Connected.ToList())
                            Kicker(clients);

                        _chat(player, Lang("Kicked", _id, "autokick.join"));
                    }
                    break;
                case "off":
                    {
                        // Change Toggle from config file
                        _config.Settings["Enabled"] = "false";
                        Config["Settings", "Enabled"] = "false";

                        // Save config
                        Config.Save();

                        // Print Toggle
                        _chat(player, Lang("Toggle", _id, "DE-ACTIVATED!"));
                        _debug(player, $"Changed Toggle to {_config.Settings["Enabled"]}");
                    }
                    break;
                case "set":
                    {
                        // Checking that args length isnt less then 5
                        if (args?.Length < 5)
                        {
                            _chat(player, Lang("Usage", _id, $"/{command}", "on/off | kick | set | message"));
                            return;
                        }

                        // Read all args to one string with space.string _arg = string.Join(" ", args)?.Remove(0, 4);

                        // Change KickMessage from config file
                        _config.Settings["KickMessage"] = _arg;
                        Config["Settings", "KickMessage"] = _arg;

                        // Save config
                        Config.Save();

                        // Print KickMessage
                        _chat(player, Lang("Set", _id, _config.Settings["KickMessage"]));
                    }
                    break;
                case "message":
                    {
                        // Print KickMessage
                        _chat(player, Lang("Message", _id, _config.Settings["KickMessage"]));
                    }
                    break;
            }
        }
        #endregion

        #region PlayerJoin
        void OnPlayerInit(IPlayer client)
        {
            // If Autokick is enabled, then start timer (8sec)
            if (_config.Settings["Enabled"]?.ToLower() == "true")
            {
                timer.Once(8f, () =>
                {
                    try
                    {
                        foreach (IPlayer player in players.Connected.ToList())
                        {
                            string _name = player.Name;
                            string _id = player.Id.ToString();
                            string message = _config.Settings["KickMessage"];

                            if (DEBUG) Puts($"[Deubg] Name: {_name}, Id: {_id}, isAdmin: {player.IsAdmin}");

                            if (hasPermission(player, "autokick.join"))
                                return;

                            if (player.IsConnected)
                                player.Kick(message);
                        }
                    }
                    catch (Exception e) { PrintWarning($"{e.GetBaseException()}"); }
                });
            }
        }
        #endregion

        #region Kicker
        private void Kicker(IPlayer player)
        {
            try
            {
                if (_config.Settings["Enabled"]?.ToLower() == "true")
                {
                    string _name = player.Name;
                    string _id = player.Id.ToString();
                    string message = _config.Settings["KickMessage"];

                    if (DEBUG) Puts($"[Deubg] Name: {_name}, Id: {_id}");

                    if (hasPermission(player, "autokick.join"))
                        return;

                    if (player.IsConnected)
                        player.Kick(message);
                }
            }
            catch (Exception e) { PrintWarning($"{e.GetBaseException()}"); }
        }
        #endregion

        #region Helper
        private void _chat(IPlayer player, string msg) => player.Reply(covalence.FormatText($"{_config.Settings["Prefix"]} {msg}"));
        private void _debug(IPlayer player, string msg)
        {
            if(DEBUG)
                Puts($"[Debug] {player.Name} - {msg}");
        }
        bool hasPermission(IPlayer player, string permissionName)
        {
            if (player.IsAdmin) return true;
            return permission.UserHasPermission(player.Id.ToString(), permissionName);
        }
        #endregion

        #region Configuration Defaults
        PluginConfig DefaultConfig()
        {
            var defaultConfig = new PluginConfig
            {
                Settings = new Dictionary<string, string>
                {
                    { PluginSettings.Prefix, "[#cyan][AutoKick][/#]" },
                    { PluginSettings.KickMessage, "You have been kicked! Reason: Server is on maintenance break!" },
                    { PluginSettings.Enabled, "false" },
                }
            };
            return defaultConfig;
        }
        #endregion

        #region Configuration Setup
        private PluginConfig _config;
        private bool configChanged;

        class PluginSettings
        {
            public const string Prefix = "Prefix";
            public const string KickMessage = "KickMessage";
            public const string Enabled = "Enabled";
        }

        class PluginConfig
        {
            public Dictionary<string, string> Settings { get; set; }
        }

        protected override void LoadDefaultConfig() => Config.WriteObject(DefaultConfig(), true);

        void LoadConfigValues()
        {
            _config = Config.ReadObject<PluginConfig>();
            var defaultConfig = DefaultConfig();
            Merge(_config.Settings, defaultConfig.Settings);

            if (!configChanged) return;
            PrintWarning("Configuration file updated.");
            Config.WriteObject(_config);
        }

        void Merge<T1, T2>(IDictionary<T1, T2> current, IDictionary<T1, T2> defaultDict)
        {
            foreach (var pair in defaultDict)
            {
                if (current.ContainsKey(pair.Key)) continue;
                current[pair.Key] = pair.Value;
                configChanged = true;
            }
            var oldPairs = defaultDict.Keys.Except(current.Keys).ToList();
            foreach (var oldPair in oldPairs)
            {
                configChanged = true;
            }
        }
        #endregion
    }
}

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