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.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using DunGen.Graph; 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: IgnoresAccessChecksTo("com.github.teamxiaolan.dawnlib")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Tomatobird.MineshaftRescaler")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.2.0+b5b14e2ea6c5fc2d24a7a667ec34d931031de979")] [assembly: AssemblyProduct("MineshaftRescaler")] [assembly: AssemblyTitle("Tomatobird.MineshaftRescaler")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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.2.0")] public class MineshaftRescaler : BaseUnityPlugin { public static bool applyMineshaftSizeChanges; public static ConfigEntry minLength; public static ConfigEntry maxLength; public static ConfigEntry minBranches; public static ConfigEntry maxBranches; public static ConfigEntry mainLength; public static ConfigEntry cavesLength; public static ConfigEntry fireLength; public static bool changeMineshaftLootBonus; public static ConfigEntry lootAmountBonus; internal static bool isDawnLibLoaded; 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"); maxLength = ((BaseUnityPlugin)this).Config.Bind("General", "MaxLength", 18, "Maximum generation length"); minBranches = ((BaseUnityPlugin)this).Config.Bind("General", "MinBranches", 14, "Minimum amount of branches to generate"); maxBranches = ((BaseUnityPlugin)this).Config.Bind("General", "MaxBranches", 18, "Maximum amount of branches to generate"); mainLength = ((BaseUnityPlugin)this).Config.Bind("General", "MainLength", 0.25f, "Relative length of the Main side section."); cavesLength = ((BaseUnityPlugin)this).Config.Bind("General", "CavesLength", 0.6f, "Relative length of the caves section."); fireLength = ((BaseUnityPlugin)this).Config.Bind("General", "FireLength", 0.15f, "Relative length of the Fire side section."); 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."); isDawnLibLoaded = Chainloader.PluginInfos.ContainsKey("com.github.teamxiaolan.dawnlib"); Logger.LogInfo((object)$"Dawnlib installed: {isDawnLibLoaded}"); Patch(); Logger.LogInfo((object)"Tomatobird.MineshaftRescaler v1.2.0 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... MineshaftScalePatch"); Harmony.PatchAll(typeof(MineshaftScalePatch)); } if (changeMineshaftLootBonus) { if (isDawnLibLoaded) { Logger.LogDebug((object)"Patching... RoundManagerDawnLibSupportPatch"); Harmony.PatchAll(typeof(RoundManagerDawnLibSupportPatch)); } else { 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.2.0"; } } namespace MineshaftRescaler.Patches { [HarmonyPatch(typeof(RoundManager))] public class MineshaftScalePatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start_Postfix(RoundManager __instance) { for (int i = 0; i < __instance.dungeonFlowTypes.Length; i++) { if (((Object)__instance.dungeonFlowTypes[i].dungeonFlow).name == "Level3Flow") { MineshaftRescaler.Logger.LogDebug((object)"Level3Flow found! Applying dungeon generation changes."); DungeonFlow dungeonFlow = __instance.dungeonFlowTypes[i].dungeonFlow; dungeonFlow.Length.Min = MineshaftRescaler.minLength.Value; dungeonFlow.Length.Max = MineshaftRescaler.maxLength.Value; dungeonFlow.BranchCount.Min = MineshaftRescaler.minBranches.Value; dungeonFlow.BranchCount.Max = MineshaftRescaler.maxBranches.Value; float num = MineshaftRescaler.mainLength.Value + MineshaftRescaler.cavesLength.Value + MineshaftRescaler.fireLength.Value; float num2 = MineshaftRescaler.mainLength.Value / num; float num3 = MineshaftRescaler.cavesLength.Value / num; float length = MineshaftRescaler.fireLength.Value / num; dungeonFlow.Lines[0].Length = num2; dungeonFlow.Lines[1].Position = num2; dungeonFlow.Lines[1].Length = num3; dungeonFlow.Lines[2].Position = num2 + num3; dungeonFlow.Lines[2].Length = length; break; } } } } [HarmonyPatch(typeof(RoundManager))] public class RoundManagerDawnLibSupportPatch { [HarmonyPatch("Start")] [HarmonyPostfix] public static void Start_Postfix() { bool flag = false; for (int i = 0; i < RoundManager.Instance.dungeonFlowTypes.Length; i++) { if (((Object)RoundManager.Instance.dungeonFlowTypes[i].dungeonFlow).name == "Level3Flow") { DawnDungeonInfo dawnInfo = DungeonFlowExtensions.GetDawnInfo(RoundManager.Instance.dungeonFlowTypes[i].dungeonFlow); dawnInfo.ExtraScrapGeneration = MineshaftRescaler.lootAmountBonus.Value; flag = true; MineshaftRescaler.Logger.LogInfo((object)$"Level3Flow found! Bonus of {MineshaftRescaler.lootAmountBonus} has been applied."); break; } } if (!flag) { MineshaftRescaler.Logger.LogWarning((object)"Level3Flow was not found! Scrap amount bonus won't be applied."); } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("SpawnScrapInLevel")] [HarmonyTranspiler] internal static IEnumerable ChangeMinshaftLootBonus(IEnumerable instructions) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); CodeMatch[] array = (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Ldloc_1, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_I4_6, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Add, (object)null, (string)null) }; val.MatchForward(false, array).ThrowIfNotMatch("Couldn't find targetPattern for patching mineshaft bonus!", Array.Empty()).Advance(1) .SetAndAdvance(OpCodes.Ldc_I4_S, (object)(sbyte)MineshaftRescaler.lootAmountBonus.Value); return val.InstructionEnumeration(); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }