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));
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));
/// <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); } }
/// <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); } }
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}"); } }
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); } }
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);