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); } }
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); }
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); }
/* * 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); } }
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; } }
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; } }
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); } } }
public static IEnumerator <float> VentCooldownStart(float duration, EPlayer pp) { pp.Broadcast(2, "You are preparing your abilities"); yield return(Timing.WaitForSeconds(Singleton.Config.VentCooldownStart)); }