using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("Parachute Map")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Go Go Gadget Parachue Map")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.2.0")] [assembly: AssemblyProduct("Parachute Map")] [assembly: AssemblyTitle("Parachute Map")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.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 BigWalkParachuteMod { [BepInPlugin("com.gogogadgetjustice.bigwalk.parachute", "BigWalk Parachute Mod", "1.0.0")] public class ParachuteMod : BasePlugin { internal static ManualLogSource Logger; public static ConfigEntry ParachuteToggleKey; public static ConfigEntry ConfigTerminalDescentSpeed; public static ConfigEntry ConfigDeployHeightThreshold; public static ConfigEntry EnableAirHorizontalGlideBoost; public static ConfigEntry SoftLandingGraceSeconds; public override void Load() { //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown Logger = ((BasePlugin)this).Log; ParachuteToggleKey = ((BasePlugin)this).Config.Bind("Controls", "Toggle Key", (KeyCode)120, "Manual fallback bypass trigger button."); ConfigTerminalDescentSpeed = ((BasePlugin)this).Config.Bind("Physics Tuning", "Terminal Descent Speed", -2.5f, "Maximum velocity allowed while parachuting."); ConfigDeployHeightThreshold = ((BasePlugin)this).Config.Bind("Safety Check", "Grounded Height Distance", 1.5f, "Auto-shutoff ground buffer proximity threshold."); EnableAirHorizontalGlideBoost = ((BasePlugin)this).Config.Bind("Features", "Air Glide Drift Control", true, "Softens air friction for drifting adjustments."); SoftLandingGraceSeconds = ((BasePlugin)this).Config.Bind("Physics Tuning", "Soft Landing Grace Seconds", 0.5f, "How long ignoreFalling stays enabled after the parachute is lowered (prevents impact stumbles)."); ClassInjector.RegisterTypeInIl2Cpp(); GameObject val = new GameObject("ParachuteModPhysicsHost") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); val.AddComponent(); Logger.LogInfo((object)"=================================================="); Logger.LogInfo((object)" Big Walk Parachute Mod Loaded Successfully! "); Logger.LogInfo((object)"=================================================="); } } public class ParachutePhysicsController : MonoBehaviour { private bool _manualBypassActive = false; private Rigidbody _targetedPlayerRb; private PlayerFaller _targetedPlayerFaller; private float _searchTimer = 0f; private KeyCode _toggleButton; private float _terminalFallLimit; private float _groundCheckDistance; private bool _softLandingEngaged = false; private bool _isMapDeployedOverhead = false; private float _softLandingGraceTimer = 0f; private Prop _cachedHeldProp; private float _propRefreshTimer = 0f; private const float PropRefreshInterval = 0.5f; public ParachutePhysicsController(IntPtr ptr) : base(ptr) { } public void Start() { //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) _toggleButton = ParachuteMod.ParachuteToggleKey.Value; _terminalFallLimit = ParachuteMod.ConfigTerminalDescentSpeed.Value; _groundCheckDistance = ParachuteMod.ConfigDeployHeightThreshold.Value; LocateActivePlayerRigidbody(); } public void Update() { //IL_0002: 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_0031: Expected O, but got Unknown if (Input.GetKeyDown(_toggleButton)) { _manualBypassActive = !_manualBypassActive; ManualLogSource logger = ParachuteMod.Logger; bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(39, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("[ParachuteMod] Manual hotkey override: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(_manualBypassActive); } logger.LogInfo(val); } if ((Object)(object)_targetedPlayerRb == (Object)null) { _searchTimer -= Time.deltaTime; if (_searchTimer <= 0f) { LocateActivePlayerRigidbody(); _searchTimer = 1.5f; } } } public void FixedUpdate() { if ((Object)(object)_targetedPlayerRb == (Object)null) { return; } UpdateMapState(); if (_manualBypassActive || _isMapDeployedOverhead) { _softLandingGraceTimer = ParachuteMod.SoftLandingGraceSeconds.Value; EngageSoftLanding(); if (!IsPlayerGrounded()) { ApplyDescentClamp(); } } else if (_softLandingGraceTimer > 0f) { _softLandingGraceTimer -= Time.fixedDeltaTime; } else { DisengageSoftLanding(); } } private void ApplyDescentClamp() { //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_000d: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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) //IL_004d: 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_006d: 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) //IL_0074: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009f: 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) Vector3 linearVelocity = _targetedPlayerRb.linearVelocity; if (linearVelocity.y < _terminalFallLimit) { linearVelocity.y = _terminalFallLimit; } if (ParachuteMod.EnableAirHorizontalGlideBoost.Value) { Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(linearVelocity.x, 0f, linearVelocity.z); Vector3 val2 = ((Component)_targetedPlayerRb).transform.forward * 0.15f; val += val2; float num = 6f; if (((Vector3)(ref val)).magnitude > num) { val = ((Vector3)(ref val)).normalized * num; } linearVelocity.x = val.x; linearVelocity.z = val.z; } _targetedPlayerRb.linearVelocity = linearVelocity; } private void EngageSoftLanding() { if (!_softLandingEngaged && _targetedPlayerFaller != null) { _targetedPlayerFaller.ignoreFalling = true; _softLandingEngaged = true; } } private void DisengageSoftLanding() { if (_softLandingEngaged) { if (_targetedPlayerFaller != null) { _targetedPlayerFaller.ignoreFalling = false; } _softLandingEngaged = false; } } private void UpdateMapState() { //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) _isMapDeployedOverhead = false; if ((Object)(object)_targetedPlayerRb == (Object)null) { return; } _propRefreshTimer -= Time.fixedDeltaTime; if ((Object)(object)_cachedHeldProp == (Object)null || _propRefreshTimer <= 0f) { _propRefreshTimer = 0.5f; _cachedHeldProp = null; Prop[] array = Il2CppArrayBase.op_Implicit(((Component)_targetedPlayerRb).GetComponentsInChildren(true)); Prop[] array2 = array; foreach (Prop val in array2) { if ((Object)(object)val != (Object)null && (Object)(object)((Component)val).gameObject != (Object)null) { string name = ((Object)((Component)val).gameObject).name; if (name.Contains("Map") || name.Contains("Folding")) { _cachedHeldProp = val; break; } } } } if ((Object)(object)_cachedHeldProp != (Object)null && (Object)(object)((Component)_cachedHeldProp).gameObject != (Object)null) { float num = ((Component)_cachedHeldProp).transform.position.y - ((Component)_targetedPlayerRb).transform.position.y; if (num > 0.8f) { _isMapDeployedOverhead = true; } } } private void LocateActivePlayerRigidbody() { //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown Rigidbody[] array = Il2CppArrayBase.op_Implicit(Object.FindObjectsOfType()); Rigidbody[] array2 = array; bool flag = default(bool); foreach (Rigidbody val in array2) { if ((Object)(object)val != (Object)null && (Object)(object)((Component)val).gameObject != (Object)null && ((Object)((Component)val).gameObject).name.StartsWith("PlayerCharacter ")) { _targetedPlayerRb = val; _targetedPlayerFaller = ((Component)val).GetComponent() ?? ((Component)val).GetComponentInParent() ?? ((Component)val).GetComponentInChildren(); ManualLogSource logger = ParachuteMod.Logger; BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(34, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("[ParachuteMod] Bound to player: '"); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(((Object)((Component)val).gameObject).name); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("'"); } logger.LogInfo(val2); break; } } } private bool IsPlayerGrounded() { //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_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_0037: 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_0039: 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_0067: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_targetedPlayerRb == (Object)null) { return true; } Vector3 val = _targetedPlayerRb.position + Vector3.up * 0.2f; RaycastHit[] array = Il2CppArrayBase.op_Implicit((Il2CppArrayBase)(object)Physics.RaycastAll(val, Vector3.down, _groundCheckDistance + 0.2f)); RaycastHit[] array2 = array; for (int i = 0; i < array2.Length; i++) { RaycastHit val2 = array2[i]; if ((Object)(object)((RaycastHit)(ref val2)).collider != (Object)null && !((Component)((RaycastHit)(ref val2)).collider).transform.IsChildOf(((Component)_targetedPlayerRb).transform)) { return true; } } return false; } } }