Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #6
0
        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;
        }
Beispiel #7
0
        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++;
        }
Beispiel #8
0
        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);
                    });
                }
            }
        }