public async Task <bool> DoBan(BanningEventArgs ev)
        {
            string banned_user_id    = ev.Target.UserId;
            string banned_nickname   = ev.Target.Nickname;
            string banned_ip_address = ev.Target.IPAddress;
            int    banduration       = ev.Duration;
            Player adminHub          = ev.Issuer;

            Log.Info("--------------------------------------");
            Log.Info("Ban detected, plugin taking over:");
            Log.Info($"Banned Name: {banned_nickname}");
            Log.Info($"Banned ID: {banned_user_id}");
            Log.Info($"Banned IP: {banned_ip_address}");
            Log.Info($"Admin Name: {adminHub.Nickname}");
            Log.Info($"Admin ID: {adminHub.UserId}");
            Log.Info($"Duration: {banduration}");
            if (banduration.ToString().Contains("1576800000"))
            {
                banduration = 0;
                Log.Info($"Duration: UPDATED TO PERM!");
            }
            string reason = ev.Reason;

            if (reason == "")
            {
                reason = "No reason provided. Please contact a Head Administrator for further details.";
            }
            if (await WebTask.IssueBan(plugin.Config.APIKey, banned_user_id, banned_nickname, banned_ip_address, adminHub.UserId, banduration, reason, ev.Target.ReferenceHub.serverRoles.DoNotTrack))
            {
                Log.Info($"Successfully pushed ban for {banned_user_id} ({banned_ip_address}) to the web API!");
                Log.Info("--------------------------------------");
                SendClientToServer(ev.Target, 7790);
                // We can safely remove the ban since the web client will handle it from here.
                //BanHandler.RemoveBan(ev.Target.UserId, ev.);
                return(true);
            }
            else
            {
                // Error out to requesting admin
                adminHub.Broadcast(15, $"ERROR while adding ban to web API for: {banned_nickname}({banned_user_id})");
                Log.Error($"FATAL BANNING ERROR! WebTask.IssueBan() Failed to push to web API");


                // Actually ban them since the webapi decided to do the funny...
                BanDetails ban = new BanDetails
                {
                    OriginalName = ev.Target.Nickname,
                    Id           = ev.Target.UserId,
                    IssuanceTime = TimeBehaviour.CurrentTimestamp(),
                    Expires      = DateTime.UtcNow.AddMinutes((double)ev.Duration).Ticks,
                    Reason       = ev.Reason,
                    Issuer       = ev.Issuer.UserId
                };
                BanHandler.IssueBan(ban, BanHandler.BanType.UserId);
                Log.Info("Pushed manual server-side ban.");
                Log.Info("--------------------------------------");
                return(false);
            }
            return(false);
        }
        public void playerBan(PlayerBanEvent ev)
        {
            ev.Allow = false;
            GameObject player = ev.BannedPlayer.characterClassManager.gameObject;

            if (ev.Duration == 0)
            {
                ServerConsole.Disconnect(player, ev.FullMessage);
            }
            else
            {
                ServerConsole.Disconnect(player, ev.FullMessage);

                Ban BanJSON = new Ban();
                BanJSON.Steamid64   = ev.BannedPlayer.characterClassManager.UserId;
                BanJSON.Ip          = ev.BannedPlayer.queryProcessor._ipAddress;
                BanJSON.BannedAt    = TimeBehaviour.CurrentTimestamp();
                BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)ev.Duration).Ticks;
                BanJSON.By          = ev.Issuer.characterClassManager.UserId;
                if (!String.IsNullOrEmpty(ev.Reason))
                {
                    BanJSON.Reason = ev.Reason;
                }

                String JSON         = Serialize.ToJson(BanJSON);
                String JsonResponse = Methods.Post(Plugin.BanURL, JSON);

                try
                {
                    JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);
                }
                catch (Exception e)
                {
                    JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                    if (!String.IsNullOrEmpty(json.Code))
                    {
                        Log.Error("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code);
                    }
                    else
                    {
                        Log.Error("Erreur durant le processus d'API (Code d'erreur plugin: " + e);
                    }
                }
            }
        }
示例#3
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.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: {e}\n{e.StackTrace}");

                return(true);
            }
        }
