예제 #1
0
        public void AutoRoundBanPlayer(Exiled.API.Features.Player player)
        {
            int    rounds;
            Player databasePlayer = player.GetDatabasePlayer();

            databasePlayer.TotalScpSuicideBans++;
            databasePlayer.SuicidePunishment[databasePlayer.SuicidePunishment.Count() - 1] = "Round-Ban";
            if (pluginInstance.Config.MultiplyBanDurationEachBan == true)
            {
                rounds = databasePlayer.TotalScpSuicideBans * pluginInstance.Config.AutoBanRoundsCount;
            }
            else
            {
                rounds = pluginInstance.Config.AutoBanDuration;
            }
            if (pluginInstance.Config.BroadcastSanctions)
            {
                BroadcastSuicideQuitAction($"<color=blue><SCPUtils> {player.Nickname} ({player.Role}) has been <color=red>BANNED</color> from playing SCP for exceeding Quits / Suicides (as SCP) limit for {rounds} rounds.</color>");
                if (databasePlayer.RoundBanLeft >= 1)
                {
                    BroadcastSuicideQuitAction($"<color=blue><SCPUtils> {player.Nickname} has suicided while having an active ban!</color>");
                }
            }
            databasePlayer.RoundsBan[databasePlayer.RoundsBan.Count() - 1] = rounds;
            databasePlayer.RoundBanLeft += rounds;
            if (pluginInstance.Config.RoundBanNotification.Show)
            {
                player.ClearBroadcasts();
                var message = pluginInstance.Config.RoundBanNotification.Content;
                message = message.Replace("%roundnumber%", databasePlayer.RoundBanLeft.ToString());
                player.Broadcast(pluginInstance.Config.WelcomeMessage.Duration, message, pluginInstance.Config.WelcomeMessage.Type, false);
            }
        }
예제 #2
0
        public void AutoWarnPlayer(Exiled.API.Features.Player player)
        {
            if (pluginInstance.Config.BroadcastWarns)
            {
                BroadcastSuicideQuitAction($"<color=blue><SCPUtils> {player.Nickname} ({player.Role}) has been <color=red>WARNED</color> for Quitting or Suiciding as SCP</color>");
            }

            player.GetDatabasePlayer().ScpSuicideCount++;
            player.ClearBroadcasts();
            player.Broadcast(pluginInstance.Config.SuicideWarnMessage);
        }
예제 #3
0
        public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response)
        {
            string broadcast;

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

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

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

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

            return(true);
        }
