Decompiled source of CarJack v1.7.7
CarJack.Common.dll
Decompiled 4 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using CommonAPI; using DG.Tweening; using Microsoft.CodeAnalysis; using Reptile; using Rewired; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("CarJack.Common")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+c9cd941543413d478afa4e05fa6b7ea9cde12fd4")] [assembly: AssemblyProduct("CarJack.Common")] [assembly: AssemblyTitle("CarJack.Common")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 CarJack.Common { public class CarAssets { public CarBundle MainBundle; public List<CarBundle> Bundles; public string MainBundlePath; public string AddonBundlePath; public string PluginDirectoryName; public static CarAssets Instance { get; private set; } public CarAssets() { Bundles = new List<CarBundle>(); Instance = this; } public void UnloadAllBundles() { foreach (CarBundle bundle in Bundles) { bundle.Bundle.Unload(true); } Bundles = new List<CarBundle>(); } public void LoadBundles() { MainBundle = new CarBundle(MainBundlePath); Bundles.Add(MainBundle); string[] files = Directory.GetFiles(AddonBundlePath, "*.carbundle", SearchOption.AllDirectories); foreach (string text in files) { if (IsPathInsidePluginFolder(text)) { Debug.LogWarning((object)("CarJack Warning: Skipped loading car bundle \"" + text + "\" because it's in the same folder as the CarJack plugin. Car bundles should be placed in their own subfolder inside the plugins folder.")); continue; } try { CarBundle item = new CarBundle(text); Bundles.Add(item); } catch (Exception arg) { Debug.LogError((object)$"CarJack Error: Failed to load car bundle \"{text}\".\nException:\n{arg}"); } } } private bool IsPathInsidePluginFolder(string path) { if (string.IsNullOrEmpty(PluginDirectoryName)) { return false; } path = CleanPath(path); string value = CleanPath(Path.Combine(AddonBundlePath, PluginDirectoryName)); if (path.StartsWith(value)) { return true; } return false; } private string CleanPath(string path) { path = path.Replace('\\', '/').ToLowerInvariant().Trim(); while (path.EndsWith("/") && path.Length > 1) { path = path.Substring(0, path.Length - 1); } return path; } } [RequireComponent(typeof(AudioSource))] public class CarAudioSource : MonoBehaviour { public enum AudioTypes { Master = 0, Music = 4, SFX = 1, UI = 2, Gameplay = 3, Voices = 5, Ambience = 6 } public AudioTypes AudioType = AudioTypes.Gameplay; private DrivableCar _car; private AudioSource _audioSource; private void Awake() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown _car = ((Component)this).GetComponentInParent<DrivableCar>(); _audioSource = ((Component)this).GetComponent<AudioSource>(); _audioSource.outputAudioMixerGroup = Core.Instance.AudioManager.mixerGroups[(int)AudioType]; Core.OnCoreUpdatePaused += new OnCoreUpdateHandler(OnPause); Core.OnCoreUpdateUnPaused += new OnCoreUpdateUnpausedHandler(OnUnPause); } private void OnDestroy() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown Core.OnCoreUpdatePaused -= new OnCoreUpdateHandler(OnPause); Core.OnCoreUpdateUnPaused -= new OnCoreUpdateUnpausedHandler(OnUnPause); } private void OnPause() { _audioSource.mute = true; } private void OnUnPause() { _audioSource.mute = false; } private void Update() { if (!Core.Instance.IsCorePaused) { CarCamera instance = CarCamera.Instance; if ((Object)(object)instance == (Object)null || (Object)(object)instance.Target != (Object)(object)_car) { _audioSource.spatialBlend = 1f; } else { _audioSource.spatialBlend = 0f; } } } } public class CarBundle { public string Name; public AssetBundle Bundle; public CarBundle(string path) { Name = Path.GetFileNameWithoutExtension(path); Bundle = AssetBundle.LoadFromFile(path); if ((Object)(object)Bundle == (Object)null) { throw new IOException("AssetBundle.LoadFromFile returned null!"); } } } public class CarCamera : MonoBehaviour { public static bool Enabled = true; public float Radius = 0.1f; public float MaxLerpSpeed = 5f; public float MaxLerpSpeedJoystick = 2f; public float FreeCameraTimer = 1f; public LayerMask ObstructionMask; public float LerpMultiplier = 0.15f; public float Distance = 7f; public float Height = 2f; public DrivableCar Target; private bool _controller; private float _xAxis; private float _yAxis; private bool _wasLookingBehind; private bool _lookBehind; private float _currentFreeCameraTimer; public static CarCamera Instance { get; private set; } private void Awake() { Instance = this; } private void ResetInputs() { _controller = false; _xAxis = 0f; _yAxis = 0f; _lookBehind = false; } private void PollInputs() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Invalid comparison between Unknown and I4 ResetInputs(); GameInput gameInput = Core.Instance.GameInput; _xAxis = gameInput.GetAxis(13, 0); _yAxis = gameInput.GetAxis(14, 0); _lookBehind = gameInput.GetButtonHeld(12, 0); if ((int)gameInput.GetCurrentControllerType(0) == 2) { _currentFreeCameraTimer = 0f; _controller = true; } if ((_xAxis != 0f || _yAxis != 0f) && !_controller) { _currentFreeCameraTimer = FreeCameraTimer; } } private void Update() { //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: 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_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0256: 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_0269: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020a: 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_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: 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_02b4: 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_02d7: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: 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_03e7: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0328: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_03f8: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) if (!Enabled || Core.Instance.IsCorePaused || (Object)(object)Target == (Object)null) { return; } PollInputs(); float aimSensitivity = Core.Instance.SaveManager.Settings.gameplaySettings.aimSensitivity; bool invertY = Core.Instance.SaveManager.Settings.gameplaySettings.invertY; float num = Mathf.Lerp(0.75f, 1.8f, aimSensitivity); float num2 = MaxLerpSpeed; _currentFreeCameraTimer = Mathf.Max(_currentFreeCameraTimer - Time.deltaTime, 0f); Quaternion val; if (_controller || _currentFreeCameraTimer > 0f) { if (_controller && (_xAxis != 0f || _yAxis != 0f)) { num2 = MaxLerpSpeedJoystick; } val = ((Component)this).transform.rotation; Vector3 eulerAngles = ((Quaternion)(ref val)).eulerAngles; eulerAngles.y += _xAxis * num; eulerAngles.x += _yAxis * num * (float)(invertY ? 1 : (-1)); eulerAngles.z = 0f; eulerAngles.x = ConvertTo180Rotation(eulerAngles.x); eulerAngles.x = Mathf.Max(-80f, eulerAngles.x); eulerAngles.x = Mathf.Min(80f, eulerAngles.x); ((Component)this).transform.rotation = Quaternion.Euler(eulerAngles); } Vector3 velocity = Target.Rigidbody.velocity; if (Target is DrivableChopper) { velocity.y = 0f; } Vector3 normalized = ((Vector3)(ref velocity)).normalized; Quaternion val2 = ((Component)this).transform.rotation; if (((Vector3)(ref normalized)).magnitude > float.Epsilon && !Target.Still) { val2 = Quaternion.LookRotation(normalized, Vector3.up); Vector3 eulerAngles2 = ((Quaternion)(ref val2)).eulerAngles; eulerAngles2.x += Target.ExtraPitch; val2 = Quaternion.Euler(eulerAngles2); } val = Quaternion.Lerp(((Component)this).transform.rotation, val2, Mathf.Min(num2, LerpMultiplier * ((Vector3)(ref velocity)).magnitude) * Time.deltaTime); Vector3 eulerAngles3 = ((Quaternion)(ref val)).eulerAngles; if (_currentFreeCameraTimer <= 0f) { ((Component)this).transform.rotation = Quaternion.Euler(eulerAngles3.x, eulerAngles3.y, 0f); } if (_lookBehind) { ((Component)this).transform.rotation = Quaternion.LookRotation(-((Component)Target).transform.forward, Vector3.up); val = ((Component)this).transform.rotation; Vector3 eulerAngles4 = ((Quaternion)(ref val)).eulerAngles; eulerAngles4.x += Target.ExtraPitch; ((Component)this).transform.rotation = Quaternion.Euler(eulerAngles4); _wasLookingBehind = true; } else if (_wasLookingBehind) { ((Component)this).transform.rotation = Quaternion.LookRotation(((Component)Target).transform.forward, Vector3.up); val = ((Component)this).transform.rotation; Vector3 eulerAngles5 = ((Quaternion)(ref val)).eulerAngles; eulerAngles5.x += Target.ExtraPitch; ((Component)this).transform.rotation = Quaternion.Euler(eulerAngles5); _wasLookingBehind = false; } float num3 = Distance + Target.ExtraDistance; float num4 = Height + Target.ExtraHeight; Vector3 val3 = ((Component)Target).transform.position + num4 * Vector3.up; Vector3 position = val3 - ((Component)this).transform.forward * num3; RaycastHit val4 = default(RaycastHit); if (Physics.Raycast(new Ray(val3, -((Component)this).transform.forward), ref val4, num3 + Radius, LayerMask.op_Implicit(ObstructionMask))) { position = val3 - ((Component)this).transform.forward * (((RaycastHit)(ref val4)).distance - Radius); } ((Component)this).transform.position = position; } private float ConvertTo180Rotation(float rotation) { if (rotation > 180f) { rotation -= 360f; } return rotation; } public void SetTarget(DrivableCar target) { Target = target; } } public class CarController : MonoBehaviour { [CompilerGenerated] private static class <>O { public static OnStageInitializedDelegate <0>__StageManager_OnStageInitialized; } public static ICarConfig Config; public static Action OnPlayerExitingCar; public static Action OnPlayerEnteredCar; public DrivableCar CurrentCar; public CarPassengerSeat CurrentSeat; public static CarController Instance { get; private set; } public static void Initialize(ICarConfig config) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown Config = config; object obj = <>O.<0>__StageManager_OnStageInitialized; if (obj == null) { OnStageInitializedDelegate val = StageManager_OnStageInitialized; <>O.<0>__StageManager_OnStageInitialized = val; obj = (object)val; } StageManager.OnStageInitialized += (OnStageInitializedDelegate)obj; } private static void StageManager_OnStageInitialized() { Create(); CreateResources(); } private static void CreateResources() { Object.Instantiate<GameObject>(CarAssets.Instance.MainBundle.Bundle.LoadAsset<GameObject>("Car Resources")); } public static CarController Create() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return new GameObject("Car Controller").AddComponent<CarController>(); } private void Awake() { Instance = this; } private void Update() { //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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 (!Core.Instance.IsCorePaused && (Object)(object)CurrentCar != (Object)null) { Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); if ((Object)(object)CurrentSeat != (Object)null) { ((Component)currentPlayer).transform.position = ((Component)CurrentSeat).transform.position; } else { ((Component)currentPlayer).transform.position = ((Component)CurrentCar).transform.position; } Vector3 val = ((Component)CurrentCar).transform.forward - Vector3.Project(((Component)CurrentCar).transform.forward, Vector3.up); Vector3 normalized = ((Vector3)(ref val)).normalized; currentPlayer.SetRotHard(Quaternion.LookRotation(normalized, Vector3.up)); UpdatePhoneInCar(); } } private void UpdatePhoneInCar() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Invalid comparison between Unknown and I4 //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Invalid comparison between Unknown and I4 GameInput gameInput = Core.Instance.GameInput; Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); if (currentPlayer.phone.IsOn) { currentPlayer.phone.PhoneUpdate(); } else if ((int)gameInput.GetCurrentControllerType(0) == 0 && CurrentCar.Driving) { if (gameInput.GetButtonNew(17, 0) && !currentPlayer.IsBusyWithSequence() && !currentPlayer.phoneLocked && currentPlayer.phone.m_PhoneAllowed && ((int)currentPlayer.phone.state == 0 || (int)currentPlayer.phone.state == 1 || (int)currentPlayer.phone.state == 3)) { currentPlayer.phone.audioManager.PlaySfxGameplay((SfxCollectionID)23, (AudioClipID)284, 0f); currentPlayer.phone.TurnOn(); } } else { currentPlayer.phone.PhoneUpdate(); } } private CarCamera MakeCamera(GameObject go) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) CarCamera carCamera = go.AddComponent<CarCamera>(); carCamera.ObstructionMask = LayerMask.op_Implicit(31); return carCamera; } public void EnterCarAsPassenger(DrivableCar car, int seatIndex) { //IL_0080: 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_00c3: 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) if ((Object)(object)CurrentCar != (Object)null) { CurrentCar.Driving = false; CurrentCar.InCar = false; } CarPassengerSeat passengerSeat = car.GetPassengerSeat(seatIndex); CurrentCar = car; CurrentSeat = passengerSeat; car.Driving = false; car.InCar = true; Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); currentPlayer.phone.TurnOff(false); currentPlayer.StopHoldSpraycan(); currentPlayer.characterVisual.SetPhone(false); car.GroundMask = currentPlayer.motor.groundDetection.groundMask; currentPlayer.DisablePlayer(); currentPlayer.CompletelyStop(); ((Component)currentPlayer).gameObject.SetActive(false); ((Component)currentPlayer.interactionCollider).transform.parent = ((Component)passengerSeat).transform; ((Component)currentPlayer.interactionCollider).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); GameplayCamera instance = GameplayCamera.instance; ((Behaviour)instance).enabled = false; CarCamera carCamera = ((Component)instance).GetComponent<CarCamera>(); if ((Object)(object)carCamera == (Object)null) { carCamera = MakeCamera(((Component)instance).gameObject); } carCamera.SetTarget(car); currentPlayer.FlushInput(); passengerSeat.PutInSeat(currentPlayer); OnPlayerEnteredCar?.Invoke(); } public void EnterCar(DrivableCar car) { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)CurrentCar != (Object)null) { CurrentCar.Driving = false; CurrentCar.InCar = false; } CurrentCar = car; CurrentSeat = null; car.Driving = true; car.InCar = true; Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); currentPlayer.phone.TurnOff(false); currentPlayer.StopHoldSpraycan(); currentPlayer.characterVisual.SetPhone(false); car.GroundMask = currentPlayer.motor.groundDetection.groundMask; currentPlayer.DisablePlayer(); currentPlayer.CompletelyStop(); ((Component)currentPlayer).gameObject.SetActive(false); ((Component)currentPlayer.interactionCollider).transform.parent = ((Component)car).transform; ((Component)currentPlayer.interactionCollider).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); GameplayCamera instance = GameplayCamera.instance; ((Behaviour)instance).enabled = false; CarCamera component = ((Component)instance).GetComponent<CarCamera>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } component = MakeCamera(((Component)instance).gameObject); component.SetTarget(car); currentPlayer.FlushInput(); car.EnterCar(currentPlayer); OnPlayerEnteredCar?.Invoke(); } public void ExitCar() { //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) DrivableCar currentCar = CurrentCar; if (!((Object)(object)CurrentCar == (Object)null)) { OnPlayerExitingCar?.Invoke(); bool flag = false; if (CurrentCar.Driving) { CurrentCar.ExitCar(); } else { flag = true; CurrentSeat.ExitSeat(); } CurrentCar.Driving = false; CurrentCar.InCar = false; CurrentSeat = null; CurrentCar = null; GameplayCamera instance = GameplayCamera.instance; ((Behaviour)instance).enabled = true; CarCamera component = ((Component)instance).GetComponent<CarCamera>(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); ((Component)currentPlayer).gameObject.SetActive(true); Transform parent = ((Component)currentPlayer).transform.Find("RootObject"); ((Component)currentPlayer.interactionCollider).transform.parent = parent; ((Component)currentPlayer.interactionCollider).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); ((Component)currentPlayer.characterVisual).transform.SetAsLastSibling(); currentPlayer.EnablePlayer(false); instance.ResetCameraPositionRotation(); if (!flag) { Object.Destroy((Object)(object)((Component)currentCar).gameObject); } } } } public static class CarDatabase { public static Dictionary<string, CarEntry> CarByInternalName; public static void Initialize() { CarByInternalName = new Dictionary<string, CarEntry>(); foreach (CarBundle bundle in CarAssets.Instance.Bundles) { LoadBundle(bundle); } } private static void LoadBundle(CarBundle bundle) { foreach (GameObject item in (from x in bundle.Bundle.LoadAllAssets<GameObject>() where (Object)(object)x.GetComponent<DrivableCar>() != (Object)null select x).ToList()) { DrivableCar component = item.GetComponent<DrivableCar>(); CarEntry carEntry = new CarEntry(); carEntry.Bundle = bundle; carEntry.Prefab = item; CarByInternalName[component.InternalName] = carEntry; } } } public class CarDriverSeat : CarSeat { public int HonkLayerIndex = -1; public int ReverseLayerIndex = -1; public float ReverseAnimationLerp = 10f; public float HonkAnimationLerp = 20f; public float SteerAnimationLerp = 5f; private float _currentSteer = 0.5f; private float _currentHonk; private float _currentReverse; protected override void Update() { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) base.Update(); if (!((Object)(object)CurrentVisual == (Object)null)) { float num = Car.SteerAxis * 0.5f + 0.5f; _currentSteer = Mathf.Lerp(_currentSteer, num, SteerAnimationLerp * Time.deltaTime); CurrentVisual.anim.SetFloat("Steer", _currentSteer); float num2 = 0f; float num3 = 0f; if (Vector3.Dot(Car.Rigidbody.velocity, ((Component)Car).transform.forward) <= -1f && Car.ThrottleAxis < 0f && Car.Grounded) { num3 = 1f; } if (Car.HornHeld) { num2 = 1f; } _currentHonk = Mathf.Lerp(_currentHonk, num2, HonkAnimationLerp * Time.deltaTime); _currentReverse = Mathf.Lerp(_currentReverse, num3, ReverseAnimationLerp * Time.deltaTime); if (HonkLayerIndex != -1) { CurrentVisual.anim.SetLayerWeight(HonkLayerIndex, _currentHonk); } if (ReverseLayerIndex != -1) { CurrentVisual.anim.SetLayerWeight(ReverseLayerIndex, _currentReverse); } } } } public class CarEntry { public CarBundle Bundle; public GameObject Prefab; } public class CarPassengerSeat : CarSeat { public int SeatIndex; protected override void Awake() { base.Awake(); BoxCollider componentInChildren = ((Component)this).GetComponentInChildren<BoxCollider>(); if (!((Object)(object)componentInChildren == (Object)null)) { ((Component)componentInChildren).gameObject.AddComponent<PassengerSeatInteractable>().Initialize(this); } } } public class CarResources : MonoBehaviour { public AudioClip[] CrashSFX; public static CarResources Instance { get; private set; } private void Awake() { Instance = this; } public AudioClip GetCrashSFX() { return CrashSFX[Random.Range(0, CrashSFX.Length)]; } } public abstract class CarSeat : MonoBehaviour { public bool PlayerVisible = true; public RuntimeAnimatorController controller; [NonSerialized] public DrivableCar Car; private float _blinkTimer; private const float BlinkDuration = 0.1f; public Player Player; private Characters _cachedCharacter; protected CharacterVisual CurrentVisual; protected virtual void Awake() { Car = ((Component)this).GetComponentInParent<DrivableCar>(); ResetBlinkTimer(); } private void ResetBlinkTimer() { _blinkTimer = Random.Range(2, 4); } public void PutInSeat(Player player) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) _cachedCharacter = player.character; Player = player; if (PlayerVisible) { CurrentVisual = VisualFromPlayer(player, controller); ((Component)CurrentVisual).GetComponentInChildren<Animator>().runtimeAnimatorController = controller; ((Component)CurrentVisual).transform.SetParent(((Component)this).transform); ((Component)CurrentVisual).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); } } public void ExitSeat() { Player = null; if ((Object)(object)CurrentVisual != (Object)null) { ((MonoBehaviour)this).StopAllCoroutines(); Object.Destroy((Object)(object)((Component)CurrentVisual).gameObject); } } private CharacterVisual VisualFromPlayer(Player player, RuntimeAnimatorController controller) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) GameObject obj = Object.Instantiate<GameObject>(((Component)player.characterVisual).gameObject); obj.SetActive(true); CharacterVisual component = obj.GetComponent<CharacterVisual>(); ((Renderer)component.mainRenderer).enabled = true; component.SetMoveStyleVisualAnim((Player)null, (MoveStyle)0, (GameObject)null); component.SetMoveStyleVisualProps((Player)null, (MoveStyle)0, false); component.SetSpraycan(false, (Characters)(-1)); component.SetPhone(false); component.SetBoostpackEffect((BoostpackEffectMode)0, -1f); component.VFX.boostpackTrail.SetActive(false); component.Init((Characters)(-1), controller, false, 0f); component.canBlink = player.characterVisual.canBlink; component.characterObject.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); OpenEyes(component); return component; } private void LateUpdate() { if (!Core.Instance.IsCorePaused && !((Object)(object)CurrentVisual == (Object)null) && CurrentVisual.canBlink) { _blinkTimer -= Time.deltaTime; if (_blinkTimer <= 0f) { ResetBlinkTimer(); ((MonoBehaviour)this).StartCoroutine(DoBlink()); } } } private IEnumerator DoBlink() { CloseEyes(CurrentVisual); yield return (object)new WaitForSeconds(0.1f); OpenEyes(CurrentVisual); } private void CloseEyes(CharacterVisual visual) { if (visual.canBlink && visual.mainRenderer.sharedMesh.blendShapeCount > 0) { visual.mainRenderer.SetBlendShapeWeight(0, 100f); } } private void OpenEyes(CharacterVisual visual) { if (visual.canBlink && visual.mainRenderer.sharedMesh.blendShapeCount > 0) { visual.mainRenderer.SetBlendShapeWeight(0, 0f); } } protected virtual void Update() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (!Core.Instance.IsCorePaused && (Object)(object)Player != (Object)null && (Object)(object)CurrentVisual != (Object)null && Player.character != _cachedCharacter) { Player player = Player; ExitSeat(); PutInSeat(player); } } } public class CarWheel : MonoBehaviour { [NonSerialized] public bool Grounded; [Header("Suspension")] public float Damping; public float Strength; public float StartLength; public float MaxDistance; public float RestDistance; [Header("Visuals")] public GameObject Mesh; public float MeshRadius = 0.5f; public float RotationAcceleration = 100f; public float RotationDeacceleration = 1f; public float RotationMultiplier = 1f; [Header("Stats")] public float Mass = 10f; public float Traction = 0.5f; public float SteerAngle = 45f; public float SteerSpeed = 5f; public float ReverseSpeed = 400f; public float Speed = 10f; [Header("Functionality")] public bool Throttle; public bool Steer; public bool HandBrake; [NonSerialized] public float CurrentSpeed; private float _currentRoll; private float _currentSteerAngle; private DrivableCar _car; private float SlipSpeed = 5f; private const float MinimumSidewaysSpeedForSlip = 4f; private const float SidewaysSlipMultiplier = 0.05f; private const float MaximumSuspensionOffsetForRest = 0.5f; private float _currentSlip; private const float WheelSpinSlip = 0.35f; private const float WheelSpinSlipThreshold = 5f; private const float MaxSlipTractionLoss = 0.9f; public float Slipping => _currentSlip; public void Initialize(DrivableCar car) { _car = car; } private void OnDrawGizmos() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_004b: 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_0061: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = Color.white; Gizmos.DrawWireSphere(((Component)this).transform.position, MeshRadius); Gizmos.color = Color.red; Gizmos.DrawLine(((Component)this).transform.position + ((Component)this).transform.up * StartLength, ((Component)this).transform.position - ((Component)this).transform.up * MaxDistance); Gizmos.color = Color.green; Gizmos.DrawLine(((Component)this).transform.position, ((Component)this).transform.position - ((Component)this).transform.up * RestDistance); } public void DoPhysics(ref bool resting) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_019d: 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_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) CalculateSlip(); bool flag = false; if (_car.HasSurfaceAngleLimit && Vector3.Angle(Vector3.up, ((Component)this).transform.up) >= _car.SurfaceAngleLimit) { flag = true; resting = false; } float num = MaxDistance; Grounded = false; RaycastHit val = default(RaycastHit); if (Physics.Raycast(new Ray(((Component)this).transform.position + ((Component)this).transform.up * StartLength, -((Component)this).transform.up), ref val, MaxDistance + StartLength, LayerMask.op_Implicit(_car.GroundMask))) { num = ((RaycastHit)(ref val)).distance - StartLength; Grounded = true; float num2 = RestDistance - num; float num3 = Vector3.Dot(_car.Rigidbody.GetPointVelocity(((Component)this).transform.position), ((Component)this).transform.up); float num4 = num2 * Strength - num3 * Damping; if (flag) { num4 = Mathf.Max(num4, 0f); } else if (Mathf.Abs(num2) > 0.5f) { resting = false; } if (!_car.Still) { _car.Rigidbody.AddForceAtPosition(((Component)this).transform.up * num4, ((Component)this).transform.position); } } if ((Object)(object)Mesh != (Object)null) { Mesh.transform.position = ((Component)this).transform.position - (num - MeshRadius) * ((Component)this).transform.up; } if (Grounded && !flag) { float traction = Traction; Vector3 pointVelocity = _car.Rigidbody.GetPointVelocity(((Component)this).transform.position); Vector3 val2 = pointVelocity - Vector3.Project(pointVelocity, ((Component)this).transform.up); float num5 = Evaluate(value: ((Vector3)(ref val2)).magnitude, curve: _car.TractionCurve, maxValue: _car.TractionCurveMax); traction *= num5; traction *= 0f - _currentSlip + 1f; traction = Mathf.Lerp(traction, 0.1f, _car.DriftingAmount); float num6 = (0f - Vector3.Dot(pointVelocity, ((Component)this).transform.right)) * traction / Time.fixedDeltaTime; _car.Rigidbody.AddForceAtPosition(((Component)this).transform.right * Mass * num6, ((Component)this).transform.position); } DoInput(flag); } private float Evaluate(AnimationCurve curve, float value, float maxValue) { value = Mathf.Abs(value); float num = Mathf.Min(value, maxValue) / maxValue; return curve.Evaluate(num); } private void CalculateSlip() { //IL_0011: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) Vector3 pointVelocity = _car.Rigidbody.GetPointVelocity(((Component)this).transform.position); float num = Vector3.Dot(pointVelocity, ((Component)this).transform.forward); float num2 = Mathf.Abs(CurrentSpeed - num); float num3 = 0f; if (num2 >= 5f) { num3 = 0.35f; } float num4 = Mathf.Abs(Vector3.Dot(pointVelocity, ((Component)this).transform.right)); num4 = Mathf.Max(0f, num4 - 4f); num3 += num4 * 0.05f * _car.SlipMultiplier; num3 = Mathf.Clamp(num3, 0f, 0.9f); if (_currentSlip < num3) { _currentSlip = num3; } _currentSlip = Mathf.Lerp(_currentSlip, num3, SlipSpeed * Time.deltaTime); } private void DoInput(bool tooSteep) { //IL_0011: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0028: 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_003b: 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_014f: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) Vector3 pointVelocity = _car.Rigidbody.GetPointVelocity(((Component)this).transform.position); Vector3 val = pointVelocity - Vector3.Project(pointVelocity, ((Component)this).transform.up); _ = ((Vector3)(ref val)).magnitude; float num = Vector3.Dot(pointVelocity, ((Component)this).transform.forward); float throttleAxis = _car.ThrottleAxis; float steerAxis = _car.SteerAxis; if (Grounded) { float num2 = 1f - Mathf.Abs(throttleAxis); if (num > 0f) { _car.Rigidbody.AddForceAtPosition(-((Component)this).transform.forward * _car.Deacceleration * num2, ((Component)this).transform.position); } else { _car.Rigidbody.AddForceAtPosition(((Component)this).transform.forward * _car.Deacceleration * num2, ((Component)this).transform.position); } } if (Throttle && (!Grounded || tooSteep) && Mathf.Abs(CurrentSpeed) < 100f) { CurrentSpeed += throttleAxis * RotationAcceleration * Time.deltaTime; } float num3 = Vector3.Dot(pointVelocity, ((Component)this).transform.forward); bool flag = ((num3 > 0.15f && throttleAxis < 0f) || (num3 < -0.15f && throttleAxis > 0f)) && !_car.Still; if (Grounded && !tooSteep) { bool flag2 = false; float speed = Speed; float num4 = Mathf.Min(Mathf.Abs(num), _car.SpeedCurveMax) / _car.SpeedCurveMax; float num5 = _car.SpeedCurve.Evaluate(num4); speed *= num5; if (throttleAxis < 0f) { speed = ReverseSpeed; num4 = Mathf.Min(Mathf.Abs(num), _car.ReverseCurveMax) / _car.ReverseCurveMax; num5 = _car.ReverseCurve.Evaluate(num4); speed *= num5; } Vector3 velocity; if (flag) { speed = _car.BrakeForce; velocity = _car.Rigidbody.velocity; if (((Vector3)(ref velocity)).magnitude <= 0.15f || _car.Still) { speed = 0f; } } float num6 = throttleAxis * speed; if (Throttle) { flag2 = true; } if (flag) { flag2 = true; } if (_car.BrakeHeld && HandBrake) { if (num3 > 0f) { num6 = 0f - _car.HandBrakeForce; } else if (num3 < 0f) { num6 = _car.HandBrakeForce; } velocity = _car.Rigidbody.velocity; if (((Vector3)(ref velocity)).magnitude <= 0.15f || _car.Still) { num6 = 0f; } flag2 = true; } if (flag2) { _car.Rigidbody.AddForceAtPosition(((Component)this).transform.forward * num6, ((Component)this).transform.position); } } if (Steer) { float steerAngle = SteerAngle; float num7 = Evaluate(_car.SteerCurve, num, _car.SteerCurveMax); float num8 = steerAngle * num7 * steerAxis; _currentSteerAngle = Mathf.Lerp(_currentSteerAngle, num8, SteerSpeed * Time.deltaTime); float num9 = 0f; if (Grounded) { num9 = _car.CounterSteering; } ((Component)this).transform.localRotation = Quaternion.Euler(0f, _currentSteerAngle + num9, 0f); } } public void DoUpdate() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_0180: Unknown result type (might be due to invalid IL or missing references) if (Grounded) { float num = Vector3.Dot(_car.Rigidbody.GetPointVelocity(((Component)this).transform.position), ((Component)this).transform.forward); float num2 = Mathf.Abs(num); float num3 = Mathf.Abs(_car.ThrottleAxis); CurrentSpeed = num; if (num3 >= 0.9f && num2 <= num3 * 4f && Mathf.Sign(num) == Mathf.Sign(_car.ThrottleAxis) && Throttle) { CurrentSpeed = 50f * Mathf.Sign(_car.ThrottleAxis); } } else if (CurrentSpeed > 0f) { CurrentSpeed = Mathf.Max(CurrentSpeed - RotationDeacceleration * Time.deltaTime, 0f); } else { CurrentSpeed = Mathf.Min(CurrentSpeed + RotationDeacceleration * Time.deltaTime, 0f); } if (_car.BrakeHeld && HandBrake) { CurrentSpeed = 0f; } _currentRoll += CurrentSpeed * RotationMultiplier * Time.deltaTime; _currentRoll -= Mathf.Floor(_currentRoll / 360f) * 360f; Mesh.transform.localRotation = Quaternion.Euler(_currentRoll, 0f, 0f); } } public class DrivableCar : MonoBehaviour { private const int CurrentVersion = 1; [HideInInspector] [SerializeField] private int Version; [Header("Unique identifier")] public string InternalName = ""; [Header("How much the car should countersteer to avoid losing control")] public float CounterSteerMultiplier = 0.1f; [Header("How sensible the car is to sliding")] public float SlipMultiplier = 0.75f; public bool HasSurfaceAngleLimit = true; public float SurfaceAngleLimit = 60f; public float Deacceleration = 100f; [Header("Curves based on the car's speed")] public AnimationCurve ReverseCurve; public float ReverseCurveMax = 50f; public float BrakeForce = 1000f; public float HandBrakeForce = 500f; public AnimationCurve SteerCurve; public float SteerCurveMax = 50f; public AnimationCurve SpeedCurve; public float SpeedCurveMax = 50f; public AnimationCurve TractionCurve; public float TractionCurveMax = 50f; public LayerMask GroundMask; public Transform CenterOfMass; [NonSerialized] public Rigidbody Rigidbody; [NonSerialized] public CarWheel[] Wheels; [NonSerialized] public GameObject Chassis; [NonSerialized] public bool Driving; [NonSerialized] public bool InCar; protected const float ControllerRotationDeadZone = 0.2f; [NonSerialized] public bool InputEnabled = true; [NonSerialized] public float ThrottleAxis; [NonSerialized] public float SteerAxis; [NonSerialized] public bool HornHeld; [NonSerialized] public bool GetOutOfCarButtonNew; [NonSerialized] public float PitchAxis; [NonSerialized] public float YawAxis; [NonSerialized] public float RollAxis; [NonSerialized] public bool BrakeHeld; [NonSerialized] public bool LockDoorsButtonNew; private Vector3 _velocityBeforePause; private Vector3 _angularVelocityBeforePause; private Vector3 _previousVelocity = Vector3.zero; private Vector3 _previousAngularVelocity = Vector3.zero; private OneShotAudioSource _oneShotAudioSource; private ScrapeAudio _scrapeAudio; private float _crashAudioCooldown; [NonSerialized] public CarDriverSeat DriverSeat; public Action OnHandleInput; [Header("Air Control")] public float AirControlStrength = 1f; public float AirControlTopSpeed = 2f; public float AirDeacceleration = 1f; [Header("How much you can alter the car's direction in the air.")] public float AirAerodynamics; [Header("Camera")] public float ExtraDistance; public float ExtraHeight; public float ExtraPitch; private bool _grounded; private bool _steep; private bool _resting; private const float LastSafeLocationInterval = 0.5f; private float _lastSafeLocationTimer = 0.5f; private Vector3 _prevLastSafePosition = Vector3.zero; private Quaternion _prevLastSafeRotation = Quaternion.identity; private Vector3 _lastSafePosition = Vector3.zero; private Quaternion _lastSafeRotation = Quaternion.identity; public const float MaximumSpeedForStill = 0.15f; private const float MaximumAngleForStill = 20f; private const float StillTime = 0.25f; private bool _still; private float _stillTimer; public const float MinimumSidewaysVelocityForDrift = 1f; public const float DriftMinimumAngle = 20f; public const float DriftingLerp = 5f; public const float DriftTraction = 0.1f; [NonSerialized] public float DriftingAmount; [NonSerialized] public float CounterSteering; [NonSerialized] public bool DoorsLocked; [NonSerialized] public bool AllWheelsOffGround; private CarPassengerSeat[] _passengerSeats; [NonSerialized] protected bool AllowAutoRecovery = true; private const float AutoRecoveryVelocityThreshold = 0.1f; private const float AutoRecoveryTime = 1f; private float _autoRecoveryTimer = 1f; private bool _forcedPause; public bool Grounded => _grounded; public bool Still => _still; private void UpdateAutoRecovery() { if (!PlayerData.Instance.AutoRecover || !AllowAutoRecovery) { _autoRecoveryTimer = 1f; } else if (IsStuck()) { _autoRecoveryTimer -= Time.deltaTime; if (_autoRecoveryTimer <= 0f) { _autoRecoveryTimer = 1f; PlaceAtLastSafeLocation(); } } else { _autoRecoveryTimer = 1f; } } private bool IsStuck() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Rigidbody.velocity; float magnitude = ((Vector3)(ref val)).magnitude; val = Rigidbody.angularVelocity; if (magnitude + ((Vector3)(ref val)).magnitude > 0.1f) { return false; } if (!AllWheelsOffGround && !_steep) { return false; } return true; } private void UpdateAirAero() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Dot(Rigidbody.velocity, ((Component)this).transform.forward); Vector3 val = Rigidbody.velocity - Vector3.Project(Rigidbody.velocity, ((Component)this).transform.forward); val = Vector3.Lerp(val, Vector3.zero, AirAerodynamics * Time.deltaTime); Rigidbody.velocity = val + num * ((Component)this).transform.forward; } private void UpdateCounterSteer() { //IL_0011: 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_002c: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_005a: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) CounterSteering = 0f; Vector3 velocity = Rigidbody.velocity; if (!(((Vector3)(ref velocity)).magnitude < 5f)) { Vector3 forward = ((Component)this).transform.forward; velocity = Rigidbody.velocity; bool flag = Vector3.Dot(forward, ((Vector3)(ref velocity)).normalized) < 0f; Vector3 val = (flag ? (-((Component)this).transform.forward) : ((Component)this).transform.forward); velocity = Rigidbody.velocity; float num = Vector3.SignedAngle(val, ((Vector3)(ref velocity)).normalized, ((Component)this).transform.up); float num2 = CounterSteerMultiplier * (0f - Mathf.Abs(SteerAxis) + 1f); CounterSteering = num * num2 * (flag ? (-1f) : 1f); } } private void UpdateDrift() { float targetDrift = GetTargetDrift(); if (targetDrift < DriftingAmount) { DriftingAmount = Mathf.Lerp(DriftingAmount, targetDrift, 5f * Time.deltaTime); } else { DriftingAmount = targetDrift; } } private float GetTargetDrift() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0035: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) float num = Vector3.Dot(Rigidbody.velocity, ((Component)this).transform.right); Vector3 forward = ((Component)this).transform.forward; Vector3 velocity = Rigidbody.velocity; bool flag = Vector3.Dot(forward, ((Vector3)(ref velocity)).normalized) < 0f; if (flag) { return 0f; } Vector3 val = (flag ? (-((Component)this).transform.forward) : ((Component)this).transform.forward); velocity = Rigidbody.velocity; float num2 = Vector3.Angle(val, ((Vector3)(ref velocity)).normalized); if (Mathf.Abs(num) < 1f) { return 0f; } if (num2 < 20f) { return 0f; } return Mathf.Abs(ThrottleAxis); } private void UpdateStill() { //IL_0022: 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) _still = false; if (IsStill()) { if (_stillTimer >= 0.25f) { Rigidbody.velocity = Vector3.zero; Rigidbody.angularVelocity = Vector3.zero; Rigidbody.Sleep(); _still = true; } else { _stillTimer += Time.deltaTime; } } else { Rigidbody.WakeUp(); _stillTimer = 0f; } } private bool IsStill() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) if (!_resting) { return false; } if (!_grounded) { return false; } if (_steep) { return false; } if (ThrottleAxis != 0f && !BrakeHeld) { return false; } Vector3 val = Rigidbody.velocity; float magnitude = ((Vector3)(ref val)).magnitude; val = Rigidbody.angularVelocity; if (magnitude + ((Vector3)(ref val)).magnitude > 0.15f) { return false; } if (Vector3.Angle(Vector3.up, ((Component)this).transform.up) >= 20f) { return false; } return true; } public void Initialize() { Driving = false; ResetLastSafeLocation(); } private void FixUp() { ((Component)this).gameObject.layer = 17; Transform val = ((Component)this).transform.Find("Interaction"); if ((Object)(object)val != (Object)null) { ((Component)val).gameObject.layer = 9; } FixUpVersion(); } private void FixUpVersion() { if (Version < 1) { CarWheel[] componentsInChildren = ((Component)this).GetComponentsInChildren<CarWheel>(); foreach (CarWheel obj in componentsInChildren) { obj.HandBrake = obj.Throttle; } } } private void PlaceAtLastSafeLocation() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) PlaceAt(_prevLastSafePosition, _prevLastSafeRotation); ResetLastSafeLocation(); } private void RecordLastSafeLocation() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) _lastSafeLocationTimer = 0.5f; _prevLastSafePosition = _lastSafePosition; _prevLastSafeRotation = _lastSafeRotation; _lastSafePosition = Rigidbody.position; _lastSafeRotation = Rigidbody.rotation; } private void ResetLastSafeLocation() { //IL_0012: 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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: 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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) _lastSafeLocationTimer = 0.5f; _lastSafePosition = Rigidbody.position; _lastSafeRotation = Rigidbody.rotation; _prevLastSafePosition = _lastSafePosition; _prevLastSafeRotation = _lastSafeRotation; } private void OnCrash(float force, Vector3 point) { if (!(force < 4f) && !(_crashAudioCooldown > 0f)) { AudioClip crashSFX = CarResources.Instance.GetCrashSFX(); _oneShotAudioSource.Play(crashSFX); _crashAudioCooldown = 0.5f; } } private void OnCollisionStay(Collision other) { if ((Object)(object)_scrapeAudio != (Object)null) { _scrapeAudio.OnScrape(other); } } private void OnCollisionEnter(Collision other) { //IL_0006: 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_0011: 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_0024: Unknown result type (might be due to invalid IL or missing references) //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_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Rigidbody.velocity - _previousVelocity; float magnitude = ((Vector3)(ref val)).magnitude; val = Rigidbody.angularVelocity - _previousAngularVelocity; float force = magnitude + ((Vector3)(ref val)).magnitude; OnCrash(force, ((ContactPoint)(ref other.contacts[0])).point); float magnitude2 = ((Vector3)(ref _previousVelocity)).magnitude; BreakableObject component = other.gameObject.GetComponent<BreakableObject>(); if ((Object)(object)component != (Object)null && magnitude2 >= 5f) { Rigidbody.velocity = _previousVelocity; Rigidbody.angularVelocity = _previousAngularVelocity; component.Break(false); return; } if (other.gameObject.layer == 17) { BasicCop componentInParent = other.gameObject.GetComponentInParent<BasicCop>(); if ((Object)(object)componentInParent != (Object)null) { Rigidbody.velocity = _previousVelocity; Rigidbody.angularVelocity = _previousAngularVelocity; if (magnitude2 >= 5f && (int)componentInParent.hitBoxResponse.State == 0) { val = ((Component)componentInParent).transform.position - ((Component)this).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; componentInParent.hitBoxResponse.ManualDamage((HitType)5, normalized, magnitude2 * 0.1f, 1f, 2f, 2); TimedCollisionIgnore.Create(other.collider, Chassis.GetComponentInChildren<Collider>(), 1.5f); } return; } } if (other.gameObject.layer != 21) { return; } JunkHolder componentInParent2 = other.gameObject.GetComponentInParent<JunkHolder>(); if ((Object)(object)componentInParent2 != (Object)null) { if (!componentInParent2.moved) { Rigidbody.velocity = _previousVelocity; Rigidbody.angularVelocity = _previousAngularVelocity; } componentInParent2.FallApart(((ContactPoint)(ref other.contacts[0])).point, false); return; } Junk component2 = other.gameObject.GetComponent<Junk>(); if (Object.op_Implicit((Object)(object)component2)) { if (component2.rigidBody.isKinematic) { Rigidbody.velocity = _previousVelocity; Rigidbody.angularVelocity = _previousAngularVelocity; } if ((int)component2.interactOn == 0) { component2.FallApart(false); } else { component2.FallApart(true); } } } private void OnTriggerStay(Collider other) { if (((Component)other).gameObject.layer == 19) { Teleport componentInParent = ((Component)other).GetComponentInParent<Teleport>(); if ((Object)(object)componentInParent != (Object)null && InputEnabled && InCar) { ((MonoBehaviour)this).StartCoroutine(DoTeleport(componentInParent)); } } else if (((Component)other).CompareTag("MovingObject")) { ((Component)other).GetComponentInParent<MoveAlongPoints>().TriggerDetectLayer(9); } } public void PlaceAt(Vector3 position, Quaternion rotation, bool keepSpeed = false) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //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_011a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) float num = Vector3.Dot(((Component)this).transform.right, Rigidbody.velocity); float num2 = Vector3.Dot(((Component)this).transform.up, Rigidbody.velocity); float num3 = Vector3.Dot(((Component)this).transform.forward, Rigidbody.velocity); float num4 = Vector3.Dot(((Component)this).transform.right, Rigidbody.angularVelocity); float num5 = Vector3.Dot(((Component)this).transform.up, Rigidbody.angularVelocity); float num6 = Vector3.Dot(((Component)this).transform.forward, Rigidbody.angularVelocity); ((Component)this).transform.position = position; ((Component)this).transform.rotation = rotation; if (!keepSpeed) { Rigidbody.velocity = Vector3.zero; Rigidbody.angularVelocity = Vector3.zero; } else { Rigidbody.velocity = num * ((Component)this).transform.right + num2 * ((Component)this).transform.up + num3 * ((Component)this).transform.forward; Rigidbody.angularVelocity = num4 * ((Component)this).transform.right + num5 * ((Component)this).transform.up + num6 * ((Component)this).transform.forward; } } private void ResetInputs() { ThrottleAxis = 0f; SteerAxis = 0f; HornHeld = false; GetOutOfCarButtonNew = false; PitchAxis = 0f; YawAxis = 0f; RollAxis = 0f; BrakeHeld = false; LockDoorsButtonNew = false; } private IEnumerator DoTeleport(Teleport teleport) { if ((Object)(object)((Component)teleport).GetComponent<StageTransition>() == (Object)null) { DoForcedPause(); InputEnabled = false; if (teleport.automaticallyReturnPlayerToLastSafeLocation) { teleport.fadeToBlackDuration = teleport.fadeToBlackDurationDeathzone; teleport.blackDuration = teleport.blackDurationDeathzone; teleport.fadeOpenDuration = teleport.fadeOpenDurationDeathzone; } else { teleport.fadeToBlackDuration = teleport.fadeToBlackDurationDoor; teleport.blackDuration = teleport.blackDurationDoor; teleport.fadeOpenDuration = teleport.fadeOpenDurationDoor; } Tween val = Core.Instance.UIManager.effects.FadeToBlack(teleport.fadeToBlackDuration); yield return TweenExtensions.WaitForCompletion(val); ((Component)Core.Instance.UIManager.effects.fullScreenFade).gameObject.SetActive(true); ((Graphic)Core.Instance.UIManager.effects.fullScreenFade).color = EffectsUI.niceBlack; yield return (object)new WaitForSeconds(teleport.blackDuration); UndoForcedPause(); if (teleport.automaticallyReturnPlayerToLastSafeLocation) { PlaceAtLastSafeLocation(); } else if ((Object)(object)teleport.teleportTo != (Object)null) { PlaceAt(teleport.teleportTo.position, teleport.teleportTo.rotation, teleport.giveSpeedAtSpawn); } InputEnabled = true; Core.Instance.UIManager.effects.FadeOpen(teleport.fadeOpenDuration); } } protected float GetAxisDeadZone(GameInput gameInput, int actionId, float deadzone) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 ControllerType currentControllerType = gameInput.GetCurrentControllerType(0); float axis = gameInput.GetAxis(actionId, 0); if ((int)currentControllerType != 2) { return axis; } if (Mathf.Abs(axis) <= deadzone) { return 0f; } return axis; } protected virtual void PollDrivingInputs() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Invalid comparison between Unknown and I4 GameInput gameInput = Core.Instance.GameInput; BrakeHeld = gameInput.GetButtonHeld(7, 0); SteerAxis = gameInput.GetAxis(5, 0); if (BrakeHeld) { RollAxis = GetAxisDeadZone(gameInput, 5, 0.2f); } else { YawAxis = GetAxisDeadZone(gameInput, 5, 0.2f); } if ((int)gameInput.GetCurrentControllerType(0) == 2) { PitchAxis = GetAxisDeadZone(gameInput, 6, 0.2f); ThrottleAxis += gameInput.GetAxis(8, 0); ThrottleAxis -= gameInput.GetAxis(18, 0); } else { ThrottleAxis = gameInput.GetAxis(6, 0); if (BrakeHeld) { PitchAxis = GetAxisDeadZone(gameInput, 6, 0.2f); } } HornHeld = gameInput.GetButtonHeld(10, 0); } private void PollInputs() { ResetInputs(); if (!InputEnabled) { return; } OnHandleInput?.Invoke(); if (!WorldHandler.instance.GetCurrentPlayer().IsBusyWithSequence() || !InCar) { GameInput gameInput = Core.Instance.GameInput; if (InCar) { GetOutOfCarButtonNew = gameInput.GetButtonNew(11, 0); } if (Driving) { PollDrivingInputs(); } } } protected virtual void Awake() { //IL_008c: 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_00d1: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Expected O, but got Unknown Chassis = ((Component)this).gameObject; _passengerSeats = Chassis.GetComponentsInChildren<CarPassengerSeat>(); DriverSeat = Chassis.GetComponentInChildren<CarDriverSeat>(); _scrapeAudio = Chassis.GetComponentInChildren<ScrapeAudio>(); _oneShotAudioSource = Chassis.GetComponentInChildren<OneShotAudioSource>(); Rigidbody = Chassis.GetComponent<Rigidbody>(); Wheels = Chassis.GetComponentsInChildren<CarWheel>(); if ((Object)(object)CenterOfMass != (Object)null) { Rigidbody.centerOfMass = CenterOfMass.localPosition; } CarWheel[] wheels = Wheels; for (int i = 0; i < wheels.Length; i++) { wheels[i].Initialize(this); } ResetLastSafeLocation(); FixUp(); Core.OnCoreUpdatePaused += new OnCoreUpdateHandler(OnPause); Core.OnCoreUpdateUnPaused += new OnCoreUpdateUnpausedHandler(OnUnPause); bool continuousCollisionDetection = CarController.Config.ContinuousCollisionDetection; Rigidbody.collisionDetectionMode = (CollisionDetectionMode)(continuousCollisionDetection ? 1 : 0); Rigidbody.interpolation = (RigidbodyInterpolation)1; } public CarPassengerSeat GetPassengerSeat(int index) { CarPassengerSeat[] passengerSeats = _passengerSeats; foreach (CarPassengerSeat carPassengerSeat in passengerSeats) { if (carPassengerSeat.SeatIndex == index) { return carPassengerSeat; } } return null; } public void EnterCar(Player player) { if (!((Object)(object)DriverSeat == (Object)null)) { DriverSeat.PutInSeat(player); } } public void ExitCar() { if (!((Object)(object)DriverSeat == (Object)null)) { DriverSeat.ExitSeat(); } } private void DoForcedPause() { OnPause(); _forcedPause = true; } private void UndoForcedPause() { _forcedPause = false; OnUnPause(); } private void OnPause() { //IL_001f: 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_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) if (!_forcedPause && !((Object)(object)Rigidbody == (Object)null)) { _velocityBeforePause = Rigidbody.velocity; _angularVelocityBeforePause = Rigidbody.angularVelocity; Rigidbody.isKinematic = true; } } private void OnUnPause() { //IL_002b: 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) if (!_forcedPause && !((Object)(object)Rigidbody == (Object)null)) { Rigidbody.isKinematic = false; Rigidbody.velocity = _velocityBeforePause; Rigidbody.angularVelocity = _angularVelocityBeforePause; } } protected virtual bool CheckGrounded() { CarWheel[] wheels = Wheels; for (int i = 0; i < wheels.Length; i++) { if (!wheels[i].Grounded) { return false; } } return true; } protected virtual void FixedUpdateCar() { } private void FixedUpdate() { //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) if (Core.Instance.IsCorePaused) { return; } AllWheelsOffGround = true; _resting = true; _grounded = false; _steep = false; PollInputs(); if (LockDoorsButtonNew) { PlayerData.Instance.DoorsLocked = !PlayerData.Instance.DoorsLocked; PlayerData.Instance.Save(); Core.Instance.UIManager.ShowNotification("Car doors are now <color=yellow>" + (PlayerData.Instance.DoorsLocked ? "Locked" : "Unlocked") + "</color>", Array.Empty<string>()); } UpdateCounterSteer(); CarWheel[] wheels = Wheels; foreach (CarWheel obj in wheels) { obj.DoPhysics(ref _resting); if (obj.Grounded) { AllWheelsOffGround = false; } } _previousAngularVelocity = Rigidbody.angularVelocity; _previousVelocity = Rigidbody.velocity; _grounded = CheckGrounded(); if (Vector3.Angle(Vector3.up, ((Component)this).transform.up) >= 50f) { _steep = true; } _lastSafeLocationTimer = Mathf.Max(0f, _lastSafeLocationTimer - Time.deltaTime); if (_grounded && !_steep && _lastSafeLocationTimer <= 0f) { RecordLastSafeLocation(); } if (!_grounded) { AirControl(1f); UpdateAirAero(); } UpdateStill(); UpdateDrift(); UpdateAutoRecovery(); FixedUpdateCar(); if (GetOutOfCarButtonNew && InCar) { CarController.Instance.ExitCar(); } } private void AirControl(float multiplier) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_0053: 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) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: 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_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) float num = AirControlStrength * multiplier; Vector3 val = ((Component)this).transform.right * (num * PitchAxis); Vector3 val2 = ((Component)this).transform.up * (num * YawAxis); Vector3 val3 = -((Component)this).transform.forward * (num * RollAxis); float num2 = Vector3.Dot(((Component)this).transform.right, Rigidbody.angularVelocity); float num3 = Vector3.Dot(((Component)this).transform.up, Rigidbody.angularVelocity); float num4 = Vector3.Dot(-((Component)this).transform.forward, Rigidbody.angularVelocity); if (num2 >= AirControlTopSpeed && PitchAxis > 0f) { val = Vector3.zero; } if (num2 <= 0f - AirControlTopSpeed && PitchAxis < 0f) { val = Vector3.zero; } if (num3 >= AirControlTopSpeed && YawAxis > 0f) { val2 = Vector3.zero; } if (num3 <= 0f - AirControlTopSpeed && YawAxis < 0f) { val2 = Vector3.zero; } if (num4 >= AirControlTopSpeed && RollAxis > 0f) { val3 = Vector3.zero; } if (num4 <= 0f - AirControlTopSpeed && RollAxis < 0f) { val3 = Vector3.zero; } Rigidbody.AddTorque(val, (ForceMode)5); Rigidbody.AddTorque(val2, (ForceMode)5); Rigidbody.AddTorque(val3, (ForceMode)5); Rigidbody.angularVelocity = Vector3.Lerp(Rigidbody.angularVelocity, Vector3.zero, AirDeacceleration * Time.deltaTime); } private void Update() { if (!Core.Instance.IsCorePaused) { if (Driving) { DoorsLocked = PlayerData.Instance.DoorsLocked; } _crashAudioCooldown = Mathf.Max(0f, _crashAudioCooldown - Time.deltaTime); CarWheel[] wheels = Wheels; for (int i = 0; i < wheels.Length; i++) { wheels[i].DoUpdate(); } } } private void OnDestroy() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown Core.OnCoreUpdatePaused -= new OnCoreUpdateHandler(OnPause); Core.OnCoreUpdateUnPaused -= new OnCoreUpdateUnpausedHandler(OnUnPause); CarController instance = CarController.Instance; if (!((Object)(object)instance == (Object)null) && (Object)(object)instance.CurrentCar == (Object)(object)this) { CarController.Instance.ExitCar(); } } } public class DrivableChopper : DrivableCar { private const int LandingLayerMask = 1; private const float LandingRayDistance = 0.1f; private const float NoseDownMultiplier = 1.5f; [Header("Helicopter")] public Transform[] LandingSensors; public float ThrottleSpeed = 1f; public float LiftAcceleration = 10f; public float LiftLerp = 5f; public float UprightForce = 1f; public float MovementAcceleration = 10f; public float IdleAcceleration = 1f; public float AirVerticalFriction = 1f; [NonSerialized] public float ThrottleAmount; [NonSerialized] public float LiftAmount; protected override void Awake() { base.Awake(); AllowAutoRecovery = false; } protected override void PollDrivingInputs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Invalid comparison between Unknown and I4 GameInput gameInput = Core.Instance.GameInput; ControllerType currentControllerType = gameInput.GetCurrentControllerType(0); ChopperControlTypes chopperControlType = CarController.Config.ChopperControlType; if ((int)currentControllerType == 2) { PitchAxis = GetAxisDeadZone(gameInput, 6, 0.2f); ThrottleAxis += gameInput.GetAxis(8, 0); ThrottleAxis -= gameInput.GetAxis(18, 0); if (chopperControlType == ChopperControlTypes.A) { YawAxis += (gameInput.GetButtonHeld(65, 0) ? 1f : 0f); YawAxis -= (gameInput.GetButtonHeld(15, 0) ? 1f : 0f); RollAxis = GetAxisDeadZone(gameInput, 5, 0.2f); } else { RollAxis += (gameInput.GetButtonHeld(65, 0) ? 1f : 0f); RollAxis -= (gameInput.GetButtonHeld(15, 0) ? 1f : 0f); YawAxis = GetAxisDeadZone(gameInput, 5, 0.2f); } } else { YawAxis = gameInput.GetAxis(5, 0); ThrottleAxis = gameInput.GetAxis(6, 0); RollAxis += (gameInput.GetButtonHeld(29, 0) ? 1f : 0f); RollAxis -= (gameInput.GetButtonHeld(57, 0) ? 1f : 0f); PitchAxis += (gameInput.GetButtonHeld(21, 0) ? 1f : 0f); PitchAxis -= (gameInput.GetButtonHeld(56, 0) ? 1f : 0f); } } protected override bool CheckGrounded() { Transform[] landingSensors = LandingSensors; foreach (Transform sensor in landingSensors) { if (!CheckSensorGrounded(sensor)) { return false; } } return true; } protected override void FixedUpdateCar() { //IL_015a: 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_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0378: Unknown result type (might be due to invalid IL or missing references) base.FixedUpdateCar(); float num = ThrottleAxis; if (num > 0f) { num = 1f; } if (num < 0f) { num = -1f; } if (!base.Grounded) { num = Mathf.Max(0f, num); } if (ThrottleAmount != 0f && ThrottleAmount != 1f && ThrottleAxis == 0f) { num = -1f; } if (ThrottleAmount >= 0.5f && base.Grounded && ThrottleAxis == 0f) { num = 0f; if (0.9f > ThrottleAmount) { num = 1f; } if (ThrottleAmount > 0.99f) { ThrottleAmount = 0.99f; } } ThrottleAmount += num * ThrottleSpeed * Time.deltaTime; ThrottleAmount = Mathf.Clamp(ThrottleAmount, 0f, 1f); if (base.Grounded) { LiftAmount = 0f; } else { LiftAmount = Mathf.Lerp(LiftAmount, ThrottleAxis, LiftLerp * Time.deltaTime); } float num2 = LiftAcceleration * ThrottleAmount; if (base.Grounded && ThrottleAmount < 1f) { num2 = 0f; } float num3 = (0f - Mathf.Abs(Vector3.Dot(((Component)this).transform.up, Vector3.up)) + 1f) * 1.5f; num3 = Mathf.Min(1f, num3); num3 *= Mathf.Min(0f, ThrottleAxis) + 1f; if (!base.Grounded) { num2 = LiftAmount * LiftAcceleration * (0f - num3 + 1f); } Rigidbody.AddForce(Vector3.up * num2, (ForceMode)5); if (ThrottleAmount >= 1f) { Rigidbody.useGravity = false; } else { Rigidbody.useGravity = true; } if (!base.Grounded && ThrottleAmount >= 1f) { float num4 = Vector3.SignedAngle(((Component)this).transform.up, Vector3.up, ((Component)this).transform.forward); Rigidbody.AddTorque(num4 * ((Component)this).transform.forward * UprightForce, (ForceMode)5); float num5 = Vector3.SignedAngle(((Component)this).transform.up, Vector3.up, ((Component)this).transform.right); Rigidbody.AddTorque(num5 * ((Component)this).transform.right * UprightForce, (ForceMode)5); Vector3 val = Rigidbody.velocity - Vector3.Project(Rigidbody.velocity, Vector3.up); Rigidbody.velocity = Vector3.Lerp(Rigidbody.velocity, val, AirVerticalFriction * num3 * Time.deltaTime); Vector3 val2 = new Vector3(((Component)this).transform.up.x, 0f, ((Component)this).transform.up.z); Vector3 normalized = ((Vector3)(ref val2)).normalized; Rigidbody.AddForce(normalized * (MovementAcceleration * Mathf.Max(0f, ThrottleAxis)) * num3, (ForceMode)5); Rigidbody.AddForce(normalized * IdleAcceleration * num3, (ForceMode)5); } } private bool CheckSensorGrounded(Transform sensor) { //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_000b: Unknown result type (might be due to invalid IL or missing references) return Physics.Raycast(new Ray(sensor.position, Vector3.down), 0.1f, 1); } } [RequireComponent(typeof(AudioSource))] public class EngineAudio : MonoBehaviour { public float MinimumSpeed; public float PitchLerp = 5f; public AnimationCurve PitchCurve; public float PitchCurveMax = 100f; public float AddPitch = 1f; private DrivableCar _car; private AudioSource _audioSource; private float _currentPitch = 1f; private void Awake() { _car = ((Component)this).GetComponentInParent<DrivableCar>(); _audioSource = ((Component)this).GetComponent<AudioSource>(); } private float EvaluatePitchCurve(float value) { float num = Mathf.Min(PitchCurveMax, Mathf.Abs(value)) / PitchCurveMax; return PitchCurve.Evaluate(num); } private void Update() { if (Core.Instance.IsCorePaused) { return; } float num = 1f; float num2 = 0f; CarWheel[] wheels = _car.Wheels; foreach (CarWheel carWheel in wheels) { if (carWheel.Throttle) { float num3 = Mathf.Abs(carWheel.CurrentSpeed); if (num3 > num2) { num2 = num3; } } } float volume = 1f; if (MinimumSpeed > 0f) { volume = Mathf.Min(MinimumSpeed, num2) / MinimumSpeed; } float num4 = EvaluatePitchCurve(num2) * AddPitch; num += num4; _currentPitch = Mathf.Lerp(_currentPitch, num, PitchLerp * Time.deltaTime); _audioSource.pitch = _currentPitch; _audioSource.volume = volume; } } [RequireComponent(typeof(AudioSource))] public class EngineRestingAudio : MonoBehaviour { public float MaximumSpeed = 1f; private DrivableCar _car; private AudioSource _audioSource; private void Awake() { _car = ((Component)this).GetComponentInParent<DrivableCar>(); _audioSource = ((Component)this).GetComponent<AudioSource>(); } private void Update() { if (Core.Instance.IsCorePaused) { return; } float num = 0f; CarWheel[] wheels = _car.Wheels; foreach (CarWheel carWheel in wheels) { if (carWheel.Throttle) { float num2 = Mathf.Abs(carWheel.CurrentSpeed); if (num2 > num) { num = num2; } } } float volume = 0f; if (MaximumSpeed > 0f) { volume = 0f - Mathf.Min(MaximumSpeed, num) / MaximumSpeed + 1f; } _audioSource.volume = volume; } } [RequireComponent(typeof(AudioSource))] public class Horn : MonoBehaviour { public float LerpSpeed = 5f; private DrivableCar _car; private AudioSource _audioSource; private float _currentVolume; private void Awake() { _car = ((Component)this).GetComponentInParent<DrivableCar>(); _audioSource = ((Component)this).GetComponent<AudioSource>(); } private void Update() { if (!Core.Instance.IsCorePaused) { float num = 0f; if (_car.HornHeld) { num = 1f; } if (_currentVolume <= 0.1f) { _audioSource.Stop(); _audioSource.Play(); } _currentVolume = Mathf.Lerp(_currentVolume, num, LerpSpeed * Time.deltaTime); _audioSource.volume = _currentVolume; } } } public enum ChopperControlTypes { A, B } public interface ICarConfig { bool SlopCrewIntegration { get; set; } bool ContinuousCollisionDetection { get; set; } bool DeveloperMode { get; set; } KeyCode ReloadBundlesKey { get; set; } ChopperControlTypes ChopperControlType { get; set; } } public class OneShotAudioSource : MonoBehaviour { private AudioSource[] _pooledAudioSources; private void Awake() { _pooledAudioSources = ((Component)this).GetComponentsInChildren<AudioSource>(); } private AudioSource GetPooledAudioSource() { AudioSource[] pooledAudioSources = _pooledAudioSources; foreach (AudioSource val in pooledAudioSources) { if (!val.isPlaying) { return val; } } return _pooledAudioSources[0]; } public void Play(AudioClip clip) { AudioSource pooledAudioSource = GetPooledAudioSource(); pooledAudioSource.Stop(); pooledAudioSource.clip = clip; pooledAudioSource.Play(); } } public class PassengerSeatInteractable : CustomInteractable { private CarPassengerSeat _seat; public void Initialize(CarPassengerSeat seat) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) _seat = seat; base.Icon = (InteractableIcon)0; } public override bool Test(Player player) { if ((Object)(object)_seat.Player == (Object)null) { return !_seat.Car.DoorsLocked; } return false; } public override void Interact(Player player) { CarController.Instance.EnterCarAsPassenger(_seat.Car
CarJack.Plugin.dll
Decompiled 4 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using CarJack.Common; using CarJack.Common.WhipRemix; using CommonAPI; using CommonAPI.Phone; using HarmonyLib; using Microsoft.CodeAnalysis; using Reptile; using Reptile.Phone; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("CarJack.Plugin")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("CarJack Plugin")] [assembly: AssemblyFileVersion("1.7.7.0")] [assembly: AssemblyInformationalVersion("1.7.7+c9cd941543413d478afa4e05fa6b7ea9cde12fd4")] [assembly: AssemblyProduct("CarJack.Plugin")] [assembly: AssemblyTitle("CarJack.Plugin")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.7.7.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 CarJack.Plugin { public class CarDebugController : MonoBehaviour { public static CarDebugController Create() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown GameObject val = new GameObject("Car Debug Controller"); Object.DontDestroyOnLoad((Object)val); return val.AddComponent<CarDebugController>(); } private void Update() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(CarController.Config.ReloadBundlesKey)) { Core.Instance.BaseModule.StageManager.ExitCurrentStage(Utility.GetCurrentStage(), (Stage)(-1)); CarAssets.Instance.UnloadAllBundles(); CarAssets.Instance.LoadBundles(); CarDatabase.Initialize(); RecolorManager.UnloadRecolors(); RecolorManager.LoadRecolors(); } } } public class CarJackApp : CustomApp { private static Sprite Icon; private SimplePhoneButton _doorButton; private SimplePhoneButton _muteButton; private SimplePhoneButton _autoRecoverButton; private SimplePhoneButton _whipRemixButton; public static void Initialize(string location) { Icon = TextureUtility.LoadSprite(Path.Combine(location, "Phone-App-Icon.png")); PhoneAPI.RegisterApp<CarJackApp>("carjack", Icon); PhoneAPI.RegisterApp<SpawnCarApp>("spawn car", Icon); PhoneAPI.RegisterApp<SpawnCarByBundleApp>("choose bundle", Icon); PhoneAPI.RegisterApp<RecolorApp>("whipremix", Icon); } public override void OnAppInit() { ((CustomApp)this).OnAppInit(); ((CustomApp)this).CreateTitleBar("CarJack", Icon, 80f); base.ScrollView = PhoneScrollView.Create((CustomApp)(object)this, 275f, 1600f); SimplePhoneButton val = PhoneUIUtility.CreateSimpleButton("Spawn Car"); ((PhoneButton)val).OnConfirm = (Action)Delegate.Combine(((PhoneButton)val).OnConfirm, (Action)delegate { CarController instance = CarController.Instance; if ((Object)(object)instance != (Object)null) { DrivableCar currentCar = instance.CurrentCar; if ((Object)(object)currentCar != (Object)null && !currentCar.Driving) { return; } } if (CarAssets.Instance.Bundles.Count == 1) { ((App)this).MyPhone.GetAppInstance<SpawnCarApp>().SetBundleFilter(); ((App)this).MyPhone.OpenApp(typeof(SpawnCarApp)); } else { ((App)this).MyPhone.OpenApp(typeof(SpawnCarByBundleApp)); } }); base.ScrollView.AddButton((PhoneButton)(object)val); _doorButton = PhoneUIUtility.CreateSimpleButton("Doors: Unlocked"); SimplePhoneButton doorButton = _doorButton; ((PhoneButton)doorButton).OnConfirm = (Action)Delegate.Combine(((PhoneButton)doorButton).OnConfirm, (Action)delegate { ToggleDoorsLocked(); }); base.ScrollView.AddButton((PhoneButton)(object)_doorButton); _muteButton = PhoneUIUtility.CreateSimpleButton("Mute Players: OFF"); SimplePhoneButton muteButton = _muteButton; ((PhoneButton)muteButton).OnConfirm = (Action)Delegate.Combine(((PhoneButton)muteButton).OnConfirm, (Action)delegate { ToggleMutePlayers(); }); base.ScrollView.AddButton((PhoneButton)(object)_muteButton); _autoRecoverButton = PhoneUIUtility.CreateSimpleButton("Auto-Recovery: ON"); SimplePhoneButton autoRecoverButton = _autoRecoverButton; ((PhoneButton)autoRecoverButton).OnConfirm = (Action)Delegate.Combine(((PhoneButton)autoRecoverButton).OnConfirm, (Action)delegate { ToggleAutoRecover(); }); base.ScrollView.AddButton((PhoneButton)(object)_autoRecoverButton); } private void UpdateWhipRemix() { if (RecolorApp.AvailableForCurrentCar() && (Object)(object)_whipRemixButton == (Object)null) { CreateWhipRemixButton(); } else if (!RecolorApp.AvailableForCurrentCar() && (Object)(object)_whipRemixButton != (Object)null) { base.ScrollView.RemoveButton((PhoneButton)(object)_whipRemixButton); _whipRemixButton = null; } } private void CreateWhipRemixButton() { _whipRemixButton = PhoneUIUtility.CreateSimpleButton("WhipRemix"); SimplePhoneButton whipRemixButton = _whipRemixButton; ((PhoneButton)whipRemixButton).OnConfirm = (Action)Delegate.Combine(((PhoneButton)whipRemixButton).OnConfirm, (Action)delegate { ((App)this).MyPhone.OpenApp(typeof(RecolorApp)); }); base.ScrollView.AddButton((PhoneButton)(object)_whipRemixButton); } public override void OnAppUpdate() { ((App)this).OnAppUpdate(); UpdateDoorsLockedLabel(); UpdateMutePlayersLabel(); UpdateAutoRecoverLabel(); UpdateWhipRemix(); } private void ToggleAutoRecover() { PlayerData.Instance.AutoRecover = !PlayerData.Instance.AutoRecover; UpdateAutoRecoverLabel(); PlayerData.Instance.Save(); } private void ToggleDoorsLocked() { PlayerData.Instance.DoorsLocked = !PlayerData.Instance.DoorsLocked; UpdateDoorsLockedLabel(); PlayerData.Instance.Save(); } private void ToggleMutePlayers() { PlayerData.Instance.MutePlayers = !PlayerData.Instance.MutePlayers; UpdateMutePlayersLabel(); PlayerData.Instance.Save(); } private void UpdateAutoRecoverLabel() { ((TMP_Text)_autoRecoverButton.Label).text = "Auto-Recovery: " + (PlayerData.Instance.AutoRecover ? "ON" : "OFF"); } private void UpdateMutePlayersLabel() { ((TMP_Text)_muteButton.Label).text = "Mute Players: " + (PlayerData.Instance.MutePlayers ? "ON" : "OFF"); } private void UpdateDoorsLockedLabel() { ((TMP_Text)_doorButton.Label).text = "Doors: " + (PlayerData.Instance.DoorsLocked ? "Locked" : "Unlocked"); } } [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] public class CarJackPluginAttribute : Attribute { } [BepInPlugin("CarJack.Plugin", "CarJack.Plugin", "1.7.7")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class Plugin : BaseUnityPlugin { private static Type ForceLoadCarJackCommonAssembly = typeof(DrivableCar); private void Awake() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading CarJack.Plugin 1.7.7"); try { new Harmony("CarJack.Plugin").PatchAll(); string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); new CarAssets { MainBundlePath = Path.Combine(directoryName, "carjack"), AddonBundlePath = Paths.PluginPath, PluginDirectoryName = Path.GetFileName(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location)) }.LoadBundles(); new RecolorSaveData(); RecolorManager.Initialize(Paths.PluginPath); RecolorManager.LoadRecolors(); RecolorApp.Initialize(); CarController.Initialize((ICarConfig)(object)new PluginCarConfig(((BaseUnityPlugin)this).Config)); if (CarController.Config.DeveloperMode) { CarDebugController.Create(); } CarDatabase.Initialize(); CarJackApp.Initialize(directoryName); LoadCompatibilityPlugins(); new PlayerData().LoadOrCreate(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loaded CarJack.Plugin 1.7.7!"); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)string.Format("Failed to load {0} {1}!{2}{3}", "CarJack.Plugin", "1.7.7", Environment.NewLine, ex)); } } private void LoadCompatibilityPlugins() { if (Chainloader.PluginInfos.ContainsKey("SlopCrew.Plugin")) { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading CarJack SlopCrew Plugin!"); try { string assemblyPath = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "CarJack.SlopCrew.dll"); LoadPlugin(assemblyPath); } catch (Exception arg) { ((BaseUnityPlugin)this).Logger.LogError((object)$"Failed to load CarJack SlopCrew Plugin!{Environment.NewLine}{arg}"); } } if (Chainloader.PluginInfos.ContainsKey("BombRushCamera")) { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Loading CarJack BombRushCamera Plugin!"); try { string assemblyPath2 = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "CarJack.BombRushCamera.dll"); LoadPlugin(assemblyPath2); } catch (Exception arg2) { ((BaseUnityPlugin)this).Logger.LogError((object)$"Failed to load CarJack BombRushCamera Plugin!{Environment.NewLine}{arg2}"); } } } private void LoadPlugin(string assemblyPath) { Type[] types = Assembly.LoadFrom(assemblyPath).GetTypes(); foreach (Type type in types) { if (type.GetCustomAttribute<CarJackPluginAttribute>() != null) { Activator.CreateInstance(type); } } } } public class PluginCarConfig : ICarConfig { private ConfigEntry<bool> _slopCrewIntegration; private ConfigEntry<bool> _continuousCollisionDetection; private ConfigEntry<bool> _developerMode; private ConfigEntry<KeyCode> _reloadBundlesKey; private ConfigEntry<ChopperControlTypes> _chopperControlType; public ChopperControlTypes ChopperControlType { get { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return _chopperControlType.Value; } set { //IL_0006: Unknown result type (might be due to invalid IL or missing references) _chopperControlType.Value = value; } } public bool DeveloperMode { get { return _developerMode.Value; } set { _developerMode.Value = value; } } public KeyCode ReloadBundlesKey { get { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return _reloadBundlesKey.Value; } set { //IL_0006: Unknown result type (might be due to invalid IL or missing references) _reloadBundlesKey.Value = value; } } public bool SlopCrewIntegration { get { return _slopCrewIntegration.Value; } set { _slopCrewIntegration.Value = value; } } public bool ContinuousCollisionDetection { get { return _continuousCollisionDetection.Value; } set { _continuousCollisionDetection.Value = value; } } public PluginCarConfig(ConfigFile configFile) { _continuousCollisionDetection = configFile.Bind<bool>("General", "ContinuousCollisionDetection", true, "Prevents cars from going through geometry at high speeds."); _slopCrewIntegration = configFile.Bind<bool>("General", "SlopCrewIntegration", true, "Synchronize cars in SlopCrew."); _developerMode = configFile.Bind<bool>("Development", "DeveloperMode", false, "Enables development features."); _reloadBundlesKey = configFile.Bind<KeyCode>("Development", "ReloadBundlesKey", (KeyCode)289, "Key to reload all bundles when in developer mode."); _chopperControlType = configFile.Bind<ChopperControlTypes>("Controls", "ChopperControlType", (ChopperControlTypes)0, "Control type for helicopters on controller.\r\nA: Left Stick to adjust pitch/roll, face buttons to adjust yaw.\r\nB: Left Stick to adjust pitch/yaw, face buttons to adjust roll."); } } public class RecolorApp : CustomApp { private const string NewRecolorFolder = "WhipRemix"; public override bool Available => false; public static void Initialize() { CarController.OnPlayerEnteredCar = (Action)Delegate.Combine(CarController.OnPlayerEnteredCar, new Action(OnEnterCar)); } private static void OnEnterCar() { Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); if ((Object)(object)currentPlayer == (Object)null) { return; } Phone phone = currentPlayer.phone; if (!((Object)(object)phone == (Object)null)) { RecolorApp appInstance = phone.GetAppInstance<RecolorApp>(); if (!((Object)(object)appInstance == (Object)null)) { appInstance.SetForCurrentCar(); } } } public static bool AvailableForCurrentCar() { CarController instance = CarController.Instance; if ((Object)(object)instance == (Object)null) { return false; } DrivableCar currentCar = instance.CurrentCar; if ((Object)(object)currentCar == (Object)null) { return false; } if (!currentCar.Driving) { return false; } if ((Object)(object)((Component)currentCar).GetComponent<RecolorableCar>() == (Object)null) { return false; } return true; } public void SetForCurrentCar() { base.ScrollView.RemoveAllButtons(); base.ScrollView.ResetScroll(); base.ScrollView.CancelAnimation(); CarController instance = CarController.Instance; if ((Object)(object)instance == (Object)null) { return; } DrivableCar car = instance.CurrentCar; if ((Object)(object)car == (Object)null) { return; } SimplePhoneButton val = PhoneUIUtility.CreateSimpleButton("Stock"); ((PhoneButton)val).OnConfirm = (Action)Delegate.Combine(((PhoneButton)val).OnConfirm, (Action)delegate { ((Component)car).GetComponent<RecolorableCar>().ApplyDefaultColor(); RecolorSaveData.Instance.SetRecolorForCar(car.InternalName, (string)null); Core.Instance.SaveManager.SaveCurrentSaveSlot(); }); base.ScrollView.AddButton((PhoneButton)(object)val); foreach (KeyValuePair<string, Recolor> recolor in RecolorManager.RecolorsByGUID) { if (!(recolor.Value.Properties.CarInternalName != car.InternalName)) { SimplePhoneButton val2 = PhoneUIUtility.CreateSimpleButton(recolor.Value.Properties.RecolorDisplayName); ((PhoneButton)val2).OnConfirm = (Action)Delegate.Combine(((PhoneButton)val2).OnConfirm, (Action)delegate { ((Component)car).GetComponent<RecolorableCar>().ApplyRecolor(recolor.Value); RecolorSaveData.Instance.SetRecolorForCar(car.InternalName, recolor.Value.Properties.RecolorGUID); Core.Instance.SaveManager.SaveCurrentSaveSlot(); }); base.ScrollView.AddButton((PhoneButton)(object)val2); } } SimplePhoneButton val3 = PhoneUIUtility.CreateSimpleButton("Create New Recolor"); ((PhoneButton)val3).OnConfirm = (Action)Delegate.Combine(((PhoneButton)val3).OnConfirm, (Action)delegate { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown CarController instance2 = CarController.Instance; Recolor val4 = new Recolor(); val4.CreateDefault(((Component)instance2.CurrentCar).GetComponent<RecolorableCar>()); string text = Path.Combine(RecolorManager.RecolorFolder, "WhipRemix"); if (!Directory.Exists(text)) { Directory.CreateDirectory(text); } string name = ((Object)CarDatabase.CarByInternalName[car.InternalName].Prefab).name; string uniquePath = GetUniquePath(Path.Combine(text, name + " Recolor.whipremix")); val4.Properties.RecolorDisplayName = Path.GetFileNameWithoutExtension(uniquePath); val4.Save(uniquePath); Core.Instance.UIManager.ShowNotification("New recolor ZIP saved to <color=yellow>BepInEx/plugins/WhipRemix/" + val4.Properties.RecolorDisplayName + ".whipremix</color>", Array.Empty<string>()); }); base.ScrollView.AddButton((PhoneButton)(object)val3); } public override void OnAppInit() { ((CustomApp)this).OnAppInit(); ((CustomApp)this).CreateIconlessTitleBar("WhipRemix", 80f); base.ScrollView = PhoneScrollView.Create((CustomApp)(object)this, 275f, 1600f); } public override void OnAppUpdate() { ((App)this).OnAppUpdate(); if (!AvailableForCurrentCar()) { ((App)this).MyPhone.CloseCurrentApp(); } } private string GetUniquePath(string path) { if (!File.Exists(path)) { return path; } int i = 2; string extension = Path.GetExtension(path); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path); string directoryName; for (directoryName = Path.GetDirectoryName(path); File.Exists(Path.Combine(directoryName, $"{fileNameWithoutExtension} {i}{extension}")); i++) { } return Path.Combine(directoryName, $"{fileNameWithoutExtension} {i}{extension}"); } } public class SpawnCarApp : CustomApp { public override bool Available => false; public void SetBundleFilter(CarBundle bundle = null) { base.ScrollView.RemoveAllButtons(); base.ScrollView.ResetScroll(); base.ScrollView.CancelAnimation(); foreach (KeyValuePair<string, CarEntry> item in CarDatabase.CarByInternalName) { if (bundle == null || item.Value.Bundle == bundle) { SimplePhoneButton val = CreateCarButton(item.Key); base.ScrollView.AddButton((PhoneButton)(object)val); } } } public override void OnAppInit() { ((CustomApp)this).OnAppInit(); ((CustomApp)this).CreateIconlessTitleBar("Spawn Car", 80f); base.ScrollView = PhoneScrollView.Create((CustomApp)(object)this, 275f, 1600f); } public override void OnAppUpdate() { ((App)this).OnAppUpdate(); CarController instance = CarController.Instance; if (!((Object)(object)instance == (Object)null)) { DrivableCar currentCar = instance.CurrentCar; if (!((Object)(object)currentCar == (Object)null) && !currentCar.Driving) { ((App)this).MyPhone.CloseCurrentApp(); } } } private SimplePhoneButton CreateCarButton(string carInternalName) { SimplePhoneButton obj = PhoneUIUtility.CreateSimpleButton(((Object)CarDatabase.CarByInternalName[carInternalName].Prefab).name); ((PhoneButton)obj).OnConfirm = (Action)Delegate.Combine(((PhoneButton)obj).OnConfirm, (Action)delegate { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) CarController.Instance.ExitCar(); ((App)this).MyPhone.ReturnToHome(); Player currentPlayer = WorldHandler.instance.GetCurrentPlayer(); GameObject obj2 = Object.Instantiate<GameObject>(CarDatabase.CarByInternalName[carInternalName].Prefab); obj2.transform.position = ((Component)currentPlayer).transform.position; obj2.transform.rotation = ((Component)currentPlayer).transform.rotation; DrivableCar component = obj2.GetComponent<DrivableCar>(); component.Initialize(); component.DoorsLocked = PlayerData.Instance.DoorsLocked; RecolorableCar component2 = ((Component)component).GetComponent<RecolorableCar>(); if ((Object)(object)component2 != (Object)null) { component2.ApplySavedRecolor(); } CarController.Instance.EnterCar(component); }); return obj; } } public class SpawnCarByBundleApp : CustomApp { public override bool Available => false; public override void OnAppInit() { ((CustomApp)this).OnAppInit(); ((CustomApp)this).CreateIconlessTitleBar("Choose Bundle", 80f); base.ScrollView = PhoneScrollView.Create((CustomApp)(object)this, 275f, 1600f); base.ScrollView.RemoveAllButtons(); base.ScrollView.ResetScroll(); base.ScrollView.CancelAnimation(); foreach (CarBundle bundle in CarAssets.Instance.Bundles) { SimplePhoneButton val = CreateBundleButton(bundle); base.ScrollView.AddButton((PhoneButton)(object)val); } } public override void OnAppUpdate() { ((App)this).OnAppUpdate(); CarController instance = CarController.Instance; if (!((Object)(object)instance == (Object)null)) { DrivableCar currentCar = instance.CurrentCar; if (!((Object)(object)currentCar == (Object)null) && !currentCar.Driving) { ((App)this).MyPhone.CloseCurrentApp(); } } } private SimplePhoneButton CreateBundleButton(CarBundle bundle) { SimplePhoneButton obj = PhoneUIUtility.CreateSimpleButton(bundle.Name); ((PhoneButton)obj).OnConfirm = (Action)Delegate.Combine(((PhoneButton)obj).OnConfirm, (Action)delegate { ((App)this).MyPhone.GetAppInstance<SpawnCarApp>().SetBundleFilter(bundle); ((App)this).MyPhone.OpenApp(typeof(SpawnCarApp)); }); return obj; } } public static class PluginInfo { public const string PLUGIN_GUID = "CarJack.Plugin"; public const string PLUGIN_NAME = "CarJack.Plugin"; public const string PLUGIN_VERSION = "1.7.7"; } } namespace CarJack.Plugin.Patches { [HarmonyPatch(typeof(AmbientTrigger))] internal static class AmbientTriggerPatch { [HarmonyPrefix] [HarmonyPatch("OnTriggerEnter")] private static bool OnTriggerEnter(Collider trigger) { DrivableCar componentInParent = ((Component)trigger).GetComponentInParent<DrivableCar>(); if ((Object)(object)componentInParent == (Object)null) { return true; } return componentInParent.InCar; } [HarmonyPrefix] [HarmonyPatch("OnTriggerExit")] private static bool OnTriggerExit(Collider trigger) { DrivableCar componentInParent = ((Component)trigger).GetComponentInParent<DrivableCar>(); if ((Object)(object)componentInParent == (Object)null) { return true; } return componentInParent.InCar; } } [HarmonyPatch(typeof(AppHomeScreen))] internal static class AppHomeScreenPatch { [HarmonyPrefix] [HarmonyPatch("OnPressRight")] private static bool OnPressRight_Prefix(AppHomeScreen __instance) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Invalid comparison between Unknown and I4 if ((Object)(object)CarController.Instance == (Object)null) { return true; } if (!((Object)(object)CarController.Instance.CurrentCar != (Object)null)) { return true; } PhoneScrollButton selectedButtton = ((PhoneScroll)__instance.m_ScrollView).SelectedButtton; if ((int)((HomescreenButton)((selectedButtton is HomescreenButton) ? selectedButtton : null)).AssignedApp.appType != 3) { return true; } ((App)__instance).m_AudioManager.PlaySfxGameplay((SfxCollectionID)14, (AudioClipID)305, 0f); return false; } } [HarmonyPatch(typeof(BMXOnlyGateway))] internal static class BMXOnlyGatewayPatch { [HarmonyPrefix] [HarmonyPatch("OnTriggerStay")] private static bool OnTriggerStay(Collider other) { if ((Object)(object)((Component)other).GetComponentInParent<DrivableCar>() != (Object)null) { return false; } return true; } } [HarmonyPatch(typeof(CharacterSelect))] internal static class CharacterSelectPatch { [HarmonyPrefix] [HarmonyPatch("Init")] private static void Init_Prefix(Player p, CharacterSelect __instance) { if (!p.isAI) { CarController instance = CarController.Instance; if (!((Object)(object)instance.CurrentCar == (Object)null)) { instance.ExitCar(); } } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
CarJack.SlopCrew.dll
Decompiled 4 months agousing System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using CarJack.Common; using CarJack.Common.WhipRemix; using CarJack.Plugin; using Google.Protobuf; using Microsoft.CodeAnalysis; using Microsoft.Extensions.DependencyInjection; using Reptile; using SlopCrew.API; using SlopCrew.Common; using SlopCrew.Common.Proto; using SlopCrew.Plugin; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("CarJack.SlopCrew")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("SlopCrew CarJack Plugin")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+c9cd941543413d478afa4e05fa6b7ea9cde12fd4")] [assembly: AssemblyProduct("CarJack.SlopCrew")] [assembly: AssemblyTitle("CarJack.SlopCrew")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 CarJack.SlopCrew { public class BallController : MonoBehaviour { [CompilerGenerated] private static class <>O { public static OnStageInitializedDelegate <0>__StageManager_OnStageInitialized; } private const float LerpMaxDistance = 10f; private const float Lerp = 10f; private const string BallSubHostPacketGUID = "CarJack-Ball-SubHost"; private const string BallHostPacketGUID = "CarJack-Ball-Host"; private const string BallPacketGUID = "CarJack-Ball"; private const float TickRate = 0.2f; private const string BallGameObjectName = "rocket ball"; private ISlopCrewAPI _api; private GameObject _ball; private Rigidbody _ballRB; private float _currentTick = 0.2f; private bool _host; private bool _subHost; private bool _hostFound; private bool _subHostFound; private Vector3 _receivedPosition; private Quaternion _receivedRotation; public static void Initialize() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__StageManager_OnStageInitialized; if (obj == null) { OnStageInitializedDelegate val = StageManager_OnStageInitialized; <>O.<0>__StageManager_OnStageInitialized = val; obj = (object)val; } StageManager.OnStageInitialized += (OnStageInitializedDelegate)obj; } private void Awake() { _api = APIManager.API; _api.OnCustomPacketReceived += OnBallPacketReceived; _api.OnCustomPacketReceived += OnBallHostPacketReceived; } private void Update() { //IL_0050: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: 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_009e: 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) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) if (Core.Instance.IsCorePaused || !_hostFound || !_subHostFound) { return; } if (_subHost) { _receivedPosition = _ballRB.position; _receivedRotation = _ballRB.rotation; return; } Vector3 val = _ballRB.position - _receivedPosition; if (((Vector3)(ref val)).magnitude >= 10f) { _ballRB.MovePosition(_receivedPosition); _ballRB.MoveRotation(_receivedRotation); return; } Vector3 val2 = Vector3.Lerp(_ballRB.position, _receivedPosition, 10f * Time.deltaTime); Quaternion val3 = Quaternion.Lerp(_ballRB.rotation, _receivedRotation, 10f * Time.deltaTime); _ballRB.MovePosition(val2); _ballRB.MoveRotation(val3); } private void UpdateHost() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_0047: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) List<PlayerCarData> playerCars = NetworkController.Instance.PlayerCars; float num = float.MaxValue; uint num2 = uint.MaxValue; float num3 = float.MaxValue; DrivableCar currentCar = CarController.Instance.CurrentCar; Vector3 val; if ((Object)(object)currentCar != (Object)null) { val = currentCar.Rigidbody.position - _ballRB.position; num3 = ((Vector3)(ref val)).magnitude; } foreach (PlayerCarData item in playerCars) { val = item.LastPacket.Position - _ballRB.position; float magnitude = ((Vector3)(ref val)).magnitude; if (magnitude < num) { num = magnitude; num2 = item.PlayerID; } } if (num2 == uint.MaxValue) { _subHost = true; _subHostFound = true; SendBallHostPacket(uint.MaxValue, subHost: true); } else if (num3 < num) { _subHost = true; _subHostFound = true; SendBallHostPacket(uint.MaxValue, subHost: true); } else { _subHost = false; _subHostFound = true; SendBallHostPacket(num2, subHost: true); } } private void FixedUpdate() { if (Core.Instance.IsCorePaused || !_api.Connected) { return; } _currentTick -= Time.deltaTime; if (!(_currentTick <= 0f)) { return; } _currentTick = 0.2f; if (_subHost) { SendBallPacket(); } if (!_host) { ReadOnlyCollection<uint> players = _api.Players; uint num = uint.MaxValue; foreach (uint item in players) { if (item <= num && NetworkController.Instance.PlayerHasCar(item)) { num = item; } } if (num != uint.MaxValue) { SendBallHostPacket(num, subHost: false); _hostFound = true; } else { _hostFound = false; _subHostFound = false; } } else { UpdateHost(); } } private void OnDestroy() { _api.OnCustomPacketReceived -= OnBallPacketReceived; _api.OnCustomPacketReceived -= OnBallHostPacketReceived; } private void SendBallHostPacket(uint playerID, bool subHost) { MemoryStream memoryStream = new MemoryStream(); BinaryWriter binaryWriter = new BinaryWriter(memoryStream); binaryWriter.Write((byte)0); binaryWriter.Write(playerID); binaryWriter.Flush(); if (subHost) { _api.SendCustomPacket("CarJack-Ball-SubHost", memoryStream.ToArray()); } else { _api.SendCustomPacket("CarJack-Ball-Host", memoryStream.ToArray()); } binaryWriter.Close(); } private void SendBallPacket() { //IL_0012: 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_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_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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) MemoryStream memoryStream = new MemoryStream(); BinaryWriter binaryWriter = new BinaryWriter(memoryStream); Vector3 position = _ballRB.position; Quaternion rotation = _ballRB.rotation; Vector3 velocity = _ballRB.velocity; Vector3 angularVelocity = _ballRB.angularVelocity; binaryWriter.Write((byte)0); binaryWriter.Write(position.x); binaryWriter.Write(position.y); binaryWriter.Write(position.z); binaryWriter.Write(rotation.x); binaryWriter.Write(rotation.y); binaryWriter.Write(rotation.z); binaryWriter.Write(rotation.w); binaryWriter.Write(velocity.x); binaryWriter.Write(velocity.y); binaryWriter.Write(velocity.z); binaryWriter.Write(angularVelocity.x); binaryWriter.Write(angularVelocity.y); binaryWriter.Write(angularVelocity.z); binaryWriter.Flush(); SlopCrewExtensions.SendCustomPacket("CarJack-Ball", memoryStream.ToArray(), (SendFlags)0); binaryWriter.Close(); } private void OnBallHostPacketReceived(uint playerid, string guid, byte[] data) { if (guid != "CarJack-Ball-Host" && guid != "CarJack-Ball-SubHost") { return; } BinaryReader binaryReader = new BinaryReader(new MemoryStream(data)); binaryReader.ReadByte(); uint num = binaryReader.ReadUInt32(); binaryReader.Close(); if (_api.PlayerIDExists(num) == true || num == uint.MaxValue) { if (guid == "CarJack-Ball-Host") { _host = false; _hostFound = true; } else if (guid == "CarJack-Ball-SubHost") { _subHost = false; _subHostFound = true; } } else if (guid == "CarJack-Ball-Host") { _host = true; _hostFound = true; } else if (guid == "CarJack-Ball-SubHost") { _subHost = true; _subHostFound = true; } } private void OnBallPacketReceived(uint playerid, string guid, byte[] data) { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) guid = SlopCrewExtensions.GetPacketID(guid); if (!(guid != "CarJack-Ball") && !_subHost) { BinaryReader binaryReader = new BinaryReader(new MemoryStream(data)); binaryReader.ReadByte(); float num = binaryReader.ReadSingle(); float num2 = binaryReader.ReadSingle(); float num3 = binaryReader.ReadSingle(); float num4 = binaryReader.ReadSingle(); float num5 = binaryReader.ReadSingle(); float num6 = binaryReader.ReadSingle(); float num7 = binaryReader.ReadSingle(); float num8 = binaryReader.ReadSingle(); float num9 = binaryReader.ReadSingle(); float num10 = binaryReader.ReadSingle(); float num11 = binaryReader.ReadSingle(); float num12 = binaryReader.ReadSingle(); float num13 = binaryReader.ReadSingle(); _ballRB.velocity = new Vector3(num8, num9, num10); _ballRB.angularVelocity = new Vector3(num11, num12, num13); _receivedPosition = new Vector3(num, num2, num3); _receivedRotation = new Quaternion(num4, num5, num6, num7); binaryReader.Close(); } } private static void StageManager_OnStageInitialized() { GameObject val = GameObject.Find("rocket ball"); if (!((Object)(object)val == (Object)null)) { Create(val); } } private static BallController Create(GameObject ball) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) BallController ballController = new GameObject("Ball Controller").AddComponent<BallController>(); ballController.SetBall(ball); return ballController; } private void SetBall(GameObject ball) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: 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_0030: Unknown result type (might be due to invalid IL or missing references) _ball = ball; _ballRB = ball.GetComponentInChildren<Rigidbody>(); _receivedPosition = _ballRB.position; _receivedRotation = _ballRB.rotation; } } public class NetworkController : MonoBehaviour { [CompilerGenerated] private static class <>O { public static OnStageInitializedDelegate <0>__StageManager_OnStageInitialized; } public List<PlayerCarData> PlayerCars; private const byte KickPassengersPacketVersion = 0; private const string KickPassengersPacketGUID = "CarJack-KickPassengers"; private const float LerpMaxDistance = 20f; private const float Lerp = 5f; private const float TickRate = 0.2f; private Dictionary<uint, PlayerCarData> _playerCarsById; private ISlopCrewAPI _api; private float _currentTick = 0.2f; public static NetworkController Instance { get; private set; } public static void Initialize() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__StageManager_OnStageInitialized; if (obj == null) { OnStageInitializedDelegate val = StageManager_OnStageInitialized; <>O.<0>__StageManager_OnStageInitialized = val; obj = (object)val; } StageManager.OnStageInitialized += (OnStageInitializedDelegate)obj; } private static void StageManager_OnStageInitialized() { Create(); } private static NetworkController Create() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return new GameObject("CarJack Network Controller").AddComponent<NetworkController>(); } private void Awake() { Instance = this; PlayerCars = new List<PlayerCarData>(); _playerCarsById = new Dictionary<uint, PlayerCarData>(); _api = APIManager.API; _api.OnCustomPacketReceived += _api_OnCustomPacketReceived; CarController.OnPlayerExitingCar = (Action)Delegate.Combine(CarController.OnPlayerExitingCar, new Action(SendKickPassengersPacket)); } private void OnDestroy() { _api.OnCustomPacketReceived -= _api_OnCustomPacketReceived; CarController.OnPlayerExitingCar = (Action)Delegate.Remove(CarController.OnPlayerExitingCar, new Action(SendKickPassengersPacket)); } private void _api_OnCustomPacketReceived(uint playerId, string guid, byte[] data) { guid = SlopCrewExtensions.GetPacketID(guid); BinaryReader binaryReader = new BinaryReader(new MemoryStream(data)); if (!(guid == "CarJack-KickPassengers")) { if (guid == "CarJack-PlayerCar") { OnPlayerCarDataPacketReceived(playerId, binaryReader); } } else { OnKickPassengersPacketReceived(playerId, binaryReader); } binaryReader.Close(); } private void SendKickPassengersPacket() { DrivableCar currentCar = CarController.Instance.CurrentCar; if (!((Object)(object)currentCar == (Object)null) && currentCar.Driving) { _api.SendCustomPacket("CarJack-KickPassengers", new byte[1]); } } private PlayerCarData GetPlayerForCar(DrivableCar car) { foreach (KeyValuePair<uint, PlayerCarData> item in _playerCarsById) { if ((Object)(object)item.Value.Car == (Object)(object)car) { return item.Value; } } return null; } private void OnKickPassengersPacketReceived(uint playerId, BinaryReader reader) { reader.ReadByte(); CarController instance = CarController.Instance; if ((Object)(object)instance == (Object)null) { return; } DrivableCar currentCar = instance.CurrentCar; if (!((Object)(object)currentCar == (Object)null) && !currentCar.Driving) { PlayerCarData playerForCar = GetPlayerForCar(currentCar); if (playerForCar != null && !((Object)(object)playerForCar.Seat != (Object)null) && playerForCar.PlayerID == playerId) { instance.ExitCar(); } } } private void OnPlayerCarDataPacketReceived(uint playerId, BinaryReader reader) { PlayerCarPacket playerCarPacket = new PlayerCarPacket(); playerCarPacket.Deserialize(reader); if (!_playerCarsById.TryGetValue(playerId, out var value)) { value = new PlayerCarData(); value.PlayerID = playerId; PlayerCars.Add(value); _playerCarsById[playerId] = value; } value.LastPacket = playerCarPacket; } public bool PlayerHasCar(uint playerId) { if (!_playerCarsById.TryGetValue(playerId, out var value)) { return false; } if ((Object)(object)value.Car != (Object)null) { return true; } return false; } public DrivableCar GetPlayersCar(uint playerId) { if (_api.PlayerIDExists(playerId) == false) { return CarController.Instance.CurrentCar; } if (!_playerCarsById.TryGetValue(playerId, out var value)) { return null; } return value.Car; } private void FixedUpdate() { if (_api.Connected) { _currentTick -= Time.deltaTime; if (_currentTick <= 0f) { _currentTick = 0.2f; Tick(); } } } public uint GetDriver(DrivableCar car) { foreach (PlayerCarData playerCar in PlayerCars) { if ((Object)(object)playerCar.Car == (Object)(object)car) { return playerCar.PlayerID; } } return uint.MaxValue; } private void Tick() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_0077: 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) PlayerCarPacket playerCarPacket = new PlayerCarPacket(); if ((Object)(object)CarController.Instance.CurrentCar != (Object)null) { DrivableCar currentCar = CarController.Instance.CurrentCar; if ((Object)(object)CarController.Instance.CurrentSeat == (Object)null) { playerCarPacket.CarInternalName = currentCar.InternalName; } playerCarPacket.Position = currentCar.Rigidbody.position; playerCarPacket.Rotation = currentCar.Rigidbody.rotation; playerCarPacket.Velocity = currentCar.Rigidbody.velocity; playerCarPacket.AngularVelocity = currentCar.Rigidbody.angularVelocity; playerCarPacket.ThrottleAxis = currentCar.ThrottleAxis; playerCarPacket.SteerAxis = currentCar.SteerAxis; playerCarPacket.HornHeld = currentCar.HornHeld; if ((Object)(object)CarController.Instance.CurrentSeat != (Object)null) { playerCarPacket.PassengerSeat = CarController.Instance.CurrentSeat.SeatIndex; playerCarPacket.DriverPlayerID = GetDriver(currentCar); } playerCarPacket.DoorsLocked = PlayerData.Instance.DoorsLocked; RecolorableCar component = ((Component)currentCar).GetComponent<RecolorableCar>(); if ((Object)(object)component != (Object)null && component.CurrentRecolor != null) { playerCarPacket.RecolorGUID = component.CurrentRecolor.Properties.RecolorGUID; } } MemoryStream memoryStream = new MemoryStream(); BinaryWriter binaryWriter = new BinaryWriter(memoryStream); playerCarPacket.Serialize(binaryWriter); binaryWriter.Flush(); SlopCrewExtensions.SendCustomPacket("CarJack-PlayerCar", memoryStream.ToArray(), (SendFlags)0); binaryWriter.Close(); List<PlayerCarData> list = new List<PlayerCarData>(); Dictionary<uint, PlayerCarData> dictionary = new Dictionary<uint, PlayerCarData>(); for (int i = 0; i < PlayerCars.Count; i++) { if (TickCar(PlayerCars[i])) { list.Add(PlayerCars[i]); dictionary[PlayerCars[i].PlayerID] = PlayerCars[i]; } } PlayerCars = list; _playerCarsById = dictionary; } private void Update() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) if (Core.Instance.IsCorePaused) { return; } foreach (PlayerCarData playerCar in PlayerCars) { if (!((Object)(object)playerCar.Car == (Object)null) && !((Object)(object)playerCar.Seat != (Object)null)) { Vector3 val = Vector3.Lerp(playerCar.Car.Rigidbody.position, playerCar.LastPacket.Position, 5f * Time.deltaTime); Quaternion val2 = Quaternion.Lerp(playerCar.Car.Rigidbody.rotation, playerCar.LastPacket.Rotation, 5f * Time.deltaTime); Vector3 val3 = playerCar.Car.Rigidbody.position - playerCar.LastPacket.Position; if (((Vector3)(ref val3)).magnitude >= 20f) { val = playerCar.LastPacket.Position; val2 = playerCar.LastPacket.Rotation; ((Component)playerCar.Car).transform.position = val; ((Component)playerCar.Car).transform.rotation = val2; } else { playerCar.Car.Rigidbody.MovePosition(val); } playerCar.Car.Rigidbody.MoveRotation(val2); } } } private bool TickCar(PlayerCarData playerCarData) { //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_03d4: Unknown result type (might be due to invalid IL or missing references) bool flag = false; bool result = true; if (playerCarData.LastPacket.PassengerSeat != -1) { playerCarData.LastPacket.CarInternalName = "carjack.bluecar"; } if (_api.PlayerIDExists(playerCarData.PlayerID) == false) { playerCarData.LastPacket.CarInternalName = ""; result = false; } Player player = Utility.GetPlayer(playerCarData.PlayerID); if (playerCarData.LastPacket.CarInternalName == "") { if ((Object)(object)player != (Object)null) { ((Component)player.characterVisual).gameObject.SetActive(true); player.EnablePlayer(false); } if ((Object)(object)playerCarData.Car != (Object)null) { if ((Object)(object)playerCarData.Seat == (Object)null) { Object.Destroy((Object)(object)((Component)playerCarData.Car).gameObject); } else if ((Object)(object)playerCarData.Seat.Player == (Object)(object)player) { playerCarData.Seat.ExitSeat(); } playerCarData.Seat = null; playerCarData.Car = null; } if ((Object)(object)playerCarData.Polo != (Object)null) { playerCarData.Polo.SetActive(true); } } else { string text = "carjack.bluecar"; if (CarDatabase.CarByInternalName.TryGetValue(playerCarData.LastPacket.CarInternalName, out var value)) { text = value.Prefab.GetComponent<DrivableCar>().InternalName; } else { flag = true; } DrivableCar currentCar = playerCarData.Car; if (playerCarData.LastPacket.PassengerSeat != -1) { DrivableCar val = (currentCar = GetPlayersCar(playerCarData.LastPacket.DriverPlayerID)); if ((Object)(object)val != (Object)null) { CarPassengerSeat passengerSeat = val.GetPassengerSeat(playerCarData.LastPacket.PassengerSeat); if ((Object)(object)passengerSeat != (Object)null) { ((Component)player).transform.position = ((Component)passengerSeat).transform.position; if ((Object)(object)passengerSeat != (Object)(object)playerCarData.Seat) { CarSeat seat = playerCarData.Seat; if ((Object)(object)seat != (Object)null && (Object)(object)seat.Player == (Object)(object)player) { seat.ExitSeat(); } ((Component)player.characterVisual).gameObject.SetActive(false); player.CompletelyStop(); player.DisablePlayer(); Transform val2 = ((Component)player).transform.Find("Mascot_Polo_street(Clone)"); if ((Object)(object)val2 != (Object)null) { playerCarData.Polo = ((Component)val2).gameObject; ((Component)val2).gameObject.SetActive(false); } playerCarData.Seat = (CarSeat)(object)passengerSeat; ((CarSeat)passengerSeat).PutInSeat(player); } } } } else { if ((Object)(object)playerCarData.Seat != (Object)null) { if ((Object)(object)playerCarData.Seat.Player == (Object)(object)player) { playerCarData.Seat.ExitSeat(); } playerCarData.Seat = null; } if ((Object)(object)currentCar == (Object)null || currentCar.InternalName != text) { if ((Object)(object)currentCar != (Object)null) { Object.Destroy((Object)(object)((Component)currentCar).gameObject); } GameObject val3 = Object.Instantiate<GameObject>(CarDatabase.CarByInternalName[text].Prefab); val3.transform.position = playerCarData.LastPacket.Position; val3.transform.rotation = playerCarData.LastPacket.Rotation; currentCar = val3.GetComponent<DrivableCar>(); currentCar.Initialize(); currentCar.EnterCar(player); uint playerId = playerCarData.PlayerID; DrivableCar obj = currentCar; obj.OnHandleInput = (Action)Delegate.Combine(obj.OnHandleInput, (Action)delegate { if (_playerCarsById.TryGetValue(playerId, out var value3)) { currentCar.ThrottleAxis = value3.LastPacket.ThrottleAxis; currentCar.SteerAxis = value3.LastPacket.SteerAxis; currentCar.HornHeld = value3.LastPacket.HornHeld; } }); } if ((Object)(object)currentCar != (Object)null) { if ((Object)(object)player != (Object)null) { ((Component)player.characterVisual).gameObject.SetActive(false); ((Component)player).transform.position = ((Component)currentCar).transform.position; player.CompletelyStop(); player.DisablePlayer(); Transform val4 = ((Component)player).transform.Find("Mascot_Polo_street(Clone)"); if ((Object)(object)val4 != (Object)null) { playerCarData.Polo = ((Component)val4).gameObject; ((Component)val4).gameObject.SetActive(false); } } currentCar.Rigidbody.velocity = playerCarData.LastPacket.Velocity; currentCar.Rigidbody.angularVelocity = playerCarData.LastPacket.AngularVelocity; currentCar.DoorsLocked = flag || playerCarData.LastPacket.DoorsLocked; RecolorableCar component = ((Component)currentCar).GetComponent<RecolorableCar>(); if ((Object)(object)component != (Object)null) { Recolor val5 = null; if (!string.IsNullOrEmpty(playerCarData.LastPacket.RecolorGUID) && RecolorManager.RecolorsByGUID.TryGetValue(playerCarData.LastPacket.RecolorGUID, out var value2) && value2.Properties.CarInternalName == currentCar.InternalName) { val5 = value2; } if (component.CurrentRecolor != val5) { if (val5 == null) { component.ApplyDefaultColor(); } else { component.ApplyRecolor(val5); } } } } else if ((Object)(object)player != (Object)null) { ((Component)player.characterVisual).gameObject.SetActive(true); player.EnablePlayer(false); if ((Object)(object)playerCarData.Polo != (Object)null) { playerCarData.Polo.SetActive(true); } } } playerCarData.Car = currentCar; } return result; } } public class PlayerCarData { public uint PlayerID; public DrivableCar Car; public PlayerCarPacket LastPacket; public GameObject Polo; public CarSeat Seat; } public class PlayerCarPacket { private const byte Version = 3; public const string GUID = "CarJack-PlayerCar"; public string CarInternalName = ""; public Vector3 Position = Vector3.zero; public Quaternion Rotation = Quaternion.identity; public Vector3 Velocity = Vector3.zero; public Vector3 AngularVelocity = Vector3.zero; public float ThrottleAxis; public float SteerAxis; public bool HornHeld; public bool BrakeHeld; public float PitchAxis; public float YawAxis; public float RollAxis; public int PassengerSeat = -1; public uint DriverPlayerID = uint.MaxValue; public bool DoorsLocked; public string RecolorGUID = string.Empty; public void Serialize(BinaryWriter writer) { writer.Write((byte)3); writer.Write(CarInternalName); writer.Write(Position.x); writer.Write(Position.y); writer.Write(Position.z); writer.Write(Rotation.x); writer.Write(Rotation.y); writer.Write(Rotation.z); writer.Write(Rotation.w); writer.Write(Velocity.x); writer.Write(Velocity.y); writer.Write(Velocity.z); writer.Write(AngularVelocity.x); writer.Write(AngularVelocity.y); writer.Write(AngularVelocity.z); writer.Write(ThrottleAxis); writer.Write(SteerAxis); writer.Write(HornHeld); writer.Write(BrakeHeld); writer.Write(PitchAxis); writer.Write(YawAxis); writer.Write(RollAxis); writer.Write(PassengerSeat); writer.Write(DriverPlayerID); writer.Write(DoorsLocked); writer.Write(RecolorGUID); } public void Deserialize(BinaryReader reader) { //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: 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) //IL_0146: Unknown result type (might be due to invalid IL or missing references) byte b = reader.ReadByte(); CarInternalName = reader.ReadString(); float num = reader.ReadSingle(); float num2 = reader.ReadSingle(); float num3 = reader.ReadSingle(); float num4 = reader.ReadSingle(); float num5 = reader.ReadSingle(); float num6 = reader.ReadSingle(); float num7 = reader.ReadSingle(); float num8 = reader.ReadSingle(); float num9 = reader.ReadSingle(); float num10 = reader.ReadSingle(); float num11 = reader.ReadSingle(); float num12 = reader.ReadSingle(); float num13 = reader.ReadSingle(); ThrottleAxis = reader.ReadSingle(); SteerAxis = reader.ReadSingle(); HornHeld = reader.ReadBoolean(); BrakeHeld = reader.ReadBoolean(); PitchAxis = reader.ReadSingle(); YawAxis = reader.ReadSingle(); RollAxis = reader.ReadSingle(); if (b >= 1) { PassengerSeat = reader.ReadInt32(); DriverPlayerID = reader.ReadUInt32(); if (b >= 2) { DoorsLocked = reader.ReadBoolean(); } if (b >= 3) { RecolorGUID = reader.ReadString(); } } Position = new Vector3(num, num2, num3); Rotation = new Quaternion(num4, num5, num6, num7); Velocity = new Vector3(num8, num9, num10); AngularVelocity = new Vector3(num11, num12, num13); } } [CarJackPlugin] public class Plugin { public Plugin() { if (CarController.Config.SlopCrewIntegration) { BallController.Initialize(); NetworkController.Initialize(); } } } public static class SlopCrewExtensions { public static void SendCustomPacket(string id, byte[] data, SendFlags flags = 8) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //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_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) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_0046: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown id = SetPacketIDFlags(id, flags); ServiceProviderServiceExtensions.GetService<ConnectionManager>(Plugin.Host.Services).SendMessage(new ServerboundMessage { CustomPacket = new ServerboundCustomPacket { Packet = new CustomPacket { Id = id, Data = ByteString.CopyFrom(data) } } }, flags); } public static string GetPacketID(string packetIdWithFlags) { if (!packetIdWithFlags.Contains("|")) { return packetIdWithFlags; } return packetIdWithFlags.Split(new char[1] { '|' })[0]; } private static string SetPacketIDFlags(string id, SendFlags flags) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected I4, but got Unknown if (!id.Contains("|")) { id += "|"; } id += $"<f={(int)flags}>"; return id; } } public static class Utility { public static Player GetPlayer(uint playerId) { if (!ServiceProviderServiceExtensions.GetRequiredService<PlayerManager>(Plugin.Host.Services).Players.TryGetValue(playerId, out var value)) { return null; } return value.ReptilePlayer; } } public static class PluginInfo { public const string PLUGIN_GUID = "CarJack.SlopCrew"; public const string PLUGIN_NAME = "CarJack.SlopCrew"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
CarJack.BombRushCamera.dll
Decompiled 4 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 BombRushCamera; using CarJack.Common; using CarJack.Plugin; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("CarJack.BombRushCamera")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("BombRushCamera CarJack Plugin")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+c9cd941543413d478afa4e05fa6b7ea9cde12fd4")] [assembly: AssemblyProduct("CarJack.BombRushCamera")] [assembly: AssemblyTitle("CarJack.BombRushCamera")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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 CarJack.BombRushCamera { public class CameraController : MonoBehaviour { private void Update() { CarCamera.Enabled = !Plugin.Active; } } [CarJackPlugin] public class Plugin { public Plugin() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown GameObject val = new GameObject("CarJack BombRushCamera controller"); val.AddComponent<CameraController>(); Object.DontDestroyOnLoad((Object)val); } } public static class PluginInfo { public const string PLUGIN_GUID = "CarJack.BombRushCamera"; public const string PLUGIN_NAME = "CarJack.BombRushCamera"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }