Decompiled source of Lockout 3 v0.0.2

plugins/LockoutThree.dll

Decompiled 11 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AK;
using Agents;
using AssetShards;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using CellMenu;
using CroatiaUtils.Extensions;
using FX_EffectSystem;
using GTFO.API;
using GTFO.API.Components;
using GameData;
using Gear;
using Globals;
using HarmonyLib;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppInterop.Runtime.Runtime.VersionSpecific.Class;
using Il2CppSystem;
using LevelGeneration;
using Localization;
using LockoutThree;
using LockoutThree.DataInjection;
using LockoutThree.Extensions;
using LockoutThree.Utils;
using Microsoft.CodeAnalysis;
using Player;
using SNetwork;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("LockoutThree")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+gitbe236e6-dirty-master")]
[assembly: AssemblyProduct("LockoutThree")]
[assembly: AssemblyTitle("LockoutThree")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class IsUnmanagedAttribute : Attribute
	{
	}
	[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;
		}
	}
	[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 NativeIntegerAttribute : Attribute
	{
		public readonly bool[] TransformFlags;

		public NativeIntegerAttribute()
		{
			TransformFlags = new bool[1] { true };
		}

		public NativeIntegerAttribute(bool[] P_0)
		{
			TransformFlags = P_0;
		}
	}
}
public class CheckPoint : MonoBehaviour
{
	public int CheckPointIdx;

	public CheckPoint(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private void OnTriggerEnter(Collider other)
	{
		KartKontroller kartKontroller = ((Component)other).GetComponent<KartKontroller>();
		if ((Object)(object)kartKontroller == (Object)null)
		{
			kartKontroller = ((Component)other).GetComponentInParent<KartKontroller>();
		}
		if ((Object)(object)kartKontroller == (Object)null)
		{
			kartKontroller = ((Component)other).GetComponentInChildren<KartKontroller>();
		}
		if (!((Object)(object)kartKontroller == (Object)null))
		{
			kartKontroller.EnterCheckpoint(this);
		}
	}
}
public class CustomWinScreen : MonoBehaviour
{
	public static RuntimeAnimatorController s_Animator;

	public static string[] s_AnimsByPlayer = new string[4] { "1", "2", "3", "4" };

	private LG_SpotLight[] m_Lights;

	private PlayerAgent m_Winner;

	private List<Transform> m_PlayerTransforms = new List<Transform>();

	public CustomWinScreen(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	public void SpawnPlayerModel(int playerIdx, Transform align, bool winner = false)
	{
		//IL_006b: 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)
		CM_PlayerLobbyBar val = ((Il2CppArrayBase<CM_PlayerLobbyBar>)(object)MainMenuGuiLayer.Current.PageLoadout.m_playerLobbyBars)[playerIdx];
		if ((Object)(object)val == (Object)null || (Object)(object)val.m_modelData == (Object)null)
		{
			return;
		}
		if (winner)
		{
			m_Winner = PlayerManager.PlayerAgentsInLevel[playerIdx];
		}
		GameObject val2 = Object.Instantiate<GameObject>(((Component)val.m_modelData).gameObject, align);
		CustomExtensions.ChangeLayerRecursive(val2, LayerMask.NameToLayer("Default"), (Il2CppStructArray<int>)null);
		val2.transform.localPosition = Vector3.zero;
		val2.transform.localEulerAngles = Vector3.zero;
		val2.transform.localScale = Vector3.one;
		if ((Object)(object)s_Animator != (Object)null && s_AnimsByPlayer.Length >= playerIdx)
		{
			Animator component = val2.GetComponent<Animator>();
			if ((Object)(object)component != (Object)null)
			{
				component.runtimeAnimatorController = s_Animator;
			}
			component.Play(s_AnimsByPlayer[playerIdx]);
		}
		m_PlayerTransforms.Add(align);
	}

	public void TriggerWinSequence()
	{
		m_Lights = Il2CppArrayBase<LG_SpotLight>.op_Implicit(((Component)this).gameObject.GetComponentsInChildren<LG_SpotLight>());
		LG_SpotLight[] lights = m_Lights;
		for (int i = 0; i < lights.Length; i++)
		{
			((Component)lights[i]).gameObject.SetActive(false);
		}
		((MonoBehaviour)this).StartCoroutine(CollectionExtensions.WrapToIl2Cpp(WinSequence()));
	}

	private IEnumerator WinSequence()
	{
		CellSound.Post(3213784005u);
		CellSound.Post(3236674733u);
		yield return (object)new WaitForSeconds(0.5f);
		Debug.Log(Object.op_Implicit("The winner is..."));
		yield return (object)new WaitForSeconds(3f);
		Debug.Log(Object.op_Implicit(m_Winner.Owner.NickName));
		CellSound.Post(847557921u);
		LG_SpotLight[] lights = m_Lights;
		for (int i = 0; i < lights.Length; i++)
		{
			((Component)lights[i]).gameObject.SetActive(true);
		}
		foreach (Transform playerTransform in m_PlayerTransforms)
		{
			((FX_EffectBase)ItemPickupTrigger.ExplosionVFX.AquireEffect()).Play((FX_Trigger)null, playerTransform.position, Quaternion.LookRotation(playerTransform.up));
			CellSound.Post(EVENTS.STICKYMINEEXPLODE, playerTransform.position);
		}
		yield return (object)new WaitForSeconds(0.1f);
		CellSound.Post(2975357637u);
		float elapsed = 0f;
		float duration = 5f;
		while (elapsed < duration)
		{
			float num = Mathf.Sin(Time.time) * 0.25f + 0.75f;
			float num2 = Mathf.Sin(Time.time + 2f) * 0.25f + 0.75f;
			float num3 = Mathf.Sin(Time.time + 4f) * 0.25f + 0.75f;
			lights = m_Lights;
			for (int i = 0; i < lights.Length; i++)
			{
				((LG_Light)lights[i]).ChangeColor(new Color(num, num2, num3, 1f));
			}
			elapsed += Time.deltaTime;
			yield return null;
		}
		GameStateManager.ChangeState((eGameStateName)16);
	}
}
public class ItemPickupTrigger : MonoBehaviour
{
	public struct ItemDefinition
	{
		public uint ID;

		public int ammo;
	}

	public static ItemDefinition[] s_ValidItems = new ItemDefinition[4]
	{
		new ItemDefinition
		{
			ID = 0u,
			ammo = 0
		},
		new ItemDefinition
		{
			ID = 1000u,
			ammo = 5
		},
		new ItemDefinition
		{
			ID = 1001u,
			ammo = 1
		},
		new ItemDefinition
		{
			ID = 1002u,
			ammo = 3
		}
	};

	private float m_RespawnTimestamp;

	private Renderer m_Renderer;

	private Collider m_Collider;

	private static FX_Pool s_ExplosionVFX;

	public static FX_Pool ExplosionVFX
	{
		get
		{
			if ((Object)(object)s_ExplosionVFX == (Object)null)
			{
				s_ExplosionVFX = FX_Manager.GetEffectPool(AssetShardManager.GetLoadedAsset<GameObject>("Assets/AssetPrefabs/FX_Effects/FX_TripmineGlue.prefab", false));
			}
			return s_ExplosionVFX;
		}
	}

