Exemplo n.º 1
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            string broadcast;

            if (!sender.CheckPermission("scputils.broadcast"))
            {
                response = "<color=red> You need a higher administration level to use this command!</color>";
                return(false);
            }

            else if (arguments.Count < 3)
            {
                response = $"<color=yellow>Usage: {Command} <player> <hint/broadcast> <text></color>";
                return(false);
            }
            else
            {
                broadcast = string.Join(" ", arguments.Array, 3, arguments.Array.Length - 3);
                Exiled.API.Features.Player player = Exiled.API.Features.Player.Get(arguments.Array[1].ToString());
                if (player == null)
                {
                    response = "Invalid player!";
                    return(false);
                }
                switch (arguments.Array[2].ToString())
                {
                case "broadcast":
                case "bc":
                    player.Broadcast(ScpUtils.StaticInstance.Config.BroadcastDuration, broadcast);
                    response = "Success!";
                    break;

                case "hint":
                case "h":
                    player.ShowHint(broadcast, ScpUtils.StaticInstance.Config.BroadcastDuration);
                    response = "Success!";
                    break;

                default:
                    response = "Invalid argument, you should use broadcast/bc or hint/h.";
                    break;
                }
            }

            return(true);
        }
Exemplo n.º 2
0
        private static bool Prefix(GameObject user, int duration, string reason, string issuer, bool isGlobalBan)
        {
            try
            {
                Exiled.API.Features.Player issuerPlayer = Exiled.API.Features.Player.Get(issuer) ?? Exiled.API.Features.Server.Host;

                if (Npc.Dictionary.ContainsKey(user))
                {
                    issuerPlayer.RemoteAdminMessage("WTF U TRIED TO BAN NPC?", false, Plugin.Instance.Name);
                    issuerPlayer.ClearBroadcasts();
                    issuerPlayer.Broadcast(2, Plugin.Instance.Config.TranslationBanBroadcast);
                    return(false);
                }

                if (isGlobalBan && ConfigFile.ServerConfig.GetBool("gban_ban_ip", false))
                {
                    duration = int.MaxValue;
                }

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

                Exiled.API.Features.Player targetPlayer = Exiled.API.Features.Player.Get(user);

                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.GetBanExpirationTime((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 (Repatched by CustomNPCs!!!): {e}\n{e.StackTrace}");

                return(true);
            }
        }
Exemplo n.º 3
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            if (!sender.CheckPermission("scputils.broadcast"))
            {
                response = "<color=red> You need a higher administration level to use this command!</color>";
                return(false);
            }

            else if (arguments.Count < 3)
            {
                response = $"<color=yellow>Usage: {Command} <player> <hint(h)/broadcast(bc)> <id> <duration (optional, if empty will be used the default one set for this broadcast)></color>";
                return(false);
            }
            else
            {
                var databaseBroadcast = GetBroadcast.FindBroadcast(arguments.Array[3]);

                if (databaseBroadcast == null)
                {
                    response = "Invalid broadcast ID!";
                    return(false);
                }

                Exiled.API.Features.Player player = Exiled.API.Features.Player.Get(arguments.Array[1].ToString());
                if (player == null)
                {
                    response = "Invalid player!";
                    return(false);
                }

                int duration = databaseBroadcast.Seconds;
                if (arguments.Count == 4)
                {
                    if (int.TryParse(arguments.Array[4].ToString(), out duration))
                    {
                    }
                    else
                    {
                        response = "Broadcast duration must be an integer";
                        return(false);
                    }
                }

                switch (arguments.Array[2].ToString())
                {
                case "broadcast":
                case "bc":
                    player.Broadcast((ushort)duration, databaseBroadcast.Text, global::Broadcast.BroadcastFlags.Normal, false);
                    response = "Success!";
                    break;

                case "hint":
                case "h":
                    player.ShowHint(databaseBroadcast.Text, duration);
                    response = "Success!";
                    break;

                default:
                    response = "Invalid argument, you should use broadcast/bc or hint/h.";
                    break;
                }
            }

            return(true);
        }