public bool Execute(ArraySegment <string> arguments, ICommandSender sender, out string response) { if (!((CommandSender)sender).CheckPermission("scp008.infect")) { response = "Missing permissions."; return(false); } if (Scp008X.Instance.Outbreak) { response = "An outbreak has already happened."; return(false); } Scp008X.Instance.Outbreak = true; Cassie.GlitchyMessage($"SCP 0 0 8 containment breach detected . Lockdown of heavy containment zone has begun", 15, 15); Generator079.Generators[0].ServerOvercharge(20f, true); Timing.CallDelayed(_gen.Next(1, 15), () => { foreach (var ply in Player.List.Where(p => p.CurrentRoom.Zone == ZoneType.HeavyContainment)) { var chance = _gen.Next(1, 100); if (chance <= Scp008X.Instance.Config.InfectionChance) { EventHandlers.Infect(ply); } } }); response = "SCP-008 outbreak has begun."; return(true); }
public static void SpawnSquad(uint size) { List <Player> spec = Player.List.Where(x => x.Role.Team == Team.RIP && !x.IsOverwatchEnabled).ToList(); bool prioritySpawn = RespawnManager.Singleton._prioritySpawn; if (prioritySpawn) { spec.OrderBy(x => x.ReferenceHub.characterClassManager.DeathTime); } int spawnCount = 1; while (spec.Count > 0 && spawnCount <= size) { int index = UnityEngine.Random.Range(0, spec.Count); if (spec[index] == null) { continue; } SpawnPlayer(spec[index]); spec.RemoveAt(index); spawnCount++; } if (spawnCount > 0 && !string.IsNullOrEmpty(config.SpawnManager.EntryAnnoucement)) { Cassie.GlitchyMessage(config.SpawnManager.EntryAnnoucement, 0.05f, 0.05f); } foreach (Player scp in Player.List.Where(x => x.Role.Team == Team.SCP || x.SessionVariables.ContainsKey("IsScp035"))) { scp.Broadcast(config.SpawnManager.EntryBroadcast); } }
private void OnAnnouncingNtfEntrance(AnnouncingNtfEntranceEventArgs ev) { var cassie = Config.Cassies.FirstOrDefault(info => info.Trigger == "OnNtfArrived"); if (cassie != null) { ev.IsAllowed = false; var cassieMessage = cassie.Value.Replace("{mtf}", $"NATO_{ev.UnitName[0]} {ev.UnitNumber}"); Cassie.GlitchyMessage(CassieFormatter.Format(cassieMessage), cassie.GlitchChance, cassie.JamChance); } }
public static void SpawnSquad(List <Player> players) { foreach (Player player in players) { SpawnPlayer(player); } if (players.Count > 0) { Cassie.GlitchyMessage(config.SpawnManager.EntryAnnoucement, 0.05f, 0.05f); } foreach (Player scp in Player.List.Where(x => x.Role.Team == Team.SCP || x.SessionVariables.ContainsKey("IsScp035"))) { scp.Broadcast(config.SpawnManager.EntryBroadcast); } }
private void OnAnnouncingScpTermination(AnnouncingScpTerminationEventArgs ev) { string damageType = ev.TerminationCause; if (ev.Killer != null) { damageType = ev.Killer.Team.ToFriendlyString(ev.Killer.ReferenceHub.characterClassManager); } var cassie = Config.GetScpDeathCassie(ev.Role.roleId); if (cassie != null) { ev.IsAllowed = false; var cassieMessage = cassie.Value.Replace("{damagetype}", damageType); Cassie.GlitchyMessage(CassieFormatter.Format(cassieMessage), cassie.GlitchChance, cassie.JamChance); } }
public void OnRespawningTeam(RespawningTeamEventArgs ev) { plugin.TeamRespawnCount++; if (ev.NextKnownTeam != SpawnableTeamType.ChaosInsurgency) { return; } if (!plugin.IsSpawnable) { if (!string.IsNullOrEmpty(config.SpawnManager.ChaosEntryAnnoucement)) { Cassie.GlitchyMessage(config.SpawnManager.ChaosEntryAnnoucement, 0.05f, 0.05f); } return; } ev.IsAllowed = false; bool prioritySpawn = RespawnManager.Singleton._prioritySpawn; if (prioritySpawn) { ev.Players.OrderBy(x => x.ReferenceHub.characterClassManager.DeathTime); } List <Player> sHPlayers = new List <Player>(); for (int i = 0; i < config.SpawnManager.MaxSquad && ev.Players.Count > 0; i++) { Player player = prioritySpawn ? ev.Players.First() : ev.Players[UnityEngine.Random.Range(0, ev.Players.Count)]; sHPlayers.Add(player); ev.Players.Remove(player); } Timing.CallDelayed(0.1f, () => API.SpawnSquad(sHPlayers)); if (config.SpawnManager.MaxSpawns > 0) { plugin.SerpentsRespawnCount++; } plugin.IsSpawnable = false; ev.NextKnownTeam = SpawnableTeamType.None; }
public void OnTeamRespawn(RespawningTeamEventArgs ev) { if (isSpawnable) { if (ev.NextKnownTeam == Respawning.SpawnableTeamType.NineTailedFox) { // Prevent announcement ev.NextKnownTeam = Respawning.SpawnableTeamType.ChaosInsurgency; } List <Player> SHPlayers = new List <Player>(); List <Player> CIPlayers = new List <Player>(ev.Players); ev.Players.Clear(); for (int i = 0; i < SerpentsHand.instance.Config.MaxSquad && CIPlayers.Count > 0; i++) { Player player = CIPlayers[rand.Next(CIPlayers.Count)]; SHPlayers.Add(player); CIPlayers.Remove(player); } Timing.CallDelayed(0.1f, () => { if (!isSpawnable) { SHPlayers.Clear(); } if (isSpawnable) { SpawnSquad(SHPlayers); serpentsRespawnCount++; } }); } else if (ev.NextKnownTeam == Respawning.SpawnableTeamType.ChaosInsurgency) { string ann = SerpentsHand.instance.Config.CiEntryAnnouncement; if (ann != string.Empty) { Cassie.GlitchyMessage(ann, 0.05f, 0.05f); } } teamRespawnCount++; }
internal void OnAnnouncingScpTermination(AnnouncingScpTerminationEventArgs ev) { if (scp012death && ev.HitInfo.GetDamageType() == DamageTypes.Bleeding) { ev.IsAllowed = false; if (!string.IsNullOrEmpty(Config.CassieMessage)) { string message = Config.CassieMessage; message = message.Replace("{scp}", $"{RoleToString[ev.Role.roleId]}"); Timing.CallDelayed(0.5f, () => { var scps = Player.Get(Team.SCP); if (scps.Count(scp => scp.Role == RoleType.Scp079) > 0 && scps.Count() == 1) { message += (" . . ALLSECURED . SCP 0 7 9 RECONTAINMENT SEQUENCE COMMENCING . FORCEOVERCHARGE"); } Cassie.GlitchyMessage(message, 0.05f, 0.05f); }); } } }