	public ItemPickupTrigger(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private void Start()
	{
		m_Collider = ((Component)this).GetComponent<Collider>();
		m_Renderer = ((Component)this).GetComponent<Renderer>();
	}

	private void OnTriggerEnter(Collider other)
	{
		object obj = ((Component)other).GetComponent<KartKontroller>() ?? ((Component)other).GetComponentInParent<KartKontroller>();
		if (obj == null)
		{
			obj = ((Component)other).GetComponentInChildren<KartKontroller>();
		}
		KartKontroller kartKontroller = (KartKontroller)obj;
		if (!((Object)(object)kartKontroller == (Object)null))
		{
			PlayerAgent driver = kartKontroller.Driver;
			if (!((Object)(object)driver == (Object)null))
			{
				TriggerPickup(driver);
			}
		}
	}

	private void TriggerPickup(PlayerAgent player)
	{
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: 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)
		m_Renderer.enabled = false;
		m_Collider.enabled = false;
		m_RespawnTimestamp = Time.time + 3f;
		player.Sound.Post(EVENTS.GUI_BOOSTER_RECEIVED, true);
		((FX_EffectBase)ExplosionVFX.AquireEffect()).Play((FX_Trigger)null, ((Component)this).transform.position, Quaternion.LookRotation(((Component)this).transform.up));
		CellSound.Post(EVENTS.STICKYMINEEXPLODE, ((Component)this).transform.position);
		if (!PlayerManager.GetLocalPlayerAgent().Owner.IsMaster)
		{
			NetworkAPI.InvokeEvent<int>("SyncRequestItemRNG", player.PlayerSlotIndex, (SNet_ChannelType)2);
		}
		else
		{
			NetworkManager.SyncRequestItemRNG(0uL, player.PlayerSlotIndex);
		}
	}

	private void Update()
	{
		if (!(Time.time < m_RespawnTimestamp) && m_RespawnTimestamp != -1f)
		{
			m_Renderer.enabled = true;
			m_Collider.enabled = true;
			m_RespawnTimestamp = -1f;
		}
	}
}
public class ThrowableSentry : ConsumableInstance
{
	public static GearIDRange s_SentrygunGear = new GearIDRange("{\"Ver\":1,\"Name\":\"Mechatronic B5 LFR\",\"Packet\":{\"Comps\":{\"Length\":11,\"a\":{\"c\":1,\"v\":13},\"b\":{\"c\":2,\"v\":12},\"c\":{\"c\":3,\"v\":97},\"d\":{\"c\":4,\"v\":11},\"e\":{\"c\":5,\"v\":4},\"f\":{\"c\":12,\"v\":13},\"g\":{\"c\":16,\"v\":2},\"h\":{\"c\":27,\"v\":9},\"i\":{\"c\":40,\"v\":2},\"j\":{\"c\":42,\"v\":2}},\"MatTrans\":{\"tDecalA\":{\"scale\":0.1},\"tDecalB\":{\"scale\":0.1},\"tPattern\":{\"scale\":0.1}},\"publicName\":{\"data\":\"Mechatronic B5 LFR\"}}}");

	private Rigidbody m_RigidBody;

	private float m_Timestamp;

	public ThrowableSentry(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private void Start()
	{
		m_RigidBody = ((Component)this).GetComponent<Rigidbody>();
		m_Timestamp = Time.time;
	}

	private void OnCollisionEnter(Collision other)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: 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: 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_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)
		ContactPoint val = ((Il2CppArrayBase<ContactPoint>)(object)other.contacts)[0];
		Vector3 point = ((ContactPoint)(ref val)).point;
		val = ((Il2CppArrayBase<ContactPoint>)(object)other.contacts)[0];
		SpawnSentrygun(point, Quaternion.Euler(((ContactPoint)(ref val)).normal));
	}

	private void Update()
	{
		//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_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: 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)
		Vector3 velocity = m_RigidBody.velocity;
		if (((Vector3)(ref velocity)).magnitude < 1f && Time.time - m_Timestamp > 1f)
		{
			SpawnSentrygun(((Component)this).transform.position, Quaternion.Euler(Vector3.up));
		}
	}

	private void SpawnSentrygun(Vector3 position, Quaternion rotation)
	{
		//IL_000f: 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)
		if (SNet.IsMaster)
		{
			ItemReplicationManager.SpawnGear(s_SentrygunGear, (delItemCallback)null, (ItemMode)3, position, rotation, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, ((Item)this).Owner, 999999f, 999999f);
			((Item)this).ReplicationWrapper.Replicator.Despawn();
		}
	}
}
public class ThrowableTripmine : ConsumableInstance
{
	private Rigidbody m_RigidBody;

	private float m_Timestamp;

	public ThrowableTripmine(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private void Start()
	{
		m_RigidBody = ((Component)this).GetComponent<Rigidbody>();
		m_Timestamp = Time.time;
	}

	private void OnCollisionEnter(Collision other)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: 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_0024: Unknown result type (might be due to invalid IL or missing references)
		ContactPoint val = ((Il2CppArrayBase<ContactPoint>)(object)other.contacts)[0];
		SpawnMine(((ContactPoint)(ref val)).point, Quaternion.Euler(90f, 0f, 0f));
	}

	private void Update()
	{
		//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_0034: 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)
		Vector3 velocity = m_RigidBody.velocity;
		if (((Vector3)(ref velocity)).magnitude < 1f && Time.time - m_Timestamp > 1f)
		{
			SpawnMine(((Component)this).transform.position, Quaternion.Euler(90f, 0f, 0f));
		}
	}

	private void SpawnMine(Vector3 position, Quaternion rotation)
	{
		//IL_0002: 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_0014: 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)
		pItemData val = default(pItemData);
		val.itemID_gearCRC = 125u;
		ItemReplicationManager.SpawnItem(val, (delItemCallback)null, (ItemMode)3, position, rotation, ((Agent)PlayerManager.GetLocalPlayerAgent()).CourseNode, PlayerManager.GetLocalPlayerAgent());
		((Item)this).ReplicationWrapper.Replicator.Despawn();
	}
}
public class KartDamage : MonoBehaviour
{
	public KartKontroller Kart;

	public Vector3 DamageTargetPos => ((Component)this).transform.position;

	public string DebugName => "(10c)d0cr3d";

	public uint TempSearchID { get; set; }

	public bool IgnoreGlue => true;

	public KartDamage(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	public void BulletDamage(float dam, Agent sourceAgent, Vector3 position, Vector3 direction, Vector3 normal, bool allowDirectionalBonus = false, float staggerMulti = 1f, float precisionMulti = 1f, uint gearCategoryId = 0u)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)Kart == (Object)null))
		{
			SyncKartImpulse(dam * 8000f * MathF.Max(precisionMulti, 1f) * Mathf.Max(staggerMulti, 1f), position, 50f, 1.5f);
		}
	}

	public void ExplosionDamage(float dam, Vector3 sourcePos, Vector3 force, uint gearCategoryId = 0u)
	{
		//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)
		if (!((Object)(object)Kart == (Object)null))
		{
			SyncKartImpulse(((Vector3)(ref force)).magnitude * 8f, sourcePos - Vector3.up, 50f, 3f);
		}
	}

	public void MeleeDamage(float dam, Agent sourceAgent, Vector3 position, Vector3 direction, float staggerMulti = 1f, float precisionMulti = 1f, float environmentMulti = 1f, float backstabberMulti = 1f, float sleeperMulti = 1f, bool skipLimbDestruction = false, DamageNoiseLevel damageNoiseLevel = 0, uint gearCategoryId = 0u)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		if (!((Object)(object)Kart == (Object)null) && !((Object)(object)sourceAgent == (Object)(object)Kart.Driver))
		{
			SyncKartImpulse(800000f, position, 50f, 3f);
		}
	}

	public void FireDamage(float dam, Agent sourceAgent)
	{
	}

	public void FreezeDamage(float dam, Agent sourceAgent)
	{
	}

	public void GlueDamage(float glueAmount)
	{
	}

	public void PushDamage(float dam, Agent sourceAgent, Vector3 position, Vector3 direction)
	{
	}

	public void TentacleAttackDamage(float dam, Agent sourceAgent, Vector3 position)
	{
	}

	public void TentacleTrapGrabDamage(float dam, uint staticEnemyID)
	{
	}

	public void ParasiteTrapDamage(float dam, uint staticEnemyID)
	{
	}

	public void TentacleTankGrabDamage(float dam, Agent sourceAgent)
	{
	}

	public void TentacleGrabStop()
	{
	}

	public void ShooterProjectileDamage(float dam, Vector3 position)
	{
	}

	public void FallDamage(float dam)
	{
	}

	public void NoAirDamage(float dam)
	{
	}

	public void ParasiteDamage(float dam)
	{
	}

	public IDamageable GetBaseDamagable()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_000c: Expected O, but got Unknown
		return new IDamageable(((Il2CppObjectBase)this).Pointer);
	}

	public Agent GetBaseAgent()
	{
		if ((Object)(object)Kart != (Object)null)
		{
			return (Agent)(object)Kart.Driver;
		}
		return null;
	}

	public float GetHealthRel()
	{
		return float.MaxValue;
	}

	public void SyncKartImpulse(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier)
	{
		//IL_000c: 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_0057: Unknown result type (might be due to invalid IL or missing references)
		Kart.RigidBody.AddExplosionForce(explosionForce, explosionPosition, explosionRadius, upwardsModifier);
		if ((Object)(object)Kart.Driver != (Object)null && (Object)(object)Kart.Driver != (Object)(object)PlayerManager.GetLocalPlayerAgent())
		{
			NetworkAPI.InvokeEvent<pImpulse>("SyncKartImpulse", new pImpulse
			{
				force = explosionForce,
				position = explosionPosition,
				radius = explosionRadius,
				upwardsModifier = upwardsModifier,
				kartIdx = Kart.Driver.PlayerSlotIndex
			}, (SNet_ChannelType)2);
		}
	}
}
public class KartKontroller : MonoBehaviour
{
	public static KartKontroller[] s_Karts;

