示例#1
0
        private static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan)
        {
            try
            {
                if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false))
                {
                    duration = int.MaxValue;
                }

                string userId  = null;
                string address = user.GetComponent <NetworkIdentity>().connectionToClient.address;

                API.Features.Player targetPlayer = API.Features.Player.Get(user);
                API.Features.Player issuerPlayer = API.Features.Player.Get(issuer) ?? API.Features.Server.Host;

                try
                {
                    if (ConfigFile.ServerConfig.GetBool("online_mode", false))
                    {
                        userId = targetPlayer.UserId;
                    }
                }
                catch
                {
                    ServerConsole.AddLog("Failed during issue of User ID ban (1)!");
                    return(false);
                }

                string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. ";
                if (!string.IsNullOrEmpty(reason))
                {
                    message = message + "Reason: " + reason;
                }

                if (!ServerStatic.PermissionsHandler.IsVerified || !targetPlayer.IsStaffBypassEnabled)
                {
                    if (duration > 0)
                    {
                        var ev = new BanningEventArgs(targetPlayer, issuerPlayer, duration, reason, message);

                        Player.OnBanning(ev);

                        duration = ev.Duration;
                        reason   = ev.Reason;
                        message  = ev.FullMessage;

                        if (!ev.IsAllowed)
                        {
                            return(false);
                        }

                        string originalName = string.IsNullOrEmpty(targetPlayer.Nickname)
                            ? "(no nick)"
                            : targetPlayer.Nickname;
                        long issuanceTime   = TimeBehaviour.CurrentTimestamp();
                        long banExpieryTime = TimeBehaviour.GetBanExpieryTime((uint)duration);
                        try
                        {
                            if (userId != null && !isGlobalBan)
                            {
                                BanHandler.IssueBan(
                                    new BanDetails
                                {
                                    OriginalName = originalName,
                                    Id           = userId,
                                    IssuanceTime = issuanceTime,
                                    Expires      = banExpieryTime,
                                    Reason       = reason,
                                    Issuer       = issuer,
                                }, BanHandler.BanType.UserId);

                                if (!string.IsNullOrEmpty(targetPlayer.CustomUserId))
                                {
                                    BanHandler.IssueBan(
                                        new BanDetails
                                    {
                                        OriginalName = originalName,
                                        Id           = targetPlayer.CustomUserId,
                                        IssuanceTime = issuanceTime,
                                        Expires      = banExpieryTime,
                                        Reason       = reason,
                                        Issuer       = issuer,
                                    }, BanHandler.BanType.UserId);
                                }
                            }
                        }
                        catch
                        {
                            ServerConsole.AddLog("Failed during issue of User ID ban (2)!");
                            return(false);
                        }

                        try
                        {
                            if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan)
                            {
                                BanHandler.IssueBan(
                                    new BanDetails
                                {
                                    OriginalName = originalName,
                                    Id           = address,
                                    IssuanceTime = issuanceTime,
                                    Expires      = banExpieryTime,
                                    Reason       = reason,
                                    Issuer       = issuer,
                                }, BanHandler.BanType.IP);
                            }
                        }
                        catch
                        {
                            ServerConsole.AddLog("Failed during issue of IP ban!");
                            return(false);
                        }
                    }
                    else if (duration == 0)
                    {
                        var ev = new KickingEventArgs(targetPlayer, issuerPlayer, reason, message);

                        Player.OnKicking(ev);

                        reason  = ev.Reason;
                        message = ev.FullMessage;

                        if (!ev.IsAllowed)
                        {
                            return(false);
                        }
                    }
                }

                ServerConsole.Disconnect(targetPlayer.ReferenceHub.gameObject, message);

                return(false);
            }
            catch (Exception e)
            {
                Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.BanningAndKicking: {e}\n{e.StackTrace}");

                return(true);
            }
        }
示例#2
0
        public static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan)
        {
            if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false))
            {
                duration = int.MaxValue;
            }
            string userId  = null;
            string address = user.GetComponent <NetworkIdentity>().connectionToClient.address;
            CharacterClassManager characterClassManager = null;
            ReferenceHub          userHub = Extensions.Player.GetPlayer(user);

            try
            {
                if (ConfigFile.ServerConfig.GetBool("online_mode", false))
                {
                    characterClassManager = userHub.characterClassManager;
                    userId = characterClassManager.UserId;
                }
            }
            catch
            {
                ServerConsole.AddLog("Failed during issue of User ID ban (1)!");
                return(false);
            }
            string message = $"You have been {((duration > 0) ? "banned" : "kicked")}. ";

            if (!string.IsNullOrEmpty(reason))
            {
                message = message + "Reason: " + reason;
            }
            try
            {
                bool allow = true;
                Events.InvokePlayerBan(ref userHub, ref userId, ref duration, ref allow, ref message, ref reason);

                if (!allow)
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Log.Error($"Error in OnBanPlayer event: {ex.ToString()}");
            }

            if (duration > 0 && (!ServerStatic.PermissionsHandler.IsVerified || !userHub.serverRoles.BypassStaff))
            {
                string originalName   = string.IsNullOrEmpty(userHub.nicknameSync.MyNick) ? "(no nick)" : userHub.nicknameSync.MyNick;
                long   issuanceTime   = TimeBehaviour.CurrentTimestamp();
                long   banExpieryTime = TimeBehaviour.GetBanExpieryTime((uint)duration);
                try
                {
                    if (userId != null && !isGlobalBan)
                    {
                        BanHandler.IssueBan(new BanDetails
                        {
                            OriginalName = originalName,
                            Id           = userId,
                            IssuanceTime = issuanceTime,
                            Expires      = banExpieryTime,
                            Reason       = reason,
                            Issuer       = issuer
                        }, BanHandler.BanType.UserId);
                        if (!string.IsNullOrEmpty(characterClassManager.UserId2))
                        {
                            BanHandler.IssueBan(new BanDetails
                            {
                                OriginalName = originalName,
                                Id           = characterClassManager.UserId2,
                                IssuanceTime = issuanceTime,
                                Expires      = banExpieryTime,
                                Reason       = reason,
                                Issuer       = issuer
                            }, BanHandler.BanType.UserId);
                        }
                    }
                }
                catch
                {
                    ServerConsole.AddLog("Failed during issue of User ID ban (2)!");
                    return(false);
                }
                try
                {
                    if (ConfigFile.ServerConfig.GetBool("ip_banning", false) || isGlobalBan)
                    {
                        BanHandler.IssueBan(new BanDetails
                        {
                            OriginalName = originalName,
                            Id           = address,
                            IssuanceTime = issuanceTime,
                            Expires      = banExpieryTime,
                            Reason       = reason,
                            Issuer       = issuer
                        }, BanHandler.BanType.IP);
                    }
                }
                catch
                {
                    ServerConsole.AddLog("Failed during issue of IP ban!");
                    return(false);
                }
            }
            List <GameObject> playersToBan = new List <GameObject>();

            foreach (GameObject gameObject in PlayerManager.players)
            {
                characterClassManager = gameObject.GetComponent <CharacterClassManager>();
                if ((userId != null && characterClassManager.UserId == userId) || (address != null && characterClassManager.connectionToClient.address == address))
                {
                    playersToBan.Add(characterClassManager.gameObject);
                }
            }
            foreach (GameObject player in playersToBan)
            {
                ServerConsole.Disconnect(player, message);
            }
            return(false);
        }