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
                                    );
                }
            }
示例#3
0
        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;
            }
        }