	public static CheckPoint[] s_Checkpoints;

	public static double GLOBAL_LAP_DIST = double.MaxValue;

	public static Dictionary<int, double> LAP_DIST_LOOKUP = null;

	public PlayerAgent Driver;

	public int LapCount;

	private PlayerCharacterController m_Ctrl;

	private float m_Torque;

	private float m_Brake;

	private float m_SteerAngle;

	private float m_MaxSpeed;

	private float m_SteerDrag;

	private float m_RespawnTriggerHeight;

	private Vector3 m_RespawnPos;

	private Vector3 m_RespawnEuler;

	private int m_PreviousCheckpointIdx;

	private int m_CurrentCheckpointIdx;

	private int m_CurrentFakeCheckpointIdx;

	public Rigidbody RigidBody;

	private BoxCollider m_Collider;

	private KartDamage m_Damage;

	private float m_LapTimestamp;

	private float m_RaceTime;

	private long Score
	{
		get
		{
			//IL_0043: 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_0061: 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)
			double num = GLOBAL_LAP_DIST * (double)LapCount;
			double num2 = LAP_DIST_LOOKUP[m_CurrentCheckpointIdx];
			double num3 = num + num2;
			if (m_CurrentCheckpointIdx + 1 < s_Checkpoints.Length)
			{
				Vector3 position = ((Component)s_Checkpoints[m_CurrentCheckpointIdx]).transform.position;
				Vector3 position2 = ((Component)s_Checkpoints[m_CurrentCheckpointIdx + 1]).transform.position;
				double num4 = MathUtils.FastVector3Dist(position, position2);
				double num5 = MathUtils.FastVector3Dist(((Component)this).transform.position, position2);
				num3 += num4 - num5;
			}
			return (long)Math.Floor(num3);
		}
	}

	private float Speedboost
	{
		get
		{
			if ((Object)(object)Driver == (Object)null)
			{
				return 1f;
			}
			return Mathf.Max((Driver.MeleeBuffTimer - Clock.Time) * 0.4f, 1f);
		}
	}

	private Color RainbowColor => new Color(Mathf.Sin(Time.time * 3f) * 0.5f + 0.5f, Mathf.Sin(Time.time * 3f + 2f) * 0.5f + 0.5f, Mathf.Sin(Time.time * 3f + 4f) * 0.5f + 0.5f, 1f);

