using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BoneLib; using BoneLib.BoneMenu; using BonelabPropHunt; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSLZ.Marrow; using Il2CppSLZ.Marrow.Interaction; using Il2CppSLZ.Marrow.Pool; using LabFusion.Entities; using LabFusion.Network; using MelonLoader; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(Main), "BoneHunt", "0.1.0", "CrispyDev", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("BonelabPropHunt")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BonelabPropHunt")] [assembly: AssemblyTitle("BonelabPropHunt")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BonelabPropHunt { public class Main : MelonMod { public static Instance Log; public override void OnInitializeMelon() { Log = ((MelonBase)this).LoggerInstance; Log.Msg("BonelabPropHunt loading..."); PropSelector.Init(); PropifyController.Init(); Log.Msg("BonelabPropHunt ready."); } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { Log.Msg("[PropHunt] Scene loaded ('" + sceneName + "') - refreshing prop list."); if (PropifyController.IsActive) { Log.Msg("[PropHunt] Level changed while possessing a prop - ejecting."); PropifyController.EndPossession(); } PropSelector.RefreshMenu(); } public override void OnUpdate() { PropifyController.Tick(); } public override void OnLateUpdate() { PropifyController.LateTick(); } public override void OnFixedUpdate() { PropifyController.FixedTick(); TouchPossess.FixedTick(); } } public static class PropifyController { private static Rigidbody _possessed; private static bool _active; private static float _lastJumpTime; private static float _lastBTapTime; private static Vector3 _lastKnownPos; private static NetworkEntity _currentEntity; private static Transform _camTransform; private const float CamDistance = 2.5f; private const float CamHeight = 1.2f; private const float MaxSpeed = 5f; private const float JumpVelocity = 5f; private const float JumpCooldown = 0.2f; private static bool _wantsToJump; private static bool _wantsToSnapUpright; private static readonly List _frozenRigBodies = new List(); private static readonly List _frozenColliders = new List(); private static readonly List _frozenCharControllers = new List(); private static readonly Dictionary _originalScales = new Dictionary(); public static bool IsActive => _active; public static void Init() { } private static void FreezePlayerRig(bool freeze) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) RigManager localRigManager = PropSelector.GetLocalRigManager(); if ((Object)(object)localRigManager == (Object)null || (Object)(object)localRigManager.physicsRig == (Object)null) { return; } if (freeze) { _frozenRigBodies.Clear(); _frozenColliders.Clear(); _frozenCharControllers.Clear(); foreach (Rigidbody componentsInChild in ((Component)localRigManager.physicsRig).GetComponentsInChildren()) { if (!((Object)(object)componentsInChild == (Object)null) && !componentsInChild.isKinematic) { componentsInChild.velocity = Vector3.zero; componentsInChild.angularVelocity = Vector3.zero; componentsInChild.isKinematic = true; _frozenRigBodies.Add(componentsInChild); } } foreach (Collider componentsInChild2 in ((Component)localRigManager.physicsRig).GetComponentsInChildren()) { if (!((Object)(object)componentsInChild2 == (Object)null) && componentsInChild2.enabled) { componentsInChild2.enabled = false; _frozenColliders.Add(componentsInChild2); } } { foreach (CharacterController componentsInChild3 in ((Component)localRigManager).GetComponentsInChildren()) { if (!((Object)(object)componentsInChild3 == (Object)null) && ((Collider)componentsInChild3).enabled) { ((Collider)componentsInChild3).enabled = false; _frozenCharControllers.Add(componentsInChild3); } } return; } } foreach (Rigidbody frozenRigBody in _frozenRigBodies) { if ((Object)(object)frozenRigBody != (Object)null) { frozenRigBody.isKinematic = false; } } _frozenRigBodies.Clear(); foreach (Collider frozenCollider in _frozenColliders) { if ((Object)(object)frozenCollider != (Object)null) { frozenCollider.enabled = true; } } _frozenColliders.Clear(); foreach (CharacterController frozenCharController in _frozenCharControllers) { if ((Object)(object)frozenCharController != (Object)null) { ((Collider)frozenCharController).enabled = true; } } _frozenCharControllers.Clear(); } private static void SetPlayerAvatarVisibility(bool hide) { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) RigManager localRigManager = PropSelector.GetLocalRigManager(); if ((Object)(object)localRigManager == (Object)null) { return; } foreach (Renderer componentsInChild in ((Component)((Component)localRigManager).transform).GetComponentsInChildren(true)) { if (!((Object)(object)componentsInChild != (Object)null)) { continue; } componentsInChild.enabled = !hide; Vector3 value; if (hide) { if (!_originalScales.ContainsKey(((Component)componentsInChild).transform)) { _originalScales[((Component)componentsInChild).transform] = ((Component)componentsInChild).transform.localScale; } ((Component)componentsInChild).transform.localScale = Vector3.zero; } else if (_originalScales.TryGetValue(((Component)componentsInChild).transform, out value)) { ((Component)componentsInChild).transform.localScale = value; } else { ((Component)componentsInChild).transform.localScale = Vector3.one; } } } public static void BeginPossession(Rigidbody target) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) if (_active || (Object)(object)target == (Object)null) { return; } _possessed = target; _possessed.isKinematic = false; _possessed.WakeUp(); _lastKnownPos = _possessed.position; SetPlayerAvatarVisibility(hide: true); FreezePlayerRig(freeze: true); _active = true; if (NetworkInfo.HasServer) { MarrowEntity componentInParent = ((Component)_possessed).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { NetworkProp component = ((Component)componentInParent).GetComponent(); if (component != null) { _currentEntity = component.NetworkEntity; if (_currentEntity != null) { NetworkEntityManager.TakeOwnership(_currentEntity); Main.Log.Msg("[PropHunt] Claimed Fusion network ownership of '" + ((Object)((Component)_possessed).gameObject).name + "'."); } } } } Main.Log.Msg("[PropHunt] Rigidly attached to '" + ((Object)((Component)_possessed).gameObject).name + "'."); } public static void EndPossession() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) if (_active) { if (NetworkInfo.HasServer && _currentEntity != null) { _currentEntity.RemoveOwner(); Main.Log.Msg("[PropHunt] Released Fusion network ownership."); _currentEntity = null; } RigManager localRigManager = PropSelector.GetLocalRigManager(); if ((Object)(object)localRigManager != (Object)null) { Vector3 val = (((Object)(object)_possessed != (Object)null) ? _possessed.position : _lastKnownPos); ((Component)localRigManager).transform.position = val + Vector3.up * 1.5f; } FreezePlayerRig(freeze: false); SetPlayerAvatarVisibility(hide: false); _active = false; _possessed = null; _wantsToJump = false; _wantsToSnapUpright = false; Main.Log.Msg("[PropHunt] Depropified."); } } public static void TeleportPropToPlayer() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) if (_active && !((Object)(object)_possessed == (Object)null)) { Vector3 val = (((Object)(object)PropSelector.GetLocalRigManager() != (Object)null) ? ((Component)PropSelector.GetLocalRigManager()).transform.position : Vector3.zero); _possessed.position = val + Vector3.forward * 1.5f + Vector3.up * 0.5f; _possessed.velocity = Vector3.zero; } } public static void TeleportPropToSpawn() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) if (_active && !((Object)(object)_possessed == (Object)null)) { _possessed.position = new Vector3(0f, 1f, 0f); _possessed.velocity = Vector3.zero; _possessed.angularVelocity = Vector3.zero; Main.Log.Msg("[PropHunt] Teleported to spawn."); } } public static void Tick() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (!_active) { return; } if ((Object)(object)_possessed == (Object)null) { EndPossession(); return; } _lastKnownPos = _possessed.position; if (NetworkInfo.HasServer && _currentEntity != null && !_currentEntity.IsOwner) { NetworkEntityManager.TakeOwnership(_currentEntity); } if (Input.GetKeyDown((KeyCode)339) || Input.GetKeyDown((KeyCode)103)) { EndPossession(); return; } if (Input.GetKeyDown((KeyCode)331) || Input.GetKeyDown((KeyCode)98)) { if (Time.time - _lastBTapTime < 0.4f) { TeleportPropToSpawn(); } _lastBTapTime = Time.time; } if (Input.GetKeyDown((KeyCode)32) || Input.GetButtonDown("Jump") || Input.GetKeyDown((KeyCode)330) || Input.GetKeyDown((KeyCode)344)) { _wantsToJump = true; } if (Input.GetKeyDown((KeyCode)338) || Input.GetKeyDown((KeyCode)114)) { _wantsToSnapUpright = true; } } public static void LateTick() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) if (!_active || (Object)(object)_possessed == (Object)null) { return; } RigManager localRigManager = PropSelector.GetLocalRigManager(); if ((Object)(object)localRigManager != (Object)null) { ((Component)localRigManager).transform.position = _possessed.position + Vector3.down * 2.5f; } if ((Object)(object)_camTransform == (Object)null && (Object)(object)Camera.main != (Object)null) { _camTransform = ((Component)Camera.main).transform; } if ((Object)(object)_camTransform != (Object)null) { Vector3 val = _camTransform.forward; val.y = 0f; if (((Vector3)(ref val)).sqrMagnitude < 0.01f) { val = _camTransform.up; } ((Vector3)(ref val)).Normalize(); Vector3 val2 = -val * 2.5f + Vector3.up * 1.2f; _camTransform.position = _possessed.position + val2; } } public static void FixedTick() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: 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_0163: Unknown result type (might be due to invalid IL or missing references) //IL_018e: 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_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) if (!_active || (Object)(object)_possessed == (Object)null || _possessed.isKinematic || (NetworkInfo.HasServer && _currentEntity != null && !_currentEntity.IsOwner)) { return; } if (_wantsToSnapUpright) { Rigidbody possessed = _possessed; Quaternion rotation = _possessed.rotation; possessed.MoveRotation(Quaternion.Euler(0f, ((Quaternion)(ref rotation)).eulerAngles.y, 0f)); _possessed.angularVelocity = Vector3.zero; _wantsToSnapUpright = false; } float axis = Input.GetAxis("Horizontal"); float axis2 = Input.GetAxis("Vertical"); Transform val = (((Object)(object)_camTransform != (Object)null) ? _camTransform : (((Object)(object)Camera.main != (Object)null) ? ((Component)Camera.main).transform : null)); Vector3 val2 = (((Object)(object)val != (Object)null) ? val.forward : Vector3.forward); Vector3 val3 = (((Object)(object)val != (Object)null) ? val.right : Vector3.right); val2.y = 0f; val3.y = 0f; ((Vector3)(ref val2)).Normalize(); ((Vector3)(ref val3)).Normalize(); Vector3 val4 = (val2 * axis2 + val3 * axis) * 5f - _possessed.velocity; val4.y = 0f; _possessed.AddForce(val4, (ForceMode)2); if (_wantsToJump) { if (Time.time - _lastJumpTime > 0.2f) { _possessed.velocity = new Vector3(_possessed.velocity.x, 0f, _possessed.velocity.z); _possessed.AddForce(Vector3.up * 5f, (ForceMode)2); _lastJumpTime = Time.time; } _wantsToJump = false; } } } public static class PropSelector { private static Page _rootPage; private static bool _debugMode = false; private const float ScanRadius = 15f; private const int MaxResults = 15; private static readonly List _dynamicElements = new List(); public static void Init() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) _rootPage = Page.Root.CreatePage("Prop Hunt", Color.cyan, 20, true); _rootPage.CreateFunction("Depropify (Return to Player)", Color.red, (Action)delegate { Main.Log.Msg("[PropHunt] Manual depropify requested."); PropifyController.EndPossession(); }); _rootPage.CreateFunction("TP Prop to Me", Color.yellow, (Action)delegate { if (PropifyController.IsActive) { PropifyController.TeleportPropToPlayer(); } }); _rootPage.CreateFunction("TP Prop to Spawn", Color.green, (Action)delegate { if (PropifyController.IsActive) { PropifyController.TeleportPropToSpawn(); } }); TouchPossess.Init(_rootPage); _rootPage.CreateBool("Debug Mode (Show Prop List)", Color.yellow, false, (Action)delegate(bool enabled) { _debugMode = enabled; Main.Log.Msg("[PropHunt] Debug Mode: " + (_debugMode ? "ENABLED" : "DISABLED")); RefreshMenu(); }); Menu.OnPageOpened += OnAnyPageOpened; RefreshMenu(); } private static void OnAnyPageOpened(Page opened) { if (opened == _rootPage) { RefreshMenu(); } } public static void RefreshMenu() { //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (_rootPage == null) { return; } ClearPropEntries(); if (!_debugMode) { Main.Log.Msg("[PropHunt] Debug Mode is OFF. Prop list hidden."); return; } List list = FindNearbyProps(); Main.Log.Msg($"[PropHunt] Debug Mode ON. RefreshMenu found {list.Count} valid props."); foreach (Rigidbody rb in list) { string propName = ((Object)((Component)rb).gameObject).name; FunctionElement item = _rootPage.CreateFunction(propName, Color.white, (Action)delegate { Main.Log.Msg("[PropHunt] Selected prop: " + propName); PropifyController.BeginPossession(rb); }); _dynamicElements.Add(item); } } private static void ClearPropEntries() { foreach (FunctionElement dynamicElement in _dynamicElements) { _rootPage.Remove((Element)(object)dynamicElement); } _dynamicElements.Clear(); } public static List FindNearbyProps() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) Vector3 origin = GetPlayerPosition(); List list = new List(); RigManager localRigManager = GetLocalRigManager(); foreach (Poolee item in Object.FindObjectsOfType()) { if (!((Object)(object)item == (Object)null)) { Rigidbody componentInChildren = ((Component)item).GetComponentInChildren(); if (IsValidProp(componentInChildren, origin, localRigManager)) { list.Add(componentInChildren); } } } foreach (InteractableHost item2 in Object.FindObjectsOfType()) { if (!((Object)(object)item2 == (Object)null)) { Rigidbody componentInChildren2 = ((Component)item2).GetComponentInChildren(); if (IsValidProp(componentInChildren2, origin, localRigManager) && !list.Contains(componentInChildren2)) { list.Add(componentInChildren2); } } } return (from rb in list.Distinct() orderby Vector3.Distance(origin, rb.position) select rb).Take(15).ToList(); } public static bool IsValidPropPublic(Rigidbody rb, Vector3 origin, RigManager rigManager) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return IsValidProp(rb, origin, rigManager); } private static bool IsValidProp(Rigidbody rb, Vector3 origin, RigManager rigManager) { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)rb == (Object)null || rb.isKinematic) { return false; } if ((Object)(object)rigManager != (Object)null && ((Component)rb).transform.IsChildOf(((Component)rigManager).transform)) { return false; } string text = ((Object)((Component)rb).gameObject).name.ToLower(); if (text.Contains("avatar") || text.Contains("head") || text.Contains("hand") || text.Contains("foot")) { return false; } return Vector3.Distance(origin, rb.position) <= 15f; } public static RigManager GetLocalRigManager() { return Player.RigManager; } public static Vector3 GetPlayerPosition() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) RigManager localRigManager = GetLocalRigManager(); if ((Object)(object)localRigManager != (Object)null && (Object)(object)localRigManager.physicsRig != (Object)null) { return ((Component)localRigManager.physicsRig).transform.position; } Camera main = Camera.main; if (!((Object)(object)main != (Object)null)) { return Vector3.zero; } return ((Component)main).transform.position; } } public static class TouchPossess { private static bool _armed; private const float HandTouchRadius = 0.15f; public static void Init(Page parentPage) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) parentPage.CreateBool("Transform to Prop (Touch)", Color.cyan, false, (Action)OnToggled); } private static void OnToggled(bool enabled) { _armed = enabled; Main.Log.Msg("[PropHunt] Touch-to-possess mode: " + (enabled ? "ARMED" : "off")); } public static void FixedTick() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) if (_armed && !PropifyController.IsActive && !((Object)(object)PropSelector.GetLocalRigManager() == (Object)null)) { Hand leftHand = Player.LeftHand; Hand rightHand = Player.RightHand; if (!TryPossessNear(((Object)(object)leftHand != (Object)null) ? new Vector3?(((Component)leftHand).transform.position) : ((Vector3?)null))) { TryPossessNear(((Object)(object)rightHand != (Object)null) ? new Vector3?(((Component)rightHand).transform.position) : ((Vector3?)null)); } } } private static bool TryPossessNear(Vector3? handPos) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) if (!handPos.HasValue) { return false; } Il2CppReferenceArray obj = Physics.OverlapSphere(handPos.Value, 0.15f); RigManager localRigManager = PropSelector.GetLocalRigManager(); foreach (Collider item in (Il2CppArrayBase)(object)obj) { Rigidbody attachedRigidbody = item.attachedRigidbody; if (!((Object)(object)attachedRigidbody == (Object)null) && PropSelector.IsValidPropPublic(attachedRigidbody, handPos.Value, localRigManager)) { Main.Log.Msg("[PropHunt] Touch-possessed '" + ((Object)((Component)attachedRigidbody).gameObject).name + "'."); PropifyController.BeginPossession(attachedRigidbody); _armed = false; return true; } } return false; } } }