예제 #4
0
        /*
         * Has to be redone
         *
         * public void ChangeIP(Exiled.API.Features.Player player)
         * {
         *  Player databasePlayer = player.GetDatabasePlayer();
         *  var accounts = Database.LiteDatabase.GetCollection<Player>().FindAll()
         *      .Where(ip => ip.Ip == databasePlayer.Ip).ToList();
         *  StringBuilder message =
         *      new StringBuilder(
         *              $"<color=green>[Player {databasePlayer.Name} ({databasePlayer.Id}@{databasePlayer.Authentication}) has changed IP ({accounts.Count})]</color>")
         *          .AppendLine();
         *  foreach (var ips in accounts)
         *  {
         *      message.AppendLine();
         *      message.Append(
         *              $"Old IP: <color=yellow>{databasePlayer.Ip}</color>\nNew IP: <color=yellow>{player.IPAddress}</color>\nPlayer: <color=yellow>{ips.Name} ({ips.Id}{ips.Authentication})</color>\nFirst Join: <color=yellow>{ips.FirstJoin}</color>\nIsRestricted: <color=yellow>{ips.IsRestricted()}</color>\nIsBanned: <color=yellow>{ips.IsBanned()}</color>\nTotal played as SCP: <color=yellow>{ips.TotalScpGamesPlayed}</color>\nTotal suicide: <color=yellow>{ips.ScpSuicideCount}</color>")
         *          .AppendLine();
         *  }
         *
         *  foreach (var staffer in Exiled.API.Features.Player.List.Where(x => x.RemoteAdminAccess))
         *  {
         *      if (pluginInstance.Config.AlertStaffBroadcastChangeIP.Show)
         *      {
         *          staffer.ClearBroadcasts();
         *          staffer.Broadcast(pluginInstance.Config.AlertStaffBroadcastChangeIP.Duration,
         *              pluginInstance.Config.AlertStaffBroadcastChangeIP.Content
         *                  .Replace("{player}", player.Nickname + " " + player.UserId)
         *                  .Replace("{oldIP}", databasePlayer.Ip).Replace("{newIP}", player.IPAddress));
         *          staffer.SendConsoleMessage(message.ToString(), "default");
         *      }
         *  }
         *  databasePlayer.Ip = player.IPAddress;
         *  Database.LiteDatabase.GetCollection<Player>().Update(databasePlayer);
         * }
         */
        public void ReplacePlayer(Exiled.API.Features.Player player)
        {
            Player databasePlayer = player.GetDatabasePlayer();


            var list = Exiled.API.Features.Player.List.ToList();

            list.Remove(player);
            list.RemoveAll(x => x.IsScp);
            list.RemoveAll(x => x.Role == RoleType.Tutorial);
            if (list.Count() == 0)
            {
                Log.Info("[SCPUtils] Couldnt find a player to replace the banned one!");
                return;
            }
            var id   = UnityEngine.Random.Range(0, list.Count - 1);
            var role = player.Role;
            ReplacePlayerEvent args = new ReplacePlayerEvent();

            args.BannedPlayer   = player;
            args.ReplacedPlayer = list[id];
            args.ScpRole        = player.Role;
            args.NormalRole     = list[id].Role;
            player.SetRole(list[id].Role);
            list[id].SetRole(role);
            pluginInstance.Events.OnReplacePlayerEvent(args);


            databasePlayer.RoundBanLeft--;
            if (pluginInstance.Config.RoundBanNotification.Show)
            {
                player.ClearBroadcasts();
                var message = pluginInstance.Config.RoundBanSpawnNotification.Content;
                message = message.Replace("%roundnumber%", databasePlayer.RoundBanLeft.ToString());
                player.Broadcast(pluginInstance.Config.RoundBanSpawnNotification.Duration, message, pluginInstance.Config.RoundBanSpawnNotification.Type, false);
            }
        }
예제 #5
0
        public void PostLoadPlayer(Exiled.API.Features.Player player)
        {
            Player databasePlayer = player.GetDatabasePlayer();


            if (!string.IsNullOrEmpty(databasePlayer.BadgeName))
            {
                UserGroup group = ServerStatic.GetPermissionsHandler()._groups[databasePlayer.BadgeName];


                if (databasePlayer.BadgeExpire >= DateTime.Now)
                {
                    player.ReferenceHub.serverRoles.SetGroup(group, false, true, true);
                    if (ServerStatic.PermissionsHandler._members.ContainsKey(player.UserId))
                    {
                        ServerStatic.PermissionsHandler._members.Remove(player.UserId);
                    }

                    ServerStatic.PermissionsHandler._members.Add(player.UserId, databasePlayer.BadgeName);
                    BadgeSetEvent args = new BadgeSetEvent();
                    args.Player       = player;
                    args.NewBadgeName = databasePlayer.BadgeName;
                    pluginInstance.Events.OnBadgeSet(args);
                }
                else
                {
                    BadgeRemovedEvent args = new BadgeRemovedEvent();
                    args.Player              = player;
                    args.BadgeName           = databasePlayer.BadgeName;
                    databasePlayer.BadgeName = "";

                    if (ServerStatic.PermissionsHandler._members.ContainsKey(player.UserId))
                    {
                        ServerStatic.PermissionsHandler._members.Remove(player.UserId);
                    }
                    if (ServerStatic.RolesConfig.GetStringDictionary("Members").ContainsKey(player.UserId))
                    {
                        UserGroup previous = ServerStatic.GetPermissionsHandler()._groups[ServerStatic.RolesConfig.GetStringDictionary("Members")[player.UserId]];
                        ServerStatic.PermissionsHandler._members.Add(player.UserId, ServerStatic.RolesConfig.GetStringDictionary("Members")[player.UserId]);
                        player.ReferenceHub.serverRoles.SetGroup(previous, false, true, true);
                    }
                    pluginInstance.Events.OnBadgeRemoved(args);
                }
            }

            Timing.CallDelayed(1.5f, () =>
            {
                if (!string.IsNullOrEmpty(databasePlayer.ColorPreference) && databasePlayer.ColorPreference != "None")
                {
                    if (player.CheckPermission("scputils.changecolor") || player.CheckPermission("scputils.playersetcolor") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepColorWithoutPermission)
                    {
                        player.RankColor = databasePlayer.ColorPreference;
                    }
                    else
                    {
                        databasePlayer.ColorPreference = "";
                    }
                }

                if (databasePlayer.HideBadge == true)
                {
                    if (player.CheckPermission("scputils.badgevisibility") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepBadgeVisibilityWithoutPermission)
                    {
                        player.BadgeHidden = true;
                    }
                    else
                    {
                        databasePlayer.HideBadge = false;
                    }
                }


                if (!string.IsNullOrEmpty(databasePlayer.CustomNickName) && databasePlayer.CustomNickName != "None")
                {
                    if (player.CheckPermission("scputils.changenickname") || player.CheckPermission("scputils.playersetname") || databasePlayer.KeepPreferences || pluginInstance.Config.KeepNameWithoutPermission)
                    {
                        player.DisplayNickname = databasePlayer.CustomNickName;
                    }
                    else
                    {
                        databasePlayer.CustomNickName = "";
                    }
                }

                if (pluginInstance.Config.AutoKickBannedNames && pluginInstance.Functions.CheckNickname(player.Nickname) && !player.CheckPermission("scputils.bypassnickrestriction"))
                {
                    Timing.CallDelayed(2f, () =>
                    {
                        player.Kick("Auto-Kick: " + pluginInstance.Config.AutoKickBannedNameMessage, "SCPUtils");
                    });
                }
            });

            if (databasePlayer.UserNotified.Count() <= 0)
            {
                return;
            }

            if (databasePlayer.UserNotified[databasePlayer.UserNotified.Count() - 1] == false)
            {
                player.ClearBroadcasts();
                player.Broadcast(pluginInstance.Config.OfflineWarnNotification);
                databasePlayer.UserNotified[databasePlayer.UserNotified.Count() - 1] = true;
            }
        }
예제 #6
0
        public static void RemovePlayer(EPlayer player)
        {
            switch (player.Team)
            {
            case Team.CDP:
                int     cdnum  = 0;
                EPlayer cdlast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        cdnum++;
                        cdlast = p;
                    }
                }
                if (cdnum == 1 && cdlast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.ClassDMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        cdlast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.ClassDMessages[index]);
                    }
                    else
                    {
                        cdlast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.ClassDMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.RSC:
                int     scnum  = 0;
                EPlayer sclast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        scnum++;
                        sclast = p;
                    }
                }
                if (scnum == 1 && sclast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.ScientistMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        sclast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.ScientistMessages[index]);
                    }
                    else
                    {
                        sclast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.ScientistMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.MTF:
                int     mtfnum  = 0;
                EPlayer mtflast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        mtfnum++;
                        mtflast = p;
                    }
                }
                if (mtfnum == 1 && mtflast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.MTFMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        mtflast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.MTFMessages[index]);
                    }
                    else
                    {
                        mtflast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.MTFMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.CHI:
                int     chinum  = 0;
                EPlayer chilast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        chinum++;
                        chilast = p;
                    }
                }
                if (chinum == 1 && chilast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.ChaosMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        chilast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.ChaosMessages[index]);
                    }
                    else
                    {
                        chilast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.ChaosMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.SCP:
                int     scpnum  = 0;
                EPlayer scplast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        scpnum++;
                        scplast = p;
                    }
                }
                if (scpnum == 1 && scplast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.ScpMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        scplast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.ScpMessages[index]);
                    }
                    else
                    {
                        scplast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.ScpMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.TUT:
                int     tutnum  = 0;
                EPlayer tutlast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        tutnum++;
                        tutlast = p;
                    }
                }
                if (tutnum == 1 && tutlast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.TutorialMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        tutlast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.TutorialMessages[index]);
                    }
                    else
                    {
                        tutlast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.TutorialMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;

            case Team.RIP:
                int     ripnum  = 0;
                EPlayer riplast = null;
                foreach (EPlayer p in EPlayer.List)
                {
                    if (p.Team == Team.CDP)
                    {
                        ripnum++;
                        riplast = p;
                    }
                }
                if (ripnum == 1 && riplast != null)
                {
                    int index = new System.Random().Next(EPlugin.Instance.Config.SpectatorMessages.Count);
                    if (EPlugin.Instance.Config.UseHints != false)
                    {
                        riplast.Broadcast(EPlugin.Instance.Config.BroadcastDuration, EPlugin.Instance.Config.SpectatorMessages[index]);
                    }
                    else
                    {
                        riplast.ShowHint($"\n\n\n\n{EPlugin.Instance.Config.SpectatorMessages[index]}", EPlugin.Instance.Config.BroadcastDuration);
                    }
                }
                break;
            }
        }