	public KartKontroller(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private static double DistanceBetweenCheckpoints(int a, int b)
	{
		CheckPoint[] abCheckpoints = s_Checkpoints[a..b];
		return abCheckpoints.Select((CheckPoint x) => ((Component)x).transform.position).SelectMany((Vector3 x, int idx) => from x in abCheckpoints.Skip(idx + 1)
			select ((Component)x).transform.position into y
			select MathUtils.FastVector3Dist(x, y)).Sum();
	}

	private void Start()
	{
		//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_0082: 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)
		//IL_009d: 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)
		RigidBody = ((Component)this).GetComponent<Rigidbody>();
		m_Collider = ((Component)this).GetComponent<BoxCollider>();
		m_Damage = ((Component)this).gameObject.AddComponent<KartDamage>();
		m_Damage.Kart = this;
		m_Torque = 200f;
		m_Brake = 2.4f;
		m_SteerAngle = 15f;
		m_MaxSpeed = 120f;
		m_SteerDrag = 25f;
		Rigidbody rigidBody = RigidBody;
		rigidBody.centerOfMass -= Vector3.up * 0.1f;
		RigidBody.AddForce(((Component)this).transform.forward * 25f);
	}

	[HideFromIl2Cpp]
	public void Setup(PlayerAgent driver)
	{
		//IL_0026: 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_0058: 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_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_0082: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
		Debug.LogWarning(Object.op_Implicit("kart setup - " + driver.Owner.NickName));
		m_RespawnTriggerHeight = ((Component)this).transform.position.y - 128f;
		m_RespawnPos = ((Component)this).transform.position;
		m_RespawnEuler = new Vector3(0f, ((Component)this).transform.eulerAngles.y, 0f);
		Transform transform = ((Component)this).transform;
		transform.position += Vector3.up;
		Transform transform2 = ((Component)this).transform;
		transform2.position -= ((Component)this).transform.forward;
		m_RaceTime = 0f;
		AttachPlayer(driver);
	}

	[HideFromIl2Cpp]
	public void EnterCheckpoint(CheckPoint checkpoint)
	{
		//IL_0204: Unknown result type (might be due to invalid IL or missing references)
		//IL_0209: Unknown result type (might be due to invalid IL or missing references)
		//IL_0215: Unknown result type (might be due to invalid IL or missing references)
		//IL_021a: Unknown result type (might be due to invalid IL or missing references)
		int checkPointIdx = checkpoint.CheckPointIdx;
		if (checkPointIdx == m_CurrentFakeCheckpointIdx || (Object)(object)Driver == (Object)null || (Object)(object)Driver != (Object)(object)PlayerManager.GetLocalPlayerAgent())
		{
			return;
		}
		bool flag = checkPointIdx == s_Checkpoints.Length - 1;
		if (m_CurrentCheckpointIdx == s_Checkpoints.Length - 1 && checkPointIdx == 0)
		{
			LapCount++;
			Debug.Log(Object.op_Implicit($"New lap! {LapCount}"));
			m_LapTimestamp = Time.time + 3f;
			Driver.Sound.Post(2975357637u, true);
			_ = $"Lap {LapCount + 1}";
			_ = LapCount;
			_ = 2;
			GuiManager.PlayerLayer.m_objectiveTimer.UpdateTimerTitle($"Lap {LapCount + 1}");
			if (LapCount > 2)
			{
				pScoreData pScoreData2 = default(pScoreData);
				pScoreData2.kart0score = s_Karts[0].Score;
				pScoreData2.kart1score = s_Karts[1].Score;
				pScoreData2.kart2score = s_Karts[2].Score;
				pScoreData2.kart3score = s_Karts[3].Score;
				pScoreData pScoreData3 = pScoreData2;
				NetworkAPI.InvokeEvent<pScoreData>("SyncEndRace", pScoreData3, (SNet_ChannelType)2);
				NetworkManager.SyncEndRace(0uL, pScoreData3);
			}
		}
		else if ((m_CurrentFakeCheckpointIdx > checkPointIdx && checkPointIdx != 0) || (m_CurrentCheckpointIdx == 0 && flag))
		{
			m_CurrentFakeCheckpointIdx = checkPointIdx;
			return;
		}
		Debug.Log(Object.op_Implicit($"Checkpoint! {checkPointIdx}"));
		m_RespawnPos = ((Component)checkpoint).transform.position;
		m_RespawnEuler = ((Component)checkpoint).transform.eulerAngles;
		m_PreviousCheckpointIdx = m_CurrentCheckpointIdx;
		m_CurrentCheckpointIdx = checkPointIdx;
		m_CurrentFakeCheckpointIdx = checkPointIdx;
	}

	private void FixedUpdate()
	{
		//IL_0058: 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_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_0090: 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_0048: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: 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_0105: Unknown result type (might be due to invalid IL or missing references)
		//IL_010a: Unknown result type (might be due to invalid IL or missing references)
		//IL_010f: 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_011b: Unknown result type (might be due to invalid IL or missing references)
		//IL_011c: Unknown result type (might be due to invalid IL or missing references)
		//IL_011d: Unknown result type (might be due to invalid IL or missing references)
		//IL_019b: 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_01ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b1: 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_01be: Unknown result type (might be due to invalid IL or missing references)
		//IL_0236: Unknown result type (might be due to invalid IL or missing references)
		//IL_023b: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
		//IL_01da: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ee: 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_0272: Unknown result type (might be due to invalid IL or missing references)
		//IL_027f: Unknown result type (might be due to invalid IL or missing references)
		//IL_028f: Unknown result type (might be due to invalid IL or missing references)
		//IL_029a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_0259: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: 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_020d: 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_0221: Unknown result type (might be due to invalid IL or missing references)
		//IL_0226: Unknown result type (might be due to invalid IL or missing references)
		//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f9: 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_0331: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)Driver != (Object)null && (Object)(object)m_Ctrl != (Object)null)
		{
			Driver.PlayerCharacterController.Position = ((Component)this).transform.position;
			Driver.PlayerCharacterController.m_smoothPosition = ((Component)this).transform.position;
		}
		if (((Component)this).transform.position.y < m_RespawnTriggerHeight)
		{
			Respawn();
		}
		if (!Physics.Raycast(((Component)m_Collider).transform.position, ((Component)this).transform.up * -1f, 0.35f, LayerMask.GetMask(new string[1] { "Default" })) || (Object)(object)Driver == (Object)null || (Object)(object)Driver != (Object)(object)PlayerManager.GetLocalPlayerAgent())
		{
			return;
		}
		Vector3 val = 50f * Vector3.Cross(((Component)RigidBody).transform.up, Vector3.up);
		Vector3 val2 = 50f * -RigidBody.angularVelocity;
		RigidBody.AddTorque(val + val2, (ForceMode)5);
		float num = (Input.GetKey((KeyCode)119) ? 1 : 0) + (Input.GetKey((KeyCode)115) ? (-1) : 0);
		float num2 = (Input.GetKey((KeyCode)100) ? 1 : 0) + (Input.GetKey((KeyCode)97) ? (-1) : 0);
		float num3 = m_Torque * num * Speedboost;
		float num4 = m_SteerAngle * num2;
		float num5 = ((num3 == 0f) ? m_Brake : 0f);
		Vector3 val3 = ((Component)this).transform.forward * num3 * Time.fixedDeltaTime;
		Vector3 velocity = RigidBody.velocity;
		if (((Vector3)(ref velocity)).magnitude < 1f)
		{
			val3 += Vector3.up * 100f * Time.fixedDeltaTime;
			if (num3 > 0f)
			{
				Transform transform = ((Component)this).transform;
				transform.localEulerAngles += Vector3.right * (0f - num3) * 0.5f * Time.fixedDeltaTime;
			}
		}
		velocity = RigidBody.velocity;
		if (((Vector3)(ref velocity)).magnitude < m_MaxSpeed * Speedboost)
		{
			RigidBody.AddForce(val3, (ForceMode)5);
		}
		RigidBody.velocity = Vector3.Lerp(RigidBody.velocity, Vector3.zero, num5 * Time.fixedDeltaTime);
		float num6 = Vector3.Dot(RigidBody.velocity, ((Component)this).transform.forward);
		float num7 = num4;
		velocity = RigidBody.velocity;
		num4 = num7 * Mathf.Lerp(4f, 1f, ((Vector3)(ref velocity)).magnitude * 0.05f);
		if (num4 != 0f)
		{
			RigidBody.angularVelocity = new Vector3(RigidBody.angularVelocity.x, RigidBody.angularVelocity.y + Mathf.Sqrt(Mathf.Abs(num6)) * Mathf.Sign(num6) * num4 * Time.fixedDeltaTime, RigidBody.angularVelocity.z);
		}
		RigidBody.angularDrag = ((num4 == 0f) ? m_SteerDrag : 0f);
	}

	private void Update()
	{
		//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_001a: 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_00a1: 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_008b: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
		if (Physics.Raycast(((Component)m_Collider).transform.position, Vector3.up * -1f, 1f, LayerMask.GetMask(new string[1] { "Default" })) && !((Object)(object)Driver == (Object)null) && !((Object)(object)Driver != (Object)(object)PlayerManager.GetLocalPlayerAgent()))
		{
			m_RaceTime += Time.deltaTime;
			Color val = Color.white;
			if (m_LapTimestamp > Time.time)
			{
				val = RainbowColor;
			}
			GuiManager.PlayerLayer.m_objectiveTimer.UpdateTimerText(m_RaceTime, 9999999f, val);
			((Dam_SyncedDamageBase)Driver.Damage).Health = 500f;
			if (Input.GetKeyDown((KeyCode)32))
			{
				RigidBody.AddForce(Vector3.up * 8000f, (ForceMode)1);
			}
			PushKartPacket();
		}
	}

	[HideFromIl2Cpp]
	public void AttachPlayer(PlayerAgent driver)
	{
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		Debug.LogWarning(Object.op_Implicit("attach player - " + driver.Owner.NickName));
		driver.Locomotion.ChangeState((PLOC_State)1, false);
		((Component)driver).transform.position = ((Component)this).transform.position;
		((Component)driver).transform.parent = ((Component)this).transform;
		((Behaviour)driver.Locomotion).enabled = false;
		m_Ctrl = driver.PlayerCharacterController;
		if ((Object)(object)m_Ctrl != (Object)null)
		{
			((Behaviour)m_Ctrl).enabled = false;
		}
		driver.PlayerSyncModel.m_tentacleTarget = ((Component)this).transform;
		((Dam_SyncedDamageBase)driver.Damage).Health = 500f;
		((Dam_SyncedDamageBase)driver.Damage).HealthMax = 500f;
		Driver = driver;
		((Object)this).name = ((Object)this).name + "_(" + driver.Owner.NickName + ")";
	}

	[HideFromIl2Cpp]
	public void DetatchPlayer()
	{
		if ((Object)(object)Driver != (Object)null)
		{
			Debug.LogWarning(Object.op_Implicit("detatch player"));
			if ((Object)(object)Driver.PlayerCharacterController != (Object)null)
			{
				((Behaviour)Driver.PlayerCharacterController).enabled = true;
			}
			((Component)Driver).transform.parent = null;
		}
		((Behaviour)this).enabled = false;
		((Component)this).gameObject.SetActive(false);
	}

	[HideFromIl2Cpp]
	private void PushKartPacket()
	{
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: 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_0039: 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_0058: 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)
		pKartPos pKartPos2 = default(pKartPos);
		pKartPos2.kartIdx = Driver.PlayerSlotIndex;
		pKartPos2.position = ((Component)this).transform.position;
		pKartPos2.euler = ((Component)this).transform.eulerAngles;
		pKartPos2.velocity = RigidBody.velocity;
		pKartPos2.angVelocity = RigidBody.angularVelocity;
		pKartPos pKartPos3 = pKartPos2;
		NetworkAPI.InvokeEvent<pKartPos>("SyncKartPos", pKartPos3, (SNet_ChannelType)2);
	}

