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 SimCruiser G25 v1.5.0
SimCruiser-G25.dll
Decompiled 2 months agousing 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 GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Utilities; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SimCruiser-G25")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+fdc72aef662d7c66ed76e0c676e106aa0cf6ee29")] [assembly: AssemblyProduct("SimCruiser-G25")] [assembly: AssemblyTitle("SimCruiser-G25")] [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.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] [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] [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 SimCruiser_G25 { [BepInPlugin("com.BigSaltyBeans.SimCruiser_G25", "Sim Cruiser G25", "1.2.0")] public class SimCruiser_G25 : BaseUnityPlugin { private const string GUID = "com.BigSaltyBeans.SimCruiser_G25"; private const string NAME = "Sim Cruiser G25"; private const string VERSION = "1.2.0"; private void Awake() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "com.BigSaltyBeans.SimCruiser_G25"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Patched Sim Cruiser G25"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "SimCruiser-G25"; public const string PLUGIN_NAME = "SimCruiser-G25"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace SimCruiser_G25.Patches { [HarmonyPatch(typeof(StartOfRound), "Update")] internal class AddWheelBindings { private static bool added; private static void Postfix() { if (added) { return; } PlayerControllerB val = StartOfRound.Instance?.localPlayerController; if ((Object)(object)val == (Object)null) { return; } InputActionAsset asset = val.playerActions.asset; if ((Object)(object)asset == (Object)null) { Debug.LogError((object)"Fatal PlayerActions is null :("); return; } InputActionAsset actions = InputSystem.actions; if ((Object)(object)actions == (Object)null) { Debug.LogError((object)"Fatal PlayerActions is null :("); return; } ApplyBindings(asset); ApplyBindings(actions); added = true; Debug.Log((object)"Added G25's input bindings! :D"); } private static void ApplyBindings(InputActionAsset actions) { //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_022c: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0287: 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_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02e7: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) InputActionMap val = actions.FindActionMap("Movement", false); if (val == null) { Debug.LogError((object)"Fatal Movement Actions is null :("); return; } bool enabled = val.enabled; if (enabled) { val.Disable(); } InputAction val2 = actions.FindAction("Move", false); if (val2 == null) { Debug.LogError((object)"Fatal Move Action in PlayerActions is null :("); return; } InputAction val3 = actions.FindAction("Jump", false); if (val3 == null) { Debug.LogError((object)"Fatal Jump Action in PlayerActions is null :("); return; } InputAction val4 = actions.FindAction("Interact", false); if (val4 == null) { Debug.LogError((object)"Fatal Interact Action in PlayerActions is null :("); return; } InputAction val5 = actions.FindAction("Look", false); if (val5 == null) { Debug.LogError((object)"Fatal Look Action in PlayerActions is null :("); return; } InputAction val6 = InputActionSetupExtensions.AddAction(val, "DriveGear", (InputActionType)1, (string)null, (string)null, (string)null, (string)null, (string)null); InputAction val7 = InputActionSetupExtensions.AddAction(val, "ReverseGear", (InputActionType)1, (string)null, (string)null, (string)null, (string)null, (string)null); Enumerator<InputDevice> enumerator = InputSystem.devices.GetEnumerator(); try { while (enumerator.MoveNext()) { InputDevice current = enumerator.Current; Debug.Log((object)((InputControl)current).path); } } finally { ((IDisposable)enumerator/*cast due to .constrained prefix*/).Dispose(); } Enumerator<InputDevice> enumerator2 = InputSystem.devices.GetEnumerator(); try { while (enumerator2.MoveNext()) { InputDevice current2 = enumerator2.Current; if (!((InputControl)current2).displayName.ToLower().Contains("g25")) { continue; } Debug.Log((object)("Found g25: " + ((InputControl)current2).name)); Enumerator<InputControl> enumerator3 = current2.allControls.GetEnumerator(); try { while (enumerator3.MoveNext()) { InputControl current3 = enumerator3.Current; Debug.Log((object)current3.path); } } finally { ((IDisposable)enumerator3/*cast due to .constrained prefix*/).Dispose(); } } } finally { ((IDisposable)enumerator2/*cast due to .constrained prefix*/).Dispose(); } BindingSyntax val8 = InputActionSetupExtensions.AddBinding(val5, "<HID::G25 Racing Wheel>/hat", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithProcessor("scaleVector2(x=100,y=100)"); val8 = InputActionSetupExtensions.AddBinding(val2, "<HID::G25 Racing Wheel>/stick", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithProcessor("scaleVector2(x=1,y=1)"); CompositeSyntax val9 = InputActionSetupExtensions.AddCompositeBinding(val2, "2DVector", (string)null, (string)null); val9 = ((CompositeSyntax)(ref val9)).With("Up", "<HID::G25 Racing Wheel>/button16", (string)null, (string)null); val9 = ((CompositeSyntax)(ref val9)).With("Down", "<HID::G25 Racing Wheel>/button18", (string)null, (string)null); val9 = ((CompositeSyntax)(ref val9)).With("Left", "<HID::G25 Racing Wheel>/button17", (string)null, (string)null); ((CompositeSyntax)(ref val9)).With("Right", "<HID::G25 Racing Wheel>/button19", (string)null, (string)null); val8 = InputActionSetupExtensions.AddBinding(val3, "<HID::G25 Racing Wheel>/button8", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithInteraction("press"); val8 = InputActionSetupExtensions.AddBinding(val4, "<HID::G25 Racing Wheel>/button7", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithInteraction("press"); InputActionSetupExtensions.AddBinding(val6, "<HID::G25 Racing Wheel>/button11", (string)null, (string)null, (string)null); InputActionSetupExtensions.AddBinding(val7, "<HID::G25 Racing Wheel>/button12", (string)null, (string)null, (string)null); if (enabled) { val.Enable(); } } } [HarmonyPatch(typeof(VehicleController), "GetVehicleInput")] public class CruiserInputRewrite { private static bool Prefix(VehicleController __instance) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Invalid comparison between Unknown and I4 if (__instance.localPlayerInControl) { if (__instance.testingVehicleInEditor) { __instance.moveInputVector = __instance.input.actions.FindAction("Move", false).ReadValue<Vector2>(); } else { __instance.moveInputVector = InputSystem.actions.FindAction("Move", false).ReadValue<Vector2>(); } __instance.steeringInput = Mathf.Clamp(__instance.moveInputVector.x * 3f, -3f, 3f); Debug.Log((object)__instance.steeringInput); if (Mathf.Abs(__instance.moveInputVector.x) > 0.1f) { __instance.steeringWheelAudio.volume = Mathf.Lerp(__instance.steeringWheelAudio.volume, Mathf.Abs(__instance.moveInputVector.x), 5f * Time.deltaTime); } else { __instance.steeringWheelAudio.volume = Mathf.Lerp(__instance.steeringWheelAudio.volume, 0f, 5f * Time.deltaTime); } __instance.steeringAnimValue = __instance.moveInputVector.x; __instance.drivePedalPressed = __instance.moveInputVector.y > 0.1f; __instance.brakePedalPressed = __instance.moveInputVector.y < -0.1f; int num = 3; if (InputSystem.actions.FindAction("DriveGear", false).IsPressed()) { num = 1; } else if (InputSystem.actions.FindAction("ReverseGear", false).IsPressed()) { num = 2; } if ((int)__instance.gear != num) { __instance.ShiftToGearAndSync(num); } } return false; } } [HarmonyPatch(typeof(VehicleController), "SetCarEffects")] public class SetNewSteeringAnim { private static bool Prefix(VehicleController __instance, float setSteering) { //IL_00f5: 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_0144: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Invalid comparison between Unknown and I4 //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Invalid comparison between Unknown and I4 //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Unknown result type (might be due to invalid IL or missing references) //IL_062e: Unknown result type (might be due to invalid IL or missing references) //IL_066f: Unknown result type (might be due to invalid IL or missing references) //IL_06de: Unknown result type (might be due to invalid IL or missing references) //IL_06ae: Unknown result type (might be due to invalid IL or missing references) __instance.steeringWheelAnimFloat = Mathf.Clamp(__instance.steeringWheelAnimFloat + setSteering * __instance.steeringWheelTurnSpeed * Time.deltaTime / 6f, -2.4f, 2.4f); float num = Mathf.Clamp((__instance.steeringWheelAnimFloat + 2.4f) / 4.8f, 0f, 1f); float num2 = Mathf.Clamp((__instance.steeringWheelAnimFloat + 2.4f) / 4.8f, 0.01f, 0.99f) - __instance.steeringWheelAnimator.GetFloat("steeringWheelTurnSpeed"); __instance.steeringWheelAnimator.SetFloat("steeringWheelTurnSpeed", num); if ((Object)(object)__instance.currentDriver != (Object)null) { __instance.currentDriver.playerBodyAnimator.SetFloat("animationSpeed", __instance.currentDriver.playerBodyAnimator.GetFloat("animationSpeed") + num2 * 2f); } ((Component)__instance.leftWheelMesh).transform.localEulerAngles = new Vector3(((Component)__instance.leftWheelMesh).transform.localEulerAngles.x, __instance.steeringWheelAnimFloat * 50f, 0f); __instance.MatchWheelMeshToCollider(__instance.leftWheelMesh, __instance.FrontLeftWheel); ((Component)__instance.rightWheelMesh).transform.localEulerAngles = new Vector3(((Component)__instance.rightWheelMesh).transform.localEulerAngles.x, __instance.steeringWheelAnimFloat * 50f, 0f); __instance.MatchWheelMeshToCollider(__instance.rightWheelMesh, __instance.FrontRightWheel); __instance.MatchWheelMeshToCollider(__instance.backLeftWheelMesh, __instance.BackLeftWheel); __instance.MatchWheelMeshToCollider(__instance.backRightWheelMesh, __instance.BackRightWheel); if ((int)__instance.gear == 2) { __instance.gearStickAnimValue = Mathf.MoveTowards(__instance.gearStickAnimValue, 0.5f, 15f * Time.deltaTime * (Time.realtimeSinceStartup - __instance.timeAtLastGearShift)); } else if ((int)__instance.gear == 3) { __instance.gearStickAnimValue = Mathf.MoveTowards(__instance.gearStickAnimValue, 1f, 15f * Time.deltaTime * (Time.realtimeSinceStartup - __instance.timeAtLastGearShift)); } else { __instance.gearStickAnimValue = Mathf.MoveTowards(__instance.gearStickAnimValue, 0f, 15f * Time.deltaTime * (Time.realtimeSinceStartup - __instance.timeAtLastGearShift)); } __instance.gearStickAnimator.SetFloat("gear", Mathf.Clamp(__instance.gearStickAnimValue, 0.01f, 0.99f)); if (__instance.EngineRPM < -5f) { if (!__instance.backLightsOn) { __instance.backLightsOn = true; ((Renderer)__instance.backLightsMesh).material = __instance.backLightOnMat; __instance.backLightsContainer.SetActive(true); } } else if (__instance.backLightsOn) { __instance.backLightsOn = false; ((Renderer)__instance.backLightsMesh).material = __instance.headlightsOffMat; __instance.backLightsContainer.SetActive(false); } __instance.SetVehicleAudioProperties(__instance.extremeStressAudio, __instance.underExtremeStress, 0.2f, 1f, 3f, true, 1f); if (((NetworkBehaviour)__instance).IsOwner) { if (!__instance.syncedExtremeStress && __instance.underExtremeStress && __instance.extremeStressAudio.volume > 0.35f) { __instance.syncedExtremeStress = true; __instance.SyncExtremeStressServerRpc(__instance.underExtremeStress); } else if (__instance.syncedExtremeStress && !__instance.underExtremeStress && __instance.extremeStressAudio.volume < 0.5f) { __instance.syncedExtremeStress = false; __instance.SyncExtremeStressServerRpc(__instance.underExtremeStress); } } __instance.SetRadioValues(); float num3 = Vector3.Dot(Vector3.Normalize(__instance.mainRigidbody.velocity * 1000f), ((Component)__instance).transform.forward); bool flag = num3 > -0.6f && num3 < 0.4f && (((Vector3)(ref __instance.averageVelocity)).magnitude > 4f || __instance.EngineRPM > 400f); if ((!__instance.FrontLeftWheel.isGrounded && !__instance.FrontRightWheel.isGrounded) || (!__instance.BackLeftWheel.isGrounded && !__instance.BackRightWheel.isGrounded)) { flag = false; } if (__instance.FrontLeftWheel.motorTorque > 900f && __instance.FrontRightWheel.motorTorque > 900f) { flag = true; num3 = Mathf.Max(num3, 0.8f); if (((Vector3)(ref __instance.averageVelocity)).magnitude > 8f && !__instance.tireSparks.isPlaying) { __instance.tireSparks.Play(true); } } else { __instance.tireSparks.Stop(true, (ParticleSystemStopBehavior)1); } __instance.SetVehicleAudioProperties(__instance.skiddingAudio, flag, 0f, num3, 3f, true, 1f); __instance.carEngine2AudioActive = __instance.ignitionStarted; float num4 = Mathf.Abs(__instance.EngineRPM); float num5 = Mathf.Clamp(num4 / __instance.engineIntensityPercentage, 0.7f, 1.5f); __instance.SetVehicleAudioProperties(__instance.engineAudio2, __instance.carEngine2AudioActive, 0.7f, num5, 3f, false, 0.5f); num5 = Mathf.Clamp(num4 / __instance.engineIntensityPercentage, 0.65f, 1.15f); float num6 = num5; if (!__instance.ignitionStarted) { num6 = 1f; } __instance.SetVehicleAudioProperties(__instance.engineAudio1, __instance.carEngine1AudioActive, 0.7f, num6, 2f, false, 0.7f); if (__instance.engineAudio1.volume > 0.3f && __instance.engineAudio1.isPlaying && Time.realtimeSinceStartup - __instance.timeAtLastEngineAudioPing > 2f) { __instance.timeAtLastEngineAudioPing = Time.realtimeSinceStartup; if (__instance.EngineRPM > 130f) { RoundManager.Instance.PlayAudibleNoise(((Component)__instance.engineAudio1).transform.position, 32f, 0.75f, 0, false, 2692); } if (__instance.EngineRPM > 60f) { RoundManager.Instance.PlayAudibleNoise(((Component)__instance.engineAudio1).transform.position, 25f, 0.6f, 0, false, 2692); } else if (!__instance.ignitionStarted) { RoundManager.Instance.PlayAudibleNoise(((Component)__instance.engineAudio1).transform.position, 15f, 0.6f, 0, false, 2692); } else { RoundManager.Instance.PlayAudibleNoise(((Component)__instance.engineAudio1).transform.position, 11f, 0.5f, 0, false, 2692); } } __instance.carRollingAudioActive = num4 > 10f; num5 = Mathf.Clamp(num4 / (__instance.engineIntensityPercentage * 0.35f), 0f, 1f); __instance.SetVehicleAudioProperties(__instance.rollingAudio, __instance.carRollingAudioActive, 0f, num5, 5f, true, 1f); __instance.turbulenceAudio.volume = Mathf.Lerp(__instance.turbulenceAudio.volume, Mathf.Min(1f, __instance.turbulenceAmount), 10f * Time.deltaTime); __instance.turbulenceAmount = Mathf.Max(__instance.turbulenceAmount - Time.deltaTime, 0f); if (__instance.turbulenceAudio.volume > 0.02f) { if (!__instance.turbulenceAudio.isPlaying) { __instance.turbulenceAudio.Play(); } } else if (__instance.turbulenceAudio.isPlaying) { __instance.turbulenceAudio.Stop(); } return false; } } }