예제 #7
0
        public void OnCommand(SendingRemoteAdminCommandEventArgs ev)
        {
            string[] args = ev.Arguments.ToArray();

            foreach (string str in args)
            {
                str.ToLower();
            }
            string command = ev.Name.ToLower();

            if (command == "givemask" && ScanMod.config.enable096Mask)
            {
                Exiled.API.Features.Player target = Exiled.API.Features.Player.Get(args[0]);
                if (target != null)
                {
                    if (target.Inventory.items.Count < 8)
                    {
                        if (!target.HasMaskInInventory())
                        {
                            target.Inventory.AddNewItem(ItemType.WeaponManagerTablet, 69);
                            target.Broadcast(5, "Вам была выдана маска для SCP 096");
                            ev.CommandSender.RaReply("Игроку с id " + args[0] + " успешно выдана маска для SCP 096", true, true, string.Empty);
                        }
                        else
                        {
                            ev.CommandSender.RaReply("У данного игрока уже есть маска для SCP 096", false, true, string.Empty);
                        }
                    }
                    else
                    {
                        ev.CommandSender.RaReply("В инвентаре данного игрока нет свободного места", false, true, string.Empty);
                    }
                }
                else
                {
                    ev.CommandSender.RaReply("Не существует игрока c id " + args[0], false, true, string.Empty);
                }
            }
            else if (command == "scan" && ScanMod.config.enableScanning)
            {
                if (args.Length == 0)
                {
                    ev.CommandSender.RaReply("Введите команду в формате scan scp/humans", false, true, string.Empty);
                }
                else if (args[0] == "scp")
                {
                    ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                    ExtraMethods.TryScanSCP(null);
                }
                else if (args[0] == "humans")
                {
                    ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                    ExtraMethods.TryScanPersonnel(null);
                }
                else
                {
                    ev.CommandSender.RaReply("Введите команду в формате scan scp/humans", false, true, string.Empty);
                }
            }
            else if (command == "protocol" && ScanMod.config.enableProtocols)
            {
                if (args.Length == 0)
                {
                    ev.CommandSender.RaReply("Введите команду в формате protocol название протокола", false, true, string.Empty);
                }
                else
                {
                    switch (args[0])
                    {
                    case "pl1":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryBlockGates(ev.Sender);
                        break;

                    case "pl2":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryBlockCheckpointAndGates(ev.Sender);
                        break;

                    case "pl3":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryBlockDoors(ev.Sender);
                        break;

                    case "pb2":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryLCZDecontain(ev.Sender);
                        break;

                    case "pb3":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryHCZDecontain(ev.Sender);
                        break;

                    case "pb4":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryLCZAndHCZDecontain(ev.Sender);
                        break;

                    case "pb5":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryNuke(ev.Sender);
                        break;

                    case "ps5":
                        ev.CommandSender.RaReply("Команда применена успешно", true, true, string.Empty);
                        ExtraMethods.TryBlackout(ev.Sender, 30f);
                        break;

                    default:
                        ev.CommandSender.RaReply("Введите команду в формате protocol название протокола", false, true, string.Empty);
                        break;
                    }
                }
            }
            else if (command == "infect" && ScanMod.config.enable008)
            {
                try
                {
                    Exiled.API.Features.Player player = Exiled.API.Features.Player.Get(args[0]);
                    if (player != null)
                    {
                        player.Infect();
                        ev.CommandSender.RaReply("Игрок " + args[0] + " успешно заражён", true, true, string.Empty);
                    }
                    else
                    {
                        ev.CommandSender.RaReply("На сервере нет игрока " + args[0], false, true, string.Empty);
                    }
                }
                catch
                {
                    ev.CommandSender.RaReply("Введите команду в формате infect id/nickname", false, true, string.Empty);
                }
            }
        }
예제 #8
0
 public static IEnumerator <float> VentCooldownStart(float duration, EPlayer pp)
 {
     pp.Broadcast(2, "You are preparing your abilities");
     yield return(Timing.WaitForSeconds(Singleton.Config.VentCooldownStart));
 }