	[HideFromIl2Cpp]
	public void Respawn()
	{
		//IL_0006: 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_0027: 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)
		RigidBody.velocity = Vector3.zero;
		RigidBody.angularVelocity = Vector3.zero;
		((Component)this).transform.eulerAngles = m_RespawnEuler;
		((Component)this).transform.position = m_RespawnPos;
	}
}
public class SentryGunTimer : MonoBehaviour
{
	private SentryGunInstance m_Sentry;

	private float m_DetonateTimestamp;

	private float m_FastBeepTimestamp;

	private float m_BeepTimestamp;

	private float m_BeepDelay;

	private static FX_Pool s_ExplosionVFX;

	public static FX_Pool ExplosionVFX
	{
		get
		{
			if ((Object)(object)s_ExplosionVFX == (Object)null)
			{
				s_ExplosionVFX = FX_Manager.GetEffectPool(AssetShardManager.GetLoadedAsset<GameObject>("Assets/AssetPrefabs/FX_Effects/FX_Tripmine.prefab", false));
			}
			return s_ExplosionVFX;
		}
	}

	public SentryGunTimer(nint hdl)
		: base((IntPtr)hdl)
	{
	}

	private void Start()
	{
		m_Sentry = ((Component)this).GetComponent<SentryGunInstance>();
		m_DetonateTimestamp = Time.time + 20f;
		m_FastBeepTimestamp = (m_DetonateTimestamp -= 3f);
		m_BeepDelay = 1f;
		m_BeepTimestamp = Time.time + m_BeepDelay;
	}

	private void Update()
	{
		if (Time.time > m_BeepTimestamp)
		{
			if (Time.time > m_FastBeepTimestamp)
			{
				m_BeepDelay = 0.25f;
			}
			((ItemEquippable)m_Sentry).Sound.Post(EVENTS.TERMINAL_PING_MARKER_SFX, true);
			m_BeepTimestamp += m_BeepDelay;
		}
		if (Time.time > m_DetonateTimestamp)
		{
			Detonate();
		}
	}

	[HideFromIl2Cpp]
	private void Detonate()
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: 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_0045: 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_006a: 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)
		((FX_EffectBase)ExplosionVFX.AquireEffect()).Play((FX_Trigger)null, ((Component)m_Sentry).transform.position, Quaternion.LookRotation(((Component)m_Sentry).transform.up));
		CellSound.Post(EVENTS.STICKYMINEEXPLODE, ((Component)m_Sentry).transform.position);
		DamageUtil.DoExplosionDamage(((Component)m_Sentry).transform.position + Vector3.up * 0.25f, 20f, 0f, LayerManager.MASK_PROJECTILE_BLOCKERS, 0, true, 100000f);
		ItemReplicationManager.DeSpawn(m_Sentry.Replicator);
	}
}
[HarmonyPatch(typeof(LayerManager))]
internal class LayerManager_Hooks
{
	[HarmonyPatch("Setup")]
	[HarmonyPostfix]
	[HarmonyWrapSafe]
	public static void Setup_Postfix(LayerManager __instance)
	{
		LayerManager.MASK_MELEE_ATTACK_TARGETS_WITH_STATIC = __instance.GetMask(new string[7] { "EnemyDamagable", "Dynamic", "Default", "Default_NoGraph", "Default_BlockGraph", "EnemyDead", "ProjectileBlocker" });
		LayerManager.MASK_ENEMY_DAMAGABLE = __instance.GetMask(new string[5] { "EnemyDamagable", "Dynamic", "PlayerMover", "PlayerSynced", "ProjectileBlocker" });
		LayerManager.MASK_STICKY_MINE_TARGETS = __instance.GetMask(new string[8] { "EnemyDamagable", "Default", "Default_NoGraph", "Default_BlockGraph", "Dynamic", "PlayerMover", "PlayerSynced", "ProjectileBlocker" });
	}
}
[HarmonyPatch]
internal class SentryGun_Hooks
{
	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunInstance_Detection), "Setup")]
	public static void SentryGunInstance_Detection_Setup(SentryGunInstance_Detection __instance)
	{
		__instance.m_targetPlayers = true;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunInstance_ScannerVisuals_Plane), "Setup")]
	public static void SentryGunInstance_ScannerVisuals_Plane_Setup(SentryGunInstance_ScannerVisuals_Plane __instance)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		__instance.m_scanningColor = new Color(0.78f, 0.4f, 0f, 1f);
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunPlacementIndicator), "SetVisible")]
	public static void SentryGunPlacementIndicator_SetVisible(SentryGunPlacementIndicator __instance)
	{
		__instance.m_raycastCorners = new Il2CppReferenceArray<Transform>(0L);
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunInstance), "OnGearSpawnComplete")]
	public static void SentryGunInstance_OnGearSpawnComplete(SentryGunInstance __instance)
	{
		((Component)__instance).gameObject.AddComponent<SentryGunTimer>();
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunInstance), "TryGetTargetAimPos")]
	public static void SentryGunInstance_TryGetTargetAimPos(ref Vector3 pos)
	{
		//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_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)
		pos -= Vector3.up;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(SentryGunInstance), "OnSpawn")]
	public static void SentryGunInstance_OnSpawn(SentryGunInstance __instance)
	{
		((Item)__instance).Owner = null;
	}
}
[HarmonyPatch]
internal class Tripmine_Hooks
{
	[HarmonyPostfix]
	[HarmonyPatch(typeof(MineDeployerInstance_Detonate_Explosive), "Setup")]
	public static void MineDeployerInstance_Detonate_Explosive_Setup(MineDeployerInstance_Detonate_Explosive __instance)
	{
		MineDeployerInstance_Detonate_Explosive __instance2 = __instance;
		__instance2.OnDetonationDone += Action.op_Implicit((Action)delegate
		{
			//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_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)
			DamageUtil.DoExplosionDamage(((Component)__instance2).transform.position + Vector3.up * 0.25f, 40f, 0f, LayerManager.MASK_PROJECTILE_BLOCKERS, 0, true, 100000f);
		});
		((Collider)((Component)((Component)__instance2).gameObject.GetComponentInChildren<GenericDamageComponent>()).gameObject.GetComponent<BoxCollider>()).enabled = false;
	}
}
public class NetworkManager
{
	public static void Setup()
	{
		NetworkAPI.RegisterEvent<pKartPos>("SyncKartPos", (Action<ulong, pKartPos>)SyncKartPos);
		NetworkAPI.RegisterEvent<pImpulse>("SyncKartImpulse", (Action<ulong, pImpulse>)SyncKartImpulse);
		NetworkAPI.RegisterEvent<pScoreData>("SyncEndRace", (Action<ulong, pScoreData>)SyncEndRace);
		NetworkAPI.RegisterEvent<int>("SyncRequestItemRNG", (Action<ulong, int>)SyncRequestItemRNG);
		NetworkAPI.RegisterEvent<pItemPickup>("SyncPickupItembox", (Action<ulong, pItemPickup>)SyncPickupItembox);
		NetworkAPI.RegisterEvent<int>("TriggerKartEntry", (Action<ulong, int>)SyncKartEntry);
	}