示例#4
0
        public static void HandleCommand(JObject o)
        {
            try
            {
                string type = (string)o["type"];
                if (type == "IDENT")
                {
                    if ((string)o["data"] == "PASS")
                    {
                        Log.Debug($"Server {ServerConsole.Port} passed identification.");
                    }
                    else if ((string)o["data"] == "FAIL")
                    {
                        Log.Warn($"Server {ServerConsole.Port} failed identification.");
                    }
                }
                else if (type == "UPDATE")
                {
                    EventHandlers.tcp.SendData(new Update());
                }
                else if (type == "ROLESYNC")
                {
                    Log.Warn(o);

                    string userid = (string)o["userid"];

                    if (o["group"] == null)
                    {
                        Log.Debug($"No role sync found for {userid}");
                        SCPDiscord.VerifyReservedSlot(userid);
                        return;
                    }

                    string group = (string)o["group"];

                    UserGroup userGroup = ServerStatic.PermissionsHandler.GetGroup(group);
                    if (userGroup == null)
                    {
                        Log.Error($"Attempted to assign invalid user group {group} to {userid}");
                        return;
                    }

                    Player player = Player.Get(userid);
                    if (player == null)
                    {
                        Log.Error($"Error assigning user group to {userid}, player not found.");
                        return;
                    }

                    if (SCPDiscord.setRoleGroups.Contains(group))
                    {
                        Log.Debug($"Assigning role: {userGroup} to {userid}.");
                        player.Group = userGroup;
                    }

                    string tag = (string)o["tag"];
                    if (SCPDiscord.setTagGroups.Contains(group) && tag != null)
                    {
                        Log.Debug($"Changing tag of {userid} to {tag}.");
                        player.RankName = tag;
                    }

                    if (SCPDiscord.reservedSlotGroups.Contains(group))
                    {
                        // grant reserved slot
                        Log.Debug("Player has necessary rank for reserved slot, checking...");
                        List <string> lines = File.ReadAllLines(SCPDiscord.reservedSlots).ToList();
                        if (!lines.Contains(userid))
                        {
                            Log.Debug("Reserved slot not found, adding player...");
                            lines.Add(userid);
                            File.WriteAllLines(SCPDiscord.reservedSlots, lines);
                            // This only reloads the slots on the current server, change this to reload on every server?
                            // Might not work
                            ReservedSlot.Reload();
                        }
                    }
                    else
                    {
                        SCPDiscord.VerifyReservedSlot(userid);
                    }
                }
                else if (type == "COMMAND")
                {
                    GameCore.Console.singleton.TypeCommand((string)o["command"]);
                }
                else if (type == "BAN")
                {
                    bool   isuid = false;
                    string uid   = (string)o["user"];
                    if (!uid.Contains("@steam") && !uid.Contains("@discord"))
                    {
                        if (!uid.Contains("."))
                        {
                            isuid = true;
                            uid  += "@steam";
                        }
                    }
                    else
                    {
                        isuid = true;
                    }
                    Player player = Player.Get(uid);
                    int    min    = (int)o["min"];
                    string reason = (string)o["reason"];

                    Ban ban = new Ban
                    {
                        player   = null,
                        duration = min,
                        success  = true,
                        offline  = false
                    };

                    if (player != null)
                    {
                        PlayerManager.localPlayer.GetComponent <BanPlayer>().BanUser(player.GameObject, min, reason, "Server");

                        ban.player = new User
                        {
                            name   = player.Nickname,
                            userid = player.UserId
                        };
                    }
                    else
                    {
                        if (isuid)
                        {
                            ban.offline = true;

                            ban.player = new User
                            {
                                name   = "Offline Player",
                                userid = uid
                            };

                            if (SCPDiscord.instance.Config.SteamApiKey != string.Empty)
                            {
                                string data = null;
                                try
                                {
                                    data = webclient.DownloadString($"https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key={SCPDiscord.instance.Config.SteamApiKey}&format=json&steamids={uid.Replace("@steam", "")}");
                                }
                                catch
                                {
                                    Log.Debug("Failed to get profile data from SteamAPI.");
                                }
                                JObject o2 = JObject.Parse(data);

                                if (o2 != null)
                                {
                                    ban.player.name = (string)o2["response"]["players"][0]["personaname"];
                                }
                            }

                            BanHandler.IssueBan(new BanDetails()
                            {
                                OriginalName = ban.player.name,
                                Id           = uid,
                                IssuanceTime = TimeBehaviour.CurrentTimestamp(),
                                Expires      = DateTime.UtcNow.AddMinutes((double)min).Ticks,
                                Reason       = reason,
                                Issuer       = "Server"
                            }, BanHandler.BanType.UserId);
                        }
                        else if (uid.Contains("."))
                        {
                            ban.offline = true;

                            BanHandler.IssueBan(new BanDetails()
                            {
                                OriginalName = "IP Address",
                                Id           = uid,
                                IssuanceTime = TimeBehaviour.CurrentTimestamp(),
                                Expires      = DateTime.UtcNow.AddMinutes((double)min).Ticks,
                                Reason       = reason,
                                Issuer       = "Server"
                            }, BanHandler.BanType.IP);
                        }
                        else
                        {
                            ban.success = false;
                        }
                    }
                    EventHandlers.tcp.SendData(ban);
                }
                else if (type == "KICK")
                {
                    string uid = (string)o["user"];
                    if (!uid.Contains("@steam") && !uid.Contains("@discord"))
                    {
                        uid += "@steam";
                    }
                    Player player = Player.Get(uid);

                    Kick kick = new Kick
                    {
                        player = null
                    };

                    if (player != null)
                    {
                        kick.player = new User
                        {
                            name   = player.Nickname,
                            userid = player.UserId
                        };

                        ServerConsole.Disconnect(player.GameObject, (string)o["reason"]);
                    }
                    EventHandlers.tcp.SendData(kick);
                }
                else if (type == "UNBAN")
                {
                    Unban unban = new Unban();

                    List <string> ipBans     = File.ReadAllLines(SCPDiscord.ipBans).ToList();
                    List <string> userIDBans = File.ReadAllLines(SCPDiscord.useridBans).ToList();

                    string id = (string)o["user"];
                    if (!id.Contains("."))
                    {
                        if (!id.Contains("@steam") && !id.Contains("@discord"))
                        {
                            id += "@steam";
                        }
                    }
                    List <string> matchingIPBans      = ipBans.FindAll(s => s.Contains(id));
                    List <string> matchingSteamIDBans = userIDBans.FindAll(s => s.Contains(id));

                    if (matchingIPBans.Count == 0 && matchingSteamIDBans.Count == 0)
                    {
                        unban.success = false;
                        EventHandlers.tcp.SendData(unban);
                        return;
                    }

                    ipBans.RemoveAll(s => s.Contains(id));
                    userIDBans.RemoveAll(s => s.Contains(id));

                    foreach (var row in matchingIPBans)
                    {
                        userIDBans.RemoveAll(s => s.Contains(row.Split(';').Last()));
                    }
                    foreach (var row in matchingSteamIDBans)
                    {
                        ipBans.RemoveAll(s => s.Contains(row.Split(';').Last()));
                    }

                    File.WriteAllLines(SCPDiscord.ipBans, ipBans);
                    File.WriteAllLines(SCPDiscord.useridBans, userIDBans);

                    EventHandlers.tcp.SendData(unban);
                }
            }
            catch (Exception x)
            {
                Log.Error("SCPDiscord handle command error: " + x.Message);
            }
        }
