using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BoneLib;
using BoneLib.BoneMenu;
using FallBoost;
using Il2CppSLZ.Marrow;
using Il2CppSystem.Collections.Generic;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.XR;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(FallBoostMod), "Fall Boost", "1.0.0", "TonPseudo", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("FallBoost")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("FallBoost")]
[assembly: AssemblyTitle("FallBoost")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace FallBoost
{
public class FallBoostMod : MelonMod
{
private enum BoostBind
{
LeftStickClick,
RightStickClick,
LeftTrigger,
RightTrigger,
LeftGrip,
RightGrip
}
private static MelonPreferences_Category _category;
private static MelonPreferences_Entry<bool> _enabled;
private static MelonPreferences_Entry<float> _boostSpeed;
private static MelonPreferences_Entry<string> _bindName;
private BoostBind _currentBind;
private bool _buttonWasPressedLastFrame;
private bool _menuBuilt;
public override void OnInitializeMelon()
{
_category = MelonPreferences.CreateCategory("FallBoost");
_enabled = _category.CreateEntry<bool>("Enabled", true, (string)null, "Active ou désactive le mod Fall Boost", false, false, (ValueValidator)null, (string)null);
_boostSpeed = _category.CreateEntry<float>("BoostSpeed", 10f, (string)null, "Vitesse verticale ajoutée vers le bas à chaque pression (m/s)", false, false, (ValueValidator)null, (string)null);
_bindName = _category.CreateEntry<string>("BindButton", BoostBind.LeftStickClick.ToString(), (string)null, "Bouton manette qui déclenche le boost de chute", false, false, (ValueValidator)null, (string)null);
if (!Enum.TryParse<BoostBind>(_bindName.Value, out _currentBind))
{
_currentBind = BoostBind.LeftStickClick;
}
Hooking.OnUIRigCreated += SetupBoneMenu;
MelonLogger.Msg("[FallBoost] Mod chargé. Bind=" + _currentBind.ToString() + " Speed=" + _boostSpeed.Value + " m/s");
}
private void SetupBoneMenu()
{
//IL_001a: 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_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
if (!_menuBuilt)
{
_menuBuilt = true;
Page obj = Page.Root.CreatePage("Fall Boost", Color.cyan, 0, true);
obj.CreateBool("Mod active", Color.green, _enabled.Value, (Action<bool>)delegate(bool val)
{
_enabled.Value = val;
});
obj.CreateFloat("Vitesse du boost (m/s)", Color.white, _boostSpeed.Value, 1f, 1f, 40f, (Action<float>)delegate(float val)
{
_boostSpeed.Value = val;
});
obj.CreateEnum("Bouton de declenchement", Color.white, (Enum)_currentBind, (Action<Enum>)delegate(Enum val)
{
_currentBind = (BoostBind)(object)val;
_bindName.Value = _currentBind.ToString();
});
MelonLogger.Msg("[FallBoost] Page BoneMenu créée.");
}
}
public override void OnUpdate()
{
if (_enabled.Value)
{
bool flag = IsBindPressed(_currentBind);
if (flag && !_buttonWasPressedLastFrame)
{
ApplyBoost();
}
_buttonWasPressedLastFrame = flag;
}
}
private static InputDeviceCharacteristics GetHandCharacteristics(BoostBind bind)
{
switch (bind)
{
case BoostBind.LeftStickClick:
case BoostBind.LeftTrigger:
case BoostBind.LeftGrip:
return (InputDeviceCharacteristics)256;
default:
return (InputDeviceCharacteristics)512;
}
}
private static InputFeatureUsage<bool> GetUsageForBind(BoostBind bind)
{
switch (bind)
{
case BoostBind.LeftStickClick:
case BoostBind.RightStickClick:
return CommonUsages.primary2DAxisClick;
case BoostBind.LeftTrigger:
case BoostBind.RightTrigger:
return CommonUsages.triggerButton;
default:
return CommonUsages.gripButton;
}
}
private bool IsBindPressed(BoostBind bind)
{
//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_0016: 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_0024: 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)
InputDeviceCharacteristics handCharacteristics = GetHandCharacteristics(bind);
InputFeatureUsage<bool> usageForBind = GetUsageForBind(bind);
List<InputDevice> val = new List<InputDevice>();
InputDevices.GetDevicesWithCharacteristics((InputDeviceCharacteristics)(0x40 | handCharacteristics), val);
for (int i = 0; i < val.Count; i++)
{
InputDevice val2 = val[i];
if (((InputDevice)(ref val2)).isValid)
{
bool flag = false;
if (((InputDevice)(ref val2)).TryGetFeatureValue(usageForBind, ref flag) && flag)
{
return true;
}
}
}
return false;
}
private void ApplyBoost()
{
//IL_001a: 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_002e: 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_0058: Unknown result type (might be due to invalid IL or missing references)
PhysicsRig physicsRig = Player.PhysicsRig;
if ((Object)(object)physicsRig == (Object)null)
{
MelonLogger.Warning("[FallBoost] PhysicsRig introuvable, boost ignoré.");
return;
}
Vector3 val = Vector3.down * _boostSpeed.Value;
Rigidbody rbFeet = physicsRig.rbFeet;
Rigidbody rbKnee = physicsRig.rbKnee;
if ((Object)(object)rbFeet != (Object)null)
{
rbFeet.AddForce(val, (ForceMode)2);
}
if ((Object)(object)rbKnee != (Object)null)
{
rbKnee.AddForce(val, (ForceMode)2);
}
MelonLogger.Msg("[FallBoost] Boost déclenché (" + _boostSpeed.Value + " m/s, bind=" + _currentBind.ToString() + ").");
}
}
}