Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ComeBackEquipment v2.0.5
ComeBackEquipment.dll
Decompiled 4 days agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("HappyCats")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+fdbfd18d1c826ffb5a7d1b352cf43c55998f026c")] [assembly: AssemblyProduct("ComeBackEquipment")] [assembly: AssemblyTitle("ComeBackEquipment")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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 ComeBackEquipment { [BepInPlugin("HappyCats.ComeBackEquipment", "ComeBackEquipment", "2.0.4")] public class ComeBackEquipment : BaseUnityPlugin { internal static ComeBackEquipment Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } internal static ConfigEntry<bool> TeleportItemsToTruck { get; private set; } internal static ConfigEntry<bool> TeleportHaulersToTruck { get; private set; } private void Awake() { Instance = this; TeleportItemsToTruck = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Teleport Items To Truck", false, "When a dead player loses equipment in a death pit, return the item to the truck instead of bouncing it back out."); TeleportHaulersToTruck = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Teleport Haulers To Truck", false, "When a hauler falls into a death pit, return it to the truck instead of letting it be destroyed."); ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } [HarmonyPatch] internal static class HurtColliderPatch { private static bool IsHaulerVehicle(PhysGrabObject physGrabObject) { return (Object)(object)((Component)physGrabObject).GetComponentInParent<ItemVehicle>()?.valuableBox != (Object)null; } private static bool TryTeleportToTruck(PhysGrabObject physGrabObject) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)TruckSafetySpawnPoint.instance)) { return false; } physGrabObject.rb.velocity = Vector3.zero; physGrabObject.rb.angularVelocity = Vector3.zero; physGrabObject.Teleport(((Component)TruckSafetySpawnPoint.instance).transform.position, ((Component)TruckSafetySpawnPoint.instance).transform.rotation); physGrabObject.DeathPitEffectCreate(); return true; } private static bool ShouldTeleportToTruck(PhysGrabObject physGrabObject) { if (Object.op_Implicit((Object)(object)((Component)physGrabObject).GetComponentInParent<ItemVehicle>())) { return ComeBackEquipment.TeleportHaulersToTruck.Value; } return (Object)(object)((Component)physGrabObject).GetComponentInParent<ItemEquippable>() != (Object)null && ComeBackEquipment.TeleportItemsToTruck.Value; } private static bool ShouldKeepDefaultDestroyBehavior(PhysGrabObjectImpactDetector impactDetector) { return (Object)(object)((Component)impactDetector).GetComponentInParent<ItemGrenade>() != (Object)null || (Object)(object)((Component)impactDetector).GetComponentInParent<ItemMine>() != (Object)null || (Object)(object)((Component)impactDetector).GetComponentInParent<ItemReviveItem>() != (Object)null || (Object)(object)((Component)impactDetector).GetComponentInParent<ItemHealthPack>() != (Object)null || (Object)(object)((Component)impactDetector).GetComponentInParent<ItemUpgrade>() != (Object)null || (Object)(object)((Component)impactDetector).GetComponentInParent<ItemWalkieBox>() != (Object)null; } [HarmonyPostfix] [HarmonyPatch(typeof(PhysGrabObjectImpactDetector), "Start")] private static void ImpactDetectorStartPostfix(PhysGrabObjectImpactDetector __instance) { bool flag = (Object)(object)((Component)__instance).GetComponentInParent<ItemEquippable>() != (Object)null; bool flag2 = (Object)(object)((Component)__instance).GetComponentInParent<ItemVehicle>() != (Object)null; if (flag || flag2) { if (flag2 && ComeBackEquipment.TeleportHaulersToTruck.Value) { __instance.destroyDisable = true; } else if (flag && !ShouldKeepDefaultDestroyBehavior(__instance)) { __instance.destroyDisable = true; } } } [HarmonyPostfix] [HarmonyPatch(typeof(ItemEquippable), "RPC_CompleteUnequip")] private static void RPCCompleteUnequipPostfix(ItemEquippable __instance, int physGrabberPhotonViewID, Vector3 teleportPos, bool isForceUnequip) { //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) if (!isForceUnequip || !Object.op_Implicit((Object)(object)__instance)) { return; } PhysGrabber val = null; if (SemiFunc.IsMultiplayer()) { PhotonView obj = PhotonView.Find(physGrabberPhotonViewID); val = ((obj != null) ? ((Component)obj).GetComponent<PhysGrabber>() : null); } else { val = PhysGrabber.instance; } if (val != null && (val.playerAvatar?.deadSet).GetValueOrDefault()) { PhysGrabObject component = ((Component)__instance).GetComponent<PhysGrabObject>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.rb) && !component.rb.isKinematic && SemiFunc.IsMasterClientOrSingleplayer() && (!IsHaulerVehicle(component) || !ComeBackEquipment.TeleportHaulersToTruck.Value || !TryTeleportToTruck(component)) && (!ComeBackEquipment.TeleportItemsToTruck.Value || !TryTeleportToTruck(component))) { Vector3 insideUnitSphere = Random.insideUnitSphere; Vector3 val2 = ((Vector3)(ref insideUnitSphere)).normalized * 4f; val2.y = 0f; Vector3 val3 = (Vector3.up * 20f + val2) * component.rb.mass; insideUnitSphere = Random.insideUnitSphere; Vector3 val4 = ((Vector3)(ref insideUnitSphere)).normalized * 0.25f * component.rb.mass; component.rb.AddForce(val3, (ForceMode)1); component.rb.AddTorque(val4, (ForceMode)1); component.DeathPitEffectCreate(); } } } [HarmonyPrefix] [HarmonyPatch(typeof(HurtCollider), "PhysObjectHurt")] private static bool PhysObjectHurtPrefix(HurtCollider __instance, PhysGrabObject physGrabObject, BreakImpact impact, float hitForce, float hitTorque, bool apply, bool destroyLaunch, ref bool __result, Enemy? enemy = null) { if (!__instance.deathPit || !SemiFunc.IsMasterClientOrSingleplayer() || !Object.op_Implicit((Object)(object)physGrabObject) || !Object.op_Implicit((Object)(object)physGrabObject.rb)) { return true; } if (!ShouldTeleportToTruck(physGrabObject)) { return true; } if (TryTeleportToTruck(physGrabObject)) { __result = true; return false; } return true; } } }