using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using HarmonyLib; using Photon.Pun; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("NoDropBackpack")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("NoDropBackpack")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("57a53cff-c120-4551-af66-86b4a83a891e")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace NoDropBackpack; [HarmonyPatch(typeof(CharacterAfflictions), "UpdateWeight")] internal static class IgnoreBackpackWeightWhileCarrying_Patch { private static void Postfix(CharacterAfflictions __instance) { try { Character character = __instance.character; if ((Object)(object)character == (Object)null || (Object)(object)character.data == (Object)null) { return; } Character carriedPlayer = character.data.carriedPlayer; if (!((Object)(object)carriedPlayer == (Object)null) && !((Object)(object)carriedPlayer.data == (Object)null) && carriedPlayer.data.fullyPassedOut) { int num = ComputeBackpackWeight(((Object)(object)character.player != (Object)null) ? character.player.backpackSlot : null); if (num > 0) { float currentStatus = __instance.GetCurrentStatus((STATUSTYPE)7); float num2 = Mathf.Max(0f, currentStatus - 0.025f * (float)num); __instance.SetStatus((STATUSTYPE)7, num2, true); } } } catch (Exception arg) { Debug.LogError((object)$"[NoWeightBackpack] Postfix error: {arg}"); } } private static int ComputeBackpackWeight(BackpackSlot backpackSlot) { if (backpackSlot == null || ((ItemSlot)backpackSlot).IsEmpty() || ((ItemSlot)backpackSlot).data == null) { return 0; } BackpackData val = default(BackpackData); if (!((ItemSlot)backpackSlot).data.TryGetDataEntry((DataEntryKey)7, ref val) || val == null) { return 0; } int num = 0; ItemSlot[] itemSlots = val.itemSlots; if (itemSlots != null) { foreach (ItemSlot val2 in itemSlots) { if (val2 != null && !val2.IsEmpty() && (Object)(object)val2.prefab != (Object)null) { num += val2.prefab.CarryWeight; } } } Item val3 = default(Item); if (ItemDatabase.TryGetItem(((ItemSlot)backpackSlot).GetPrefabName(), ref val3) && (Object)(object)val3 != (Object)null) { num += val3.CarryWeight; } return num; } } [BepInPlugin("jaeryeong.peak.nodropbackpack", "NoDropBackpack", "1.0.0")] public class NoDropBackpackPlugin : BaseUnityPlugin { public const string PluginGuid = "jaeryeong.peak.nodropbackpack"; public const string PluginName = "NoDropBackpack"; public const string PluginVersion = "1.0.0"; private void Awake() { Harmony.CreateAndPatchAll(typeof(NoDropBackpackPlugin).Assembly, "jaeryeong.peak.nodropbackpack"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[NoDropBackpack] v1.0.0 loaded"); } } [HarmonyPatch(typeof(CharacterCarrying), "RPCA_StartCarry")] internal static class KeepBackpackOnCarry_Patch { private static readonly Action TogglePhysics = AccessTools.MethodDelegate>(AccessTools.Method(typeof(CharacterCarrying), "ToggleCarryPhysics", (Type[])null, (Type[])null), (object)null, true); private static readonly Action DropDel = AccessTools.MethodDelegate>(AccessTools.Method(typeof(CharacterCarrying), "Drop", (Type[])null, (Type[])null), (object)null, true); private static readonly Action UpdateWeightDel = AccessTools.MethodDelegate>(AccessTools.Method(typeof(CharacterAfflictions), "UpdateWeight", (Type[])null, (Type[])null), (object)null, true); private static bool Prefix(CharacterCarrying __instance, PhotonView targetView, Character ___character) { try { if ((Object)(object)___character == (Object)null || (Object)(object)targetView == (Object)null) { return true; } Character component = ((Component)targetView).GetComponent(); if ((Object)(object)component == (Object)null) { return true; } BackpackSlot val = (((Object)(object)___character.player != (Object)null) ? ___character.player.backpackSlot : null); if (val == null || ((ItemSlot)val).IsEmpty()) { return true; } Character carriedPlayer = ___character.data.carriedPlayer; if ((Object)(object)carriedPlayer != (Object)null) { DropDel(__instance, carriedPlayer); return false; } TogglePhysics(component.refs.carriying, arg2: true); component.data.isCarried = true; ___character.data.carriedPlayer = component; component.data.carrier = ___character; component.refs.afflictions.SubtractStatus((STATUSTYPE)14, 1f, true, false); component.refs.afflictions.SubtractStatus((STATUSTYPE)11, 1f, true, false); foreach (Character allPlayerCharacter in PlayerHandler.GetAllPlayerCharacters()) { UpdateWeightDel(allPlayerCharacter.refs.afflictions); } Debug.Log((object)("[NoDropBackpack] " + ((Object)___character).name + " picked up " + ((Object)component).name + " while keeping backpack.")); return false; } catch (Exception arg) { Debug.LogError((object)$"[NoDropBackpack] Prefix error, falling back to vanilla behaviour: {arg}"); return true; } } }