using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using DunGen; using HarmonyLib; using Microsoft.CodeAnalysis; using MineshaftRescaler.Patches; 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("Tomatobird.MineshaftRescaler")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.1.1.0")] [assembly: AssemblyInformationalVersion("1.1.1+b5b14e2ea6c5fc2d24a7a667ec34d931031de979")] [assembly: AssemblyProduct("MineshaftRescaler")] [assembly: AssemblyTitle("Tomatobird.MineshaftRescaler")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MineshaftRescaler { [BepInPlugin("Tomatobird.MineshaftRescaler", "MineshaftRescaler", "1.1.1")] public class MineshaftRescaler : BaseUnityPlugin { public static bool applyMineshaftSizeChanges; public static int minLength; public static int maxLength; public static float mainLength; public static float cavesLength; public static float fireLength; public static bool changeMineshaftLootBonus; public static int lootAmountBonus; public static MineshaftRescaler Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; applyMineshaftSizeChanges = ((BaseUnityPlugin)this).Config.Bind("General", "ApplyMineshaftSizeChanges", true, "Applies the mineshaft size changes listed below.").Value; minLength = ((BaseUnityPlugin)this).Config.Bind("General", "MinLength", 14, "Minimum generation length").Value; maxLength = ((BaseUnityPlugin)this).Config.Bind("General", "MaxLength", 18, "Maximum generation length").Value; mainLength = ((BaseUnityPlugin)this).Config.Bind("General", "MainLength", 0.25f, "Relative length of the Main side section.").Value; cavesLength = ((BaseUnityPlugin)this).Config.Bind("General", "CavesLength", 0.6f, "Relative length of the caves section.").Value; fireLength = ((BaseUnityPlugin)this).Config.Bind("General", "FireLength", 0.15f, "Relative length of the Fire side section.").Value; changeMineshaftLootBonus = ((BaseUnityPlugin)this).Config.Bind("General", "ChangeMineshaftLootBonus", false, "Change the bonus amount of loot to spawn in the mineshaft interior.").Value; lootAmountBonus = ((BaseUnityPlugin)this).Config.Bind("General", "LootAmountBonus", 6, "Amount of extra loot to spawn in mineshaft.").Value; Patch(); Logger.LogInfo((object)"Tomatobird.MineshaftRescaler v1.1.1 has loaded!"); } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("Tomatobird.MineshaftRescaler"); } if (applyMineshaftSizeChanges) { Logger.LogDebug((object)"Patching... PreGenerateDungeonPatch"); Harmony.PatchAll(typeof(PreGenerateDungeonPatch)); } if (changeMineshaftLootBonus) { Logger.LogDebug((object)"Patching... RoundManager"); Harmony.PatchAll(typeof(RoundManagerPatch)); } Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Tomatobird.MineshaftRescaler"; public const string PLUGIN_NAME = "MineshaftRescaler"; public const string PLUGIN_VERSION = "1.1.1"; } } namespace MineshaftRescaler.Patches { [HarmonyPatch(typeof(Dungeon))] public class PreGenerateDungeonPatch { [HarmonyPatch("PreGenerateDungeon")] [HarmonyPostfix] private static void PreGenerateDungeonPostfix(Dungeon __instance) { if (((Object)__instance.DungeonFlow).name == "Level3Flow") { MineshaftRescaler.Logger.LogDebug((object)"Level3Flow detected, applying dungeon generation changes."); __instance.DungeonFlow.Length.Min = MineshaftRescaler.minLength; __instance.DungeonFlow.Length.Max = MineshaftRescaler.maxLength; float num = MineshaftRescaler.mainLength + MineshaftRescaler.cavesLength + MineshaftRescaler.fireLength; float num2 = MineshaftRescaler.mainLength / num; float num3 = MineshaftRescaler.cavesLength / num; float length = MineshaftRescaler.fireLength / num; __instance.DungeonFlow.Lines[0].Length = num2; __instance.DungeonFlow.Lines[1].Position = num2; __instance.DungeonFlow.Lines[1].Length = num3; __instance.DungeonFlow.Lines[2].Position = num2 + num3; __instance.DungeonFlow.Lines[2].Length = length; } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("SpawnScrapInLevel")] [HarmonyTranspiler] internal static IEnumerable ChangeMinshaftLootBonus(IEnumerable instructions) { int num = -1; List list = new List(instructions); for (int i = 10; i < list.Count; i++) { if (list[i - 2].opcode == OpCodes.Ldloc_1 && list[i - 1].opcode == OpCodes.Ldc_I4_6 && list[i].opcode == OpCodes.Add) { num = i - 1; break; } } if (num > -1) { list[num].opcode = OpCodes.Ldc_I4_S; list[num].operand = (sbyte)MineshaftRescaler.lootAmountBonus; MineshaftRescaler.Logger.LogDebug((object)"Successfully injected new loot bonus count."); } else { MineshaftRescaler.Logger.LogError((object)"Failed to inject new mineshaft loot bonus amount. ldcloc.1 -> ldc.i4.6 -> add not found in RoundManager.SpawnScrapInLevel."); } return list; } } }