private static void Prefix(SpawnRegion __instance) { bool m_StartHasBeenCalled = (bool)startHasBeenCalled.GetValue(__instance); if (m_StartHasBeenCalled || (GameManager.IsStoryMode() && !WildlifeBegone.Config.enableInStoryMode)) { return; } GameObject spawnedObject = __instance.m_SpawnablePrefab; BaseAi ai = spawnedObject.GetComponent <BaseAi>(); if (ai == null) { return; } SpawnRateSetting spawnRates = WildlifeBegone.Config.spawnRates[(int)ai.m_AiSubType]; AdjustRegion(__instance, spawnRates); }
private static void AdjustRegion(SpawnRegion region, SpawnRateSetting spawnRates) { float activeMultiplier = spawnRates.SpawnRegionActiveTimeMultiplier; float respawnMultiplier = spawnRates.MaximumRespawnsPerDayMultiplier; float maximumCountMultiplier = spawnRates.MaximumSpawnedAnimalsMultiplier; float oldChanceActive = region.m_ChanceActive; region.m_ChanceActive *= activeMultiplier; float oldRespawnTime = region.m_MaxRespawnsPerDayStalker; region.m_MaxRespawnsPerDayPilgrim *= respawnMultiplier; region.m_MaxRespawnsPerDayVoyageur *= respawnMultiplier; region.m_MaxRespawnsPerDayStalker *= respawnMultiplier; region.m_MaxRespawnsPerDayInterloper *= respawnMultiplier; int oldMaximumCountDay = region.m_MaxSimultaneousSpawnsDayStalker; int oldMaximumCountNight = region.m_MaxSimultaneousSpawnsNightStalker; RoundingMultiply(ref region.m_MaxSimultaneousSpawnsDayPilgrim, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsDayVoyageur, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsDayStalker, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsDayInterloper, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsNightPilgrim, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsNightVoyageur, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsNightStalker, maximumCountMultiplier); RoundingMultiply(ref region.m_MaxSimultaneousSpawnsNightInterloper, maximumCountMultiplier); if (WildlifeBegone.Config.logging) { Debug.LogFormat("Adjusted spawner {0}: Active chance {1:F1} -> {2:F1}, respawns / day {3:F2} -> {4:F2}, maximum spawns ({5:D}, {6:D}) -> ({7:D}, {8:D})", region.name, oldChanceActive, region.m_ChanceActive, oldRespawnTime, region.m_MaxRespawnsPerDayStalker, oldMaximumCountDay, oldMaximumCountNight, region.m_MaxSimultaneousSpawnsDayStalker, region.m_MaxSimultaneousSpawnsNightStalker ); } }
private WildlifeBegoneConfig(ConfigProxy proxy) { logging = proxy.Logging; enableInStoryMode = proxy.EnableInStoryMode; rsoSettings = proxy.SpawnerGroups; if (rsoSettings == null) { Debug.LogError("[WildlifeBegone] Couldn't load the \"SpawnerGroups\" configuration entry, not modifying group spawns."); rsoSettings = new RSOSettings(); } if (proxy.SpawnRates == null) { Debug.LogError("[WildlifeBegone] Couldn't load the \"SpawnRates\" configuration entry, not modifying spawn settings."); proxy.SpawnRates = new Dictionary <string, SpawnRateSetting>(); } Array values = Enum.GetValues(typeof(AiSubType)); string[] names = Enum.GetNames(typeof(AiSubType)); spawnRates = new Dictionary <int, SpawnRateSetting>(values.Length); for (int i = 0; i < values.Length; ++i) { int value = (int)values.GetValue(i); string name = names[i]; if (!proxy.SpawnRates.TryGetValue(name, out SpawnRateSetting setting)) { Debug.LogError("[WildlifeBegone] Couldn't find a spawn rate setting for animal type \"" + name + "\". Not modifying spawn rates."); setting = new SpawnRateSetting(); } spawnRates[value] = setting; } }