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

FREE Autokick : 1.1.1 1.1.1

Нет прав для скачивания
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.1", ResourceId = 2138)]
    [Description("Autokick help you change your server to \"maintenance break\" mode, if you need it!")]
    class Autokick : CovalencePlugin
    {
        #region Helper
        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"] = "Message is now setted to \"[#yellow]{0}[/#]\"",
                ["Message"] = "AutoKick 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)
        {
            if (!hasPermission(player, "autokick.use"))
                return;

            string arg = String.Empty;
            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;
            }
            else
                arg = args[0];

            Debug(player, $"arg: {arg} - Name: {_name} - Id: {_id} - isAdmin: {player.IsAdmin}");

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

                        // Save confs
                        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 confs
                        Config.Save();

                        // Print Toggle
                        Chat(player, Lang("Toggle", _id, "DE-ACTIVATED!"));
                        Debug(player, $"Changed Toggle to {Config["Settings", "Enabled"]}");
                    }
                    break;
                case "set":
                    {
                        // Try catch for making sure that script wont broke if player forgot set message.try
                        {
                            // 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 confs
                            Config.Save();

                            // Print KickMessage
                            Chat(player, Lang("Set", _id, config.Settings["KickMessage"]));
                        }
                        catch (Exception e) { Chat(player, Lang("Usage", _id, $"/{command}", "on/off | kick | set | message")); Puts($"{e.GetBaseException()}"); }
                    }
                    break;
                case "message":
                    {
                        // Print KickMessage
                        Chat(player, Lang("Message", _id, config.Settings["KickMessage"]));
                    }
                    break;
            }

        }
        #endregion

        #region PlayerJoin
        void OnPlayerInit(IPlayer player)
        {
            if (config.Settings["Enabled"].ToLower() == "true")
                timer.Once(8f, SomeoneTryConnect);
        }
        private void SomeoneTryConnect()
        {
            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);
            }
        }
        #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) { }
        }
        #endregion

        #region codeCleaner
        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 automaticly kicked, Server is on maintenance break!" },
                    { PluginSettings.Enabled, "false" },
                }
            };
            return defaultConfig;
        }
        #endregion

        #region Configuration Setup
        private PluginConfig config;

        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);
        }

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

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