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 Pocket Dimension Cart v1.3.5
PocketDimensionCart.dll
Decompiled a day agousing System; using System.Collections; 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 BepInEx; using BepInEx.Configuration; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; 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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("EMPRESS")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0+749705fb7dd252339a4fb28ec075f9ea2e513f47")] [assembly: AssemblyProduct("Pocket Dimension Cart")] [assembly: AssemblyTitle("PocketDimensionCart")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.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 Empress.PocketDimensionCart { [HarmonyPatch(typeof(LevelGenerator), "Awake")] internal static class LevelGeneratorAwakePatch { private static void Prefix() { PocketDimensionCartRuntime.ResetLevelState(); } } [HarmonyPatch(typeof(PhysGrabCart), "ObjectsInCart")] internal static class PhysGrabCartObjectsInCartPatch { private static void Prefix(PhysGrabCart __instance, out bool __state) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) __state = false; if (Object.op_Implicit((Object)(object)__instance) && PocketDimensionCartRuntime.IsRealLevel && !(SemiFunc.PlayerNearestDistance(((Component)__instance).transform.position) > 12f) && !(__instance.objectInCartCheckTimer > 0f)) { __state = true; } } private static void Postfix(PhysGrabCart __instance, bool __state) { if (__state && Object.op_Implicit((Object)(object)__instance)) { PocketDimensionCartController component = ((Component)__instance).GetComponent<PocketDimensionCartController>(); if (Object.op_Implicit((Object)(object)component)) { component.AddStoredContentsToCartReadout(); } } } } [HarmonyPatch(typeof(PhysGrabCart), "Start")] internal static class PhysGrabCartStartPatch { private static void Postfix(PhysGrabCart __instance) { if (Object.op_Implicit((Object)(object)__instance) && PocketDimensionCartRuntime.CanAttachToCart && !Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<PocketDimensionCartController>())) { ((Component)__instance).gameObject.AddComponent<PocketDimensionCartController>(); } } } [HarmonyPatch(typeof(PhysGrabObjectImpactDetector), "OnTriggerStay")] internal static class PhysGrabObjectImpactDetectorOnTriggerStayPatch { private static void Postfix(PhysGrabObjectImpactDetector __instance, Collider other) { if (Object.op_Implicit((Object)(object)__instance) && Object.op_Implicit((Object)(object)other) && PocketDimensionCartRuntime.IsRealLevel && SemiFunc.IsMasterClientOrSingleplayer() && ((Component)other).CompareTag("Cart") && __instance.isValuable && Object.op_Implicit((Object)(object)__instance.physGrabObject) && Object.op_Implicit((Object)(object)__instance.currentCart)) { PocketDimensionCartController component = ((Component)__instance.currentCart).GetComponent<PocketDimensionCartController>(); if (Object.op_Implicit((Object)(object)component)) { component.StoreValuable(__instance.physGrabObject); } } } } [HarmonyPatch(typeof(PhysGrabCart), "StateSwitchRPC")] internal static class PocketDimensionCartStateSwitchGuardPatch { private static bool Prefix(PhysGrabCart __instance, State _state) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0052: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)__instance)) { return false; } if (Object.op_Implicit((Object)(object)__instance.cartMesh) && __instance.grabMaterial != null && __instance.capsuleColliders != null && __instance.cartInside != null && __instance.soundLocked != null && __instance.soundDragged != null && __instance.soundHandled != null) { return true; } __instance.currentState = _state; __instance.previousState = _state; return false; } } [HarmonyPatch(typeof(PlayerController), "FixedUpdate")] internal static class PocketDimensionPlayerControllerFixedUpdatePatch { private static void Postfix(PlayerController __instance) { PlayerAvatar controllerPlayer = PocketDimensionCartAccess.GetControllerPlayer(__instance); if (PocketDimensionCartRuntime.PlayerInsideAnyPocketRoom(controllerPlayer)) { PocketDimensionCartAccess.SuppressPocketRoomMovement(__instance, controllerPlayer); } } } [HarmonyPatch(typeof(PlayerTumble), "TumbleRequest")] internal static class PocketDimensionTumbleRequestPatch { private static bool Prefix(PlayerTumble __instance, bool _isTumbling) { if (_isTumbling) { return !BlockPocketRoomTumble(__instance); } return true; } internal static bool BlockPocketRoomTumble(PlayerTumble tumble) { PlayerAvatar tumbleOwner = PocketDimensionCartAccess.GetTumbleOwner(tumble); if (!PocketDimensionCartRuntime.PlayerInsideAnyPocketRoom(tumbleOwner)) { return false; } PocketDimensionCartAccess.SuppressPocketRoomMovement(PlayerController.instance, tumbleOwner); return true; } } [HarmonyPatch(typeof(PlayerTumble), "TumbleRequestRPC")] internal static class PocketDimensionTumbleRequestRpcPatch { private static bool Prefix(PlayerTumble __instance, bool _isTumbling) { if (_isTumbling) { return !PocketDimensionTumbleRequestPatch.BlockPocketRoomTumble(__instance); } return true; } } [HarmonyPatch(typeof(ValueScreen), "UpdateValue")] internal static class ValueScreenUpdateValuePatch { private static void Prefix(ValueScreen __instance, ref int newValue) { if (Object.op_Implicit((Object)(object)__instance) && PocketDimensionCartRuntime.IsRealLevel) { PocketDimensionCartController controllerForValueScreen = PocketDimensionCartRuntime.GetControllerForValueScreen(__instance); if ((Object)(object)controllerForValueScreen != (Object)null) { newValue = controllerForValueScreen.AddStoredValueToDisplay(newValue); } } } } internal sealed class PocketDimensionCartController : MonoBehaviourPun { private const string RequestEjectOneRpc = "PocketDimensionRequestEjectOne"; private const string RequestEjectAllRpc = "PocketDimensionRequestEjectAll"; private const string RequestEnterRpc = "PocketDimensionRequestEnter"; private const string RequestLeaveRpc = "PocketDimensionRequestLeave"; private const string StabilizeExitRpc = "PocketDimensionStabilizeExit"; private const string SyncStoredTotalsRpc = "PocketDimensionSyncStoredTotals"; private readonly List<int> _storedViewIds = new List<int>(); private PhysGrabCart _cart; private PhotonView _cartPhotonView; private GameObject _roomRoot; private Vector3 _roomOrigin; private Vector3 _playerSpawnPosition; private Vector3 _playerExitPosition; private Vector3 _valuableExitPosition; private Collider _exitCollider; private float _keyDownTime; private float _nextLocalEnterTime; private float _nextLocalExitTime; private float _exitTouchTimer; private float _insideCartTimer; private float _nextSafePoseRefreshTime; private Vector3 _lastSafeCartExitPosition; private Quaternion _lastSafeCartExitRotation = Quaternion.identity; private bool _lastSafeCartExitValid; private bool _holdRequestSent; private bool _ejectAllRunning; private int _roomIndex; private int _syncedStoredCount; private int _syncedStoredValue; public int StoredCount => _storedViewIds.Count; private void Awake() { _cart = ((Component)this).GetComponent<PhysGrabCart>(); _cartPhotonView = ((Component)this).GetComponent<PhotonView>(); _roomIndex = PocketDimensionCartRuntime.ReserveRoomIndex(); BuildRoom(); PocketDimensionCartRuntime.Register(this); } private void OnDisable() { PocketDimensionCartRuntime.Unregister(this); } private void Update() { if (PocketDimensionCartRuntime.IsRealLevel && Object.op_Implicit((Object)(object)_cart)) { RefreshSafeCartExitPose(); UpdateLocalInput(); } } private Vector3 GetCartExitPosition() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0063: Unknown result type (might be due to invalid IL or missing references) Vector3 flatCartForward = GetFlatCartForward(); Vector3 val = (Object.op_Implicit((Object)(object)_cart.inCart) ? _cart.inCart.position : ((Component)_cart).transform.position); Vector3 position = val + Vector3.up * 1.45f + flatCartForward * 1.25f; return SnapExitAboveFloor(position); } private Quaternion GetCartExitRotation() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) return Quaternion.LookRotation(GetFlatCartForward(), Vector3.up); } private Vector3 GetFlatCartForward() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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) //IL_004c: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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) if (!Object.op_Implicit((Object)(object)_cart)) { return Vector3.forward; } Vector3 val = Vector3.ProjectOnPlane(((Component)_cart).transform.forward, Vector3.up); if (((Vector3)(ref val)).sqrMagnitude < 0.001f) { val = Vector3.ProjectOnPlane(((Component)_cart).transform.right, Vector3.up); } if (!(((Vector3)(ref val)).sqrMagnitude < 0.001f)) { return ((Vector3)(ref val)).normalized; } return Vector3.forward; } private static Vector3 SnapExitAboveFloor(Vector3 position) { //IL_003c: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_0052: 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_008c: 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_0072: Unknown result type (might be due to invalid IL or missing references) int num = LayerMask.GetMask(new string[3] { "Default", "PhysGrabObjectCart", "StaticGrabObject" }); if (num == 0) { num = ~LayerMask.GetMask(new string[1] { "Ignore Raycast" }); } Vector3 val = position + Vector3.up * 1.5f; RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(val, Vector3.down, ref val2, 4.5f, num, (QueryTriggerInteraction)1)) { position.y = Mathf.Max(position.y, ((RaycastHit)(ref val2)).point.y + 1.15f); } return position; } private void GetCartExitPose(out Vector3 position, out Quaternion rotation) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) //IL_002a: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: 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) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) if (CartCanOpenPocket()) { RefreshSafeCartExitPose(force: true); } if (_lastSafeCartExitValid) { position = _lastSafeCartExitPosition; rotation = _lastSafeCartExitRotation; } else if (Object.op_Implicit((Object)(object)TruckSafetySpawnPoint.instance)) { position = ((Component)TruckSafetySpawnPoint.instance).transform.position; rotation = ((Component)TruckSafetySpawnPoint.instance).transform.rotation; } else { position = GetCartExitPosition(); rotation = GetCartExitRotation(); } } private void RefreshSafeCartExitPose(bool force = false) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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) if (force || !(Time.time < _nextSafePoseRefreshTime)) { _nextSafePoseRefreshTime = Time.time + 0.25f; if (CartCanOpenPocket()) { _lastSafeCartExitPosition = GetCartExitPosition(); _lastSafeCartExitRotation = GetCartExitRotation(); _lastSafeCartExitValid = true; } } } public void RequestLeave(PlayerAvatar player) { if (!Object.op_Implicit((Object)(object)player) || Time.time < _nextLocalExitTime) { return; } _nextLocalExitTime = Time.time + 1f; if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { int playerViewId = GetPlayerViewId(player); if (playerViewId != 0) { _cartPhotonView.RPC("PocketDimensionRequestLeave", (RpcTarget)2, new object[1] { playerViewId }); } } else { LeaveRoom(player); } } private void UpdateLocalInput() { PlayerAvatar val = SemiFunc.PlayerGetLocal(); if (!Object.op_Implicit((Object)(object)val) || val.isDisabled || !SemiFunc.NoTextInputsActive()) { return; } if (LocalPlayerCanUseCart(val, out var insideCart)) { ShowCartText(); HandleActionKey(val); HandleInteractEnter(val); } if (PocketDimensionCartPlugin.EnterByHoppingInCart.Value && insideCart && Time.time >= _nextLocalEnterTime && !SemiFunc.InputHold((InputKey)10)) { _insideCartTimer += Time.deltaTime; if (_insideCartTimer >= 0.45f) { _nextLocalEnterTime = Time.time + 2f; _insideCartTimer = 0f; RequestEnter(val); } } else { _insideCartTimer = 0f; } if (LocalPlayerInsideRoom(val)) { PocketDimensionCartAccess.SuppressPocketRoomMovement(PlayerController.instance, val); HandleRoomExit(val); } } private void HandleActionKey(PlayerAvatar player) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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) //IL_005b: Unknown result type (might be due to invalid IL or missing references) KeyCode value = PocketDimensionCartPlugin.ActionKey.Value; if (Input.GetKeyDown(value)) { _keyDownTime = Time.time; _holdRequestSent = false; } if (Input.GetKey(value) && !_holdRequestSent && Time.time - _keyDownTime >= PocketDimensionCartPlugin.HoldSeconds.Value) { _holdRequestSent = true; RequestEjectAll(player); } if (Input.GetKeyUp(value)) { if (!_holdRequestSent) { RequestEjectOne(player); } _holdRequestSent = false; } } private void HandleInteractEnter(PlayerAvatar player) { if (!(Time.time < _nextLocalEnterTime) && SemiFunc.InputDown((InputKey)2)) { _nextLocalEnterTime = Time.time + 2f; RequestEnter(player); } } private void HandleRoomExit(PlayerAvatar player) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (!PlayerTouchingExit(player)) { _exitTouchTimer = 0f; return; } _exitTouchTimer += Time.deltaTime; ApplyExitPortalBrake(player); SemiFunc.UIFocusText("Leaving pocket dimension", Color.white, GetFocusFlashColor(), 0.1f); if (_exitTouchTimer >= 0.18f) { _exitTouchTimer = 0f; RequestLeave(player); } } private void ShowCartText() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) KeyCode value = PocketDimensionCartPlugin.ActionKey.Value; string text = ((object)(KeyCode)(ref value)).ToString(); string text2 = "Press " + text + " to pop out one valuable\nHold " + text + " to pop out all valuables"; SemiFunc.UIFocusText(text2, Color.white, GetFocusFlashColor(), 0.1f); } private void RequestEjectOne(PlayerAvatar player) { if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { int playerViewId = GetPlayerViewId(player); if (playerViewId != 0) { _cartPhotonView.RPC("PocketDimensionRequestEjectOne", (RpcTarget)2, new object[1] { playerViewId }); } } else { EjectOne(player); } } private void RequestEjectAll(PlayerAvatar player) { if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { int playerViewId = GetPlayerViewId(player); if (playerViewId != 0) { _cartPhotonView.RPC("PocketDimensionRequestEjectAll", (RpcTarget)2, new object[1] { playerViewId }); } } else { EjectAll(player); } } private void RequestEnter(PlayerAvatar player) { if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { int playerViewId = GetPlayerViewId(player); if (playerViewId != 0) { _cartPhotonView.RPC("PocketDimensionRequestEnter", (RpcTarget)2, new object[1] { playerViewId }); } } else { EnterRoom(player); } } [PunRPC] private void PocketDimensionRequestEjectOne(int playerViewId, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer() && RequestOwnerIsValid(playerViewId, info)) { PlayerAvatar player = GetPlayer(playerViewId); EjectOne(player); } } [PunRPC] private void PocketDimensionRequestEjectAll(int playerViewId, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer() && RequestOwnerIsValid(playerViewId, info)) { PlayerAvatar player = GetPlayer(playerViewId); EjectAll(player); } } [PunRPC] private void PocketDimensionRequestEnter(int playerViewId, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer() && RequestOwnerIsValid(playerViewId, info)) { PlayerAvatar player = GetPlayer(playerViewId); EnterRoom(player); } } [PunRPC] private void PocketDimensionRequestLeave(int playerViewId, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer() && RequestOwnerIsValid(playerViewId, info)) { PlayerAvatar player = GetPlayer(playerViewId); LeaveRoom(player); } } [PunRPC] private void PocketDimensionStabilizeExit(int playerViewId, Vector3 exitPosition, Quaternion exitRotation, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMultiplayer() && info.Sender != PhotonNetwork.MasterClient) { return; } PlayerAvatar player = GetPlayer(playerViewId); if (!((Object)(object)player == (Object)null)) { StabilizePlayerAfterPocketExit(player, exitPosition, exitRotation); RoomVolumeCheck roomVolumeCheck = player.RoomVolumeCheck; if (roomVolumeCheck != null) { roomVolumeCheck.CheckSet(); } } } private void EnterRoom(PlayerAvatar? player) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_002b: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)player == (Object)null) && CanPlayerUseCartOnHost(player)) { RefreshSafeCartExitPose(force: true); player.Spawn(_playerSpawnPosition, Quaternion.LookRotation(Vector3.forward, Vector3.up)); RoomVolumeCheck roomVolumeCheck = player.RoomVolumeCheck; if (roomVolumeCheck != null) { roomVolumeCheck.CheckSet(); } } } private void LeaveRoom(PlayerAvatar? player) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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) if (!((Object)(object)player == (Object)null)) { GetCartExitPose(out var position, out var rotation); player.Spawn(position, rotation); BroadcastExitStabilize(player, position, rotation); RoomVolumeCheck roomVolumeCheck = player.RoomVolumeCheck; if (roomVolumeCheck != null) { roomVolumeCheck.CheckSet(); } } } private void StabilizePlayerAfterPocketExit(PlayerAvatar player, Vector3 position, Quaternion rotation) { //IL_001b: 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_0029: 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_0087: 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_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) player.FallDamageResetSet(2f); Rigidbody component = ((Component)player).GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component)) { component.position = position; component.rotation = rotation; component.velocity = Vector3.zero; component.angularVelocity = Vector3.zero; } PlayerTumble tumble = PocketDimensionCartAccess.GetTumble(player); if ((Object)(object)tumble != (Object)null) { tumble.TumbleRequest(false, false); tumble.TumbleOverrideTime(0.25f); tumble.DisableCustomGravity(0.25f); tumble.OverrideDisableTumbleMoveSound(0.25f); Rigidbody component2 = ((Component)tumble).GetComponent<Rigidbody>(); if (Object.op_Implicit((Object)(object)component2)) { component2.position = position + Vector3.up * 0.3f; component2.rotation = rotation; component2.velocity = Vector3.zero; component2.angularVelocity = Vector3.zero; } } if (PocketDimensionCartAccess.IsLocal(player) && Object.op_Implicit((Object)(object)PlayerController.instance)) { ((Component)PlayerController.instance).transform.position = position; ((Component)PlayerController.instance).transform.rotation = rotation; } } private void BroadcastExitStabilize(PlayerAvatar player, Vector3 position, Quaternion rotation) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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) //IL_0075: 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_005c: Unknown result type (might be due to invalid IL or missing references) int playerViewId = GetPlayerViewId(player); if (playerViewId == 0) { StabilizePlayerAfterPocketExit(player, position, rotation); } else if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { _cartPhotonView.RPC("PocketDimensionStabilizeExit", (RpcTarget)0, new object[3] { playerViewId, position, rotation }); } else { PocketDimensionStabilizeExit(playerViewId, position, rotation); } } private void ApplyExitPortalBrake(PlayerAvatar player) { DampenBody(((Component)player).GetComponent<Rigidbody>(), 0.15f); PlayerTumble tumble = PocketDimensionCartAccess.GetTumble(player); if ((Object)(object)tumble != (Object)null) { DampenBody(((Component)tumble).GetComponent<Rigidbody>(), 0.08f); tumble.DisableCustomGravity(0.12f); tumble.OverrideDisableTumbleMoveSound(0.12f); } if (PocketDimensionCartAccess.IsLocal(player) && Object.op_Implicit((Object)(object)PlayerController.instance)) { DampenBody(((Component)PlayerController.instance).GetComponent<Rigidbody>(), 0.15f); } } private static void DampenBody(Rigidbody body, float upwardLimit) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)body) && !body.isKinematic) { Vector3 velocity = body.velocity; velocity.x *= 0.25f; velocity.z *= 0.25f; velocity.y = Mathf.Clamp(velocity.y * 0.2f, 0f - upwardLimit, upwardLimit); body.velocity = velocity; body.angularVelocity *= 0.15f; } } private bool CartCanOpenPocket() { if (!Object.op_Implicit((Object)(object)_cart) || !((Component)_cart).gameObject.activeInHierarchy || !Object.op_Implicit((Object)(object)((Component)_cart).GetComponent<PhysGrabObject>())) { return false; } return !PocketDimensionCartAccess.IsEquippedOrInInventory(((Component)_cart).GetComponent<ItemEquippable>()); } private bool LocalPlayerCanUseCart(PlayerAvatar player, out bool insideCart) { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) if (!CartCanOpenPocket()) { insideCart = false; return false; } insideCart = PlayerInsideCartVolume(player); if (insideCart) { return true; } if (Object.op_Implicit((Object)(object)PhysGrabber.instance) && (Object)(object)PhysGrabber.instance.grabbedPhysGrabObject == (Object)(object)_cart.physGrabObject) { return true; } if (Vector3.Distance(((Component)player).transform.position, ((Component)_cart).transform.position) > 5.5f) { return false; } Transform aimTransform = GetAimTransform(player); if (!Object.op_Implicit((Object)(object)aimTransform)) { return false; } Ray val = default(Ray); ((Ray)(ref val))..ctor(aimTransform.position, aimTransform.forward); RaycastHit val2 = default(RaycastHit); if (!Physics.Raycast(val, ref val2, 6f, -1, (QueryTriggerInteraction)2)) { return false; } PhysGrabCart componentInParent = ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<PhysGrabCart>(); return (Object)(object)componentInParent == (Object)(object)_cart; } private bool PlayerInsideCartVolume(PlayerAvatar player) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_0094: 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) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: 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_00d5: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)player) || !Object.op_Implicit((Object)(object)_cart) || !Object.op_Implicit((Object)(object)_cart.inCart)) { return false; } BoxCollider component = ((Component)_cart.inCart).GetComponent<BoxCollider>(); Vector3 val = ((Component)player).transform.position + Vector3.up * 0.25f; if (Object.op_Implicit((Object)(object)component)) { return Vector3.Distance(((Collider)component).ClosestPoint(val), val) < 0.01f; } Vector3 val2 = _cart.inCart.InverseTransformPoint(val); Vector3 val3 = _cart.inCart.localScale * 0.5f; if (Mathf.Abs(val2.x) <= val3.x && Mathf.Abs(val2.y) <= val3.y) { return Mathf.Abs(val2.z) <= val3.z; } return false; } private bool CanPlayerUseCartOnHost(PlayerAvatar? player) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) if (!PocketDimensionCartRuntime.IsRealLevel || (Object)(object)player == (Object)null || !Object.op_Implicit((Object)(object)_cart)) { return false; } if (LocalOrHostPlayerInsideRoom(player)) { return true; } if (!CartCanOpenPocket()) { return false; } if (!(Vector3.Distance(((Component)player).transform.position, ((Component)_cart).transform.position) <= 8f)) { return PlayerInsideCartVolume(player); } return true; } private bool LocalPlayerInsideRoom(PlayerAvatar? player) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)player != (Object)null && Vector3.Distance(((Component)player).transform.position, _roomOrigin) <= 14f) { return Mathf.Abs(((Component)player).transform.position.y - _roomOrigin.y) <= 8f; } return false; } internal bool PlayerInsidePocketRoom(PlayerAvatar? player) { return LocalPlayerInsideRoom(player); } private bool LocalOrHostPlayerInsideRoom(PlayerAvatar? player) { return LocalPlayerInsideRoom(player); } private bool PlayerTouchingExit(PlayerAvatar player) { //IL_001d: 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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_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_0058: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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) //IL_0078: 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_007e: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)player) || !Object.op_Implicit((Object)(object)_exitCollider)) { return false; } Vector3 val = ((Component)player).transform.position + Vector3.up * 0.35f; if (Vector3.Distance(_exitCollider.ClosestPoint(val), val) < 0.04f) { return true; } Vector3 val2 = ((Component)player).transform.position + Vector3.up * 1.1f; return Vector3.Distance(_exitCollider.ClosestPoint(val2), val2) < 0.04f; } private Transform GetAimTransform(PlayerAvatar player) { if (Object.op_Implicit((Object)(object)player.localCamera)) { return player.localCamera.GetOverrideTransform(); } Camera main = Camera.main; if (!Object.op_Implicit((Object)(object)main)) { return ((Component)player).transform; } return ((Component)main).transform; } private int GetPlayerViewId(PlayerAvatar player) { if (!Object.op_Implicit((Object)(object)player) || !Object.op_Implicit((Object)(object)player.photonView)) { return 0; } return player.photonView.ViewID; } private PlayerAvatar? GetPlayer(int playerViewId) { PhotonView val = PhotonView.Find(playerViewId); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).GetComponent<PlayerAvatar>(); } private PhysGrabObject? GetPhysGrabObject(int viewId) { return PocketDimensionCartRuntime.ResolvePhysGrabObject(viewId); } private bool RequestOwnerIsValid(int playerViewId, PhotonMessageInfo info) { //IL_0020: 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_0036: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.IsMultiplayer()) { return true; } PhotonView val = PhotonView.Find(playerViewId); if (!Object.op_Implicit((Object)(object)val)) { return false; } if (val.Owner != info.Sender && val.Controller != info.Sender) { return info.Sender == PhotonNetwork.MasterClient; } return true; } private Color GetFocusFlashColor() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0032: 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) try { if (Object.op_Implicit((Object)(object)AssetManager.instance)) { return AssetManager.instance.colorYellow; } } catch { } return new Color(0.95f, 0.68f, 1f, 1f); } private void BuildRoom() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: 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_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: 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) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_00e2: 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_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02cc: Unknown result type (might be due to invalid IL or missing references) int num = ((Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) ? _cartPhotonView.ViewID : _roomIndex); _roomOrigin = new Vector3(10000f + (float)num * 35f, 4000f, 10000f); _playerSpawnPosition = _roomOrigin + new Vector3(0f, 1.5f, 6f); _playerExitPosition = _roomOrigin + new Vector3(0f, 1.5f, 8.4f); _valuableExitPosition = _playerExitPosition + new Vector3(0f, 0.5f, 0f); _roomRoot = new GameObject($"Pocket Dimension Cart Room {num}"); CreateRoomBlock("Floor", _roomOrigin + new Vector3(0f, -0.1f, 0f), new Vector3(18f, 0.2f, 18f), new Color(0.12f, 0.08f, 0.18f, 1f), trigger: false); CreateRoomBlock("North Wall", _roomOrigin + new Vector3(0f, 3f, 9f), new Vector3(18f, 6f, 0.3f), new Color(0.16f, 0.1f, 0.24f, 1f), trigger: false); CreateRoomBlock("South Wall", _roomOrigin + new Vector3(0f, 3f, -9f), new Vector3(18f, 6f, 0.3f), new Color(0.16f, 0.1f, 0.24f, 1f), trigger: false); CreateRoomBlock("East Wall", _roomOrigin + new Vector3(9f, 3f, 0f), new Vector3(0.3f, 6f, 18f), new Color(0.16f, 0.1f, 0.24f, 1f), trigger: false); CreateRoomBlock("West Wall", _roomOrigin + new Vector3(-9f, 3f, 0f), new Vector3(0.3f, 6f, 18f), new Color(0.16f, 0.1f, 0.24f, 1f), trigger: false); GameObject val = CreateRoomBlock("Pocket Exit", _valuableExitPosition, new Vector3(4.5f, 3.2f, 2.2f), new Color(0.3f, 0.8f, 1f, 0.35f), trigger: true); _exitCollider = val.GetComponent<Collider>(); val.AddComponent<PocketDimensionValuableExitZone>().SetController(this); } private GameObject CreateRoomBlock(string name, Vector3 position, Vector3 scale, Color color, bool trigger) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) GameObject val = GameObject.CreatePrimitive((PrimitiveType)3); ((Object)val).name = name; val.transform.SetParent(_roomRoot.transform); val.transform.position = position; val.transform.localScale = scale; Collider component = val.GetComponent<Collider>(); component.isTrigger = trigger; Renderer component2 = val.GetComponent<Renderer>(); if (Object.op_Implicit((Object)(object)component2)) { Shader val2 = Shader.Find("Universal Render Pipeline/Lit"); if (!Object.op_Implicit((Object)(object)val2)) { val2 = Shader.Find("Standard"); } if (Object.op_Implicit((Object)(object)val2)) { Material val3 = new Material(val2); val3.color = color; component2.material = val3; } } int num = LayerMask.NameToLayer("Default"); if (num >= 0) { val.layer = num; } return val; } public bool OwnsStoredValuable(PhysGrabObject physGrabObject) { int viewId = PocketDimensionCartRuntime.GetViewId(physGrabObject); if (viewId != 0) { return _storedViewIds.Contains(viewId); } return false; } public void StoreValuable(PhysGrabObject physGrabObject) { //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) if (!PocketDimensionCartRuntime.IsRealLevel || !SemiFunc.IsMasterClientOrSingleplayer() || !CartCanOpenPocket() || !Object.op_Implicit((Object)(object)physGrabObject) || !Object.op_Implicit((Object)(object)((Component)physGrabObject).GetComponent<ValuableObject>()) || physGrabObject.grabbed || physGrabObject.playerGrabbing.Count > 0 || !PocketDimensionCartRuntime.CanAbsorb(physGrabObject)) { return; } int viewId = PocketDimensionCartRuntime.GetViewId(physGrabObject); if (viewId != 0 && !_storedViewIds.Contains(viewId)) { _storedViewIds.Add(viewId); PocketDimensionCartRuntime.MarkStored(physGrabObject, this); PocketDimensionStoredValuable pocketDimensionStoredValuable = ((Component)physGrabObject).GetComponent<PocketDimensionStoredValuable>(); if (!Object.op_Implicit((Object)(object)pocketDimensionStoredValuable)) { pocketDimensionStoredValuable = ((Component)physGrabObject).gameObject.AddComponent<PocketDimensionStoredValuable>(); } pocketDimensionStoredValuable.SetStored(this); ResetCartState(physGrabObject); PocketDimensionCartRuntime.ProtectValuable(physGrabObject, 0.75f); PocketDimensionCartRuntime.TeleportPhysGrabObject(physGrabObject, GetStoragePosition(_storedViewIds.Count - 1), Quaternion.identity); SyncStoredTotals(); } } public void EjectStoredFromRoom(PhysGrabObject physGrabObject) { if (SemiFunc.IsMasterClientOrSingleplayer() && OwnsStoredValuable(physGrabObject)) { EjectValuable(physGrabObject); } } private void EjectOne(PlayerAvatar? player) { if (CanPlayerUseCartOnHost(player)) { PhysGrabObject val = FindStoredValuable(preferReleased: true); if ((Object)(object)val != (Object)null) { EjectValuable(val); } } } private void EjectAll(PlayerAvatar? player) { if (CanPlayerUseCartOnHost(player) && !_ejectAllRunning) { ((MonoBehaviour)this).StartCoroutine(EjectAllRoutine()); } } private IEnumerator EjectAllRoutine() { _ejectAllRunning = true; while (_storedViewIds.Count > 0) { PhysGrabObject val = FindStoredValuable(preferReleased: true); if ((Object)(object)val == (Object)null) { CleanupStoredList(); break; } EjectValuable(val); yield return (object)new WaitForSeconds(Mathf.Max(0.05f, PocketDimensionCartPlugin.EjectStaggerSeconds.Value)); } _ejectAllRunning = false; } private void EjectValuable(PhysGrabObject physGrabObject) { //IL_00d3: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0122: 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) if (!Object.op_Implicit((Object)(object)physGrabObject)) { return; } int viewId = PocketDimensionCartRuntime.GetViewId(physGrabObject); _storedViewIds.Remove(viewId); PocketDimensionCartRuntime.MarkReleased(physGrabObject, PocketDimensionCartPlugin.EjectCooldownSeconds.Value); SyncStoredTotals(); int num = ((viewId > 0) ? viewId : (-1)); foreach (PhysGrabber item in physGrabObject.playerGrabbing.ToList()) { if (Object.op_Implicit((Object)(object)item)) { item.ReleaseObject(num, 0.35f); } } physGrabObject.OverrideGrabDisable(0.35f); PocketDimensionStoredValuable component = ((Component)physGrabObject).GetComponent<PocketDimensionStoredValuable>(); if (Object.op_Implicit((Object)(object)component)) { component.SetReleased(PocketDimensionCartPlugin.EjectedProtectionSeconds.Value); } ResetCartState(physGrabObject); GetCartExitPose(out var position, out var rotation); PocketDimensionCartRuntime.ProtectValuable(physGrabObject, PocketDimensionCartPlugin.EjectedProtectionSeconds.Value); PocketDimensionCartRuntime.TeleportPhysGrabObject(physGrabObject, position, rotation); if (Object.op_Implicit((Object)(object)physGrabObject.rb)) { physGrabObject.rb.velocity = ((Component)_cart).transform.up * 1.4f + ((Component)_cart).transform.forward * 0.7f; physGrabObject.rb.angularVelocity = Vector3.zero; physGrabObject.rb.WakeUp(); } } public void AddStoredContentsToCartReadout() { if (Object.op_Implicit((Object)(object)_cart)) { if (SemiFunc.IsMasterClientOrSingleplayer()) { RefreshStoredTotals(); } if (_syncedStoredCount > 0 || _syncedStoredValue > 0) { PhysGrabCart cart = _cart; cart.itemsInCartCount += _syncedStoredCount; PhysGrabCart cart2 = _cart; cart2.haulCurrent += _syncedStoredValue; } } } public int AddStoredValueToDisplay(int baseValue) { if (SemiFunc.IsMasterClientOrSingleplayer()) { RefreshStoredTotals(); } return Mathf.Max(0, baseValue + _syncedStoredValue); } public bool UsesValueScreen(ValueScreen valueScreen) { if (Object.op_Implicit((Object)(object)_cart)) { return (Object)(object)_cart.valueScreen == (Object)(object)valueScreen; } return false; } private void SyncStoredTotals() { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) RefreshStoredTotals(); if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)_cartPhotonView) && _cartPhotonView.ViewID != 0) { _cartPhotonView.RPC("PocketDimensionSyncStoredTotals", (RpcTarget)0, new object[2] { _syncedStoredCount, _syncedStoredValue }); } else { PocketDimensionSyncStoredTotals(_syncedStoredCount, _syncedStoredValue); } } private void RefreshStoredTotals() { CleanupStoredList(); int num = 0; int num2 = 0; foreach (int storedViewId in _storedViewIds) { PhysGrabObject physGrabObject = GetPhysGrabObject(storedViewId); if (!((Object)(object)physGrabObject == (Object)null)) { num++; ValuableObject component = ((Component)physGrabObject).GetComponent<ValuableObject>(); if (Object.op_Implicit((Object)(object)component)) { num2 += (int)component.dollarValueCurrent; } } } _syncedStoredCount = num; _syncedStoredValue = num2; } [PunRPC] private void PocketDimensionSyncStoredTotals(int count, int value, PhotonMessageInfo info = default(PhotonMessageInfo)) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.IsMultiplayer() || info.Sender == PhotonNetwork.MasterClient) { _syncedStoredCount = Mathf.Max(0, count); _syncedStoredValue = Mathf.Max(0, value); } } private PhysGrabObject? FindStoredValuable(bool preferReleased) { CleanupStoredList(); foreach (int storedViewId in _storedViewIds) { PhysGrabObject physGrabObject = GetPhysGrabObject(storedViewId); if ((Object)(object)physGrabObject != (Object)null && (!preferReleased || (!physGrabObject.grabbed && physGrabObject.playerGrabbing.Count == 0))) { return physGrabObject; } } foreach (int storedViewId2 in _storedViewIds) { PhysGrabObject physGrabObject2 = GetPhysGrabObject(storedViewId2); if ((Object)(object)physGrabObject2 != (Object)null) { return physGrabObject2; } } return null; } private void CleanupStoredList() { for (int num = _storedViewIds.Count - 1; num >= 0; num--) { if (!Object.op_Implicit((Object)(object)GetPhysGrabObject(_storedViewIds[num]))) { _storedViewIds.RemoveAt(num); } } } private Vector3 GetStoragePosition(int index) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) int num = index % 5; int num2 = index / 5; return _roomOrigin + new Vector3((float)(num - 2) * 2.4f, 1.2f, -4.8f + (float)num2 * 2.4f); } private static void ResetCartState(PhysGrabObject physGrabObject) { if (Object.op_Implicit((Object)(object)physGrabObject) && Object.op_Implicit((Object)(object)physGrabObject.impactDetector)) { PhysGrabObjectImpactDetector impactDetector = physGrabObject.impactDetector; impactDetector.timerInCart = 0f; impactDetector.inCart = false; impactDetector.currentCart = null; impactDetector.currentCartPrev = null; impactDetector.ImpactDisable(0.25f); } } } [BepInPlugin("empress.repo.pocketdimensioncart", "Pocket Dimension Cart", "1.3.0")] public sealed class PocketDimensionCartPlugin : BaseUnityPlugin { public const string PluginGuid = "empress.repo.pocketdimensioncart"; public const string PluginName = "Pocket Dimension Cart"; public const string PluginVersion = "1.3.0"; internal static PocketDimensionCartPlugin Instance; internal static ConfigEntry<KeyCode> ActionKey; internal static ConfigEntry<float> HoldSeconds; internal static ConfigEntry<float> EjectStaggerSeconds; internal static ConfigEntry<float> EjectCooldownSeconds; internal static ConfigEntry<float> EjectedProtectionSeconds; internal static ConfigEntry<bool> EnterByHoppingInCart; private Harmony _harmony; private void Awake() { //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown Instance = this; ActionKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Input", "ActionKey", (KeyCode)120, "Press near a cart to eject one stored valuable. Hold to eject all stored valuables."); HoldSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Input", "HoldSeconds", 0.55f, "How long the action key must be held before eject-all starts."); EjectStaggerSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Cart", "EjectStaggerSeconds", 0.18f, "Delay between each valuable when ejecting all."); EjectCooldownSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Cart", "EjectCooldownSeconds", 2f, "How long an ejected valuable is blocked from being absorbed by a cart again."); EjectedProtectionSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Cart", "EjectedProtectionSeconds", 2f, "Temporary damage protection after a valuable exits the pocket dimension."); EnterByHoppingInCart = ((BaseUnityPlugin)this).Config.Bind<bool>("Cart", "EnterByHoppingInCart", true, "Allows players to enter the pocket dimension by standing inside the cart."); _harmony = new Harmony("empress.repo.pocketdimensioncart"); _harmony.PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Pocket Dimension Cart v1.3.0 loaded."); } } internal sealed class PocketDimensionStoredValuable : MonoBehaviour { private PhysGrabObject _physGrabObject; private PocketDimensionCartController? _owner; private float _protectUntil; private bool _stored; private void Awake() { _physGrabObject = ((Component)this).GetComponent<PhysGrabObject>(); } private void Update() { if (Object.op_Implicit((Object)(object)_physGrabObject) && (_stored || Time.time < _protectUntil)) { _physGrabObject.OverrideIndestructible(0.35f); _physGrabObject.OverrideBreakEffects(0.35f); if (Object.op_Implicit((Object)(object)_physGrabObject.impactDetector)) { _physGrabObject.impactDetector.ImpactDisable(0.35f); } } } public void SetStored(PocketDimensionCartController owner) { _owner = owner; _stored = true; Protect(1f); } public void SetReleased(float protectionSeconds) { _owner = null; _stored = false; Protect(protectionSeconds); } public void Protect(float seconds) { _protectUntil = Mathf.Max(_protectUntil, Time.time + Mathf.Max(0f, seconds)); } public PocketDimensionCartController? GetOwner() { return _owner; } } internal sealed class PocketDimensionValuableExitZone : MonoBehaviour { private PocketDimensionCartController _controller; public void SetController(PocketDimensionCartController controller) { _controller = controller; } private void OnTriggerEnter(Collider other) { TryEject(other); } private void OnTriggerStay(Collider other) { TryEject(other); } private void TryEject(Collider other) { if (Object.op_Implicit((Object)(object)_controller) && PocketDimensionCartRuntime.IsRealLevel && SemiFunc.IsMasterClientOrSingleplayer()) { PhysGrabObject componentInParent = ((Component)other).GetComponentInParent<PhysGrabObject>(); if (Object.op_Implicit((Object)(object)componentInParent) && _controller.OwnsStoredValuable(componentInParent)) { _controller.EjectStoredFromRoom(componentInParent); } } } } internal static class PocketDimensionCartAccess { private static readonly FieldRef<ItemEquippable, ItemState>? ItemCurrentState = CreateItemStateRef("currentState") ?? CreateItemStateRef("_currentState"); private static readonly FieldRef<ItemEquippable, bool>? ItemIsEquipped = CreateBoolRef("isEquipped"); private static readonly FieldRef<ItemEquippable, bool>? ItemIsEquipping = CreateBoolRef("isEquipping"); private static readonly FieldRef<ItemEquippable, bool>? ItemIsUnequipping = CreateBoolRef("isUnequipping"); private static readonly FieldRef<ItemEquippable, InventorySpot>? ItemEquippedSpot = CreateInventorySpotRef("equippedSpot"); private static readonly FieldRef<PlayerAvatar, PlayerTumble>? PlayerTumbleRef = CreatePlayerTumbleRef("tumble"); private static readonly FieldRef<PlayerAvatar, bool>? PlayerIsLocalRef = CreatePlayerBoolRef("isLocal"); private static readonly FieldRef<PlayerAvatar, bool>? PlayerIsSprintingRef = CreatePlayerBoolRef("isSprinting"); private static readonly FieldRef<PlayerTumble, PlayerAvatar>? TumblePlayerRef = CreateTumblePlayerRef("playerAvatar"); private static readonly FieldRef<PlayerTumble, bool>? TumbleIsTumblingRef = CreateTumbleBoolRef("isTumbling"); private static readonly FieldRef<PlayerController, PlayerAvatar>? ControllerPlayerRef = CreateControllerPlayerRef("playerAvatarScript"); private static readonly FieldRef<PlayerController, bool>? ControllerSprintingRef = CreateControllerBoolRef("sprinting"); private static readonly FieldRef<PlayerController, bool>? ControllerToggleSprintRef = CreateControllerBoolRef("toggleSprint"); private static readonly FieldRef<PlayerController, float>? ControllerTumbleInputDisableRef = CreateControllerFloatRef("tumbleInputDisableTimer"); private static readonly FieldRef<PlayerController, float>? ControllerSprintedTimerRef = CreateControllerFloatRef("SprintedTimer"); private static readonly FieldRef<PlayerController, float>? ControllerSprintDrainTimerRef = CreateControllerFloatRef("SprintDrainTimer"); private static readonly FieldRef<PlayerController, float>? ControllerSprintSpeedLerpRef = CreateControllerFloatRef("SprintSpeedLerp"); internal static bool IsEquippedOrInInventory(ItemEquippable itemEquippable) { if (!Object.op_Implicit((Object)(object)itemEquippable)) { return false; } try { if (itemEquippable.IsEquipped()) { return true; } } catch { } FieldRef<ItemEquippable, ItemState> itemCurrentState = ItemCurrentState; if (itemCurrentState != null) { try { if (itemCurrentState.Invoke(itemEquippable)) { return true; } } catch { } } if (!ReadBool(itemEquippable, ItemIsEquipped) && !ReadBool(itemEquippable, ItemIsEquipping) && !ReadBool(itemEquippable, ItemIsUnequipping)) { return ReadEquippedSpot(itemEquippable); } return true; } internal static PlayerTumble? GetTumble(PlayerAvatar player) { FieldRef<PlayerAvatar, PlayerTumble> playerTumbleRef = PlayerTumbleRef; if (playerTumbleRef == null || !Object.op_Implicit((Object)(object)player)) { return null; } try { return playerTumbleRef.Invoke(player); } catch { return null; } } internal static bool IsLocal(PlayerAvatar player) { FieldRef<PlayerAvatar, bool> playerIsLocalRef = PlayerIsLocalRef; if (playerIsLocalRef == null || !Object.op_Implicit((Object)(object)player)) { return false; } try { return playerIsLocalRef.Invoke(player); } catch { return false; } } internal static PlayerAvatar? GetTumbleOwner(PlayerTumble tumble) { FieldRef<PlayerTumble, PlayerAvatar> tumblePlayerRef = TumblePlayerRef; if (tumblePlayerRef == null || !Object.op_Implicit((Object)(object)tumble)) { return null; } try { return tumblePlayerRef.Invoke(tumble); } catch { return null; } } internal static PlayerAvatar? GetControllerPlayer(PlayerController controller) { FieldRef<PlayerController, PlayerAvatar> controllerPlayerRef = ControllerPlayerRef; if (controllerPlayerRef == null || !Object.op_Implicit((Object)(object)controller)) { return null; } try { return controllerPlayerRef.Invoke(controller); } catch { return null; } } internal static void SuppressPocketRoomMovement(PlayerController? controller, PlayerAvatar player) { if (!Object.op_Implicit((Object)(object)player)) { return; } SetPlayerBool(player, PlayerIsSprintingRef, value: false); if (Object.op_Implicit((Object)(object)controller)) { SetControllerBool(controller, ControllerSprintingRef, value: false); SetControllerBool(controller, ControllerToggleSprintRef, value: false); SetControllerFloat(controller, ControllerTumbleInputDisableRef, 0.2f, useMax: true); SetControllerFloat(controller, ControllerSprintedTimerRef, 0f, useMax: false); SetControllerFloat(controller, ControllerSprintDrainTimerRef, 0f, useMax: false); SetControllerFloat(controller, ControllerSprintSpeedLerpRef, 0f, useMax: false); } PlayerTumble tumble = GetTumble(player); if ((Object)(object)tumble != (Object)null) { if (ReadTumbleBool(tumble, TumbleIsTumblingRef)) { tumble.TumbleRequest(false, false); } tumble.TumbleOverrideTime(0.2f); tumble.DisableCustomGravity(0.1f); tumble.OverrideDisableTumbleMoveSound(0.2f); } } private static bool ReadBool(ItemEquippable itemEquippable, FieldRef<ItemEquippable, bool>? accessor) { if (accessor == null) { return false; } try { return accessor.Invoke(itemEquippable); } catch { return false; } } private static bool ReadTumbleBool(PlayerTumble tumble, FieldRef<PlayerTumble, bool>? accessor) { if (accessor == null) { return false; } try { return accessor.Invoke(tumble); } catch { return false; } } private static void SetPlayerBool(PlayerAvatar player, FieldRef<PlayerAvatar, bool>? accessor, bool value) { if (accessor == null) { return; } try { accessor.Invoke(player) = value; } catch { } } private static void SetControllerBool(PlayerController controller, FieldRef<PlayerController, bool>? accessor, bool value) { if (accessor == null) { return; } try { accessor.Invoke(controller) = value; } catch { } } private static void SetControllerFloat(PlayerController controller, FieldRef<PlayerController, float>? accessor, float value, bool useMax) { if (accessor == null) { return; } try { accessor.Invoke(controller) = (useMax ? Mathf.Max(accessor.Invoke(controller), value) : value); } catch { } } private static bool ReadEquippedSpot(ItemEquippable itemEquippable) { FieldRef<ItemEquippable, InventorySpot> itemEquippedSpot = ItemEquippedSpot; if (itemEquippedSpot == null) { return false; } try { InventorySpot val = itemEquippedSpot.Invoke(itemEquippable); return Object.op_Implicit((Object)(object)val); } catch { return false; } } private static FieldRef<ItemEquippable, ItemState>? CreateItemStateRef(string name) { try { return AccessTools.FieldRefAccess<ItemEquippable, ItemState>(name); } catch { return null; } } private static FieldRef<ItemEquippable, bool>? CreateBoolRef(string name) { try { return AccessTools.FieldRefAccess<ItemEquippable, bool>(name); } catch { return null; } } private static FieldRef<ItemEquippable, InventorySpot>? CreateInventorySpotRef(string name) { try { return AccessTools.FieldRefAccess<ItemEquippable, InventorySpot>(name); } catch { return null; } } private static FieldRef<PlayerAvatar, PlayerTumble>? CreatePlayerTumbleRef(string name) { try { return AccessTools.FieldRefAccess<PlayerAvatar, PlayerTumble>(name); } catch { return null; } } private static FieldRef<PlayerAvatar, bool>? CreatePlayerBoolRef(string name) { try { return AccessTools.FieldRefAccess<PlayerAvatar, bool>(name); } catch { return null; } } private static FieldRef<PlayerTumble, PlayerAvatar>? CreateTumblePlayerRef(string name) { try { return AccessTools.FieldRefAccess<PlayerTumble, PlayerAvatar>(name); } catch { return null; } } private static FieldRef<PlayerTumble, bool>? CreateTumbleBoolRef(string name) { try { return AccessTools.FieldRefAccess<PlayerTumble, bool>(name); } catch { return null; } } private static FieldRef<PlayerController, PlayerAvatar>? CreateControllerPlayerRef(string name) { try { return AccessTools.FieldRefAccess<PlayerController, PlayerAvatar>(name); } catch { return null; } } private static FieldRef<PlayerController, bool>? CreateControllerBoolRef(string name) { try { return AccessTools.FieldRefAccess<PlayerController, bool>(name); } catch { return null; } } private static FieldRef<PlayerController, float>? CreateControllerFloatRef(string name) { try { return AccessTools.FieldRefAccess<PlayerController, float>(name); } catch { return null; } } } internal static class PocketDimensionCartRuntime { private static readonly List<PocketDimensionCartController> Controllers = new List<PocketDimensionCartController>(); private static readonly Dictionary<int, PocketDimensionCartController> StoredOwners = new Dictionary<int, PocketDimensionCartController>(); private static readonly Dictionary<int, float> AbsorbCooldowns = new Dictionary<int, float>(); private static readonly Dictionary<int, PhysGrabObject> LocalPhysGrabObjects = new Dictionary<int, PhysGrabObject>(); private static int _nextRoomIndex; internal static bool IsRealLevel { get { try { if (!Object.op_Implicit((Object)(object)RunManager.instance) || !Object.op_Implicit((Object)(object)LevelGenerator.Instance) || !LevelGenerator.Instance.Generated) { return false; } if (SemiFunc.MenuLevel() || SemiFunc.RunIsShop() || SemiFunc.RunIsTutorial()) { return false; } return SemiFunc.RunIsLevel(); } catch { return false; } } } internal static bool CanAttachToCart { get { try { if (!Object.op_Implicit((Object)(object)RunManager.instance) || SemiFunc.MenuLevel() || SemiFunc.RunIsShop() || SemiFunc.RunIsTutorial()) { return false; } return SemiFunc.RunIsLevel(); } catch { return false; } } } internal static int ReserveRoomIndex() { _nextRoomIndex++; return _nextRoomIndex; } internal static void Register(PocketDimensionCartController controller) { if (!Controllers.Contains(controller)) { Controllers.Add(controller); } } internal static void Unregister(PocketDimensionCartController controller) { PocketDimensionCartController controller2 = controller; Controllers.Remove(controller2); int[] array = (from pair in StoredOwners where (Object)(object)pair.Value == (Object)(object)controller2 select pair.Key).ToArray(); foreach (int key in array) { StoredOwners.Remove(key); } } internal static void ResetLevelState() { Controllers.Clear(); StoredOwners.Clear(); AbsorbCooldowns.Clear(); LocalPhysGrabObjects.Clear(); _nextRoomIndex = 0; } internal static bool IsStored(PhysGrabObject physGrabObject) { int viewId = GetViewId(physGrabObject); if (viewId != 0) { return StoredOwners.ContainsKey(viewId); } return false; } internal static bool CanAbsorb(PhysGrabObject physGrabObject) { int viewId = GetViewId(physGrabObject); if (viewId == 0) { return true; } if (StoredOwners.ContainsKey(viewId)) { return false; } if (AbsorbCooldowns.TryGetValue(viewId, out var value) && Time.time < value) { return false; } if (AbsorbCooldowns.ContainsKey(viewId)) { AbsorbCooldowns.Remove(viewId); } return true; } internal static void MarkStored(PhysGrabObject physGrabObject, PocketDimensionCartController owner) { int viewId = GetViewId(physGrabObject); if (viewId != 0) { StoredOwners[viewId] = owner; } } internal static void MarkReleased(PhysGrabObject physGrabObject, float cooldown) { int viewId = GetViewId(physGrabObject); if (viewId != 0) { StoredOwners.Remove(viewId); AbsorbCooldowns[viewId] = Time.time + Mathf.Max(0.1f, cooldown); } } internal static PocketDimensionCartController? GetOwner(PhysGrabObject physGrabObject) { int viewId = GetViewId(physGrabObject); if (viewId == 0) { return null; } StoredOwners.TryGetValue(viewId, out PocketDimensionCartController value); return value; } internal static PocketDimensionCartController? GetControllerForValueScreen(ValueScreen valueScreen) { if (!Object.op_Implicit((Object)(object)valueScreen)) { return null; } foreach (PocketDimensionCartController controller in Controllers) { if (Object.op_Implicit((Object)(object)controller) && controller.UsesValueScreen(valueScreen)) { return controller; } } return null; } internal static bool PlayerInsideAnyPocketRoom(PlayerAvatar? player) { if ((Object)(object)player == (Object)null) { return false; } for (int num = Controllers.Count - 1; num >= 0; num--) { PocketDimensionCartController pocketDimensionCartController = Controllers[num]; if (!Object.op_Implicit((Object)(object)pocketDimensionCartController)) { Controllers.RemoveAt(num); } else if (pocketDimensionCartController.PlayerInsidePocketRoom(player)) { return true; } } return false; } internal static int GetViewId(PhysGrabObject physGrabObject) { if (!Object.op_Implicit((Object)(object)physGrabObject)) { return 0; } if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)physGrabObject.photonView) && physGrabObject.photonView.ViewID != 0) { return physGrabObject.photonView.ViewID; } int instanceID = ((Object)physGrabObject).GetInstanceID(); int num; switch (instanceID) { case 0: return 0; default: num = -Mathf.Abs(instanceID); break; case int.MinValue: num = instanceID; break; } int num2 = num; LocalPhysGrabObjects[num2] = physGrabObject; return num2; } internal static PhysGrabObject? ResolvePhysGrabObject(int viewId) { if (viewId == 0) { return null; } if (viewId < 0) { if (LocalPhysGrabObjects.TryGetValue(viewId, out PhysGrabObject value) && Object.op_Implicit((Object)(object)value)) { return value; } LocalPhysGrabObjects.Remove(viewId); return null; } PhotonView val = PhotonView.Find(viewId); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).GetComponent<PhysGrabObject>(); } internal static void TeleportPhysGrabObject(PhysGrabObject physGrabObject, Vector3 position, Quaternion rotation) { //IL_0056: 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_006d: 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_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0047: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)physGrabObject)) { if (SemiFunc.IsMultiplayer() && Object.op_Implicit((Object)(object)physGrabObject.photonView) && physGrabObject.photonView.ViewID != 0) { physGrabObject.photonView.RPC("SetPositionRPC", (RpcTarget)0, new object[2] { position, rotation }); } else { physGrabObject.Teleport(position, rotation); } Rigidbody rb = physGrabObject.rb; if (Object.op_Implicit((Object)(object)rb)) { rb.position = position; rb.rotation = rotation; rb.velocity = Vector3.zero; rb.angularVelocity = Vector3.zero; rb.WakeUp(); } } } internal static void ProtectValuable(PhysGrabObject physGrabObject, float seconds) { if (Object.op_Implicit((Object)(object)physGrabObject)) { PocketDimensionStoredValuable pocketDimensionStoredValuable = ((Component)physGrabObject).GetComponent<PocketDimensionStoredValuable>(); if (!Object.op_Implicit((Object)(object)pocketDimensionStoredValuable)) { pocketDimensionStoredValuable = ((Component)physGrabObject).gameObject.AddComponent<PocketDimensionStoredValuable>(); } pocketDimensionStoredValuable.Protect(seconds); } } } }