	public static void SyncKartPos(ulong x, pKartPos kartPos)
	{
		//IL_0073: 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_0095: 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)
		if (KartKontroller.s_Karts != null)
		{
			if (KartKontroller.s_Karts.Length < kartPos.kartIdx)
			{
				Debug.LogError(Object.op_Implicit($"Attempting to refresh a kart outside of the array! wrf... bro this is not ok... ulong x {x} - kartidx {kartPos.kartIdx}"));
			}
			else
			{
				KartKontroller obj = KartKontroller.s_Karts[kartPos.kartIdx];
				obj.RigidBody.velocity = kartPos.velocity;
				obj.RigidBody.angularVelocity = kartPos.angVelocity;
				((Component)obj).transform.position = kartPos.position;
				((Component)obj).transform.eulerAngles = kartPos.euler;
			}
		}
	}

	public static void SyncKartEntry(ulong x, int y)
	{
		//IL_0000: Unknown result type (might be due to invalid IL or missing references)
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		//IL_02db: Unknown result type (might be due to invalid IL or missing references)
		EnvironmentStateManager.AttemptLightningStrike(Vector3.down, Color.red);
		Dimension val = default(Dimension);
		LG_LevelBuilder.Current.m_currentFloor.GetDimension((eDimensionIndex)1, ref val);
		Transform transform = ((Component)val.DimensionLevel).transform;
		((Component)transform.GetChild(4).FindChild("Floor")).gameObject.SetActive(false);
		KartKontroller.s_Karts = new KartKontroller[4]
		{
			((Component)transform.FindChild("Kart1").GetChild(0)).gameObject.AddComponent<KartKontroller>(),
			((Component)transform.FindChild("Kart2").GetChild(0)).gameObject.AddComponent<KartKontroller>(),
			((Component)transform.FindChild("Kart3").GetChild(0)).gameObject.AddComponent<KartKontroller>(),
			((Component)transform.FindChild("Kart4").GetChild(0)).gameObject.AddComponent<KartKontroller>()
		};
		if (KartKontroller.s_Checkpoints == null)
		{
			List<CheckPoint> list = new List<CheckPoint>();
			Transform val2 = transform.FindChild("Checkpoints");
			for (int i = 0; i < val2.childCount; i++)
			{
				list.Add(((Component)val2.GetChild(i)).gameObject.AddComponent<CheckPoint>());
				list[i].CheckPointIdx = i;
			}
			KartKontroller.s_Checkpoints = list.ToArray();
			KartKontroller.GLOBAL_LAP_DIST = DistanceBetweenCheckpoints(0, KartKontroller.s_Checkpoints.Length);
			KartKontroller.LAP_DIST_LOOKUP = new Dictionary<int, double>();
			CheckPoint[] s_Checkpoints = KartKontroller.s_Checkpoints;
			foreach (CheckPoint checkPoint in s_Checkpoints)
			{
				KartKontroller.LAP_DIST_LOOKUP[checkPoint.CheckPointIdx] = KartKontroller.GLOBAL_LAP_DIST - DistanceBetweenCheckpoints(checkPoint.CheckPointIdx, KartKontroller.s_Checkpoints.Length);
			}
		}
		Transform val3 = transform.FindChild("Items");
		for (int k = 0; k < val3.childCount; k++)
		{
			((Component)val3.GetChild(k)).gameObject.AddComponent<ItemPickupTrigger>();
		}
		Debug.LogWarning(Object.op_Implicit($"s_Karts - {KartKontroller.s_Karts.Length}"));
		for (int l = 0; l < PlayerManager.PlayerAgentsInLevel.Count; l++)
		{
			PlayerAgent val4 = PlayerManager.PlayerAgentsInLevel[l];
			if (!((Object)(object)val4 == (Object)null))
			{
				Debug.LogWarning(Object.op_Implicit($"{val4.Owner.NickName} - {val4.PlayerSlotIndex}"));
				KartKontroller.s_Karts[val4.PlayerSlotIndex].Setup(val4);
				val4.Sound.Post(EVENTS.HACKING_PUZZLE_SUCCESS, true);
			}
		}
		EntryPoint.MusicPlayer.Post(1498076536u, true);
		GuiManager.PlayerLayer.m_objectiveTimer.SetTimerActive(true, true);
		GuiManager.PlayerLayer.m_objectiveTimer.UpdateTimerText(0f, 99999f, Color.white);
		GuiManager.PlayerLayer.m_objectiveTimer.UpdateTimerTitle("Lap 0");
		static double DistanceBetweenCheckpoints(int a, int b)
		{
			CheckPoint[] abCheckpoints = KartKontroller.s_Checkpoints[a..b];
			return abCheckpoints.Select((CheckPoint x) => ((Component)x).transform.position).SelectMany((Vector3 x, int idx) => from x in abCheckpoints.Skip(idx + 1)
				select ((Component)x).transform.position into y
				select MathUtils.FastVector3Dist(x, y)).Sum();
		}
	}

	public static void SyncKartImpulse(ulong x, pImpulse impulse)
	{
		//IL_0078: Unknown result type (might be due to invalid IL or missing references)
		if (KartKontroller.s_Karts != null)
		{
			if (KartKontroller.s_Karts.Length < impulse.kartIdx)
			{
				Debug.LogError(Object.op_Implicit($"Attempting to refresh a kart outside of the array! wrf... bro this is not ok... ulong x {x} - kartidx {impulse.kartIdx}"));
			}
			else
			{
				KartKontroller.s_Karts[impulse.kartIdx].RigidBody.AddExplosionForce(impulse.force, impulse.position, impulse.radius, impulse.upwardsModifier);
			}
		}
	}

	public static void SyncEndRace(ulong x, pScoreData score)
	{
		//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_0037: 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_0055: Expected O, but got Unknown
		//IL_0146: 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)
		KartKontroller[] s_Karts = KartKontroller.s_Karts;
		for (int i = 0; i < s_Karts.Length; i++)
		{
			s_Karts[i].DetatchPlayer();
		}
		WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(new WardenObjectiveEventData
		{
			Type = (eWardenObjectiveEventType)8,
			DimensionIndex = (eDimensionIndex)2,
			Delay = 0f,
			Trigger = (eWardenObjectiveEventTrigger)1
		}, (eWardenObjectiveEventTrigger)1, true, 0f);
		Dimension val = default(Dimension);
		LG_LevelBuilder.Current.m_currentFloor.GetDimension((eDimensionIndex)2, ref val);
		CustomWinScreen customWinScreen = ((Component)val.DimensionLevel).gameObject.AddComponent<CustomWinScreen>();
		long[] array = new long[4]
		{
			score.kart0score * 1000,
			score.kart1score * 1000 + 1,
			score.kart2score * 1000 + 2,
			score.kart3score * 1000 + 3
		};
		long[] array2 = array;
		Array.Sort(array2);
		Array.Reverse(array2);
		for (int j = 0; j < 4; j++)
		{
			customWinScreen.SpawnPlayerModel(Array.IndexOf(array, array2[j]), val.DimensionLevel.m_spawnPoints[j + 4], j == 0);
		}
		customWinScreen.TriggerWinSequence();
		FPSCamera fPSCamera = PlayerManager.GetLocalPlayerAgent().FPSCamera;
		((Component)fPSCamera).transform.parent = ((Component)val.DimensionLevel).transform.FindChild("CameraAlign");
		((Component)fPSCamera).transform.localPosition = Vector3.zero;
		((Component)fPSCamera).transform.localEulerAngles = Vector3.zero;
		fPSCamera.OverrideFieldOfView(90f);
		((Behaviour)((Component)fPSCamera).GetComponent<UI_Apply>()).enabled = false;
		((Behaviour)((Component)fPSCamera).GetComponent<AmbientParticles>()).enabled = false;
	}

	public static void SyncRequestItemRNG(ulong x, int playerIdx)
	{
		if (SNet.IsMaster)
		{
			PlayerAgent driver = KartKontroller.s_Karts[playerIdx].Driver;
			float value = Random.value;
			value *= (float)ItemPickupTrigger.s_ValidItems.Length;
			Mathf.Round(value);
			ItemPickupTrigger.ItemDefinition itemDefinition = ItemPickupTrigger.s_ValidItems[(uint)value];
			pItemPickup pItemPickup2 = default(pItemPickup);
			pItemPickup2.playerIdx = driver.PlayerSlotIndex;
			pItemPickup2.itemID = itemDefinition.ID;
			pItemPickup2.Ammo = itemDefinition.ammo;
			pItemPickup pItemPickup3 = pItemPickup2;
			NetworkAPI.InvokeEvent<pItemPickup>("SyncPickupItembox", pItemPickup3, (SNet_ChannelType)2);
			SyncPickupItembox(0uL, pItemPickup3);
		}
	}

	public static void SyncPickupItembox(ulong x, pItemPickup item)
	{
		PlayerAgent driver = KartKontroller.s_Karts[item.playerIdx].Driver;
		PlayerAmmoStorage ammoStorage = PlayerBackpackManager.GetBackpack(driver.Owner).AmmoStorage;
		if (item.itemID == 0)
		{
			if ((Object)(object)driver == (Object)(object)PlayerManager.GetLocalPlayerAgent())
			{
				ammoStorage.StandardAmmo.AddAmmo(99999f);
				ammoStorage.SpecialAmmo.AddAmmo(99999f);
				ammoStorage.ClassAmmo.AddAmmo(99999f);
				Debug.Log(Object.op_Implicit("Max ammo!"));
				CellSound.Post(4007102400u);
			}
		}
		else
		{
			ammoStorage.ConsumableAmmo.AmmoInPack = 0f;
			driver.GiveItem((InventorySlot)5, item.itemID, item.Ammo);
			ammoStorage.UpdateAllAmmoUI();
		}
	}
}
public struct pKartPos
{
	public int kartIdx;

	public Vector3 velocity;

	public Vector3 angVelocity;

	public Vector3 position;

	public Vector3 euler;
}
public struct pImpulse
{
	public int kartIdx;

	public float force;

	public Vector3 position;

	public float radius;

	public float upwardsModifier;
}
public struct pScoreData
{
	public long kart0score;

	public long kart1score;

	public long kart2score;

	public long kart3score;
}
public struct pItemPickup
{
	public int playerIdx;

	public uint itemID;

	public int Ammo;
}
namespace LockoutThree
{
	[BepInPlugin("gay.giagg.lockout3", "Lockout3", "1.0.0")]
	public class EntryPoint : BasePlugin
	{
		private Harmony m_Harmony;

		public static CellSoundPlayer MusicPlayer = new CellSoundPlayer();

		public override void Load()
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Expected O, but got Unknown
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			CM_PageLoadout_CustomData.OFFSET = Il2CppFieldExtender.InjectSizedDataIntoType<CM_PageLoadout, CM_PageLoadout_CustomData>();
			m_Harmony = new Harmony("gay.giagg.lockout3");
			m_Harmony.PatchAll(typeof(EntryPoint).Assembly);
			ClassInjector.RegisterTypeInIl2Cpp<KartKontroller>();
			ClassInjector.RegisterTypeInIl2Cpp<SentryGunTimer>();
			ClassInjector.RegisterTypeInIl2Cpp<CheckPoint>();
			ClassInjector.RegisterTypeInIl2Cpp<CustomWinScreen>();
			ClassInjector.RegisterTypeInIl2Cpp<ThrowableSentry>();
			ClassInjector.RegisterTypeInIl2Cpp<ThrowableTripmine>();
			ClassInjector.RegisterTypeInIl2Cpp<ItemPickupTrigger>();
			RegisterTypeOptions val = new RegisterTypeOptions();
			val.set_Interfaces(Il2CppInterfaceCollection.op_Implicit(new Type[1] { typeof(IDamageable) }));
			ClassInjector.RegisterTypeInIl2Cpp<KartDamage>(val);
			NetworkManager.Setup();
			AssetAPI.OnAssetBundlesLoaded += AssetAPI_OnAssetBundlesLoaded;
			Time.fixedDeltaTime = 1f / 60f;
			Physics.IgnoreLayerCollision(LayerMask.NameToLayer("ProjectileBlocker"), LayerMask.NameToLayer("ProjectileBlocker"), false);
			Physics.IgnoreLayerCollision(LayerMask.NameToLayer("ProjectileBlocker"), LayerMask.NameToLayer("Default"), false);
		}

		private void AssetAPI_OnAssetBundlesLoaded()
		{
			PrefabAPI.CreateConsumableInstance<ThrowableSentry>("Assets/GIAGG_Content/Items/Consumable_ThrowableSentry.prefab");
			PrefabAPI.CreateConsumableInstance<ThrowableTripmine>("Assets/GIAGG_Content/Items/Consumable_ThrowableMine.prefab");
			CustomWinScreen.s_Animator = ((Il2CppObjectBase)AssetShardManager.GetLoadedAsset("Assets/GIAGG_Content/Animation/Winner.controller", false)).TryCast<RuntimeAnimatorController>();
		}
	}
	[GeneratedCode("VersionInfoGenerator", "2.0.0+git50a4b1a-master")]
	[CompilerGenerated]
	internal static class VersionInfo
	{
		public const string RootNamespace = "LockoutThree";

		public const string Version = "1.0.0";

		public const string VersionPrerelease = null;

		public const string VersionMetadata = "gitbe236e6-dirty-master";

		public const string SemVer = "1.0.0+gitbe236e6-dirty-master";

		public const string GitRevShort = "be236e6-dirty";

		public const string GitRevLong = "be236e6c2f938668b824e2343278d0290e2a3096-dirty";

		public const string GitBranch = "master";

		public const string GitTag = null;

		public const bool GitIsDirty = true;
	}
}
namespace LockoutThree.Utils
{
	internal static class Il2CppFieldExtender
	{
		public unsafe static uint InjectSizedDataIntoType<TType, TSizedData>() where TSizedData : unmanaged
		{
			INativeClassStruct il2CppClass = TypeExtensions.GetIl2CppClass(typeof(TType));
			uint instanceSize = il2CppClass.InstanceSize;
			il2CppClass.ActualSize += (uint)(sizeof(TSizedData) + sizeof(IntPtr));
			il2CppClass.InstanceSize += (uint)(sizeof(TSizedData) + sizeof(IntPtr));
			return instanceSize;
		}
	}
	internal static class MathUtils
	{
		public static double FastVector3Dist(Vector3 a, Vector3 b)
		{
			//IL_0000: 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_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: 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: 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_002e: 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_003d: 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_004a: Unknown result type (might be due to invalid IL or missing references)
			return Math.Sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y) + (b.z - a.z) * (b.z - a.z));
		}
	}
}
namespace LockoutThree.Hooks
{
	[HarmonyPatch(typeof(CM_MenuBar))]
	internal class CM_MenuBar_Hooks
	{
		[HarmonyPatch("Setup")]
		[HarmonyPostfix]
		[HarmonyWrapSafe]
		public static void Setup_Postfix(CM_MenuBar __instance)
		{
			((CM_Item)__instance.m_loadout).SetText("Lockout 3");
		}

