Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BetterCruiserSync v1.0.5
BetterCruiserSync.dll
Decompiled 6 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BetterCruiserSync")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+27d05d3b52b0f21302e02ea33987399093513e66")] [assembly: AssemblyProduct("BetterCruiserSync")] [assembly: AssemblyTitle("BetterCruiserSync")] [assembly: AssemblyVersion("1.0.0.0")] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace BetterCruiserSync { [BepInPlugin("MysticDEV.BetterCruiserSync", "BetterCruiserSync", "1.0.5")] public class CruiserSyncFixPlugin : BaseUnityPlugin { [CompilerGenerated] private sealed class <RequestSyncFromHost>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public VehicleController vehicle; private Traverse <vehicleTraverse>5__2; private bool <receivedResponse>5__3; private float <waitTime>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RequestSyncFromHost>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <vehicleTraverse>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Expected O, but got Unknown //IL_00be: 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) switch (<>1__state) { default: return false; case 0: { <>1__state = -1; ManualLogSource? logger3 = CruiserSyncFixPlugin.logger; if (logger3 != null) { logger3.LogInfo((object)"[BetterCruiserSync] CLIENT: Requesting sync from host..."); } <>2__current = (object)new WaitForSeconds(5f); <>1__state = 1; return true; } case 1: { <>1__state = -1; if (vehicle.magnetedToShip) { <vehicleTraverse>5__2 = Traverse.Create((object)vehicle); if (<vehicleTraverse>5__2.Field("magnetTargetPosition").GetValue<Vector3>() == Vector3.zero) { ManualLogSource? logger4 = CruiserSyncFixPlugin.logger; if (logger4 != null) { logger4.LogInfo((object)"[BetterCruiserSync] CLIENT: DESYNC DETECTED: Requesting state from host"); } <receivedResponse>5__3 = false; try { vehicle.MagnetCarServerRpc(Vector3.zero, Vector3.zero, (int)GameNetworkManager.Instance.localPlayerController.playerClientId); ManualLogSource? logger5 = CruiserSyncFixPlugin.logger; if (logger5 != null) { logger5.LogInfo((object)"[BetterCruiserSync] CLIENT: Sync request sent to host, waiting for response..."); } } catch (Exception arg) { ManualLogSource? logger6 = CruiserSyncFixPlugin.logger; if (logger6 != null) { logger6.LogError((object)$"[BetterCruiserSync] CLIENT: Failed to send sync request: {arg}"); } } <waitTime>5__4 = 0f; goto IL_0190; } ManualLogSource? logger7 = CruiserSyncFixPlugin.logger; if (logger7 != null) { logger7.LogInfo((object)"[BetterCruiserSync] CLIENT: Cruiser already has position data, no sync needed"); } goto IL_01e2; } ManualLogSource? logger8 = CruiserSyncFixPlugin.logger; if (logger8 != null) { logger8.LogInfo((object)"[BetterCruiserSync] CLIENT: Cruiser not magnetized, no sync needed"); } break; } case 2: { <>1__state = -1; <waitTime>5__4 += 0.5f; if (!(<vehicleTraverse>5__2.Field("magnetTargetPosition").GetValue<Vector3>() != Vector3.zero)) { goto IL_0190; } ManualLogSource? logger = CruiserSyncFixPlugin.logger; if (logger != null) { logger.LogInfo((object)"[BetterCruiserSync] CLIENT: Received response from host! Position synced."); } <receivedResponse>5__3 = true; goto IL_019d; } IL_019d: if (!<receivedResponse>5__3) { ManualLogSource? logger2 = CruiserSyncFixPlugin.logger; if (logger2 != null) { logger2.LogInfo((object)"[BetterCruiserSync] CLIENT: No response from host - calculating position locally..."); } CalculateAndFixCruiserPosition(vehicle, <vehicleTraverse>5__2); } goto IL_01e2; IL_0190: if (<waitTime>5__4 < 3f) { <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 2; return true; } goto IL_019d; IL_01e2: <vehicleTraverse>5__2 = null; break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <RequestSyncOnGameStart>d__9 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public VehicleController cruiser; private Traverse <vehicleTraverse>5__2; private bool <receivedResponse>5__3; private float <waitTime>5__4; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <RequestSyncOnGameStart>d__9(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <vehicleTraverse>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown //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) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; if (!cruiser.magnetedToShip) { break; } <vehicleTraverse>5__2 = Traverse.Create((object)cruiser); if (<vehicleTraverse>5__2.Field("magnetTargetPosition").GetValue<Vector3>() == Vector3.zero) { ManualLogSource? logger2 = CruiserSyncFixPlugin.logger; if (logger2 != null) { logger2.LogInfo((object)"[BetterCruiserSync] CLIENT: Game started, DESYNC DETECTED: Requesting state from host"); } <receivedResponse>5__3 = false; try { cruiser.MagnetCarServerRpc(Vector3.zero, Vector3.zero, (int)GameNetworkManager.Instance.localPlayerController.playerClientId); ManualLogSource? logger3 = CruiserSyncFixPlugin.logger; if (logger3 != null) { logger3.LogInfo((object)"[BetterCruiserSync] CLIENT: Sync request sent to host"); } } catch (Exception arg) { ManualLogSource? logger4 = CruiserSyncFixPlugin.logger; if (logger4 != null) { logger4.LogError((object)$"[BetterCruiserSync] CLIENT: Failed to send sync request: {arg}"); } } <waitTime>5__4 = 0f; goto IL_017b; } goto IL_01b6; case 2: { <>1__state = -1; <waitTime>5__4 += 0.5f; if (!(<vehicleTraverse>5__2.Field("magnetTargetPosition").GetValue<Vector3>() != Vector3.zero)) { goto IL_017b; } ManualLogSource? logger = CruiserSyncFixPlugin.logger; if (logger != null) { logger.LogInfo((object)"[BetterCruiserSync] CLIENT: Position synced from host!"); } <receivedResponse>5__3 = true; goto IL_0188; } IL_01b6: <vehicleTraverse>5__2 = null; break; IL_017b: if (<waitTime>5__4 < 3f) { <>2__current = (object)new WaitForSeconds(0.5f); <>1__state = 2; return true; } goto IL_0188; IL_0188: if (!<receivedResponse>5__3) { ManualLogSource? logger5 = CruiserSyncFixPlugin.logger; if (logger5 != null) { logger5.LogInfo((object)"[BetterCruiserSync] CLIENT: No response - calculating position locally"); } CalculateAndFixCruiserPosition(cruiser, <vehicleTraverse>5__2); } goto IL_01b6; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SendCruiserStateOnGameStart>d__8 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public VehicleController cruiser; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SendCruiserStateOnGameStart>d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(1f); <>1__state = 1; return true; case 1: <>1__state = -1; if (cruiser.magnetedToShip) { ManualLogSource? logger = CruiserSyncFixPlugin.logger; if (logger != null) { logger.LogInfo((object)"[BetterCruiserSync] HOST: Game started, sending cruiser state to all clients"); } Traverse obj = Traverse.Create((object)cruiser); Vector3 value = obj.Field("magnetTargetPosition").GetValue<Vector3>(); Quaternion value2 = obj.Field("magnetTargetRotation").GetValue<Quaternion>(); cruiser.MagnetCarClientRpc(value, ((Quaternion)(ref value2)).eulerAngles, 0); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SendCruiserStateToNewClient>d__5 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ulong clientId; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SendCruiserStateToNewClient>d__5(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: { <>1__state = -1; ManualLogSource? logger4 = CruiserSyncFixPlugin.logger; if (logger4 != null) { logger4.LogInfo((object)$"[BetterCruiserSync] HOST: Waiting briefly for client {clientId} connection to stabilize..."); } <>2__current = (object)new WaitForSeconds(5f); <>1__state = 1; return true; } case 1: { <>1__state = -1; VehicleController attachedVehicle = StartOfRound.Instance.attachedVehicle; if ((Object)(object)attachedVehicle != (Object)null && attachedVehicle.magnetedToShip) { ManualLogSource? logger = CruiserSyncFixPlugin.logger; if (logger != null) { logger.LogInfo((object)$"[BetterCruiserSync] HOST: Sending cruiser state to new client {clientId}"); } Traverse obj = Traverse.Create((object)attachedVehicle); Vector3 value = obj.Field("magnetTargetPosition").GetValue<Vector3>(); Quaternion value2 = obj.Field("magnetTargetRotation").GetValue<Quaternion>(); ManualLogSource? logger2 = CruiserSyncFixPlugin.logger; if (logger2 != null) { logger2.LogInfo((object)$"[BetterCruiserSync] HOST: Cruiser state - Pos: {value}, Rot: {((Quaternion)(ref value2)).eulerAngles}"); } attachedVehicle.MagnetCarClientRpc(value, ((Quaternion)(ref value2)).eulerAngles, (int)clientId); } else { ManualLogSource? logger3 = CruiserSyncFixPlugin.logger; if (logger3 != null) { logger3.LogInfo((object)"[BetterCruiserSync] HOST: No magnetized cruiser found"); } } return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static ManualLogSource? logger; private readonly Harmony harmony = new Harmony("MysticDEV.BetterCruiserSync"); private void Awake() { logger = ((BaseUnityPlugin)this).Logger; harmony.PatchAll(typeof(CruiserSyncFixPlugin)); logger.LogInfo((object)"[BetterCruiserSync] Plugin loaded!"); } [HarmonyPatch(typeof(VehicleController), "MagnetCarServerRpc")] [HarmonyPostfix] private static void MagnetCarServerRpcPostfix(VehicleController __instance, Vector3 targetPosition, Vector3 targetRotation, int playerWhoSent) { //IL_0049: 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_0059: 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_006f: 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_008c: 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) if (GameNetworkManager.Instance.isHostingGame && __instance.magnetedToShip) { ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)$"[BetterCruiserSync] HOST: Received ServerRpc from player {playerWhoSent}, sending current magnet state to all clients"); } Traverse obj2 = Traverse.Create((object)__instance); Vector3 value = obj2.Field("magnetTargetPosition").GetValue<Vector3>(); Quaternion value2 = obj2.Field("magnetTargetRotation").GetValue<Quaternion>(); ManualLogSource? obj3 = logger; if (obj3 != null) { obj3.LogInfo((object)$"[BetterCruiserSync] HOST: Current state - Pos: {value}, Rot: {((Quaternion)(ref value2)).eulerAngles}"); } __instance.MagnetCarClientRpc(value, ((Quaternion)(ref value2)).eulerAngles, playerWhoSent); } } [HarmonyPatch(typeof(StartOfRound), "OnClientConnect")] [HarmonyPostfix] private static void OnClientConnectPostfix(ulong clientId) { if (GameNetworkManager.Instance.isHostingGame) { ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)$"[BetterCruiserSync] HOST: Client {clientId} connected, checking cruiser state..."); } ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(SendCruiserStateToNewClient(clientId)); } } [IteratorStateMachine(typeof(<SendCruiserStateToNewClient>d__5))] private static IEnumerator SendCruiserStateToNewClient(ulong clientId) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SendCruiserStateToNewClient>d__5(0) { clientId = clientId }; } [HarmonyPatch(typeof(VehicleController), "Start")] [HarmonyPostfix] private static void VehicleStartPatch(VehicleController __instance) { if (!GameNetworkManager.Instance.isHostingGame) { ((MonoBehaviour)__instance).StartCoroutine(RequestSyncFromHost(__instance)); } } [HarmonyPatch(typeof(StartOfRound), "StartGame")] [HarmonyPostfix] private static void StartGamePostfix() { ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)"[BetterCruiserSync] Game started (lever pulled), checking cruiser sync..."); } VehicleController attachedVehicle = StartOfRound.Instance.attachedVehicle; if ((Object)(object)attachedVehicle != (Object)null) { if (GameNetworkManager.Instance.isHostingGame) { ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(SendCruiserStateOnGameStart(attachedVehicle)); } else { ((MonoBehaviour)StartOfRound.Instance).StartCoroutine(RequestSyncOnGameStart(attachedVehicle)); } } } [IteratorStateMachine(typeof(<SendCruiserStateOnGameStart>d__8))] private static IEnumerator SendCruiserStateOnGameStart(VehicleController cruiser) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SendCruiserStateOnGameStart>d__8(0) { cruiser = cruiser }; } [IteratorStateMachine(typeof(<RequestSyncOnGameStart>d__9))] private static IEnumerator RequestSyncOnGameStart(VehicleController cruiser) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <RequestSyncOnGameStart>d__9(0) { cruiser = cruiser }; } [IteratorStateMachine(typeof(<RequestSyncFromHost>d__10))] private static IEnumerator RequestSyncFromHost(VehicleController vehicle) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <RequestSyncFromHost>d__10(0) { vehicle = vehicle }; } private static void CalculateAndFixCruiserPosition(VehicleController vehicle, Traverse vehicleTraverse) { //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_002f: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0092: 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_00ec: 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_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0105: 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_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_0159: 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_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Unknown result type (might be due to invalid IL or missing references) ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)"[BetterCruiserSync] CLIENT: Starting local position calculation"); } Vector3 position = StartOfRound.Instance.magnetPoint.position; Vector3 val = StartOfRound.Instance.elevatorTransform.InverseTransformPoint(position); ManualLogSource? obj2 = logger; if (obj2 != null) { obj2.LogInfo((object)$"[BetterCruiserSync] CLIENT: Raw magnetTargetPosition from magnet point: {val}"); } val.z -= 2f; val.y = Mathf.Clamp(val.y, 2.2f, 2.6f); ManualLogSource? obj3 = logger; if (obj3 != null) { obj3.LogInfo((object)$"[BetterCruiserSync] CLIENT: Adjusted magnetTargetPosition: {val}"); } float num = Mathf.Round((StartOfRound.Instance.elevatorTransform.eulerAngles.y + 90f) / 90f) * 90f; float num2 = Random.Range(-1f, 1f); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num2, num, 0f); Quaternion val3 = Quaternion.Euler(val2); ManualLogSource? obj4 = logger; if (obj4 != null) { obj4.LogInfo((object)$"[BetterCruiserSync] CLIENT: Target rotation: {val2}"); } Vector3 val4 = StartOfRound.Instance.elevatorTransform.position + val; ManualLogSource? obj5 = logger; if (obj5 != null) { obj5.LogInfo((object)$"[BetterCruiserSync] CLIENT: World target position: {val4}"); } vehicleTraverse.Field("magnetTargetPosition").SetValue((object)val); vehicleTraverse.Field("magnetTargetRotation").SetValue((object)val3); vehicleTraverse.Field("magnetStartPosition").SetValue((object)val4); vehicleTraverse.Field("magnetStartRotation").SetValue((object)val3); vehicleTraverse.Field("magnetTime").SetValue((object)1f); vehicleTraverse.Field("magnetRotationTime").SetValue((object)1f); vehicleTraverse.Field("finishedMagneting").SetValue((object)true); StartOfRound.Instance.isObjectAttachedToMagnet = true; StartOfRound.Instance.attachedVehicle = vehicle; ((Component)vehicle).transform.position = val4; ((Component)vehicle).transform.rotation = val3; if ((Object)(object)vehicle.mainRigidbody != (Object)null) { vehicle.mainRigidbody.isKinematic = true; } vehicle.CollectItemsInTruck(); ManualLogSource? obj6 = logger; if (obj6 != null) { obj6.LogInfo((object)"[BetterCruiserSync] CLIENT: Local calculation complete!"); } } [HarmonyPatch(typeof(VehicleController), "MagnetCarClientRpc")] [HarmonyPrefix] private static void MagnetCarClientRpcPrefix(Vector3 targetPosition, Vector3 targetRotation, int playerWhoSent) { //IL_000f: 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) ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)$"[BetterCruiserSync] MagnetCarClientRpc received! Pos: {targetPosition}, Rot: {targetRotation}, Player: {playerWhoSent}"); } } } }