예제 #1
0
        private static void ConfigureLocalSpawnerByNamed(ISpawnerConfigurationCollection config)
        {
            try
            {
                LocalSpawnSettings settings = new()
                {
                    Conditions    = new[] { new ConditionNearbyPlayersCarryValue(100, 2000) },
                    SpawnInterval = TimeSpan.FromSeconds(1),
                };

                config.ConfigureLocalSpawnerByName("Spawner_Skeleton")
                .WithSettings(settings);

                config.ConfigureLocalSpawnerByName("Spawner_Skeleton_night_noarcher")
                .WithSettings(settings);

                config.ConfigureLocalSpawnerByName("Spawner_Skeleton_poison")
                .WithSettings(settings);

                config.ConfigureLocalSpawnerByName("Spawner_Skeleton_respawn_30")
                .WithSettings(settings);
            }
            catch (Exception e)
            {
                Log.LogError(e);
            }
        }
    internal static void ApplyBepInExConfigs(ISpawnerConfigurationCollection spawnerConfigs)
    {
        var configs = CreatureSpawnerConfigurationManager.CreatureSpawnerConfig?.Subsections;

        if ((configs?.Count ?? 0) == 0)
        {
            return;
        }

        foreach (var locationConfig in configs)
        {
            foreach (var creatureConfig in locationConfig.Value.Subsections)
            {
                if (!creatureConfig.Value.TemplateEnabled.Value)
                {
                    continue;
                }

                // BepInEx configs are not set up to distinguish between rooms and locations in config path.
                // Instead, the first matching name is used. Therefore, two builders are configured to leave
                // it up to the first and most specific identified to be used.
                var roomBuilder     = spawnerConfigs.ConfigureLocalSpawnerByRoomAndCreature(locationConfig.Key, creatureConfig.Key);
                var locationBuilder = spawnerConfigs.ConfigureLocalSpawnerByLocationAndCreature(locationConfig.Key, creatureConfig.Key);

                ApplyConfigToBuilder(creatureConfig.Value, roomBuilder);
                ApplyConfigToBuilder(creatureConfig.Value, locationBuilder);
            }
        }
    }
 public static ILocalSpawnBuilder ConfigureLocalSpawnerByName(
     this ISpawnerConfigurationCollection configCollection,
     string spawnerPrefabName)
 => configCollection
 .GetOrAddSpawnerConfiguration(new LocalSpawnerConfiguration())
 .GetBuilder(new SpawnerNameIdentifier(
                 spawnerPrefabName));
예제 #4
0
 private static void ConfigureLocalSpawnerWithIntegration(ISpawnerConfigurationCollection config)
 {
     config.ConfigureLocalSpawnerByLocationAndCreature("StoneTowerRuins08", "Skeleton")
     .SetMinLevel(5)
     .SetMaxLevel(10)
     .SetSpawnInterval(TimeSpan.FromSeconds(1))
     .SetCllcModifierInfusion(CllcCreatureInfusion.Fire)
     .SetEpicLootConditionNearbyPlayersCarryItemWithRarity(100, EpicLootRarity.Magic, EpicLootRarity.Epic, EpicLootRarity.Rare);
 }
 public static ILocalSpawnBuilder ConfigureLocalSpawnerByRoomAndCreature(
     this ISpawnerConfigurationCollection configCollection,
     string roomName,
     string creaturePrefabName)
 => configCollection
 .GetOrAddSpawnerConfiguration(new LocalSpawnerConfiguration())
 .GetBuilder(new RoomIdentifier(
                 roomName,
                 creaturePrefabName));
예제 #6
0
 /// <summary>
 /// TODO: Add an automatically created test cfg to configs. Currently just assumes a cfg exists which sets [Runestone_Boars.Boar].
 /// </summary>
 private static void ConfigureLocalSpawnerOverridenByFile(ISpawnerConfigurationCollection config)
 {
     try
     {
         config.ConfigureLocalSpawnerByLocationAndCreature("Runestone_Boars", "Boar")
         .SetPrefabName("Skeleton");
     }
     catch (Exception e)
     {
         Log.LogError(e);
     }
 }
예제 #7
0
 /// <summary>
 /// Disables default deer template. No more standard deer should show up in starting zone.
 /// </summary>
 private static void ConfigureWorldSpawnerOverrideDefault(ISpawnerConfigurationCollection config)
 {
     try
     {
         config.ConfigureWorldSpawner(0)
         .SetEnabled(false)
         .SetTemplateName("Disabled deer");
     }
     catch (Exception e)
     {
         Log.LogError(e);
     }
 }