		[HarmonyPatch("Update")]
		[HarmonyPostfix]
		[HarmonyWrapSafe]
		public static void Update_Postfix(CM_MenuBar __instance)
		{
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			((RectTransformComp)__instance.m_rundown).SetVisible(false);
			((RectTransformComp)__instance.m_exitLobbyAndExpedition).SetVisible(false);
			((Component)__instance.m_loadout).transform.position = ((Component)__instance.m_rundown).transform.position;
			((RectTransformComp)__instance.m_expIcon).SetVisible(false);
			((Component)__instance.m_expIcon).gameObject.SetActive(false);
			((Component)__instance.m_expText).gameObject.SetActive(false);
		}
	}
	[HarmonyPatch(typeof(CM_PageIntro))]
	internal class CM_PageIntro_Hooks
	{
		[HarmonyPatch("Setup")]
		[HarmonyPrefix]
		[HarmonyWrapSafe]
		public static void Setup_Prefix()
		{
			Global.SkipIntro = true;
			Global.RundownIdToLoad = 1000u;
		}
	}
	[HarmonyPatch(typeof(CM_PageLoadout))]
	internal class CM_PageLoadout_Hooks
	{
		private static bool ONCE_CALLED;

		[HarmonyPatch("Update")]
		[HarmonyPostfix]
		[HarmonyWrapSafe]
		public static void Update_Postfix(CM_PageLoadout __instance)
		{
			//IL_0071: 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_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Expected O, but got Unknown
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Invalid comparison between Unknown and I4
			CM_PageLoadout __instance2 = __instance;
			ref CM_PageLoadout_CustomData fromObj = ref CM_PageLoadout_CustomData.GetFromObj(__instance2);
			if (!ONCE_CALLED)
			{
				GameObject obj = Object.Instantiate<GameObject>(((Component)GuiManager.Current.m_mainMenuLayer.PageRundownNew.m_pasteServerIdButton).gameObject);
				obj.transform.parent = ((Component)((CM_PageBase)__instance2).m_menuBar).transform;
				Vector3 localPosition = ((Component)((CM_PageBase)__instance2).m_menuBar.m_settings).transform.localPosition;
				localPosition.x += 150f;
				localPosition.y -= 100f;
				obj.transform.localPosition = localPosition;
				CM_Item component = obj.GetComponent<CM_Item>();
				component.OnBtnPressCallback += Action<int>.op_Implicit((Action<int>)delegate
				{
					ref CM_PageLoadout_CustomData fromObj2 = ref CM_PageLoadout_CustomData.GetFromObj(__instance2);
					if (fromObj2.HasVerified && fromObj2.VerifiedLobbyId != 0L)
					{
						CM_Utils.JoinLobby(fromObj2.VerifiedLobbyId, (Action)null, (Action)null);
						fromObj2.VerifiedLobbyId = 0uL;
					}
				});
				fromObj.CheckClipboardTimer = 0f;
				fromObj.LobbyJoinButtonPtr = ((Il2CppObjectBase)component).Pointer;
				ONCE_CALLED = true;
			}
			else
			{
				if (!(Clock.Time > fromObj.CheckClipboardTimer))
				{
					return;
				}
				fromObj.CheckClipboardTimer = Clock.Time + 1.5f;
				bool flag = false;
				CM_Item val = new CM_Item((IntPtr)fromObj.LobbyJoinButtonPtr);
				SNet_LobbyIdentifier val2 = default(SNet_LobbyIdentifier);
				if (ulong.TryParse(GUIUtility.systemCopyBuffer, out var result) && SNet.Core.IsValidLobbyID(result) && (int)SNet.Core.IsValidLobbyID_ValidateData(result, ref val2) == 2)
				{
					string text = Text.Get(11u);
					if (val2 != null)
					{
						text = val2.Name;
					}
					val.SetText(Text.Format(10u, (Object[])(object)new Object[1] { Object.op_Implicit("<color=red>" + text + "</color>") }));
					((RectTransformComp)val).SetVisible(true);
					flag = true;
					fromObj.HasVerified = true;
					fromObj.VerifiedLobbyId = result;
				}
				if (!flag)
				{
					((RectTransformComp)val).SetVisible(false);
					fromObj.VerifiedLobbyId = 0uL;
					fromObj.HasVerified = false;
				}
			}
		}
	}
	[HarmonyPatch(typeof(CM_PageRundown_New))]
	internal class CM_PageRundown_New_Hooks
	{
		[HarmonyPatch("TryPlaceRundown")]
		[HarmonyPrefix]
		[HarmonyWrapSafe]
		public static void TryPlaceRundown_Prefix(CM_PageRundown_New __instance)
		{
			__instance.m_cortexIntroIsDone = true;
		}

		[HarmonyPatch("TryPlaceRundown")]
		[HarmonyPostfix]
		[HarmonyWrapSafe]
		public static void TryPlaceRundown_Postfix()
		{
			LG_Factory.OnFactoryBuildStart += Action.op_Implicit((Action)delegate
			{
				EntryPoint.MusicPlayer.Post(3213784005u, true);
			});
		}
	}
	[HarmonyPatch(typeof(EnvironmentStateManager))]
	internal class EnvironmentStateManager_Hooks
	{
		[HarmonyPatch("AttemptStartFogTransition")]
		[HarmonyPrefix]
		[HarmonyWrapSafe]
		public static void AttemptStartFogTransition_Prefix(uint fogDataId, EnvironmentStateManager __instance)
		{
			Debug.Log(Object.op_Implicit("balls"));
			if (fogDataId == 1001)
			{
				NetworkAPI.InvokeEvent<int>("TriggerKartEntry", 0, (SNet_ChannelType)2);
				NetworkManager.SyncKartEntry(0uL, 0);
			}
		}
	}
}
namespace LockoutThree.Extensions
{
	internal static class PlayerAgentExtensions
	{
		public static void GiveItem(this PlayerAgent player, InventorySlot slot, uint itemId, float ammo = 1f, bool forceAmmo = true)
		{
			//IL_0028: 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_0039: 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_003f: 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_0057: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Invalid comparison between Unknown and I4
			//IL_0136: 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)
			//IL_0080: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Expected I4, but got Unknown
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			PlayerBackpack val = PlayerBackpackManager.GetBackpack(player.Owner) ?? throw new Exception("Couldn't get backpack for " + player.PlayerName);
			pItemData val2 = default(pItemData);
			val2.itemID_gearCRC = itemId;
			val2.slot = slot;
			pItemData val3 = val2;
			val3.custom.ammo = ammo;
			val.TryClearSlot(slot);
			if (val.SpawnAndEquipItem(itemId, slot, val3) == null)
			{
				throw new Exception("Couldn't spawn and equip item for " + player.PlayerName);
			}
			if ((int)slot != 10)
			{
				InventorySlotAmmo val4 = (InventorySlotAmmo)((slot - 1) switch
				{
					0 => val.AmmoStorage.StandardAmmo, 
					1 => val.AmmoStorage.SpecialAmmo, 
					2 => val.AmmoStorage.ClassAmmo, 
					4 => val.AmmoStorage.ConsumableAmmo, 
					3 => val.AmmoStorage.ResourcePackAmmo, 
					_ => throw new Exception($"unsupported inventory slot {slot}"), 
				});
				if (forceAmmo)
				{
					val4.AmmoInPack += ammo;
				}
				else
				{
					val4.AddAmmo(ammo);
				}
			}
			player.Sync.WantsToWieldSlot(slot, false);
		}
	}
}
namespace LockoutThree.DataInjection
{
	internal struct CM_PageLoadout_CustomData
	{
		public static uint OFFSET = uint.MaxValue;

		public nint LobbyJoinButtonPtr;

		public float CheckClipboardTimer;

		public ulong VerifiedLobbyId;

		public bool HasVerified;

		public unsafe static ref CM_PageLoadout_CustomData GetFromObj(CM_PageLoadout obj)
		{
			CM_PageLoadout_CustomData* source = (CM_PageLoadout_CustomData*)((nint)((Il2CppObjectBase)obj).Pointer + OFFSET);
			return ref Unsafe.AsRef<CM_PageLoadout_CustomData>(source);
		}
	}
}