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 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 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 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 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, "/hat", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithProcessor("scaleVector2(x=100,y=100)"); val8 = InputActionSetupExtensions.AddBinding(val2, "/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", "/button16", (string)null, (string)null); val9 = ((CompositeSyntax)(ref val9)).With("Down", "/button18", (string)null, (string)null); val9 = ((CompositeSyntax)(ref val9)).With("Left", "/button17", (string)null, (string)null); ((CompositeSyntax)(ref val9)).With("Right", "/button19", (string)null, (string)null); val8 = InputActionSetupExtensions.AddBinding(val3, "/button8", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithInteraction("press"); val8 = InputActionSetupExtensions.AddBinding(val4, "/button7", (string)null, (string)null, (string)null); ((BindingSyntax)(ref val8)).WithInteraction("press"); InputActionSetupExtensions.AddBinding(val6, "/button11", (string)null, (string)null, (string)null); InputActionSetupExtensions.AddBinding(val7, "/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(); } else { __instance.moveInputVector = InputSystem.actions.FindAction("Move", false).ReadValue(); } __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; } } }