using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using BepInEx; using Microsoft.CodeAnalysis; using Pigeon.Movement; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyVersion("0.0.0.0")] [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 NoClip { [BepInPlugin("com.coloron.noclip", "Noclip", "1.0.0")] [MycoMod(/*Could not decode attribute arguments.*/)] public class Noclip : BaseUnityPlugin { private float _flySpeed = 50f; private float _fastFlyMult = 5f; private bool _noclipActive = false; private GameObject _localPlayer; private CharacterController _cc; private Rigidbody _rb; private PlayerLook _playerLook; private Player _playerComponent; private FieldInfo _fiPositionNow; private FieldInfo _fiPositionNext; private List _disabledScripts = new List(); private bool _wasCcEnabled; private bool _wasRbKinematic; private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"[NoclipMod] v1.6.0 Loaded"); } private void Update() { if (Keyboard.current != null) { if (((ButtonControl)Keyboard.current.f3Key).wasPressedThisFrame) { ToggleNoclip(); } if (_noclipActive) { HandleNoclipMovement(); HandleNoclipCamera(); } } } private void FindPlayer() { if ((Object)(object)_localPlayer != (Object)null) { return; } NetworkManager singleton = NetworkManager.Singleton; if (((singleton != null) ? singleton.SpawnManager : null) != null) { NetworkObject localPlayerObject = NetworkManager.Singleton.SpawnManager.GetLocalPlayerObject(); if ((Object)(object)localPlayerObject != (Object)null) { SetPlayer(((Component)localPlayerObject).gameObject); return; } } NetworkObject[] array = Object.FindObjectsByType((FindObjectsSortMode)0); foreach (NetworkObject val in array) { if (val.IsOwner && ((Object)(object)((Component)val).GetComponent() != (Object)null || (Object)(object)((Component)val).GetComponentInChildren() != (Object)null)) { SetPlayer(((Component)val).gameObject); break; } } } private void SetPlayer(GameObject obj) { _localPlayer = obj; _cc = obj.GetComponent(); _rb = obj.GetComponent(); _playerLook = obj.GetComponentInChildren(); _playerComponent = obj.GetComponent() ?? obj.GetComponentInParent() ?? obj.GetComponentInChildren(); if ((Object)(object)_playerComponent != (Object)null) { Type type = ((object)_playerComponent).GetType(); _fiPositionNow = type.GetField("iPositionNow", BindingFlags.Instance | BindingFlags.NonPublic); _fiPositionNext = type.GetField("iPositionNext", BindingFlags.Instance | BindingFlags.NonPublic); ((BaseUnityPlugin)this).Logger.LogInfo((object)("[NoclipMod] Player component found on: " + ((Object)((Component)_playerComponent).gameObject).name)); ((BaseUnityPlugin)this).Logger.LogInfo((object)("[NoclipMod] iPositionNow field: " + ((_fiPositionNow != null) ? "OK" : "NOT FOUND"))); ((BaseUnityPlugin)this).Logger.LogInfo((object)("[NoclipMod] iPositionNext field: " + ((_fiPositionNext != null) ? "OK" : "NOT FOUND"))); } else { ((BaseUnityPlugin)this).Logger.LogWarning((object)"[NoclipMod] Player component not found — snapback patch inactive."); } } private void DisableLogic() { _disabledScripts.Clear(); MonoBehaviour[] componentsInChildren = _localPlayer.GetComponentsInChildren(); foreach (MonoBehaviour val in componentsInChildren) { if (!((Object)(object)val == (Object)null) && !((Object)(object)val == (Object)(object)this) && ((Behaviour)val).enabled && !(val is PlayerLook)) { string text = ((object)val).GetType().Name.ToLower(); string text2 = ((object)val).GetType().Namespace?.ToLower() ?? ""; bool flag = text.Contains("move") || text.Contains("motor") || text.Contains("walker") || text2.Contains("movement"); bool flag2 = (text.Contains("networktransform") || text.Contains("synctransform")) && !text.Contains("clientnetworktransform"); bool flag3 = !text.Equals("networkobject") && !text2.Contains(".ui") && !text.Contains("ui") && !text.Contains("hud") && !text.Contains("display") && !text.Contains("matrix"); if ((flag || flag2) && flag3) { ((Behaviour)val).enabled = false; _disabledScripts.Add(val); } } } if ((Object)(object)_cc != (Object)null) { _wasCcEnabled = ((Collider)_cc).enabled; ((Collider)_cc).enabled = false; } if ((Object)(object)_rb != (Object)null) { _wasRbKinematic = _rb.isKinematic; _rb.isKinematic = true; } } private void RestoreLogic() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_cc != (Object)null) { ((Collider)_cc).enabled = _wasCcEnabled; } if ((Object)(object)_rb != (Object)null) { _rb.isKinematic = _wasRbKinematic; if (!_wasRbKinematic) { _rb.linearVelocity = Vector3.zero; } } foreach (MonoBehaviour disabledScript in _disabledScripts) { if ((Object)(object)disabledScript != (Object)null) { ((Behaviour)disabledScript).enabled = true; } } _disabledScripts.Clear(); } private void ToggleNoclip() { FindPlayer(); if (!((Object)(object)_localPlayer == (Object)null)) { _noclipActive = !_noclipActive; if (_noclipActive) { DisableLogic(); } else { ((MonoBehaviour)this).StartCoroutine(ExitNoclipRoutine()); } } } private IEnumerator ExitNoclipRoutine() { Vector3 exitLocalPos = _localPlayer.transform.localPosition; if (_fiPositionNow != null && _fiPositionNext != null && (Object)(object)_playerComponent != (Object)null) { _fiPositionNow.SetValue(_playerComponent, exitLocalPos); _fiPositionNext.SetValue(_playerComponent, exitLocalPos); ((BaseUnityPlugin)this).Logger.LogInfo((object)$"[NoclipMod] Patched interpolation fields to {exitLocalPos}"); } else { ((BaseUnityPlugin)this).Logger.LogWarning((object)"[NoclipMod] Could not patch interpolation fields — snapback may occur."); } Physics.SyncTransforms(); yield return (object)new WaitForFixedUpdate(); RestoreLogic(); } private void HandleNoclipCamera() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: 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_0046: 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_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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_playerLook == (Object)null) && Mouse.current != null) { Vector2 mouseDelta = _playerLook.GetMouseDelta(); Transform transform = _localPlayer.transform; transform.localRotation *= Quaternion.Euler(0f, mouseDelta.x, 0f); Vector2 xLookBounds = _playerLook.XLookBounds; _playerLook.XLookRotation = Mathf.Clamp(_playerLook.XLookRotation - mouseDelta.y, xLookBounds.x, xLookBounds.y); } } private void HandleNoclipMovement() { //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_0082: 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_0089: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: 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_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_localPlayer == (Object)null)) { Transform val = (((Object)(object)_playerLook != (Object)null) ? ((Component)_playerLook.Camera).transform : _localPlayer.transform); float num = _flySpeed; if (((ButtonControl)Keyboard.current.leftShiftKey).isPressed) { num *= _fastFlyMult; } Vector3 val2 = Vector3.zero; if (((ButtonControl)Keyboard.current.wKey).isPressed) { val2 += val.forward; } if (((ButtonControl)Keyboard.current.sKey).isPressed) { val2 -= val.forward; } if (((ButtonControl)Keyboard.current.dKey).isPressed) { val2 += val.right; } if (((ButtonControl)Keyboard.current.aKey).isPressed) { val2 -= val.right; } if (((ButtonControl)Keyboard.current.spaceKey).isPressed) { val2 += Vector3.up; } if (((ButtonControl)Keyboard.current.leftCtrlKey).isPressed) { val2 -= Vector3.up; } Transform transform = _localPlayer.transform; transform.position += val2 * num * Time.deltaTime; } } } }