示例#5
0
        public void ConsoleCmd(ConsoleCommandEvent ev)
        {
            if (ev.Player.GetRole() == RoleType.Scp079)
            {
                string[] args = ev.Command.Split(' ');
                if (args[0].Equals(Plugin.CommandPrefix))
                {
                    if (args.Length >= 2)
                    {
                        if (args[1].ToLower().Equals("help") || args[1].ToLower().Equals("commands") || args[1].ToLower().Equals("?"))
                        {
                            ev.ReturnMessage = Plugin.HelpMsgTitle + "\n" +
                                               "\"." + Plugin.CommandPrefix + " a1\" - " + Plugin.HelpMsgA1 + " | Coût: " + Plugin.A1Power + " AP | Tier " + (Plugin.A1Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " a2\" - " + Plugin.HelpMsgA2 + " | Coût: " + Plugin.A2Power + " AP | Tier " + (Plugin.A2Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " a3\" - " + Plugin.HelpMsgA3 + " | Coût: " + Plugin.A3Power + " AP | Tier " + (Plugin.A3Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " a4\" - " + Plugin.HelpMsgA4 + " | Coût: " + Plugin.A4Power + " AP | Tier " + (Plugin.A4Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " a5\" - " + Plugin.HelpMsgA5 + " | Coût: " + Plugin.A5Power + " AP | Tier " + (Plugin.A5Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " a6\" - " + Plugin.HelpMsgA6 + " | Coût: " + Plugin.A6Cost + " Tier | Tier " + (Plugin.A6Tier + 1) + ".\n" +
                                               "\"." + Plugin.CommandPrefix + " suicide\" - " + Plugin.HelpMsgSuicide + ".\n";
                            return;
                        }

                        if (args[1].ToLower().Equals("a1"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A1Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A1Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A1Power)
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            if (args.Length > 3)
                            {
                                if (Plugin.A1AntiSpam > TimeBehaviour.CurrentTimestamp())
                                {
                                    ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A1AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString());
                                    return;
                                }
                                else
                                {
                                    // .079 a1 SCP CAUSE[unknow/as/mtf/chaos] UNIT[C] UNIT[25]
                                    if (int.TryParse(args[2], out int SCP) || !String.IsNullOrWhiteSpace(args[3]))
                                    {
                                        string tts = string.Empty;
                                        tts += "BG_MTF2 BREAK_PREANNC SCP";
                                        foreach (char c in args[2])
                                        {
                                            tts += " " + c;
                                        }
                                        switch (args[3].ToLower())
                                        {
                                        case "mtf":
                                            if (args.Length > 5)
                                            {
                                                if (char.IsLetter(args[4][0]) || !String.IsNullOrWhiteSpace(args[5]))
                                                {
                                                    tts += " CONTAINEDSUCCESSFULLY CONTAINMENTUNIT NATO_" + args[4][0] + " " + args[5];
                                                }
                                                else
                                                {
                                                    ev.ReturnMessage = Plugin.FailA1Msg;
                                                    return;
                                                }
                                            }
                                            else
                                            {
                                                ev.ReturnMessage = Plugin.FailA1Msg;
                                                return;
                                            }
                                            break;

                                        case "security":
                                            tts += " SUCCESSFULLY TERMINATED BY AUTOMATIC SECURITY SYSTEM";
                                            break;

                                        case "chaos":
                                            tts += " TERMINATED BY CHAOSINSURGENCY";
                                            break;

                                        case "classed":
                                            tts += " TERMINATED BY CLASSD PERSONNEL";
                                            break;

                                        case "scientifique":
                                            tts += " TERMINATED BY SCIENCE PERSONNEL";
                                            break;

                                        case "decontamination":
                                            tts += " LOST IN DECONTAMINATION SEQUENCE";
                                            break;

                                        default:
                                            tts += " SUCCESSFULLY TERMINATED . CONTAINMENTUNIT UNKNOWN";
                                            break;
                                        }
                                        DoAnnouncement(tts, true);
                                        ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A1Power;
                                        Plugin.A1AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A1TimeBetween).Ticks;
                                        ev.ReturnMessage  = Plugin.RunA1Msg;
                                        return;
                                    }
                                }
                            }
                            else
                            {
                                ev.ReturnMessage = Plugin.FailA1Msg;
                                return;
                            }
                        }

                        if (args[1].ToLower().Equals("a2"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A2Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A2Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A2Power)
                            {
                                ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A2Power;
                            }
                            else
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            Room room = SCP079Room(ev.Player);
                            if (room == null)
                            {
                                ev.ReturnMessage = Plugin.FailA2Msg;
                                return;
                            }
                            if (room.Zone == ZoneType.Surface)
                            {
                                ev.ReturnMessage = Plugin.FailA2Msg;
                                return;
                            }
                            foreach (var item in Plugin.A2BlacklistRooms)
                            {
                                if (room.Name.ToLower().Contains(item.ToLower()))
                                {
                                    ev.ReturnMessage = Plugin.FailA2Msg;
                                    return;
                                }
                            }
                            if (Plugin.A2AntiSpam > TimeBehaviour.CurrentTimestamp())
                            {
                                ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A2AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString());
                                return;
                            }
                            Timing.RunCoroutine(GasRoom(room, ev.Player));
                            Plugin.A2AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A2TimeBetween).Ticks;
                            ev.ReturnMessage  = Plugin.RunA2Msg;
                            return;
                        }

                        if (args[1].ToLower().Equals("a3"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A3Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A3Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A3Power)
                            {
                                ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A3Power;
                            }
                            else
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            Generator079.generators[0].RpcCustomOverchargeForOurBeautifulModCreators(Plugin.A3Timer, false);
                            ev.ReturnMessage = Plugin.RunA3Msg;
                            return;
                        }

                        if (args[1].ToLower().Equals("a4"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A4Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A4Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana >= Plugin.A4Power)
                            {
                                ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A4Power;
                            }
                            else
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            var             pos      = ev.Player.scp079PlayerScript.currentCamera.transform.position;
                            GrenadeManager  gm       = ev.Player.GetComponent <GrenadeManager>();
                            GrenadeSettings settings = gm.availableGrenades.FirstOrDefault(g => g.inventoryID == ItemType.GrenadeFlash);
                            FlashGrenade    flash    = GameObject.Instantiate(settings.grenadeInstance).GetComponent <FlashGrenade>();
                            flash.fuseDuration = 0.5f;
                            flash.InitData(gm, Vector3.zero, Vector3.zero, 1f);
                            flash.transform.position = pos;
                            NetworkServer.Spawn(flash.gameObject);
                            ev.ReturnMessage = Plugin.RunA4Msg;
                            return;
                        }

                        if (args[1].ToLower().Equals("suicide"))
                        {
                            ev.Player.playerStats.HurtPlayer(new PlayerStats.HitInfo(119000000, ev.Player.GetNickname(), DamageTypes.Wall, ev.Player.GetPlayerId()), ev.Player.gameObject);
                            return;
                        }

                        if (args[1].ToLower().Equals("a5"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A1Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A5Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A5Power)
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            if (args.Length > 2)
                            {
                                if (Plugin.A5AntiSpam > TimeBehaviour.CurrentTimestamp())
                                {
                                    ev.ReturnMessage = Plugin.AntiSpamMsg.Replace("%s", Math.Ceiling(TimeSpan.FromTicks(Plugin.A5AntiSpam - TimeBehaviour.CurrentTimestamp()).TotalSeconds).ToString());
                                    return;
                                }
                                else
                                {
                                    // .079 a5 GROUPE[unknow/mtf] UNIT[C] UNIT[25] [REMAIN SCP]
                                    if (!String.IsNullOrWhiteSpace(args[2]))
                                    {
                                        string tts = string.Empty;
                                        switch (args[2].ToLower())
                                        {
                                        case "mtf":
                                            if (args.Length > 5)
                                            {
                                                bool success = Int32.TryParse(args[5], out int scpleft);
                                                if (char.IsLetter(args[3][0]) || !String.IsNullOrWhiteSpace(args[4]) || success)
                                                {
                                                    tts += "MTFUNIT EPSILON 11 DESIGNATED NATO_" + args[3][0] + " " + args[4] + " HASENTERED ALLREMAINING ";
                                                    tts += ((scpleft <= 0) ? "NOSCPSLEFT" : ("AWAITINGRECONTAINMENT " + scpleft + ((scpleft == 1) ? " SCPSUBJECT" : " SCPSUBJECTS")));
                                                }
                                                else
                                                {
                                                    ev.ReturnMessage = Plugin.FailA5Msg;
                                                    return;
                                                }
                                            }
                                            else
                                            {
                                                ev.ReturnMessage = Plugin.FailA5Msg;
                                                return;
                                            }
                                            break;

                                        default:
                                            tts += "Danger. Alert all security .g1 personnel. .g4 Unauthorized personnel .g2 have been detected .g1 in the facility.";
                                            break;
                                        }
                                        DoAnnouncement(tts, true);
                                        ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A5Power;
                                        Plugin.A5AntiSpam = DateTime.UtcNow.AddSeconds((double)Plugin.A5TimeBetween).Ticks;
                                        ev.ReturnMessage  = Plugin.RunA5Msg;
                                        return;
                                    }
                                }
                            }
                            else
                            {
                                ev.ReturnMessage = Plugin.FailA5Msg;
                                return;
                            }
                        }

                        if (args[1].ToLower().Equals("a6"))
                        {
                            if (ev.Player.scp079PlayerScript.NetworkcurLvl < Plugin.A6Tier)
                            {
                                ev.ReturnMessage = Plugin.TierRequiredMsg.Replace("$tier", "" + (Plugin.A6Tier + 1));
                                return;
                            }
                            if (ev.Player.scp079PlayerScript.NetworkcurMana < Plugin.A6Power)
                            {
                                ev.ReturnMessage = Plugin.NoPowerMsg;
                                return;
                            }
                            else
                            {
                                List <ReferenceHub> riplist;
                                ReferenceHub        chosenPlayer;
                                riplist = GetHubList(RoleType.Spectator);
                                if (riplist.Count > 0)
                                {
                                    chosenPlayer = riplist[(new System.Random()).Next(riplist.Count)];
                                    int SCP = PlayerManager.localPlayer.GetComponent <CharacterClassManager>().FindRandomIdUsingDefinedTeam(Team.SCP);
                                    if (SCP != 1)
                                    {
                                        chosenPlayer.SetRole((RoleType)SCP);
                                        chosenPlayer.Broadcast(10, Plugin.NewSCPA6Msg, false);
                                        ev.Player.scp079PlayerScript.NetworkcurLvl  -= Plugin.A6Cost;
                                        ev.Player.scp079PlayerScript.NetworkcurMana -= Plugin.A6Power;
                                        Scp079.SetMaxEnergy(ev.Player, 125);
                                        Timing.CallDelayed(0.8f, () => { foreach (Room r in Map.Rooms)
                                                                         {
                                                                             if (r.Name.ToLower().Equals("HCZ_079".ToLower()))
                                                                             {
                                                                                 chosenPlayer.SetPosition(r.Position.x, r.Position.y + 1, r.Position.z);
                                                                             }
                                                                         }
                                                                         chosenPlayer.SetHealth(chosenPlayer.GetMaxHealth()); });
                                        DoAnnouncement("Alert. New containment .g1 breach detected. Cassie .g2 corruption detected. Code .g4 red.", true);
                                        ev.ReturnMessage = Plugin.RunA6Msg;
                                        return;
                                    }
                                    else
                                    {
                                        ev.ReturnMessage = Plugin.NoSCPA6Msg;
                                        return;
                                    }
                                }
                                else
                                {
                                    ev.ReturnMessage = Plugin.NoPlayerA6Msg;
                                    return;
                                }
                            }
                        }
                        ev.ReturnMessage = Plugin.HelpMsg.Replace("$prefix", "" + Plugin.CommandPrefix);
                        return;
                    }
                    ev.ReturnMessage = Plugin.HelpMsg.Replace("$prefix", "" + Plugin.CommandPrefix);
                    return;
                }
            }
        }
        public void RemoteAdminCommandEvent(ref RACommandEvent ev)
        {
            string[]     args   = ev.Command.Split(' ');
            ReferenceHub sender = ev.Sender.SenderId == "SERVER CONSOLE" || ev.Sender.SenderId == "GAME CONSOLE" ? Player.GetPlayer(PlayerManager.localPlayer) : Player.GetPlayer(ev.Sender.SenderId);

            switch (args[0].ToLower())
            {
            case "oban":
                ev.Allow = false;
                if (!sender.CheckPermission("oban.use"))
                {
                    ev.Sender.RaReply("ExiledPermissions#No permission.", true, true, string.Empty);
                    return;
                }
                if (args.Length == 1)
                {
                    ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                    return;
                }
                else if (args.Length > 1)
                {
                    switch (args[1].ToLower())
                    {
                    case "steamid":
                        if (args.Length > 3)
                        {
                            string Steamid64 = args[2];
                            long   BannedAt  = TimeBehaviour.CurrentTimestamp();
                            double Expire    = (double.TryParse(args[3], out double x)) ? x : -1;
                            string By        = sender.characterClassManager.UserId;
                            string Reason    = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Steamid64   = Steamid64;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "SteamID: " + Steamid64 + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    case "ip":
                        if (args.Length > 3)
                        {
                            string IP       = args[2];
                            long   BannedAt = TimeBehaviour.CurrentTimestamp();
                            double Expire   = (double.TryParse(args[3], out double x)) ? x : -1;
                            string By       = sender.characterClassManager.UserId;
                            string Reason   = (args.Length > 3) ? string.Join(" ", args.Skip(4)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Ip          = IP;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "IP: " + IP + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    case "user":
                        if (args.Length > 4)
                        {
                            string Steamid64 = args[2];
                            string IP        = args[3];
                            long   BannedAt  = TimeBehaviour.CurrentTimestamp();
                            double Expire    = (double.TryParse(args[4], out double x)) ? x : -1;
                            string By        = sender.characterClassManager.UserId;
                            string Reason    = (args.Length > 4) ? string.Join(" ", args.Skip(5)) : string.Empty;

                            Ban BanJSON = new Ban();
                            BanJSON.Steamid64   = Steamid64;
                            BanJSON.Ip          = IP;
                            BanJSON.BannedAt    = BannedAt;
                            BanJSON.BannedUntil = DateTime.UtcNow.AddMinutes((double)Expire).Ticks;
                            BanJSON.By          = By;
                            if (!String.IsNullOrEmpty(Reason))
                            {
                                BanJSON.Reason = Reason;
                            }

                            String JSON         = Serialize.ToJson(BanJSON);
                            String JsonResponse = Methods.Post(Plugin.BanURL, JSON);
                            try
                            {
                                JSON.Success.SuccessResponseJSON json = SanctionSystem.JSON.Success.SuccessResponseJSON.FromJson(JsonResponse);

                                string response = "\n" +
                                                  "SteamID: " + Steamid64 + "\n" +
                                                  "IP: " + IP + "\n" +
                                                  "Est banni pour : " + Expire + " minutes \n" +
                                                  "Par: " + By + " / " + sender.nicknameSync.MyNick;
                                ev.Sender.RaReply(args[0].ToUpper() + "#" + response, true, true, "");
                            }
                            catch (Exception e)
                            {
                                JSON.Error.ErrorResponseJSON json = SanctionSystem.JSON.Error.ErrorResponseJSON.FromJson(JsonResponse);

                                if (!String.IsNullOrEmpty(json.Code))
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur répondu par l'API: " + json.Code, true, true, string.Empty);
                                }
                                else
                                {
                                    ev.Sender.RaReply("Erreur durant le processus d'API (Code d'erreur plugin: " + e, true, true, string.Empty);
                                }
                            }
                        }
                        else
                        {
                            ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        }
                        break;

                    default:
                        ev.Sender.RaReply("OBAN#Commandes:", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN - Afficher la liste des commandes.", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN STEAMID [SteamID@steam] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN IP [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        ev.Sender.RaReply("#- OBAN USER [SteamID@steam] [IP] [MINUTES] (RAISON OPTIONNELLE)", true, true, string.Empty);
                        return;
                    }
                }
                break;
            }
        }
示例#7
0
        public override void OnEnable()
        {
            try
            {
                Enabled = Config.GetBool("b079_enable", true);

                if (!Enabled)
                {
                    Log.Info("Le plugin est désactivé, ou il manque des entrées dans la configuration.");
                    return;
                }

                // Compteur interne
                A1AntiSpam = A5AntiSpam = A2AntiSpam = TimeBehaviour.CurrentTimestamp();

                A1Power       = Config.GetFloat("b079_a1_power", 35f);
                A1Tier        = Config.GetInt("b079_a1_tier", 0);
                A1TimeBetween = Config.GetDouble("b079_a1_antispam", 60);

                A2Power          = Config.GetFloat("b079_a2_power", 75f);
                A2Tier           = Config.GetInt("b079_a2_tier", 2);
                A2TimeBetween    = Config.GetDouble("b079_a2_antispam", 30);
                A2Timer          = Config.GetInt("b079_a2_timer", 5);
                A2TimerGas       = Config.GetInt("b079_a2_gas_timer", 10);
                A2Exp            = Config.GetFloat("b079_a2_exp", 35f);
                A2BlacklistRooms = Config.GetStringList("b079_a2_blacklisted_rooms");
                if (A2BlacklistRooms == null)
                {
                    A2BlacklistRooms = new List <string>();
                }

                A3Power = Config.GetFloat("b079_a3_power", 100f);
                A3Tier  = Config.GetInt("b079_a3_tier", 1);
                A3Timer = Config.GetFloat("b079_a3_timer", 30f);

                A4Power = Config.GetFloat("b079_a4_power", 40f);
                A4Tier  = Config.GetInt("b079_a4_tier", 1);

                A5Power       = Config.GetFloat("b079_a4_power", 35f);
                A5Tier        = Config.GetInt("b079_a4_tier", 1);
                A5TimeBetween = Config.GetDouble("b079_a5_antispam", 75);

                A6Power = Config.GetFloat("b079_a6_power", 200f);
                A6Tier  = Config.GetInt("b079_a6_tier", 4);
                A6Cost  = Config.GetInt("b079_a6_tiercost", 2);

                CommandPrefix  = Config.GetString("b079_prefix", "079").Replace(' ', '_');
                HelpMsgTitle   = Config.GetString("b079_help_title", "Compétences:");
                HelpMsgA1      = Config.GetString("b079_help_a1", "Annoncer la mort d'un SCP.");
                HelpMsgA2      = Config.GetString("b079_help_a2", "Décontaminer la salle dans laquelle vous êtes.");
                HelpMsgA3      = Config.GetString("b079_help_a3", "Eteindre les lumières de la fondation.");
                HelpMsgA4      = Config.GetString("b079_help_a4", "Flash ceux qui regardent votre caméra.");
                HelpMsgA5      = Config.GetString("b079_help_a5", "Annoncer l'arriver d'un groupe sur site.");
                HelpMsgA6      = Config.GetString("b079_help_a6", "Déconfiner un nouveau SCP (aléatoire, et non présent en début de partie).");
                HelpMsgSuicide = Config.GetString("b079_msg_suicide", "Vous permet de vous suicider");

                TierRequiredMsg = Config.GetString("b079_msg_tier_required", "Tier $tier ou plus requis.");
                NoPowerMsg      = Config.GetString("b079_msg_no_power", "Pas assez de puissance.");
                HelpMsg         = Config.GetString("b079_msg_help_cmd_fail", "Invalide. Entrez  \".$prefix ?\" pour obtenir de l'aide.");

                FailA1Msg = Config.GetString("b079_msg_a1_fail", "Erreur.\nSyntaxe: .079 a1 <SCP> <RAISON> [NOM ESCOUADE] [NOMBRE ESCOUADE]\nExemple: .079 a1 939 mtf alpha 15\nExemple: .079 a1 173 chaos\nRaisons possibles: MTF, CHAOS, SECURITY, CLASSED, UNKNOWN, DECONTAMINATION, SCIENTIFIQUE.");
                RunA1Msg  = Config.GetString("b079_msg_a1_run", "Annonce de la mort...");

                FailA2Msg = Config.GetString("b079_msg_a2_fail", "Vous ne pouvez pas déconfiner cette salle!");
                RunA2Msg  = Config.GetString("b079_msg_a2_run", "Activation...");

                RunA3Msg = Config.GetString("b079_msg_a3_run", "Overcharge...");
                RunA4Msg = Config.GetString("b079_msg_a4_run", "Flash...");

                FailA5Msg = Config.GetString("b079_msg_a5_fail", "Erreur.\nSyntaxe: .079 a5 <GROUPE> [NOM ESCOUADE] [NOMBRE ESCOUADE] [NOMBRE DE SCP]\nExemple: .079 a5 mtf alpha 15 2\nExemple: .079 a5 unknown\nGroupes possibles: MTF, UNKNOWN.");
                RunA5Msg  = Config.GetString("b079_msg_a5_run", "Annonce du nouveau groupe...");

                FailA6Msg     = Config.GetString("b079_msg_a6_fail", "Erreur.\nSyntaxe: .079 a6\nExemple: .079 939\nFait apparaitre un nouveau SCP dans la partie.");
                RunA6Msg      = Config.GetString("b079_msg_a6_run", "Apparition du nouveau SCP...");
                NoPlayerA6Msg = Config.GetString("b079_msg_a6_noplayer", "Il n'y a aucun joueur de disponible pour faire apparaitre un nouveau SCP.");
                NoSCPA6Msg    = Config.GetString("b079_msg_a6_noscp", "Il n'y a plus aucun SCP à faire apparaître.");
                NewSCPA6Msg   = Config.GetString("b079_msg_a6_newscp", "<color=red>SCP-079 vient de vous déconfiner.</color>");

                A2WarnMsg   = Config.GetString("b079_msg_a2_warn", "<color=#ff0000>ALERTE:</color>\n<color=#ff0000>Décontamination de la salle dans $seconds secondes.</color>");
                A2ActiveMsg = Config.GetString("b079_msg_a2_active", "<color=#ff0000>Décontamination activé.</color>");
                SpawnMsg    = Config.GetString("b079_spawn_msg", "<color=#6642f5>Entrez \".079 help\" dans la console pour consulter vos abilités.</color>");
                AntiSpamMsg = Config.GetString("b079_msg_antispam", "Merci de patienter %s secondes avant de faire cette commande.");

                EventHandler                = new EventHandlers(this);
                Events.PlayerSpawnEvent    += EventHandler.PlayerSpawn;
                Events.ConsoleCommandEvent += EventHandler.ConsoleCmd;
            }
            catch (Exception e)
            {
                Log.Error($"Erreur durant le démarrage du plugin: {e}");
                return;
            }
        }
示例#8
0
        public string[] OnCall(ICommandSender sender, string[] args)
        {
            if (args.Length > 0)
            {
                if (args[0] == "reload")
                {
                    if (plugin.data_enabled)
                    {
                        plugin.LoadPlayersData();
                        return(new string[] { "Player Data Reload!" });
                    }
                    else
                    {
                        return(new string[] { "Player Data Disabled, not load." });
                    }
                }
                else if (args[0] == "prune")
                {
                    if (plugin.data_enabled)
                    {
                        foreach (var tar in plugin.playersData.ToArray())
                        {
                            if (tar.level == 1 && tar.exp == 0)
                            {
                                plugin.playersData.Remove(tar);
                            }
                        }

                        plugin.SavePlayersData();

                        return(new string[] { "database pruned." });
                    }
                    else
                    {
                        return(new string[] { "Player Data Disabled" });
                    }
                }
                else if (args[0] == "blackout")
                {
                    List <Room> rooms = new List <Room>(plugin.Server.Map.Get079InteractionRooms(Scp079InteractionType.CAMERA)).FindAll(x => x.ZoneType == ZoneType.LCZ);
                    foreach (Room r in rooms)
                    {
                        r.FlickerLights();
                    }
                    Generator079.mainGenerator.CallRpcOvercharge();

                    return(new string[] { "blackout success." });
                }
                else if (args[0] == "lcza")
                {
                    DecontaminationLCZ lcz = GameObject.Find("Host").GetComponent <DecontaminationLCZ>();

                    int anm;
                    if (args.Length > 1 && int.TryParse(args[1], out anm))
                    {
                        lcz.CallRpcPlayAnnouncement(Mathf.Clamp(anm, 0, 5), true);
                        return(new string[] { $"lcz announcement:{Mathf.Clamp(anm, 0, 5)}" });
                    }
                }
                else if (args[0] == "amb")
                {
                    int amb;
                    if (args.Length > 1 && int.TryParse(args[1], out amb))
                    {
                        SanyaPlugin.CallAmbientSound(Mathf.Clamp(amb, 0, 31));

                        return(new string[] { $"ambient:{Mathf.Clamp(amb, 0, 31)}" });
                    }
                }
                else if (args[0] == "airbomb")
                {
                    if (SanyaPlugin.isAirBombGoing)
                    {
                        SanyaPlugin.isAirBombGoing = false;
                        return(new string[] { "airbomb force stopped." });
                    }
                    else
                    {
                        Timing.RunCoroutine(SanyaPlugin._AirSupportBomb(5, 10, true, true, true), Segment.Update);
                        return(new string[] { "airbomb started!" });
                    }
                }
                else if (args[0] == "gen")
                {
                    if (args.Length > 1)
                    {
                        if (args[1] == "unlock")
                        {
                            foreach (Generator items in plugin.Server.Map.GetGenerators())
                            {
                                items.Unlock();
                            }
                            return(new string[] { "gen unlock." });
                        }
                        else if (args[1] == "open")
                        {
                            foreach (Generator items in plugin.Server.Map.GetGenerators())
                            {
                                if (!items.Engaged)
                                {
                                    items.Open = true;
                                }
                            }
                            return(new string[] { "gen open." });
                        }
                        else if (args[1] == "close")
                        {
                            foreach (Generator items in plugin.Server.Map.GetGenerators())
                            {
                                items.Open = false;
                            }
                            return(new string[] { "gen close." });
                        }
                        else if (args[1] == "act")
                        {
                            float engagecount = 6.0f;
                            foreach (Generator items in plugin.Server.Map.GetGenerators())
                            {
                                if (!items.Engaged)
                                {
                                    items.TimeLeft  = engagecount--;
                                    items.HasTablet = true;
                                }
                            }
                            return(new string[] { "gen activate." });
                        }
                    }
                }
                else if (args[0] == "ev")
                {
                    foreach (Elevator ev in plugin.Server.Map.GetElevators())
                    {
                        ev.Use();
                    }
                    return(new string[] { "EV used." });
                }
                else if (args[0] == "tesla")
                {
                    bool isInstant = false;

                    if (args.Length > 1)
                    {
                        if (args[1] == "i")
                        {
                            isInstant = true;
                        }
                    }

                    foreach (Smod2.API.TeslaGate tesla in plugin.Server.Map.GetTeslaGates())
                    {
                        tesla.Activate(isInstant);
                    }
                    return(new string[] { "tesla activated." });
                }
                else if (args[0] == "shake")
                {
                    plugin.Server.Map.Shake();

                    return(new string[] { "map shaking." });
                }
                else if (args[0] == "femur")
                {
                    SanyaPlugin.Call106Scream();

                    return(new string[] { "Screaming!" });
                }
                else if (args[0] == "heli")
                {
                    SanyaPlugin.CallVehicle(false);

                    return(new string[] { "heli moved." });
                }
                else if (args[0] == "van")
                {
                    SanyaPlugin.CallVehicle(true);

                    return(new string[] { "van spawned." });
                }
                else if (args[0] == "next")
                {
                    if (args.Length > 1)
                    {
                        GameObject host    = GameObject.Find("Host");
                        MTFRespawn respawn = host.GetComponent <MTFRespawn>();
                        if (args[1] == "ci")
                        {
                            respawn.nextWaveIsCI = true;
                            return(new string[] { $"nextIsCi:{respawn.nextWaveIsCI}" });
                        }
                        else if (args[1] == "mtf" || args[1] == "ntf")
                        {
                            respawn.nextWaveIsCI = false;
                            return(new string[] { $"nextisCi:{respawn.nextWaveIsCI}" });
                        }
                    }
                }
                else if (args[0] == "spawn")
                {
                    GameObject host    = GameObject.Find("Host");
                    MTFRespawn respawn = host.GetComponent <MTFRespawn>();

                    if (respawn.nextWaveIsCI)
                    {
                        respawn.timeToNextRespawn = 14f;
                        return(new string[] { $"SpawnSet. nextIsCi:{respawn.nextWaveIsCI}" });
                    }
                    else
                    {
                        respawn.timeToNextRespawn = 19f;
                        return(new string[] { $"SpawnSet. nextIsCi:{respawn.nextWaveIsCI}" });
                    }
                }
                else if (args[0] == "override")
                {
                    Player ply = sender as Player;
                    if (ply != null)
                    {
                        SanyaPlugin.scp_override_steamid = ply.SteamId;
                    }

                    return(new string[] { $"set ok:{SanyaPlugin.scp_override_steamid}" });
                }
                else if (args[0] == "ammo")
                {
                    Player ply = sender as Player;
                    if (ply != null)
                    {
                        ply.SetAmmo(AmmoType.DROPPED_5, 999);
                        ply.SetAmmo(AmmoType.DROPPED_7, 999);
                        ply.SetAmmo(AmmoType.DROPPED_9, 999);
                    }

                    return(new string[] { $"Ammo set full." });
                }
                else if (args[0] == "106")
                {
                    foreach (PocketDimensionExit pde in plugin.Server.Map.GetPocketDimensionExits())
                    {
                        pde.ExitType = PocketDimensionExitType.Exit;
                    }

                    return(new string[] { $"All set to [Exit]." });
                }
                else if (args[0] == "914")
                {
                    if (args.Length > 1)
                    {
                        if (args[1] == "use")
                        {
                            SanyaPlugin.Call914Use();
                            return(new string[] { "914 used." });
                        }
                        else if (args[1] == "change")
                        {
                            SanyaPlugin.Call914Change();
                            return(new string[] { "914 changed." });
                        }
                    }
                }
                else if (args[0] == "939")
                {
                    SanyaPlugin.Call939CanSee();

                    return(new string[] { "939 can all see." });
                }
                else if (args[0] == "096")
                {
                    Scp096PlayerScript.instance.IncreaseRage(1f);

                    return(new string[] { "096 has Raged." });
                }
                else if (args[0] == "079")
                {
                    if (args.Length > 2)
                    {
                        if (args[1] == "level")
                        {
                            foreach (Player player in plugin.Server.GetPlayers(Role.SCP_079))
                            {
                                player.Scp079Data.Level = Mathf.Clamp(int.Parse(args[2]) - 1, 0, 4);
                                player.Scp079Data.ShowLevelUp(Mathf.Clamp(int.Parse(args[2]) - 1, 0, 4));
                            }
                            return(new string[] { $"079 Level Set to:{Mathf.Clamp(int.Parse(args[2]), 1, 5)}" });
                        }
                    }
                    else if (args.Length > 1)
                    {
                        if (args[1] == "ap")
                        {
                            foreach (Player player in plugin.Server.GetPlayers(Role.SCP_079))
                            {
                                player.Scp079Data.AP = player.Scp079Data.MaxAP;
                            }
                            return(new string[] { "079 AP MAX." });
                        }
                    }
                }
                else if (args[0] == "flagtest")
                {
                    if (SanyaPlugin.test)
                    {
                        SanyaPlugin.test = false;
                    }
                    else
                    {
                        SanyaPlugin.test = true;
                    }
                    plugin.Error($"test:{SanyaPlugin.test}");

                    return(new string[] { $"test:{SanyaPlugin.test}" });
                }
                else if (args[0] == "ping")
                {
                    List <string> pinglist = new List <string>();
                    byte          b;

                    foreach (Player player in plugin.Server.GetPlayers())
                    {
                        UnityEngine.Networking.NetworkConnection conn = (player.GetGameObject() as GameObject).GetComponent <NicknameSync>().connectionToClient;
                        pinglist.Add($"Name: {player.Name} IP: {player.IpAddress} Ping: {UnityEngine.Networking.NetworkTransport.GetCurrentRTT(conn.hostId, conn.connectionId, out b)}ms");
                    }

                    return(pinglist.ToArray());
                }
                else if (args[0] == "now")
                {
                    return(new string[] { TimeBehaviour.CurrentTimestamp().ToString() });
                }
                else if (args[0] == "randomitem")
                {
                    List <string>     returned = new List <string>();
                    RandomItemSpawner rnde     = UnityEngine.GameObject.FindObjectOfType <RandomItemSpawner>();
                    foreach (var i in rnde.posIds)
                    {
                        returned.Add($"{i.index}:{i.posID}:{i.position.position}");
                    }
                    returned.Add($"-----");
                    foreach (var i in rnde.pickups)
                    {
                        returned.Add($"{i.itemID}:{i.posID}:{(ItemType)i.itemID}");
                    }
                    return(returned.ToArray());
                }
                else if (args[0] == "namechange")
                {
                    Player ply = sender as Player;
                    if (ply != null)
                    {
                        if (args.Length > 1)
                        {
                            GameObject gameObject = ply.GetGameObject() as GameObject;
                            if (gameObject != null)
                            {
                                plugin.Warn($"[NameChanger] {ply.Name} -> {args[1]}");

                                gameObject.GetComponent <NicknameSync>().NetworkmyNick           = args[1];
                                gameObject.GetComponent <CharacterClassManager>().NetworkSteamId = string.Empty;
                                if (plugin.level_enabled)
                                {
                                    ply.SetRank("default", $"Level{UnityEngine.Random.Range(1, 50)}", null);
                                }
                                else
                                {
                                    Timing.RunCoroutine(SanyaPlugin._DelayedRefreshTag(ply), Segment.Update);
                                }
                                if (plugin.score_summary_inround)
                                {
                                    PlayerScoreInfo target = SanyaPlugin.eventhandler.scoredb.Find(x => x.player.PlayerId == ply.PlayerId);
                                    if (target != null)
                                    {
                                        SanyaPlugin.eventhandler.scoredb.Remove(target);
                                        SanyaPlugin.eventhandler.scoredb.Add(new PlayerScoreInfo(plugin.Server.GetPlayer(ply.PlayerId)));
                                    }
                                }

                                return(new string[] { $"Change to : {ply.Name} -> {args[1]}" });
                            }
                            else
                            {
                                return(new string[] { "Error. (GameObject cast error)" });
                            }
                        }
                        else
                        {
                            return(new string[] { "param \"Name\" not found." });
                        }
                    }
                    else
                    {
                        return(new string[] { "only can use player." });
                    }
                }
                else if (args[0] == "test")
                {
                    Player        ply        = sender as Player;
                    GameObject    gameObject = null;
                    GameObject    host       = GameObject.Find("Host");
                    System.Random rnd        = new System.Random();

                    if (ply != null)
                    {
                        gameObject = ply.GetGameObject() as GameObject;
                    }

                    //foreach (Camera079 item in Scp079PlayerScript.allCameras)
                    //{
                    //    if(item.cameraName.Contains("ICOM"))
                    //        plugin.Debug($"Name:{item.cameraName}");
                    //}

                    //foreach(Smod2.API.Player p in plugin.Server.GetPlayers())
                    //{
                    //    FootstepSync foots = (p.GetGameObject() as UnityEngine.GameObject).GetComponent<FootstepSync>();

                    //    foots.CallCmdSyncFoot(true);
                    //}

                    //if(args.Length > 1)
                    //{
                    //    SanyaPlugin.CallAmbientSound(int.Parse(args[1]));
                    //}

                    //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>();

                    //foreach(var i in rnde.pickups)
                    //{
                    //    plugin.Info($"{i.itemID} {i.posID}");
                    //}

                    //foreach(var i in rnde.posIds)
                    //{
                    //    plugin.Info($"{i.index} {i.posID} {i.position.position}");
                    //}

                    //(ply.GetGameObject() as UnityEngine.GameObject).GetComponent<FlashEffect>().CallCmdBlind(true);

                    //Scp049PlayerScript s049 = gameObject.GetComponent<Scp049PlayerScript>();
                    //Vector3 position = s049.plyCam.transform.position;
                    //Vector3 forward = s049.plyCam.transform.forward;

                    //plugin.Debug($"Raycast...");
                    //RaycastHit raycastHit;
                    //if (Physics.Raycast(position, forward, out raycastHit, 500f, 262144))
                    //{
                    //    plugin.Error($"name:{raycastHit.transform.name} parent:{raycastHit.transform.parent.name} root:{raycastHit.transform.root.name}");
                    //}
                    //else
                    //{
                    //    plugin.Warn($"not hit(raycast)");
                    //}

                    //plugin.Debug($"CheckGround...");
                    //Vector3 pos = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y - 0.8f, gameObject.transform.position.z);
                    //Collider[] hits = Physics.OverlapBox(pos, FallDamage.GroundCheckSize, new Quaternion(0f, 0f, 0f, 0f), FallDamage.staticGroundMask);
                    //if (hits.Length != 0)
                    //{
                    //    foreach (var i in hits)
                    //    {
                    //        plugin.Error($"name:{i.transform.name} parent:{i.transform.parent.name} root:{i.transform.root.name}");
                    //    }
                    //}
                    //else
                    //{
                    //    plugin.Warn($"not hit(ground)");
                    //}

                    //foreach (var i in GameObject.FindObjectsOfType<TeslaGate>())
                    //{
                    //    plugin.Debug($"{i.killerMask.ToString()}");
                    //}

                    //for (int i = 0; i < 32; i++)
                    //{
                    //    plugin.Debug($"Layer[{i}]{LayerMask.LayerToName(i)}");
                    //    if (((1 << i) & 1208246273) != 0)
                    //    {
                    //        plugin.Warn($"1208246273 in [{i}]");
                    //    }
                    //    if (((1 << i) & 1207976449) != 0)
                    //    {
                    //        plugin.Warn($"1207976449 in [{i}]");
                    //    }
                    //}

                    //plugin.Debug($"{LayerMask.GetMask(new string[] { "CCTV" })}");

                    //CharacterClassManager ccm = gameObject.GetComponent<CharacterClassManager>();
                    //PlayerStats.HitInfo info = new PlayerStats.HitInfo(1f, ply.Name, DamageTypes.None, ply.PlayerId);
                    //gameObject.GetComponent<RagdollManager>().SpawnRagdoll(gameObject.transform.position, gameObject.transform.rotation, ccm.curClass, info, false,
                    //    gameObject.GetComponent<Dissonance.Integrations.UNet_HLAPI.HlapiPlayer>().PlayerId, gameObject.GetComponent<NicknameSync>().myNick,
                    //    gameObject.GetComponent<RemoteAdmin.QueryProcessor>().PlayerId, gameObject);

                    //plugin.Debug($"{GameObject.FindObjectOfType<TeslaGate>().killerMask.value}");

                    //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>();
                    //foreach (var pos in rnde.posIds)
                    //{
                    //    plugin.Warn($"[{pos.index}] {pos.posID} -> [{pos.position.position}]");
                    //}

                    //plugin.Debug($"{(ply.GetCurrentItem().GetComponent() as Inventory).items[(ply.GetCurrentItem().GetComponent() as Inventory).curItem].}");

                    //var outside = GameObject.FindObjectOfType<AlphaWarheadOutsitePanel>();

                    //if(outside != null)
                    //{
                    //    outside.SetKeycardState(false);
                    //}

                    //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>();
                    //foreach (var i in GrenadeManager.grenadesOnScene)
                    //{
                    //    plugin.Error($"{i.id}");
                    //    gre.CallRpcExplode(i.id, ply.PlayerId);
                    //}

                    //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>();
                    //foreach(var i in gre.availableGrenades)
                    //{
                    //    plugin.Error($"{i.apiName}[{i.inventoryID}]:{i.timeUnitilDetonation}");
                    //}

                    //GrenadeManager gre = GameObject.FindObjectOfType<GrenadeManager>();
                    //foreach (var i in GrenadeManager.grenadesOnScene)
                    //{
                    //    plugin.Error($"{i.id}:{i.transform.position}");
                    //}

                    //plugin.Error($"return:{MEC.Timing.KillCoroutines("FollowingGrenade")}");

                    //gameObject.GetComponent<PlyMovementSync>().SetAllowInput(SanyaPlugin.test);

                    //for(var i = 0; i < Scp079PlayerScript.allCameras.Length; i++)
                    //{
                    //    plugin.Warn($"[{i}]{Scp079PlayerScript.allCameras[i].cameraName}");
                    //}

                    //plugin.Error($"{plugin.Server.GetAppFolder(false,true)}");
                    //plugin.Error($"{plugin.Server.GetAppFolder(true,true)}");
                    //plugin.Warn($"{gameObject.GetComponent<ServerRoles>().GetUncoloredRoleString()}:{gameObject.GetComponent<ServerRoles>().MyColor}");

                    //plugin.Error($"Count:{plugin.playersData.Count}");
                    //foreach(PlayerData player in plugin.playersData)
                    //{
                    //    plugin.Error($"{player.steamid}:{player.level}:{player.exp}");
                    //}

                    //foreach(PlayerData data in plugin.playersData)
                    //{
                    //    plugin.Warn($"{data.steamid}:Level{data.level}({data.exp}EXP/Next:{Mathf.Clamp(data.level*3-data.exp,0,data.level*3-data.exp)})");
                    //}

                    //MEC.Timing.RunCoroutine(plugin._CheckIsLimitedSteam(ply), MEC.Segment.FixedUpdate);

                    //ServerConsole.Disconnect(gameObject, plugin.steam_kick_limited_message);

                    //plugin.Error($"{host.GetComponent<MTFRespawn>().timeToNextRespawn}");

                    //foreach(var i in gameObject.GetComponent<Medkit>().Medkits)
                    //{
                    //    plugin.Error($"{i.InventoryID}:{i.Label}:{i.MaximumHealthRegeneration}:{i.MinimumHealthRegeneration}");
                    //}

                    //gameObject.GetComponent<Inventory>().NetworkcurItem = -1;

                    //plugin.Error($"{LayerMask.GetMask(new string[] { "Ragdoll" })}");

                    //foreach(var i in plugin.playersData)
                    //{
                    //    plugin.Error($"{i.steamid}:{i.limited}");
                    //    i.limited = true;
                    //}

                    //plugin.SavePlayersData();

                    //RandomItemSpawner rnde = UnityEngine.GameObject.FindObjectOfType<RandomItemSpawner>();
                    //foreach(var i in rnde.posIds)
                    //{
                    //    plugin.Error($"{i.index}:{i.posID}:{i.position.position}");
                    //}
                    //plugin.Error($"-----");
                    //foreach(var i in rnde.pickups)
                    //{
                    //    plugin.Error($"{i.itemID}:{i.posID}:{(ItemType)i.itemID}");
                    //}

                    //var lcz = host.GetComponent<DecontaminationLCZ>();
                    //foreach(var i in lcz.announcements)
                    //{
                    //    plugin.Error($"{i.startTime}:{i.options}");
                    //}

                    //GameObject[] array = GameObject.FindGameObjectsWithTag("RoomID");
                    //foreach(GameObject gameObject2 in array)
                    //{
                    //    if(gameObject2.GetComponent<Rid>() != null)
                    //    {
                    //        plugin.Error($"{gameObject2.GetComponent<Rid>().id}:{gameObject2.transform.position}");
                    //    }
                    //}

                    //foreach(var pos in SanyaPlugin.Call106PDRandomExit(false))
                    //{
                    //    plugin.Error($"{pos}");
                    //}

                    //GameObject tunnel = GameObject.Find("Root_CollapsedTunnel");
                    //GameObject entrance = GameObject.Find("EntranceRooms");

                    //if(tunnel != null)
                    //{
                    //    plugin.Error($"{tunnel.name}/{tunnel.transform.position}");
                    //}

                    //if(entrance != null)
                    //{
                    //    plugin.Error($"{entrance.name}/{entrance.transform.position}");
                    //    foreach(Transform i in entrance.GetComponentInChildren<Transform>())
                    //    {
                    //        plugin.Error($"{i.name}/{i.position}/{i.localPosition}");
                    //        plugin.Error($"--->{i.}");
                    //    }
                    //}

                    //ImageGenerator ig_ent = null;
                    //ImageGenerator ig_hcz = null;
                    //ImageGenerator ig_lcz = null;

                    //foreach(ImageGenerator ig in GameObject.FindObjectsOfType<ImageGenerator>())
                    //{
                    //    if(ig.height == 0)
                    //    {
                    //        plugin.Error("lcz found");
                    //        ig_lcz = ig;
                    //    }else if(ig.height == -1000)
                    //    {
                    //        plugin.Error("hcz found");
                    //        ig_hcz = ig;
                    //    }
                    //    else
                    //    {
                    //        plugin.Error("ent found");
                    //        ig_ent = ig;
                    //    }
                    //}

                    //foreach(var i in ig_ent.roomsOfType)
                    //{
                    //    foreach(var x in i.roomsOfType)
                    //    {
                    //        foreach(var y in x.room)
                    //        {
                    //            plugin.Error($"{y.name}/{x.type}");
                    //        }
                    //    }
                    //}

                    //int testmask = 1208246273;
                    //testmask |= 1 << 4;
                    //plugin.Debug($"{testmask}");

                    //for(int i = 0; i < 32; i++)
                    //{
                    //    plugin.Debug($"Layer[{i}]{LayerMask.LayerToName(i)}");
                    //    if(((1 << i) & 1208246273) != 0)
                    //    {
                    //        plugin.Warn($"1208246273 in [{i}]");
                    //    }
                    //    if(((1 << i) & testmask) != 0)
                    //    {
                    //        plugin.Warn($"testmask in [{i}]");
                    //    }
                    //}

                    //foreach(var i in UnityEngine.Object.FindObjectsOfType<BreakableWindow>())
                    //{
                    //    plugin.Error($"{i.health}");
                    //}

                    //foreach(var i in UnityEngine.Object.FindObjectsOfType<Radio>())
                    //{
                    //    System.Type radiotype = i.GetType();
                    //    var myRadio = radiotype.GetField("myRadio", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    //    var radioUniq = radiotype.GetField("radioUniq", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
                    //    plugin.Error($"name:{i.name}/isLocalPlayer:{i.isLocalPlayer}/myRadio:{(int)myRadio.GetValue(i)}/radioUniq:{(int)radioUniq.GetValue(i)}");
                    //}

                    return(new string[] { "test ok" });
                }
            }

            return(new string[] { GetUsage() });
        }
示例#9
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);
        }