using 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}");
}
}
}
}