using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("Joive")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Keeps player inventory after death in Burglin Gnomes.")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BG SaveInventory")] [assembly: AssemblyTitle("BG-SaveInventory-Joive")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 BGSaveInventory { [BepInPlugin("joive.bgsaveinventory", "BG SaveInventory", "1.0.0")] public sealed class SaveInventoryPlugin : BaseUnityPlugin { private Harmony harmony; private static ConfigEntry preserveDrops; private static ConfigEntry preserveClears; private void Awake() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Expected O, but got Unknown preserveDrops = ((BaseUnityPlugin)this).Config.Bind("General", "KeepInventoryOnDeath", true, "Prevent player inventory from dropping after death."); preserveClears = ((BaseUnityPlugin)this).Config.Bind("General", "KeepInventoryOnRoundEndRespawn", true, "Prevent player inventory from being cleared when a dead player is respawned after round end."); harmony = new Harmony("joive.bgsaveinventory"); PatchInventoryMethod("DropInventoryContents", "InventoryDropPrefix"); PatchInventoryMethod("ClearInventory", "InventoryClearPrefix"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"BG SaveInventory 1.0.0 loaded."); } private void OnDestroy() { Harmony obj = harmony; if (obj != null) { obj.UnpatchSelf(); } } private void PatchInventoryMethod(string gameMethodName, string prefixName) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown try { MethodInfo methodInfo = AccessTools.Method(typeof(InventoryBase), gameMethodName, (Type[])null, (Type[])null); HarmonyMethod val = new HarmonyMethod(typeof(SaveInventoryPlugin).GetMethod(prefixName)); harmony.Patch((MethodBase)methodInfo, val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); ((BaseUnityPlugin)this).Logger.LogInfo((object)("Patched InventoryBase." + gameMethodName)); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogWarning((object)("Failed to patch InventoryBase." + gameMethodName + ": " + ex.Message)); } } public static bool InventoryDropPrefix(InventoryBase __instance) { if (preserveDrops.Value) { return !IsPlayerInventory(__instance); } return true; } public static bool InventoryClearPrefix(InventoryBase __instance) { if (preserveClears.Value) { return !IsPlayerInventory(__instance); } return true; } private static bool IsPlayerInventory(InventoryBase inventory) { return inventory is PlayerInventory; } } }