/// <summary>
        /// Gets the default spawn settings file. This is closest to base game.
        /// </summary>
        public static SpawnSettings GetDefaultSpawnSettings()
        {
            var spawnSettings = new SpawnSettings();

            spawnSettings.DefineSharedSpawns(RoleType.Scp93953, RoleType.Scp93989);
            spawnSettings.DefineSharedSpawns(RoleType.NtfScientist, RoleType.NtfCadet, RoleType.NtfCommander,
                                             RoleType.NtfLieutenant);

            var configs = CustomPlayerSpawning.Configs;

            if (configs.UseDefaultSafeSpawns)
            {
                spawnSettings.DefineSafeSpawnDistances(new DistanceCheckInfo(
                                                           new[] { RoleType.ChaosInsurgency, RoleType.ClassD },
                                                           configs.DefaultSafeSpawnDistance, configs.DefaultEnemySafeSpawnDistance));

                spawnSettings.DefineSafeSpawnDistances(new DistanceCheckInfo(
                                                           new[]
                {
                    RoleType.NtfCadet, RoleType.NtfCommander, RoleType.NtfLieutenant, RoleType.NtfScientist,
                    RoleType.Scientist, RoleType.FacilityGuard
                },
                                                           configs.DefaultSafeSpawnDistance, configs.DefaultEnemySafeSpawnDistance));

                spawnSettings.DefineSafeSpawnDistances(new DistanceCheckInfo(
                                                           new[]
                {
                    RoleType.Scp93953, RoleType.Scp049, RoleType.Scp096, RoleType.Scp106, RoleType.Scp93989,
                    RoleType.Scp173
                },
                                                           configs.DefaultSafeSpawnDistance, configs.DefaultEnemySafeSpawnDistance));
            }

            return(spawnSettings);
        }
        private void OrganizeSpawns()
        {
            if (!_spawnFileExists)
            {
                CreateDefaultSpawnPointFile();
            }
            if (SpawnSettings == null)
            {
                SpawnSettings = SpawnSettings.GetDefaultSpawnSettings();
            }

            RoleGameObjectDictionary.Clear();

            // For each role, get who they share spawns with.
            for (int i = 0; i < RoleTypeSize; i++)
            {
                var role = (RoleType)i;

                // Make sure the role isn't already populated
                if (RoleGameObjectDictionary.ContainsKey(role))
                {
                    continue;
                }

                var sharedRoles     = SpawnSettings.PopulatedSharedSpawnInfo[role];
                var sharedRolesSize = sharedRoles.Count;

                var sharedSpawnPoints = new List <PlayerSpawnPoint>();

                // Create a list of GameObjects using those shared spawn points.
                for (int j = 0; j < sharedRolesSize; j++)
                {
                    var sharedRole = sharedRoles[j];
                    if (_pointList.IdGroupedFixedPoints.TryGetValue(((int)sharedRole).ToString(), out var spawnList))
                    {
                        var spawnCount = spawnList.Count;

                        for (int k = 0; k < spawnCount; k++)
                        {
                            var spawn = spawnList[k];

                            var go = new GameObject(spawn.Id);
                            go.transform.position = spawn.Position;
                            go.transform.rotation = spawn.Rotation;

                            sharedSpawnPoints.Add(new PlayerSpawnPoint(go, spawn.Room));
                        }
                    }
                }

                if (sharedSpawnPoints.Count == 0)
                {
                    continue;
                }

                // Assign the shared roles the Game Objects.
                for (int j = 0; j < sharedRolesSize; j++)
                {
                    var sharedRole = sharedRoles[j];

                    RoleGameObjectDictionary.Add(sharedRole, sharedSpawnPoints);
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Apply your custom settings on OnEnabled() or ignore to use default game settings.
 /// </summary>
 /// <param name="settings"><see cref="SpawnSettings"/>"/></param>
 public static void ApplySettings(SpawnSettings settings) =>
 CustomPlayerSpawning.SpawnSettings = settings;