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

FREE KlvBanSystem : 1.1.0 1.1.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("KlvBanSystem", "Sergioklv", "1.1.0")]
    [Description("Plugin for banning and unbanning players by SteamID and IP at the same time")]
    class KlvBanSystem : RustPlugin {
        // Changelog: Update 1.1.0 -> Fixed hooks and cleaning some code.// This plugin is verry simple so please don't hate me
        // Plugin created by: sergioklv
        // Discord: sergioklv
        // If some one want to update this plugin please upload it to discord: TheRustBay link: https://discord.gg/D4ZtKC8dgP
        // If you ban one player the IP and STEAMID gonna be added to oxide/data/KlvBanSystemBanSystem.json
        // if player join in the server with banned IP or Steamid player gonna be kicked with ban reason.// if player join with banned IP and new/other steam account player gonna be banned and kicked with first ban reason.// If player join with banned steamid but not with banned ip player gonna be banned and kicked by steamid and ip with first ban reason.// If you delete KlvBanSystem.json all players will be unbaned SO BE CAREFUL.// The plugin does not include IP unbanning
        // This plugin created because im boring
        // If you have any other idea to add to the plugin write to me.// If you see any bugs please contact me and i will update the plugin.private Dictionary<string, BanData> bannedPlayers = new Dictionary<string, BanData>();
        void Init() {
            LoadData();
            permission.RegisterPermission("klvbansystem.useplugin", this);
        }
        private void LoadData() {
            bannedPlayers = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, BanData>>("KlvBanSystem");
        }
        private void SaveData() {
            Interface.Oxide.DataFileSystem.WriteObject("KlvBanSystem", bannedPlayers);
        }
        [ChatCommand("ban")]
        void ChatBanCommand(BasePlayer player, string command, string[] args) {
            if (!permission.UserHasPermission(player.UserIDString, "klvbansystem.useplugin")) {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }
            if (args.Length < 2) {
                SendReply(player, "Usage: /ban <PlayerName or SteamID> <Reason>");
                return;
            }
            string targetNameOrSteamID = args[0];
            string reason = string.Join(" ", args, 1, args.Length - 1);
            string targetSteamID = GetPlayerSteamID(targetNameOrSteamID);
            string targetIP = GetPlayerIP(targetNameOrSteamID);
            string playerName = GetPlayerName(targetNameOrSteamID);
            if (string.IsNullOrEmpty(targetSteamID) && string.IsNullOrEmpty(targetIP)) {
                SendReply(player, $"Player {targetNameOrSteamID} not found.");
                return;
            }
            if (bannedPlayers.ContainsKey(targetSteamID)) {
                SendReply(player, "Player is already banned.");
                return;
            }
            BanPlayer(targetSteamID, reason, targetIP, playerName);
            SaveData();
            SendReply(player, $"Player {targetNameOrSteamID} has been permanently banned.Reason: {reason}");
            KickBannedPlayer(targetNameOrSteamID, targetSteamID);
        }
        [ConsoleCommand("ban")]
        void ConsoleBanCommand(ConsoleSystem.Arg arg) {
            if (!arg.IsAdmin) {
                SendReply(arg, "You are not admin");
                return;
            }
            if (arg.Args.Length < 2) {
                SendReply(arg, "Usage: ban <PlayerName or SteamID> <Reason>");
                return;
            }
            string targetNameOrSteamID = arg.Args[0];
            string reason = string.Join(" ", arg.Args, 1, arg.Args.Length - 1);
            string targetSteamID = GetPlayerSteamID(targetNameOrSteamID);
            string targetIP = GetPlayerIP(targetNameOrSteamID);
            string playerName = GetPlayerName(targetNameOrSteamID);
            if (string.IsNullOrEmpty(targetSteamID) && string.IsNullOrEmpty(targetIP)) {
                SendReply(arg, $"Player {targetNameOrSteamID} not found.");
                return;
            }
            if (bannedPlayers.ContainsKey(targetSteamID)) {
                SendReply(arg, "Player is already banned.");
                return;
            }
            BanPlayer(targetSteamID, reason, targetIP, playerName);
            SaveData();
            SendReply(arg, $"Player {targetNameOrSteamID} has been permanently banned.Reason: {reason}");
            KickBannedPlayer(targetNameOrSteamID, targetSteamID);
        }
        [ChatCommand("unban")]
        void ChatUnbanCommand(BasePlayer player, string command, string[] args) {
            if (!permission.UserHasPermission(player.UserIDString, "klvbansystem.useplugin")) {
                SendReply(player, "You don't have permission to use this command.");
                return;
            }
            if (args.Length < 1) {
                SendReply(player, "Usage: /unban <PlayerName or SteamID> [name|steamid]");
                return;
            }
            string target = args[0];
            bool isName = true;
            if (args.Length > 1) {
                if (args[1].ToLower() == "steamid") {
                    isName = false;
                }
            }
            if (UnbanPlayer(target, isName)) {
                SendReply(player, $"Player {target} has been unbanned.");
            }
            else {
                SendReply(player, $"Player {target} is not banned.");
            }
        }
        [ConsoleCommand("unban")]
        void ConsoleUnbanCommand(ConsoleSystem.Arg arg) {
            if (!arg.IsAdmin) {
                SendReply(arg, "You are not admin");
                return;
            }
            if (arg.Args.Length < 1) {
                SendReply(arg, "Usage: unban <PlayerName or SteamID> [name|steamid]");
                return;
            }
            string target = arg.Args[0];
            bool isName = true;
            if (arg.Args.Length > 1) {
                if (arg.Args[1].ToLower() == "steamid") {
                    isName = false;
                }
            }
            if (UnbanPlayer(target, isName)) {
                SendReply(arg, $"Player {target} has been unbanned.");
            }
            else {
                SendReply(arg, $"Player {target} is not banned.");
            }
        }
        private void BanPlayer(string targetNameOrSteamID, string reason, string targetIP, string targetName) {
            DateTime banEndTime = DateTime.MaxValue;
            // Uisng this to ban permanently
            string targetSteamID = GetPlayerSteamID(targetNameOrSteamID);
            string playerName = GetPlayerName(targetName);
            bannedPlayers[targetSteamID] = new BanData {
                BanEndTime = banEndTime, Reason = reason, IP = targetIP, SteamID = targetSteamID, PlayerName = playerName
            }
            ;
        }
        private bool UnbanPlayer(string target, bool isName = true) {
            BanData banData = null;
            if (isName) {
                banData = bannedPlayers.Values.FirstOrDefault(data => data.PlayerName == target);
            }
            else {
                banData = bannedPlayers.Values.FirstOrDefault(data => data.SteamID == target);
            }
            if (banData != null) {
                bannedPlayers.Remove(banData.SteamID);
                SaveData();
                return true;
            }
            return false;
        }
        private string GetPlayerIP(string targetName) {
            var player = BasePlayer.Find(targetName);
            if (player != null) {
                var fullIP = player.net.connection.ipaddress;
                var ip = fullIP.Split(':')[0];
                return ip;
            }
            return null;
        }
        private string GetPlayerSteamID(string targetName) {
            var player = BasePlayer.Find(targetName);
            if (player != null) {
                return player.UserIDString;
            }
            return null;
        }
        private string GetPlayerName(string targetName) {
            var player = BasePlayer.Find(targetName);
            if (player != null) {
                return player.displayName;
            }
            return null;
        }
        private void KickBannedPlayer(string targetName, string targetSteamID) {
            string targetIP = GetPlayerIP(targetName);
            string banReason = GetBanReason(targetIP, targetSteamID);
            var playerToKick = BasePlayer.Find(targetName);
            if (playerToKick != null) {
                playerToKick.Kick($"You are banned.Reason: {banReason}");
            }
        }
        void OnPlayerConnected(BasePlayer player) {
            string targetName = player.displayName;
            string targetSteamID = player.UserIDString;
            string targetIP = GetPlayerIP(targetName);
            if (IsIPBanned(targetIP) || IsSteamIDBanned(targetSteamID)) {
                string banReason = GetBanReason(targetIP, targetSteamID);
                rust.RunServerCommand($"ban {targetSteamID}  {banReason}");
                timer.Once(1.7f, () => {
                    player.Kick($"You are banned.Reason: {banReason}");
                }
                );
                Puts($"Player {targetName} with IP {targetIP} and SteamID {targetSteamID} tried to connect but is banned.");
                Puts($"This ip: {targetIP}.is banned! But if player tried to join with diferent account we are banning new acc: {targetSteamID} and {targetIP}");
            }
        }
        private bool IsIPBanned(string targetIP) {
            return bannedPlayers.Values.Any(data => data.IP == targetIP);
        }
        private bool IsSteamIDBanned(string targetSteamID) {
            return bannedPlayers.Values.Any(data => data.SteamID == targetSteamID);
        }
        private string GetBanReason(string targetIP, string targetSteamID) {
            BanData banData = bannedPlayers.Values.FirstOrDefault(data => data.IP == targetIP || data.SteamID == targetSteamID);
            if (banData != null) {
                return banData.Reason;
            }
            return "Banned";
        }
        class BanData {
            public DateTime BanEndTime {
                get;
                set;
            }
            public string Reason {
                get;
                set;
            }
            public string IP {
                get;
                set;
            }
            public string SteamID {
                get;
                set;
            }
            public string PlayerName {
                get;
                set;
            }
        }
    }
}

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