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

FREE SecureAdmin : 1.2.0 1.2.0

Нет прав для скачивания
C#:
/*
 * TODO:
 * Add "banlist" command support
 * Add "banlistex" command support
 * Add "bans" command support
 * Add "kickall" command support
 * Add "mutechat" command support
 * Add "revoke" command support
 * Add "unmutechat" command support
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;

namespace Oxide.Plugins
{
    [Info("Secure Admin", "https://topplugin.ru/", "1.2.0", ResourceId = 1449)]
    [Description("Плагин для бана.Перевод: OxidePlugins")]
    public class SecureAdmin : CovalencePlugin
    {
        #region Initialization

        private const string
            permBan = "secureadmin.ban"; // global.ban, global.banlist, global.banlistex, global.listid, global.bans

        private const string permKick = "secureadmin.kick"; // global.kick, global.kickall
        private const string permSay = "secureadmin.say"; // global.mutechat, global.say, global.unmutechat
        private const string permUnban = "secureadmin.unban"; // global.banlist, global.bans, global.unban

        private bool broadcastBans;
        private bool broadcastKicks;
        private bool commandBan;
        private bool commandKick;
        private bool commandSay;
        private bool commandUnban;
        private bool protectAdmin;

        protected override void LoadDefaultConfig()
        {
            Config["Оповещение о бане (true/false)"] = broadcastBans = GetConfig("Broadcast Bans (true/false)", true);
            Config["Оповещение о кике (true/false)"] = broadcastKicks = GetConfig("Broadcast Kicks (true/false)", true);
            Config["Включить команду Ban (true/false)"] =
                commandBan = GetConfig("Enable Ban Command (true/false)", true);
            Config["Включить команду Kick (true/false)"] =
                commandKick = GetConfig("Enable Kick Command (true/false)", true);
            Config["Включить команду Say (true/false)"] =
                commandSay = GetConfig("Enable Say Command (true/false)", true);
            Config["Включить команду Unban (true/false)"] =
                commandUnban = GetConfig("Enable Unban Command (true/false)", true);
            Config["Защита Админа от бана, кика (true/false)"] =
                protectAdmin = GetConfig("Protect Admin (true/false)", true);

            SaveConfig();
        }

        private void Init()
        {
            LoadDefaultConfig();

            permission.RegisterPermission(permBan, this);
            permission.RegisterPermission(permKick, this);
            permission.RegisterPermission(permSay, this);
            permission.RegisterPermission(permUnban, this);

            if (commandBan) AddCovalenceCommand("ban", "BanCommand");
            if (commandKick) AddCovalenceCommand("kick", "KickCommand");
            if (commandSay) AddCovalenceCommand("say", "SayCommand");
            if (commandUnban) AddCovalenceCommand("unban", "UnbanCommand");
            timer.Every(1f, UpdatePlayerBans);
        }

        #endregion

        #region Localization

        protected override void LoadDefaultMessages()
        {
            // English
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NotAllowed"] = "Вам не разрешено использовать команду '{0}' ",
                ["PlayerAlreadyBanned"] = "<color=#FFB841>{0} уже забанен",
                ["PlayerBanned"] =
                    "<color=#FFB841>{0}</color> был забанен.Время бана: {2}.Причина: <color=#FFB841>'{1}'</color>",
                ["PlayerIsAdmin"] =
                    "<color=#FFB841>{0}</color> является администратором, и его нельзя забанить или кикнуть",
                ["PlayerKicked"] = "<color=#FFB841>{0}</color> был кикнут.Причина: <color=#FFB841>'{1}'</color>",
                ["PlayerNotBanned"] = "<color=#FFB841>{0}</color> не забанен",
                ["PlayerNotFound"] = "Не найдено ни одного игрока с таким именем или идентификатором",
                ["PlayerUnbanned"] = "<color=#FFB841>{0}</color> был забанен",
                ["PlayersFound"] = "Было найдено несколько игроков с таким именем, пожалуйста, укажите SteamID: {0}",
                ["ReasonUnknown"] = "Неизвестный",
                ["UsageBan"] = "Введите: <color=#FFB841>{0} <name or id> <причина> </color>",
                ["UsageKick"] = "Введите: <color=#FFB841>{0} <name or id> <причина> </color>",
                ["UsageSay"] = "Введите: <color=#FFB841>{0} <сообщение> </color>",
                ["UsageUnban"] = "Введите: <color=#FFB841>{0} <name or id> </color>",
            }, this);

            // French
            /*lang.RegisterMessages(new Dictionary<string, string>
            {
                // TODO
            }, this, "fr");*/

            // German
            /*lang.RegisterMessages(new Dictionary<string, string>
            {
                // TODO
            }, this, "de");*/

            // Russian
            /*lang.RegisterMessages(new Dictionary<string, string>
            {
                // TODO
            }, this, "ru");*/

            // Spanish
            /*lang.RegisterMessages(new Dictionary<string, string>
            {
                // TODO
            }, this, "es");*/
        }

        #endregion

        #region Ban Command

        private void BanCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permBan))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            if (args.Length < 1)
            {
                player.Reply(Lang("UsageBan", player.Id, command));
                return;
            }

            ulong targetId;
            ulong.TryParse(args[0], out targetId);
            var foundPlayers = players.FindPlayers(args[0]).ToArray();
            if (foundPlayers.Length > 1)
            {
                player.Reply("PlayersFound", player.Id,
                    string.Concat(", ", foundPlayers.Select(p => p.Name).ToArray()));
                return;
            }

            var target = foundPlayers.Length == 1 ? foundPlayers[0] : null;
            if (target != null) ulong.TryParse(target.Id, out targetId);

            if (!targetId.IsSteamId())
            {
                player.Reply(Lang("PlayerNotFound", player.Id, args[0].Sanitize()));
                return;
            }

            if (server.IsBanned(targetId.ToString()))
            {
                player.Reply(Lang("PlayerAlreadyBanned", player.Id, args[0].Sanitize()));
                return;
            }

            if (protectAdmin && target != null && target.IsAdmin)
            {
                player.Reply(Lang("PlayerIsAdmin", player.Id, target.Name.Sanitize()));
                return;
            }

            string reason = null;

            TimeSpan time = GetTime(args[1]);
            PrintWarning($"{time}");
            if (time != new TimeSpan())
            {
                reason = args.Length >= 3
                    ? string.Join(" ", args.Skip(2).ToArray())
                    : Lang("ReasonUnknown", targetId.ToString());
                if (target != null && target.IsConnected)
                {
                    target.Ban(reason, time);
                    AddBanTime(target.Id, time);
                }
                else server.Ban(targetId.ToString(), reason, time);

                var targetName = target != null ? $"{target.Name.Sanitize()} ({target.Id})" : args[0].Sanitize();
                if (broadcastBans) Broadcast("PlayerBanned", targetName, reason, time);
                else player.Reply(Lang("PlayerBanned", player.Id, targetName, reason, time));
            }
            else
            {
                reason = args.Length >= 2
                    ? string.Join(" ", args.Skip(1).ToArray())
                    : Lang("ReasonUnknown", targetId.ToString());
                if (target != null && target.IsConnected) target.Ban(reason);
                else server.Ban(targetId.ToString(), reason);

                var targetName = target != null ? $"{target.Name.Sanitize()} ({target.Id})" : args[0].Sanitize();
                if (broadcastBans) Broadcast("PlayerBanned", targetName, reason, "навсегда");
                else player.Reply(Lang("PlayerBanned", player.Id, targetName, reason, "навсегда"));
            }



        }

        #endregion

        #region Kick Command

        private void KickCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permKick))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            if (args.Length < 1)
            {
                player.Reply(Lang("UsageKick", player.Id, command));
                return;
            }

            var foundPlayers = players.FindPlayers(args[0]).ToArray();
            if (foundPlayers.Length > 1)
            {
                player.Reply("PlayersFound", player.Id,
                    string.Concat(", ", foundPlayers.Select(p => p.Name).ToArray()));
                return;
            }

            var target = foundPlayers.Length == 1 ? foundPlayers[0] : null;
            if (target == null || !target.IsConnected)
            {
                player.Reply(Lang("PlayerNotFound", player.Id, args[0].Sanitize()));
                return;
            }

            if (protectAdmin && target.IsAdmin)
            {
                player.Reply(Lang("PlayerIsAdmin", player.Id, target.Name.Sanitize()));
                return;
            }

            var reason = args.Length >= 2 ? string.Join(" ", args.Skip(1).ToArray()) : Lang("ReasonUnknown", target.Id);
            target.Kick(reason);

            var targetName = $"{target.Name.Sanitize()} ({target.Id})";
            if (broadcastKicks) Broadcast("PlayerKicked", targetName, reason);
            else player.Reply(Lang("PlayerKicked", player.Id, targetName, reason));
        }

        #endregion

        #region Say Command

        private void SayCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permSay))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            if (args.Length < 1)
            {
                player.Reply(Lang("UsageSay", player.Id, command));
                return;
            }

            var message = string.Join(" ", args.ToArray());
            server.Broadcast(message);
        }

        #endregion

        #region Unban Command

        private void UnbanCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permUnban))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            if (args.Length < 1)
            {
                player.Reply(Lang("UsageUnban", player.Id, command));
                return;
            }

            ulong targetId;
            ulong.TryParse(args[0], out targetId);
            var foundPlayers = players.FindPlayers(args[0]).ToArray();
            if (foundPlayers.Length > 1)
            {
                player.Reply("PlayersFound", player.Id,
                    string.Concat(", ", foundPlayers.Select(p => p.Name).ToArray()));
                return;
            }

            var target = foundPlayers.Length == 1 ? foundPlayers[0] : null;
            if (target != null) ulong.TryParse(target.Id, out targetId);

            if (!targetId.IsSteamId())
            {
                player.Reply(Lang("PlayerNotFound", player.Id, args[0].Sanitize()));
                return;
            }

            var targetName = target != null ? $"{target.Name.Sanitize()} ({target.Id})" : args[0].Sanitize();

            if (!server.IsBanned(targetId.ToString()))
            {
                player.Reply(Lang("PlayerNotBanned", player.Id, targetName));
                return;
            }

            server.Unban(targetId.ToString());

            player.Reply(Lang("PlayerUnbanned", player.Id, targetName));
        }

        #endregion

        #region Helpers

        private T GetConfig<T>(string name, T value) =>
            Config[name] == null ? value : (T) Convert.ChangeType(Config[name], typeof(T));

        private string Lang(string key, string id = null, params object[] args) =>
            string.Format(lang.GetMessage(key, this, id), args);

        private void Broadcast(string key, params object[] args)
        {
            foreach (var player in players.Connected.Where(p => p.IsConnected))
                player.Message(Lang(key, player.Id, args));
            Interface.Oxide.LogInfo(Lang(key, null, args));
        }

        private Regex _timeSpanPattern =
            new Regex(
                @"(?:(?<days>\d{1,3})d)?(?:(?<hours>\d{1,3})h)?(?:(?<minutes>\d{1,3})m)?(?:(?<seconds>\d{1,3})s)?",
                RegexOptions.Compiled | RegexOptions.IgnoreCase);

        TimeSpan GetTime(string text)
        {
            var match = _timeSpanPattern.Match(text);
            if (!match.Success) return new TimeSpan();

            if (!match.Groups[0].Value.Equals(text)) return new TimeSpan();

            Group daysGroup = match.Groups["days"];
            Group hoursGroup = match.Groups["hours"];
            Group minutesGroup = match.Groups["minutes"];
            Group secondsGroup = match.Groups["seconds"];

            int days = daysGroup.Success
                ? int.Parse(daysGroup.Value)
                : 0;
            int hours = hoursGroup.Success
                ? int.Parse(hoursGroup.Value)
                : 0;
            int minutes = minutesGroup.Success
                ? int.Parse(minutesGroup.Value)
                : 0;
            int seconds = secondsGroup.Success
                ? int.Parse(secondsGroup.Value)
                : 0;

            TimeSpan time = new TimeSpan(days, hours, minutes, seconds);
            if (days + hours + minutes + seconds == 0) return new TimeSpan();
            return time;
        }

        private string banFolder = "bans/PlayerBans";
        Dictionary<string, double> playerBans = new Dictionary<string, double>();

        void LoadBans()
        {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile(banFolder))
            {
                playerBans =
                    Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, double>>(banFolder);
            }
        }

        void SaveBans()
        {
            Interface.Oxide.DataFileSystem.WriteObject(banFolder, playerBans);
        }

        void UpdatePlayerBans()
        {
            if (playerBans.Count < 1) return;
            foreach (var id in playerBans.ToList())
            {
                playerBans[id.Key]--;
                if (playerBans[id.Key] == 0)
                {
                    server.Unban(id.Key);
                    playerBans.Remove(id.Key);
                    PrintWarning($"Player {id.Key} unbanned");
                }

            }

            
        }
        void AddBanTime(string user, TimeSpan time) 
        {
            playerBans.Add(user, time.TotalSeconds);
            
        }

        void Unload()
        {
            SaveBans();
        }
        #endregion
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху