Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of RendNutcrackerApocalypse v1.1.0
RendNutcrackerApocalypse.dll
Decompiled 2 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("RendNutcrackerApocalypse")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Rend Nutcracker Apocalypse Mod")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RendNutcrackerApocalypse")] [assembly: AssemblyTitle("RendNutcrackerApocalypse")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace RendNutcrackerApocalypse; [BepInPlugin("com.triteeth.rendnutcrackerapocalypse", "<color=#FF0000>R</color><color=#FF7F00>e</color><color=#FFFF00>n</color><color=#00FF00>d</color><color=#0000FF>N</color><color=#4B0082>u</color><color=#9400D3>t</color><color=#FF0000>c</color><color=#FF7F00>r</color><color=#FFFF00>a</color><color=#00FF00>c</color><color=#0000FF>k</color><color=#4B0082>e</color><color=#9400D3>r</color><color=#FF0000>A</color><color=#FF7F00>p</color><color=#FFFF00>o</color><color=#00FF00>c</color><color=#0000FF>a</color><color=#4B0082>l</color><color=#9400D3>y</color><color=#FF0000>p</color><color=#FF7F00>s</color><color=#FFFF00>e</color>", "1.1.0")] public class Plugin : BaseUnityPlugin { private const string g = "com.triteeth.rendnutcrackerapocalypse"; private const string n = "<color=#FF0000>R</color><color=#FF7F00>e</color><color=#FFFF00>n</color><color=#00FF00>d</color><color=#0000FF>N</color><color=#4B0082>u</color><color=#9400D3>t</color><color=#FF0000>c</color><color=#FF7F00>r</color><color=#FFFF00>a</color><color=#00FF00>c</color><color=#0000FF>k</color><color=#4B0082>e</color><color=#9400D3>r</color><color=#FF0000>A</color><color=#FF7F00>p</color><color=#FFFF00>o</color><color=#00FF00>c</color><color=#0000FF>a</color><color=#4B0082>l</color><color=#9400D3>y</color><color=#FF0000>p</color><color=#FF7F00>s</color><color=#FFFF00>e</color>"; private const string v = "1.1.0"; private readonly Harmony h = new Harmony("com.triteeth.rendnutcrackerapocalypse"); private static Plugin inst; public static ConfigEntry<float> chance; public static ConfigEntry<bool> force; public static ConfigEntry<bool> instSpwn; public static ConfigEntry<bool> slwTm; public static ConfigEntry<float> tmMult; public static bool isActive; private void Awake() { if ((Object)(object)inst == (Object)null) { inst = this; } chance = ((BaseUnityPlugin)this).Config.Bind<float>("General", "ApocalypseChance", 1f, "chance"); force = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "ForceApocalypse", false, "force rend"); instSpwn = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "InstantSpawn", true, "fast spawn"); slwTm = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "SlowTime", false, "slow time"); tmMult = ((BaseUnityPlugin)this).Config.Bind<float>("General", "TimeSlowMultiplier", 1f, "how slow"); h.PatchAll(typeof(Patches)); } } [HarmonyPatch] public static class Patches { private static EnemyType GetNut() { if ((Object)(object)StartOfRound.Instance == (Object)null || StartOfRound.Instance.levels == null) { return null; } SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val in levels) { if ((Object)(object)val == (Object)null) { continue; } foreach (SpawnableEnemyWithRarity enemy in val.Enemies) { if (enemy != null && enemy.enemyType?.enemyName.ToLower().Contains("nutcracker") == true) { return enemy.enemyType; } } foreach (SpawnableEnemyWithRarity outsideEnemy in val.OutsideEnemies) { if (outsideEnemy != null && outsideEnemy.enemyType?.enemyName.ToLower().Contains("nutcracker") == true) { return outsideEnemy.enemyType; } } foreach (SpawnableEnemyWithRarity daytimeEnemy in val.DaytimeEnemies) { if (daytimeEnemy != null && daytimeEnemy.enemyType?.enemyName.ToLower().Contains("nutcracker") == true) { return daytimeEnemy.enemyType; } } } return null; } [HarmonyPatch(typeof(RoundManager), "LoadNewLevel")] [HarmonyPrefix] public static void LoadNewLevelPrefix(RoundManager __instance, int randomSeed, SelectableLevel newLevel) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown Plugin.isActive = false; if ((Object)(object)newLevel == (Object)null) { return; } string text = newLevel.sceneName ?? ""; if (!text.ToLower().Contains("rend")) { return; } float num = Random.Range(0f, 100f); if (Plugin.force.Value || num < Plugin.chance.Value) { Plugin.isActive = true; EnemyType nut = GetNut(); if ((Object)(object)nut != (Object)null) { newLevel.Enemies.Clear(); newLevel.Enemies.Add(new SpawnableEnemyWithRarity(nut, 100)); int minEnemiesToSpawn = Mathf.RoundToInt(20f + 30f * Mathf.Pow(Random.value, 3f)); __instance.minEnemiesToSpawn = minEnemiesToSpawn; __instance.currentMaxInsidePower = 9999f; __instance.cannotSpawnMoreInsideEnemies = false; } else { Plugin.isActive = false; } } } [HarmonyPatch(typeof(RoundManager), "AdvanceHourAndSpawnNewBatchOfEnemies")] [HarmonyPrefix] public static void AdvanceHourAndSpawnNewBatchOfEnemiesPrefix(RoundManager __instance) { if (Plugin.isActive) { __instance.currentMaxInsidePower = 9999f; __instance.cannotSpawnMoreInsideEnemies = false; } } [HarmonyPatch(typeof(RoundManager), "SpawnInsideEnemiesFromVentsIfReady")] [HarmonyPrefix] public static bool SpawnInsideEnemiesFromVentsIfReadyPrefix(RoundManager __instance) { if (Plugin.isActive && Plugin.instSpwn.Value) { if (__instance.allEnemyVents == null) { return true; } for (int i = 0; i < __instance.allEnemyVents.Length; i++) { EnemyVent val = __instance.allEnemyVents[i]; if ((Object)(object)val != (Object)null && val.occupied) { __instance.SpawnEnemyFromVent(val); } } __instance.currentEnemySpawnIndex = __instance.enemySpawnTimes.Count; return false; } return true; } [HarmonyPatch(typeof(TimeOfDay), "Update")] [HarmonyPostfix] public static void TimeOfDayUpdatePostfix(TimeOfDay __instance) { if (Plugin.isActive && Plugin.slwTm.Value) { __instance.globalTimeSpeedMultiplier = 1f / Mathf.Max(1f, Plugin.tmMult.Value); } } }