예제 #8
0
        public static void ConfigureSpawners(ISpawnerConfigurationCollection config)
        {
            try
            {
                ConfigureLocalSpawnerByNamed(config);
                ConfigureLocalSpawnerOverridenByFile(config);
                ConfigureLocalSpawnerWithIntegration(config);

                ConfigureWorldSpawner(config);
                ConfigureWorldSpawnerBySettings(config);
                ConfigureWorldSpawnerOverrideDefault(config);
            }
            catch (Exception e)
            {
                System.Console.WriteLine($"Something went horribly wrong: {e.Message}\nStackTrace:\n{e.StackTrace}");
            }
        }
예제 #9
0
 private static void ConfigureWorldSpawnerBySettings(ISpawnerConfigurationCollection config)
 {
     try
     {
         config.ConfigureWorldSpawner(10_000_001)
         .WithSettings(new()
         {
             PrefabName    = "Troll",
             SpawnInterval = TimeSpan.FromSeconds(30),
             Biomes        = new() { Heightmap.Biome.Meadows },
             MaxSpawned    = 10
         })
         .SetTemplateName("Trolling meadows");
     }
     catch (Exception e)
     {
         Log.LogError(e);
     }
 }
    internal static void ApplyBepInExConfigs(ISpawnerConfigurationCollection spawnerConfigs)
    {
#if DEBUG
        Log.LogTrace("SpawnSystemConfigApplier.ApplyBepInExConfigs");
#endif
        var spawnSystemConfigs = SpawnSystemConfigurationManager
                                 .SpawnSystemConfig?
                                 .Subsections?      //[*]
                                 .Values?
                                 .FirstOrDefault()? //SpawnSystem config is only expected to have a single first layer, namely "WorldSpawner", so we just grab the first entry.
                                 .Subsections?      //[WorldSpawner.*]
                                 .Values;

        if ((spawnSystemConfigs?.Count ?? 0) == 0)
        {
            return;
        }

        var configs = spawnSystemConfigs
                      .OrderBy(x => x.Index)
                      .Where(x => x.TemplateEnabled.Value);

        foreach (var spawnConfig in configs)
        {
            if (string.IsNullOrWhiteSpace(spawnConfig.PrefabName?.Value))
            {
                Log.LogWarning($"PrefabName of world spawner config {spawnConfig.SectionKey} is empty. Skipping config.");
                continue;
            }

            if (spawnConfig.Index < 0)
            {
                Log.LogWarning($"Index of world spawner config {spawnConfig.SectionKey} is less than 0. Skipping config.");
                continue;
            }

            var builder = spawnerConfigs.ConfigureWorldSpawner((uint)spawnConfig.Index);

            ApplyConfigToBuilder(spawnConfig, builder);
        }
    }
예제 #11
0
 private static void ConfigureWorldSpawner(ISpawnerConfigurationCollection config)
 {
     try
     {
         config.ConfigureWorldSpawner(10_000_000)
         .SetPrefabName("Boar")
         .SetTemplateName("Skydiver Boars")
         .SetSpawnInterval(TimeSpan.FromSeconds(30))
         .SetSpawnAtDistanceToGround(100)
         .SetPackSizeMin(3)
         .SetPackSizeMax(3)
         .SetMaxSpawned(20)
         .SetSpawnAtDistanceToPlayerMin(1)
         .SetSpawnAtDistanceToPlayerMax(5)
         ;
     }
     catch (Exception e)
     {
         Log.LogError(e);
     }
 }
 private static void ApplyBepInExConfigs(ISpawnerConfigurationCollection spawnerConfigs)
 {
     CreatureSpawnerConfigApplier.ApplyBepInExConfigs(spawnerConfigs);
 }
 internal static void ApplyBepInExConfigs(ISpawnerConfigurationCollection spawnerConfigs)
 {
     SpawnSystemConfigApplier.ApplyBepInExConfigs(spawnerConfigs);
 }
 /// <summary>
 /// <para>Gets an IWorldSpawnBuilder with the indicated id. If none exist, creates a new one.</para>
 /// </summary>
 public static IWorldSpawnBuilder ConfigureWorldSpawner(
     this ISpawnerConfigurationCollection configCollection,
     uint id)
 => configCollection
 .GetOrAddSpawnerConfiguration(new WorldSpawnerConfiguration())
 .GetBuilder(id);