using System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EasyBackpack")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+1d921d7ec8e70bbd1dca2304f47251b468981950")] [assembly: AssemblyProduct("EasyBackpack")] [assembly: AssemblyTitle("EasyBackpack")] [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.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 EasyBackpack { [BepInPlugin("nickklmao.easybackpack", "EasyBackpack", "1.1.6")] internal sealed class Entry : BaseUnityPlugin { [HarmonyPatch(typeof(BackpackWheel), "Update")] private static class BackpackWheelUpdatePatch { private static bool s_forced; private static bool s_savedInteract; [HarmonyPrefix] private static void Prefix() { s_forced = false; if (isAccessingBackpack && !((Object)(object)Character.localCharacter == (Object)null)) { s_savedInteract = Character.localCharacter.input.interactIsPressed; Character.localCharacter.input.interactIsPressed = true; s_forced = true; } } [HarmonyPostfix] private static void Postfix() { if (s_forced) { s_forced = false; if ((Object)(object)Character.localCharacter != (Object)null) { Character.localCharacter.input.interactIsPressed = s_savedInteract; } } } } [HarmonyPatch(typeof(CharacterBackpackHandler), "AddFuelToJetpack")] private static class SelfRefuelRollbackFix { private static Coroutine s_fixRoutine; private static float s_beforeFuel = float.NaN; private static bool s_baseSet; private static float s_baseFuel; private static float s_totalAdded; [HarmonyPrefix] private static void Prefix(CharacterBackpackHandler __instance, Character interactor, ref float addedFuel) { s_beforeFuel = float.NaN; if ((Object)(object)interactor == (Object)null || (Object)(object)__instance == (Object)null || interactor.refs == null || (Object)(object)interactor.refs.backpackHandler != (Object)(object)__instance) { return; } int num = 25; Item currentItem = interactor.data.currentItem; if ((Object)(object)currentItem != (Object)null) { RopeSpool val = default(RopeSpool); if (((Component)currentItem).TryGetComponent(ref val)) { num = Mathf.CeilToInt(val.RopeFuel); } else if (currentItem.HasData((DataEntryKey)10)) { num = currentItem.overrideJetpackFuelAmount + Mathf.RoundToInt(currentItem.GetData((DataEntryKey)10).Value * currentItem.overrideJetpackFuelPerFuelMult); } else if (currentItem is Backpack) { num = currentItem.overrideJetpackFuelAmount; } else if (currentItem.overrideJetpackFuel) { num = (currentItem.HasData((DataEntryKey)2) ? (currentItem.overrideJetpackFuelAmount + currentItem.GetData((DataEntryKey)2).Value * currentItem.overrideJetpackFuelPerUse) : currentItem.overrideJetpackFuelAmount); } } addedFuel = num; Player player = interactor.player; FloatItemData val2 = default(FloatItemData); if (!((Object)(object)player == (Object)null) && player.backpackSlot != null && ((ItemSlot)player.backpackSlot).data != null && ((ItemSlot)player.backpackSlot).data.TryGetDataEntry((DataEntryKey)10, ref val2)) { s_beforeFuel = val2.Value; } } [HarmonyPostfix] private static void Postfix(CharacterBackpackHandler __instance, Character interactor, float addedFuel) { if (float.IsNaN(s_beforeFuel) || (Object)(object)interactor == (Object)null || (Object)(object)__instance == (Object)null || interactor.refs == null || (Object)(object)interactor.refs.backpackHandler != (Object)(object)__instance) { return; } Player player = interactor.player; FloatItemData val = default(FloatItemData); if ((Object)(object)player == (Object)null || player.backpackSlot == null || ((ItemSlot)player.backpackSlot).data == null || !((ItemSlot)player.backpackSlot).data.TryGetDataEntry((DataEntryKey)10, ref val)) { return; } float value = val.Value; if (!(value <= s_beforeFuel + 0.01f)) { if (s_fixRoutine == null) { s_baseSet = false; s_totalAdded = 0f; } if (!s_baseSet) { s_baseSet = true; s_baseFuel = s_beforeFuel; } s_totalAdded += addedFuel; float targetFuel = Mathf.Min(s_baseFuel + s_totalAdded, 100f); if (s_fixRoutine != null) { ((MonoBehaviour)__instance).StopCoroutine(s_fixRoutine); } s_fixRoutine = ((MonoBehaviour)__instance).StartCoroutine(FixLater(__instance, ((Component)__instance).GetComponent(), targetFuel)); } } private static IEnumerator FixLater(CharacterBackpackHandler handler, Character targetCharacter, float targetFuel) { yield return (object)new WaitForSeconds(1.5f); s_fixRoutine = null; if ((Object)(object)handler == (Object)null || (Object)(object)targetCharacter == (Object)null) { yield break; } Player player = targetCharacter.player; if ((Object)(object)player == (Object)null || player.backpackSlot == null || ((ItemSlot)player.backpackSlot).data == null) { yield break; } ItemInstanceData data = ((ItemSlot)player.backpackSlot).data; FloatItemData val = default(FloatItemData); if (data.TryGetDataEntry((DataEntryKey)10, ref val) && val.Value < targetFuel - 0.01f) { val.Value = targetFuel; FloatItemData val2 = default(FloatItemData); if (data.TryGetDataEntry((DataEntryKey)11, ref val2)) { val2.Value = targetFuel / 100f; } } } } private static readonly ManualLogSource logger = Logger.CreateLogSource("EasyBackpack"); private static ConfigEntry backpackKey; private static ConfigEntry alternativeBackpackKey; private static bool isAccessingBackpack; private static bool isAccessingCarriedPlayersBackpack; private static float s_lastSlotCountWarn = float.MinValue; private readonly Harmony m_harmony = new Harmony("nickklmao.easybackpack"); private void Awake() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown logger.LogInfo((object)"Creating config entries"); backpackKey = ((BaseUnityPlugin)this).Config.Bind("Keybinds", "Backpack Key", (KeyCode)98, new ConfigDescription("The key you want to use to access the backpack while it's on your back", (AcceptableValueBase)null, Array.Empty())); alternativeBackpackKey = ((BaseUnityPlugin)this).Config.Bind("Keybinds", "Alternative Backpack Key", (KeyCode)0, new ConfigDescription("An optional alternative key for accessing the backpack while it's on your back", (AcceptableValueBase)null, Array.Empty())); logger.LogInfo((object)"Hooking BackpackWheel.Update"); m_harmony.PatchAll(typeof(BackpackWheelUpdatePatch)); m_harmony.PatchAll(typeof(SelfRefuelRollbackFix)); } private void Update() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Invalid comparison between Unknown and I4 //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Invalid comparison between Unknown and I4 //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) Character localCharacter = Character.localCharacter; if (!Application.isFocused || (Object)(object)localCharacter == (Object)null) { isAccessingCarriedPlayersBackpack = (isAccessingBackpack = false); return; } if (isAccessingCarriedPlayersBackpack) { if ((Object)(object)localCharacter.data.carriedPlayer == (Object)null) { isAccessingCarriedPlayersBackpack = (isAccessingBackpack = false); return; } } else if (localCharacter.data.passedOut || localCharacter.data.dead || localCharacter.data.currentItem is Backpack) { isAccessingCarriedPlayersBackpack = (isAccessingBackpack = false); return; } if (Input.GetKeyUp(backpackKey.Value) || Input.GetKeyUp(alternativeBackpackKey.Value)) { isAccessingCarriedPlayersBackpack = (isAccessingBackpack = false); } else { if (!Input.GetKeyDown(backpackKey.Value) && !Input.GetKeyDown(alternativeBackpackKey.Value)) { return; } if (!((ItemSlot)localCharacter.player.backpackSlot).IsEmpty()) { BackpackType backpackType = localCharacter.player.backpackSlot.backpackType; if ((int)backpackType == 4) { return; } int num = 4; try { CharacterBackpackHandler backpackHandler = localCharacter.refs.backpackHandler; BackpackOnBackVisuals val = ((backpackHandler != null) ? backpackHandler.activeBackpackVisuals : null); if ((Object)(object)val != (Object)null) { num = val.slotCount; } BackpackReference fromEquippedBackpack = BackpackReference.GetFromEquippedBackpack(localCharacter); GUIManager.instance.OpenBackpackWheel(fromEquippedBackpack, num, backpackType); isAccessingBackpack = true; return; } catch { LogSlotCountFallback(); return; } } Character carriedPlayer = localCharacter.data.carriedPlayer; if ((Object)(object)carriedPlayer == (Object)null) { return; } Player player = carriedPlayer.player; if (!((Object)(object)player != (Object)null)) { return; } BackpackSlot backpackSlot = player.backpackSlot; if (backpackSlot == null || ((ItemSlot)backpackSlot).IsEmpty()) { return; } BackpackType backpackType2 = player.backpackSlot.backpackType; if ((int)backpackType2 == 4) { return; } int num2 = 4; try { CharacterBackpackHandler backpackHandler2 = carriedPlayer.refs.backpackHandler; BackpackOnBackVisuals val2 = ((backpackHandler2 != null) ? backpackHandler2.activeBackpackVisuals : null); if ((Object)(object)val2 != (Object)null) { num2 = val2.slotCount; } BackpackReference fromEquippedBackpack2 = BackpackReference.GetFromEquippedBackpack(carriedPlayer); GUIManager.instance.OpenBackpackWheel(fromEquippedBackpack2, num2, backpackType2); isAccessingCarriedPlayersBackpack = (isAccessingBackpack = true); } catch { LogSlotCountFallback(); } } } private static void LogSlotCountFallback() { if (Time.unscaledTime - s_lastSlotCountWarn > 5f) { s_lastSlotCountWarn = Time.unscaledTime; logger.LogWarning((object)"Failed to read backpack visuals slotCount / GetFromEquippedBackpack (refs or ragdoll not ready); backpack wheel was not opened."); } } } }