Decompiled source of Lootrun v1.0.0

Lootrun.dll

Decompiled 4 hours ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using Lootrun.NetcodePatcher;
using Lootrun.hooks;
using Lootrun.types;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Lootrun")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+c73b84816b7c7d9f1f2ba246ee3120273b0daa06")]
[assembly: AssemblyProduct("Lootrun")]
[assembly: AssemblyTitle("Lootrun")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: NetcodePatchedAssembly]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Lootrun
{
	[HarmonyPatch(typeof(HUDManager), "FillEndGameStats")]
	internal class FillEndGameStatsPatch
	{
		[HarmonyPostfix]
		private static void FillEndGameStatsHook(HUDManager __instance)
		{
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			if (LootrunBase.isInLootrun)
			{
				float num = (float)((Vector2Int)(ref LootrunBase.currentRunResults.scrapCollectedOutOf)).x / (float)((Vector2Int)(ref LootrunBase.currentRunResults.scrapCollectedOutOf)).y * 100f;
				((TMP_Text)__instance.statsUIElements.quotaNumerator).text = LootrunBase.SecsToTimer(LootrunBase.LootrunTime);
				((TMP_Text)__instance.statsUIElements.quotaDenominator).text = $"{((Vector2Int)(ref LootrunBase.currentRunResults.scrapCollectedOutOf)).x}/{((Vector2Int)(ref LootrunBase.currentRunResults.scrapCollectedOutOf)).y}({(int)num}%)";
				RectTransform component = ((Component)__instance.statsUIElements.quotaDenominator).GetComponent<RectTransform>();
				component.sizeDelta = new Vector2(component.sizeDelta.x + 500f, component.sizeDelta.y);
			}
		}
	}
	[HarmonyPatch(typeof(KnifeItem), "__initializeVariables")]
	internal class KnifePatch
	{
		[HarmonyPostfix]
		private static void Hook(KnifeItem __instance)
		{
			LootrunBase.mls.LogInfo((object)"KNIFE IS HERE YAY");
			if (LootrunBase.isInLootrun)
			{
				LootrunBase.CurrentRoundSpecials.Add((GrabbableObject)(object)__instance);
			}
		}
	}
	[HarmonyPatch(typeof(NutcrackerEnemyAI), "GrabGun")]
	internal class NutcrackerEnemyAIGrabGunPatch
	{
		[HarmonyPrefix]
		private static void GrabGun(object[] __args)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			if (LootrunBase.isInLootrun)
			{
				LootrunBase.CurrentRoundSpecials.Add((GrabbableObject)(object)((GameObject)__args[0]).GetComponent<ShotgunItem>());
			}
		}
	}
	[HarmonyPatch(typeof(StartMatchLever), "StartGame")]
	internal class StartGamePatch
	{
		[HarmonyPostfix]
		private static void StartGameHook()
		{
			if (LootrunBase.isInLootrun)
			{
				LootrunBase.CurrentRoundBees.Clear();
				LootrunBase.CurrentRoundSpecials.Clear();
				LootrunBase.LootrunTime = 0f;
				LootrunBase.playersThisRound = StartOfRound.Instance.connectedPlayersAmount + 1;
			}
		}
	}
	[BepInPlugin("abb2k.Lootrun", "Lootrun", "1.0.0.0")]
	public class LootrunBase : BaseUnityPlugin
	{
		public const string GUID = "abb2k.Lootrun";

		public const string modName = "Lootrun";

		public const string modVersion = "1.0.0.0";

		private readonly Harmony harmony = new Harmony("abb2k.Lootrun");

		private static LootrunBase Instance;

		public static ManualLogSource mls;

		public static AssetBundle bundle;

		public static Sprite DialogueBox1Frame_5;

		public static Sprite BloodStain2;

		public static Sprite DialogueBoxSimple_1;

		public static Sprite DialogueBoxSimple;

		public static Sprite DropdownArrow;

		public static LootrunSettings currentRunSettings = new LootrunSettings();

		public static LootrunResults currentRunResults = new LootrunResults();

		public static bool isInLootrun;

		public static float LootrunTime;

		public static int playersThisRound;

		public static TextMeshProUGUI timerText;

		public static List<GrabbableObject> CurrentRoundScrap = new List<GrabbableObject>();

		public static List<GrabbableObject> CurrentRoundBees = new List<GrabbableObject>();

		public static List<GrabbableObject> CurrentRoundSpecials = new List<GrabbableObject>();

		public static List<Pair<LootrunSettings, LootrunResults>> allLootruns = new List<Pair<LootrunSettings, LootrunResults>>();

		private void Awake()
		{
			if (!Object.op_Implicit((Object)(object)Instance))
			{
				Instance = this;
			}
			Type[] types = Assembly.GetExecutingAssembly().GetTypes();
			Type[] array = types;
			foreach (Type type in array)
			{
				MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
				MethodInfo[] array2 = methods;
				foreach (MethodInfo methodInfo in array2)
				{
					object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
					if (customAttributes.Length != 0)
					{
						methodInfo.Invoke(null, null);
					}
				}
			}
			mls = ((BaseUnityPlugin)this).Logger;
			mls.LogInfo((object)"Lootrun has loaded :D");
			harmony.PatchAll(typeof(NetworkObjectManagerPatch));
			harmony.PatchAll(typeof(LootrunBase));
			harmony.PatchAll(typeof(MenuManagerHook));
			harmony.PatchAll(typeof(StartOfRoundHook));
			harmony.PatchAll(typeof(SaveGamePatch));
			harmony.PatchAll(typeof(SetShipToLeaveOnMidnightClientRpcPatcher));
			harmony.PatchAll(typeof(TextPostProcessHook));
			harmony.PatchAll(typeof(UpdateProfitQuotaCurrentTimePatch));
			harmony.PatchAll(typeof(PassTimeToNextDayPatch));
			harmony.PatchAll(typeof(waitForScrapToSpawnToSyncPatch));
			harmony.PatchAll(typeof(StartGamePatch));
			harmony.PatchAll(typeof(ShipHasLeftPatch));
			harmony.PatchAll(typeof(TimeOfDayUpdatePatch));
			harmony.PatchAll(typeof(FillEndGameStatsPatch));
			harmony.PatchAll(typeof(ApparatusStartPatch));
			harmony.PatchAll(typeof(RedLocustBeesStartPatch));
			harmony.PatchAll(typeof(NutcrackerEnemyAIGrabGunPatch));
			harmony.PatchAll(typeof(KnifePatch));
			harmony.PatchAll(typeof(AutoSaveShipDataPatch));
			harmony.PatchAll(typeof(LoadShipGrabbableItemsPatch));
			harmony.PatchAll(typeof(PlayerControllerBPatcher));
			allLootruns = ES3.Load<List<Pair<LootrunSettings, LootrunResults>>>("allLootruns", Application.persistentDataPath + "/LootrunSave", new List<Pair<LootrunSettings, LootrunResults>>());
			mls.LogInfo((object)allLootruns.Count);
			string location = ((BaseUnityPlugin)Instance).Info.Location;
			location = location.TrimEnd("Lootrun.dll".ToCharArray());
			bundle = AssetBundle.LoadFromFile(location + "modassets");
			if ((Object)(object)bundle != (Object)null)
			{
				DialogueBox1Frame_5 = bundle.LoadAsset<Sprite>("DialogueBox1Frame 5");
				BloodStain2 = bundle.LoadAsset<Sprite>("BloodStain2");
				DialogueBoxSimple_1 = bundle.LoadAsset<Sprite>("DialogueBoxSimple 1");
				DialogueBoxSimple = bundle.LoadAsset<Sprite>("DialogueBoxSimple");
				DropdownArrow = bundle.LoadAsset<Sprite>("DropdownArrow");
			}
		}

		public static string SecsToTimer(float secondsTimer)
		{
			string empty = string.Empty;
			int num = 0;
			while (secondsTimer >= 60f)
			{
				secondsTimer -= 60f;
				num++;
			}
			int num2 = (int)secondsTimer;
			int num3 = (int)(secondsTimer % 1f * 100f);
			return $"{num:0}:{num2:00}:{num3:00}";
		}

		public static int MoonNameToID(string moonName)
		{
			return moonName switch
			{
				"41-Experimentation" => 0, 
				"220-Assurance" => 1, 
				"56-Vow" => 2, 
				"21-Offense" => 8, 
				"61-March" => 4, 
				"20-Adamance" => 5, 
				"85-Rend" => 6, 
				"7-Dine" => 7, 
				"8-Titan" => 9, 
				"68-Artifice" => 10, 
				"5-Embrion" => 12, 
				_ => 0, 
			};
		}

		public static string MoonIDToName(int moonID)
		{
			return moonID switch
			{
				0 => "41-Experimentation", 
				1 => "220-Assurance", 
				2 => "56-Vow", 
				8 => "21-Offense", 
				4 => "61-March", 
				5 => "20-Adamance", 
				6 => "85-Rend", 
				7 => "7-Dine", 
				9 => "8-Titan", 
				10 => "68-Artifice", 
				12 => "5-Embrion", 
				_ => "41-Experimentation", 
			};
		}

		public static List<LevelWeatherType> MoonAvalableWeathers(int moonID)
		{
			List<LevelWeatherType> list = new List<LevelWeatherType> { (LevelWeatherType)(-1) };
			switch (moonID)
			{
			case 0:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 1:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 2:
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 8:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 4:
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 5:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 6:
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)5);
				break;
			case 7:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 9:
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)5);
				break;
			case 10:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			case 12:
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)5);
				break;
			default:
				list.Add((LevelWeatherType)1);
				list.Add((LevelWeatherType)2);
				list.Add((LevelWeatherType)3);
				list.Add((LevelWeatherType)4);
				list.Add((LevelWeatherType)5);
				break;
			}
			return list;
		}

		public static LevelWeatherType weatherNameToType(string name)
		{
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
			return (LevelWeatherType)(name switch
			{
				"None" => -1, 
				"DustClouds" => 0, 
				"Rainy" => 1, 
				"Stormy" => 2, 
				"Foggy" => 3, 
				"Flooded" => 4, 
				"Eclipsed" => 5, 
				_ => -1, 
			});
		}

		public static void addRunToListAndSave(LootrunSettings settings, LootrunResults res)
		{
			allLootruns.Add(new Pair<LootrunSettings, LootrunResults>(settings, res));
			ES3.Save<List<Pair<LootrunSettings, LootrunResults>>>("allLootruns", allLootruns, Application.persistentDataPath + "/LootrunSave");
		}
	}
}
namespace Lootrun.types
{
	public class LootrunResults : INetworkSerializable
	{
		[SerializeField]
		public int players;

		[SerializeField]
		public float time;

		[SerializeField]
		public Vector2Int scrapCollectedOutOf;

		public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref players, default(ForPrimitives));
			((BufferSerializer<float>*)(&serializer))->SerializeValue<float>(ref time, default(ForPrimitives));
			serializer.SerializeValue(ref scrapCollectedOutOf);
		}
	}
	[SerializeField]
	public class LootrunSettings : INetworkSerializable
	{
		[SerializeField]
		public int moon;

		[SerializeField]
		public int weather;

		[SerializeField]
		public bool bees = true;

		[SerializeField]
		public bool spacials;

		[SerializeField]
		public bool randomseed = true;

		[SerializeField]
		public int seed;

		[SerializeField]
		public int money;

		[SerializeField]
		public bool startCrusier;

		[SerializeField]
		public bool startJetpack;

		public bool compare(LootrunSettings other)
		{
			if (other == null)
			{
				return false;
			}
			if (moon != other.moon)
			{
				return false;
			}
			if (weather != other.weather)
			{
				return false;
			}
			if (bees != other.bees)
			{
				return false;
			}
			if (spacials != other.spacials)
			{
				return false;
			}
			if (randomseed != other.randomseed)
			{
				return false;
			}
			if (seed != other.seed && randomseed)
			{
				return false;
			}
			if (money != other.money)
			{
				return false;
			}
			if (startCrusier != other.startCrusier)
			{
				return false;
			}
			if (startJetpack != other.startJetpack)
			{
				return false;
			}
			return true;
		}

		public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: 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_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0067: Unknown result type (might be due to invalid IL or missing references)
			//IL_006d: 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_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_009b: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref moon, default(ForPrimitives));
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref weather, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref bees, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref spacials, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref randomseed, default(ForPrimitives));
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref seed, default(ForPrimitives));
			((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref money, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref startJetpack, default(ForPrimitives));
			((BufferSerializer<bool>*)(&serializer))->SerializeValue<bool>(ref startCrusier, default(ForPrimitives));
		}
	}
	[SerializeField]
	public class Pair<T, U>
	{
		[SerializeField]
		public T First { get; set; }

		[SerializeField]
		public U Second { get; set; }

		public Pair()
		{
		}

		public Pair(T first, U second)
		{
			First = first;
			Second = second;
		}
	}
}
namespace Lootrun.hooks
{
	[HarmonyPatch(typeof(LungProp), "Start")]
	internal class ApparatusStartPatch
	{
		[HarmonyPostfix]
		private static void StartHook(LungProp __instance)
		{
			LootrunBase.CurrentRoundScrap.Add((GrabbableObject)(object)__instance);
		}
	}
	[HarmonyPatch]
	public class NetworkObjectManagerPatch
	{
		private static GameObject networkPrefab;

		[HarmonyPostfix]
		[HarmonyPatch(typeof(GameNetworkManager), "Start")]
		public static void Init()
		{
			if (!((Object)(object)networkPrefab != (Object)null))
			{
				networkPrefab = LootrunBase.bundle.LoadAsset<GameObject>("NetPrefab");
				networkPrefab.AddComponent<LootrunNetworkHandler>();
				NetworkManager.Singleton.AddNetworkPrefab(networkPrefab);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "Awake")]
		private static void SpawnNetworkHandler()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			if ((NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer) && Object.op_Implicit((Object)(object)networkPrefab))
			{
				GameObject val = Object.Instantiate<GameObject>(networkPrefab, Vector3.zero, Quaternion.identity);
				val.GetComponent<NetworkObject>().Spawn(false);
			}
		}
	}
	[HarmonyPatch(typeof(GameNetworkManager))]
	internal class SaveGamePatch
	{
		private static bool hasSubscribedToConnectionCallbacks;

		[HarmonyPrefix]
		[HarmonyPatch("SaveGame")]
		private static bool SaveGameHook()
		{
			if (GameNetworkManager.Instance.currentSaveFileName == "Speedloot")
			{
				GameNetworkManager.Instance.currentSaveFileName = "LCSaveFile1";
				return false;
			}
			return true;
		}

		[HarmonyPostfix]
		[HarmonyPatch("SubscribeToConnectionCallbacks")]
		private static void SubscribeToConnectionCallbacksPatch(GameNetworkManager __instance)
		{
			if (!hasSubscribedToConnectionCallbacks)
			{
				NetworkManager.Singleton.OnClientConnectedCallback += LootrunNetworkHandler.onClientConnected;
				hasSubscribedToConnectionCallbacks = true;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("Disconnect")]
		private static void DisconnectPatch()
		{
			if (hasSubscribedToConnectionCallbacks)
			{
				NetworkManager.Singleton.OnClientConnectedCallback -= LootrunNetworkHandler.onClientConnected;
				hasSubscribedToConnectionCallbacks = false;
			}
		}
	}
	public class LootrunNetworkHandler : NetworkBehaviour
	{
		public static LootrunNetworkHandler instance;

		private void Awake()
		{
			instance = this;
		}

		[ClientRpc]
		public void SyncInLootrunClientRpc(ulong playerID, bool enable)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Invalid comparison between Unknown and I4
			//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2684428673u, val, (RpcDelivery)0);
				BytePacker.WriteValueBitPacked(val2, playerID);
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref enable, default(ForPrimitives));
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2684428673u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				LootrunBase.isInLootrun = enable;
				if (!Object.op_Implicit((Object)(object)LootrunBase.timerText) && LootrunBase.isInLootrun)
				{
					GameObject val3 = Object.Instantiate<GameObject>(LootrunBase.bundle.LoadAsset<GameObject>("RunTimer"), StartOfRound.Instance.allPlayerObjects[playerID].GetComponent<PlayerControllerB>().playerHudUIContainer);
					((Object)val3).name = "Lootrun time text";
					val3.transform.localPosition = new Vector3(325f, -210f, 0f);
					TextMeshProUGUI component = ((Component)val3.transform.GetChild(0)).GetComponent<TextMeshProUGUI>();
					((TMP_Text)component).text = LootrunBase.SecsToTimer(0f);
					LootrunBase.timerText = component;
				}
			}
		}

		[ClientRpc]
		public void SyncLootrunTimerClientRpc(float time)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Invalid comparison between Unknown and I4
			//IL_005f: 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_006d: 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_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1144487935u, val, (RpcDelivery)0);
					((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref time, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1144487935u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
				{
					LootrunBase.LootrunTime = time;
					((TMP_Text)LootrunBase.timerText).text = LootrunBase.SecsToTimer(LootrunBase.LootrunTime);
				}
			}
		}

		[ClientRpc]
		public void SyncLootrunResultsClientRpc(LootrunSettings s, LootrunResults res)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_0122: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Invalid comparison between Unknown and I4
			//IL_005f: 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_006d: 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_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d9: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3875230145u, val, (RpcDelivery)0);
				bool flag = s != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
				if (flag)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe<LootrunSettings>(ref s, default(ForNetworkSerializable));
				}
				bool flag2 = res != null;
				((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
				if (flag2)
				{
					((FastBufferWriter)(ref val2)).WriteValueSafe<LootrunResults>(ref res, default(ForNetworkSerializable));
				}
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3875230145u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
			{
				LootrunBase.currentRunSettings = s;
				LootrunBase.currentRunResults = res;
			}
		}

		[ClientRpc]
		public void SyncStatsClientRpc(int moon, int weather, int money)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: Invalid comparison between Unknown and I4
			//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3633830683u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, moon);
					BytePacker.WriteValueBitPacked(val2, weather);
					BytePacker.WriteValueBitPacked(val2, money);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3633830683u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
				{
					StartOfRound.Instance.currentLevel = StartOfRound.Instance.levels[moon];
					StartOfRound.Instance.currentLevelID = moon;
					TimeOfDay.Instance.currentLevel = StartOfRound.Instance.currentLevel;
					RoundManager.Instance.currentLevel = StartOfRound.Instance.levels[moon];
					StartOfRound.Instance.currentLevel.currentWeather = (LevelWeatherType)weather;
					TimeOfDay val3 = Object.FindObjectOfType<TimeOfDay>();
					val3.quotaFulfilled = 0;
					val3.timesFulfilledQuota = 0;
					val3.UpdateProfitQuotaCurrentTime();
					Terminal val4 = Object.FindObjectOfType<Terminal>();
					val4.groupCredits = money;
					StartOfRound.Instance.ChangePlanet();
					StartOfRound.Instance.SetMapScreenInfoToCurrentLevel();
					((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\nNever";
					((TMP_Text)StartOfRound.Instance.profitQuotaMonitorText).text = "PROFIT QUOTA:\nAll of them";
				}
			}
		}

		[ClientRpc]
		public void ClearInventoryClientRpc()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Invalid comparison between Unknown and I4
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Invalid comparison between Unknown and I4
			//IL_005f: 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_006d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
			if (networkManager == null || !networkManager.IsListening)
			{
				return;
			}
			if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
			{
				ClientRpcParams val = default(ClientRpcParams);
				FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(176124722u, val, (RpcDelivery)0);
				((NetworkBehaviour)this).__endSendClientRpc(ref val2, 176124722u, val, (RpcDelivery)0);
			}
			if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
			{
				for (int i = 0; i < StartOfRound.Instance.localPlayerController.ItemSlots.Length; i++)
				{
					StartOfRound.Instance.localPlayerController.ItemSlots[i] = null;
				}
				for (int j = 0; j < HUDManager.Instance.itemSlotIcons.Length; j++)
				{
					((Behaviour)HUDManager.Instance.itemSlotIcons[j]).enabled = false;
				}
			}
		}

		public static void onClientConnected(ulong playerID)
		{
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Expected I4, but got Unknown
			if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
			{
				instance.SyncInLootrunClientRpc(playerID, LootrunBase.isInLootrun);
				if (LootrunBase.isInLootrun)
				{
					instance.SyncStatsClientRpc(LootrunBase.currentRunSettings.moon, (int)StartOfRound.Instance.currentLevel.overrideWeatherType, LootrunBase.currentRunSettings.money);
				}
			}
		}

		protected override void __initializeVariables()
		{
			((NetworkBehaviour)this).__initializeVariables();
		}

		[RuntimeInitializeOnLoadMethod]
		internal static void InitializeRPCS_LootrunNetworkHandler()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Expected O, but got Unknown
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Expected O, but got Unknown
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Expected O, but got Unknown
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			NetworkManager.__rpc_func_table.Add(2684428673u, new RpcReceiveHandler(__rpc_handler_2684428673));
			NetworkManager.__rpc_func_table.Add(1144487935u, new RpcReceiveHandler(__rpc_handler_1144487935));
			NetworkManager.__rpc_func_table.Add(3875230145u, new RpcReceiveHandler(__rpc_handler_3875230145));
			NetworkManager.__rpc_func_table.Add(3633830683u, new RpcReceiveHandler(__rpc_handler_3633830683));
			NetworkManager.__rpc_func_table.Add(176124722u, new RpcReceiveHandler(__rpc_handler_176124722));
		}

		private static void __rpc_handler_2684428673(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				ulong playerID = default(ulong);
				ByteUnpacker.ReadValueBitPacked(reader, ref playerID);
				bool enable = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref enable, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((LootrunNetworkHandler)(object)target).SyncInLootrunClientRpc(playerID, enable);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_1144487935(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				float time = default(float);
				((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref time, default(ForPrimitives));
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((LootrunNetworkHandler)(object)target).SyncLootrunTimerClientRpc(time);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3875230145(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: 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_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				bool flag = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
				LootrunSettings s = null;
				if (flag)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe<LootrunSettings>(ref s, default(ForNetworkSerializable));
				}
				bool flag2 = default(bool);
				((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
				LootrunResults res = null;
				if (flag2)
				{
					((FastBufferReader)(ref reader)).ReadValueSafe<LootrunResults>(ref res, default(ForNetworkSerializable));
				}
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((LootrunNetworkHandler)(object)target).SyncLootrunResultsClientRpc(s, res);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_3633830683(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0023: 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_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				int moon = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref moon);
				int weather = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref weather);
				int money = default(int);
				ByteUnpacker.ReadValueBitPacked(reader, ref money);
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((LootrunNetworkHandler)(object)target).SyncStatsClientRpc(moon, weather, money);
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		private static void __rpc_handler_176124722(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
		{
			//IL_0029: 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)
			NetworkManager networkManager = target.NetworkManager;
			if (networkManager != null && networkManager.IsListening)
			{
				target.__rpc_exec_stage = (__RpcExecStage)2;
				((LootrunNetworkHandler)(object)target).ClearInventoryClientRpc();
				target.__rpc_exec_stage = (__RpcExecStage)0;
			}
		}

		protected internal override string __getTypeName()
		{
			return "LootrunNetworkHandler";
		}
	}
	[HarmonyPatch(typeof(MenuManager))]
	internal class MenuManagerHook
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static UnityAction<int> <>9__11_0;

			public static UnityAction<string> <>9__11_1;

			public static UnityAction<string> <>9__11_2;

			public static UnityAction <>9__11_3;

			public static UnityAction <>9__11_4;

			public static UnityAction <>9__11_5;

			internal void <StartHook>b__11_0(int newVal)
			{
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Expected O, but got Unknown
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Expected O, but got Unknown
				weatherDropdown.ClearOptions();
				weatherDropdown.value = 0;
				List<OptionData> list = new List<OptionData>();
				List<LevelWeatherType> list2 = LootrunBase.MoonAvalableWeathers(LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text));
				list.Add(new OptionData("Random"));
				for (int i = 0; i < list2.Count; i++)
				{
					LevelWeatherType val = list2[i];
					list.Add(new OptionData(((object)(LevelWeatherType)(ref val)).ToString()));
				}
				weatherDropdown.AddOptions(list);
			}

			internal void <StartHook>b__11_1(string newVal)
			{
				if (int.TryParse(newVal, out var result))
				{
					if (result < 0)
					{
						moneyAmountInput.text = "";
					}
				}
				else
				{
					moneyAmountInput.text = "";
				}
			}

			internal void <StartHook>b__11_2(string newVal)
			{
				if (int.TryParse(newVal, out var result))
				{
					if (result < 0)
					{
						seedInput.text = "";
					}
				}
				else
				{
					seedInput.text = "";
				}
			}

			internal void <StartHook>b__11_3()
			{
				speedlootMenuContainer.SetActive(false);
			}

			internal void <StartHook>b__11_4()
			{
				//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b3: Expected I4, but got Unknown
				speedlootMenuContainer.SetActive(false);
				LootrunBase.isInLootrun = true;
				GameNetworkManager.Instance.currentSaveFileName = "Speedloot";
				LootrunSettings lootrunSettings = new LootrunSettings
				{
					moon = LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text)
				};
				if (weatherDropdown.options[weatherDropdown.value].text == "Random")
				{
					lootrunSettings.weather = -2;
				}
				else
				{
					lootrunSettings.weather = (int)LootrunBase.weatherNameToType(weatherDropdown.options[weatherDropdown.value].text);
					LootrunBase.mls.LogInfo((object)("weather " + lootrunSettings.weather));
				}
				lootrunSettings.bees = beesToggle.isOn;
				lootrunSettings.spacials = specialsToggle.isOn;
				lootrunSettings.startJetpack = SJetpacksToggle.isOn;
				lootrunSettings.startCrusier = SCrusierToggle.isOn;
				lootrunSettings.randomseed = randomSeedToggle.isOn;
				if (int.TryParse(seedInput.text, out var result))
				{
					lootrunSettings.seed = result;
				}
				else
				{
					lootrunSettings.seed = 0;
				}
				if (int.TryParse(moneyAmountInput.text, out var result2))
				{
					lootrunSettings.money = result2;
				}
				else
				{
					lootrunSettings.money = 0;
				}
				LootrunBase.currentRunSettings = lootrunSettings;
				GameNetworkManager.Instance.StartHost();
			}

			internal void <StartHook>b__11_5()
			{
				speedlootMenuContainer.SetActive(true);
			}
		}

		public static GameObject speedlootMenuContainer;

		public static TMP_Dropdown moonsDropdown;

		public static TMP_Dropdown weatherDropdown;

		public static Toggle beesToggle;

		public static Toggle specialsToggle;

		public static Toggle SJetpacksToggle;

		public static Toggle SCrusierToggle;

		public static Toggle randomSeedToggle;

		public static TMP_InputField seedInput;

		public static TMP_InputField moneyAmountInput;

		public static TextMeshProUGUI bestRunText;

		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void StartHook(ref GameObject ___menuButtons, ref GameObject ___HostSettingsScreen)
		{
			//IL_0069: 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_010a: 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_036d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Expected O, but got Unknown
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Expected O, but got Unknown
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0399: Expected O, but got Unknown
			//IL_03a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03aa: Expected O, but got Unknown
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: Expected O, but got Unknown
			//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cc: Expected O, but got Unknown
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03dd: Expected O, but got Unknown
			//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ee: Expected O, but got Unknown
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Expected O, but got Unknown
			//IL_0406: Unknown result type (might be due to invalid IL or missing references)
			//IL_0410: Expected O, but got Unknown
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_0421: Expected O, but got Unknown
			//IL_04c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cf: Expected O, but got Unknown
			//IL_04dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fa: Expected O, but got Unknown
			//IL_054d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0741: Unknown result type (might be due to invalid IL or missing references)
			//IL_075d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0784: Unknown result type (might be due to invalid IL or missing references)
			//IL_079c: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0852: Unknown result type (might be due to invalid IL or missing references)
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0895: Unknown result type (might be due to invalid IL or missing references)
			//IL_08ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_07cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d6: Expected O, but got Unknown
			//IL_0908: Unknown result type (might be due to invalid IL or missing references)
			//IL_08dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08e7: Expected O, but got Unknown
			//IL_0947: Unknown result type (might be due to invalid IL or missing references)
			//IL_094c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0952: Expected O, but got Unknown
			if ((Object)(object)___menuButtons == (Object)null || (Object)(object)___menuButtons.transform.GetChild(1) == (Object)null)
			{
				return;
			}
			GameObject val = Object.Instantiate<GameObject>(((Component)___menuButtons.transform.GetChild(1)).gameObject, ___menuButtons.transform);
			((Object)val).name = "LootrunButton";
			val.GetComponent<RectTransform>().anchoredPosition = new Vector2(val.GetComponent<RectTransform>().anchoredPosition.x, 235f);
			Button component = val.GetComponent<Button>();
			((UnityEventBase)component.onClick).RemoveAllListeners();
			TextMeshProUGUI component2 = ((Component)val.transform.GetChild(1)).GetComponent<TextMeshProUGUI>();
			((TMP_Text)component2).text = "> Lootrun";
			LootrunBase.isInLootrun = false;
			LootrunBase.LootrunTime = 0f;
			speedlootMenuContainer = Object.Instantiate<GameObject>(LootrunBase.bundle.LoadAsset<GameObject>("speedlootMenuContainer"), ___HostSettingsScreen.transform.parent);
			((Object)speedlootMenuContainer).name = "speedlootMenuContainer";
			speedlootMenuContainer.transform.position = ___HostSettingsScreen.transform.position;
			speedlootMenuContainer.transform.localScale = ___HostSettingsScreen.transform.localScale;
			speedlootMenuContainer.SetActive(false);
			moonsDropdown = ((Component)speedlootMenuContainer.transform.GetChild(2)).GetComponent<TMP_Dropdown>();
			weatherDropdown = ((Component)speedlootMenuContainer.transform.GetChild(3)).GetComponent<TMP_Dropdown>();
			beesToggle = ((Component)speedlootMenuContainer.transform.GetChild(4)).GetComponent<Toggle>();
			specialsToggle = ((Component)speedlootMenuContainer.transform.GetChild(5)).GetComponent<Toggle>();
			SJetpacksToggle = ((Component)speedlootMenuContainer.transform.GetChild(6)).GetComponent<Toggle>();
			SCrusierToggle = ((Component)speedlootMenuContainer.transform.GetChild(7)).GetComponent<Toggle>();
			randomSeedToggle = ((Component)speedlootMenuContainer.transform.GetChild(9)).GetComponent<Toggle>();
			moneyAmountInput = ((Component)speedlootMenuContainer.transform.GetChild(8).GetChild(1)).GetComponent<TMP_InputField>();
			seedInput = ((Component)speedlootMenuContainer.transform.GetChild(10)).GetComponent<TMP_InputField>();
			((UnityEvent<int>)(object)moonsDropdown.onValueChanged).AddListener((UnityAction<int>)UpdateBest);
			((UnityEvent<int>)(object)weatherDropdown.onValueChanged).AddListener((UnityAction<int>)UpdateBest);
			((UnityEvent<bool>)(object)beesToggle.onValueChanged).AddListener((UnityAction<bool>)UpdateBest);
			((UnityEvent<bool>)(object)specialsToggle.onValueChanged).AddListener((UnityAction<bool>)UpdateBest);
			((UnityEvent<bool>)(object)SJetpacksToggle.onValueChanged).AddListener((UnityAction<bool>)UpdateBest);
			((UnityEvent<bool>)(object)SCrusierToggle.onValueChanged).AddListener((UnityAction<bool>)UpdateBest);
			((UnityEvent<bool>)(object)randomSeedToggle.onValueChanged).AddListener((UnityAction<bool>)toggleSeedInput);
			((UnityEvent<bool>)(object)randomSeedToggle.onValueChanged).AddListener((UnityAction<bool>)UpdateBest);
			((UnityEvent<string>)(object)moneyAmountInput.onValueChanged).AddListener((UnityAction<string>)UpdateBest);
			((UnityEvent<string>)(object)seedInput.onValueChanged).AddListener((UnityAction<string>)UpdateBest);
			bestRunText = ((Component)speedlootMenuContainer.transform.GetChild(12)).GetComponent<TextMeshProUGUI>();
			List<OptionData> list = new List<OptionData>
			{
				new OptionData("41-Experimentation"),
				new OptionData("220-Assurance"),
				new OptionData("56-Vow"),
				new OptionData("21-Offense"),
				new OptionData("61-March"),
				new OptionData("20-Adamance"),
				new OptionData("85-Rend"),
				new OptionData("7-Dine"),
				new OptionData("8-Titan"),
				new OptionData("68-Artifice"),
				new OptionData("5-Embrion")
			};
			moonsDropdown.AddOptions(list);
			string text = LootrunBase.MoonIDToName(LootrunBase.currentRunSettings.moon);
			for (int i = 0; i < list.Count; i++)
			{
				if (list[i].text == text)
				{
					moonsDropdown.value = i;
				}
			}
			moonsDropdown.RefreshShownValue();
			List<OptionData> list2 = new List<OptionData>();
			List<LevelWeatherType> list3 = LootrunBase.MoonAvalableWeathers(LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text));
			list2.Add(new OptionData("Random"));
			for (int j = 0; j < list3.Count; j++)
			{
				LevelWeatherType val2 = list3[j];
				list2.Add(new OptionData(((object)(LevelWeatherType)(ref val2)).ToString()));
			}
			weatherDropdown.AddOptions(list2);
			if (LootrunBase.currentRunSettings.weather == -2)
			{
				weatherDropdown.value = 0;
			}
			else
			{
				LevelWeatherType val3 = (LevelWeatherType)LootrunBase.currentRunSettings.weather;
				for (int k = 0; k < weatherDropdown.options.Count; k++)
				{
					if (weatherDropdown.options[k].text == ((object)(LevelWeatherType)(ref val3)).ToString())
					{
						weatherDropdown.value = k;
					}
				}
			}
			weatherDropdown.RefreshShownValue();
			((UnityEvent<int>)(object)moonsDropdown.onValueChanged).AddListener((UnityAction<int>)delegate
			{
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Expected O, but got Unknown
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_0073: Unknown result type (might be due to invalid IL or missing references)
				//IL_007d: Expected O, but got Unknown
				weatherDropdown.ClearOptions();
				weatherDropdown.value = 0;
				List<OptionData> list4 = new List<OptionData>();
				List<LevelWeatherType> list5 = LootrunBase.MoonAvalableWeathers(LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text));
				list4.Add(new OptionData("Random"));
				for (int l = 0; l < list5.Count; l++)
				{
					LevelWeatherType val9 = list5[l];
					list4.Add(new OptionData(((object)(LevelWeatherType)(ref val9)).ToString()));
				}
				weatherDropdown.AddOptions(list4);
			});
			beesToggle.isOn = LootrunBase.currentRunSettings.bees;
			randomSeedToggle.isOn = LootrunBase.currentRunSettings.randomseed;
			SCrusierToggle.isOn = LootrunBase.currentRunSettings.startCrusier;
			SJetpacksToggle.isOn = LootrunBase.currentRunSettings.startJetpack;
			specialsToggle.isOn = LootrunBase.currentRunSettings.spacials;
			if (LootrunBase.currentRunSettings.money != 0)
			{
				moneyAmountInput.text = LootrunBase.currentRunSettings.money.ToString();
			}
			if (LootrunBase.currentRunSettings.seed != 0)
			{
				seedInput.text = LootrunBase.currentRunSettings.seed.ToString();
			}
			((UnityEvent<string>)(object)moneyAmountInput.onValueChanged).AddListener((UnityAction<string>)delegate(string newVal)
			{
				if (int.TryParse(newVal, out var result4))
				{
					if (result4 < 0)
					{
						moneyAmountInput.text = "";
					}
				}
				else
				{
					moneyAmountInput.text = "";
				}
			});
			((UnityEvent<string>)(object)seedInput.onValueChanged).AddListener((UnityAction<string>)delegate(string newVal)
			{
				if (int.TryParse(newVal, out var result3))
				{
					if (result3 < 0)
					{
						seedInput.text = "";
					}
				}
				else
				{
					seedInput.text = "";
				}
			});
			GameObject val4 = Object.Instantiate<GameObject>(val, speedlootMenuContainer.transform);
			((Object)val4).name = "speedlootBack";
			val4.transform.localPosition = new Vector3(0f, -90f, 0f);
			val4.GetComponent<RectTransform>().sizeDelta = new Vector2(120f, 30f);
			((Component)val4.transform.GetChild(0)).GetComponent<RectTransform>().sizeDelta = new Vector2(120f, 25f);
			val4.transform.GetChild(0).localPosition = Vector3.zero;
			Button component3 = val4.GetComponent<Button>();
			ButtonClickedEvent onClick = component3.onClick;
			object obj = <>c.<>9__11_3;
			if (obj == null)
			{
				UnityAction val5 = delegate
				{
					speedlootMenuContainer.SetActive(false);
				};
				<>c.<>9__11_3 = val5;
				obj = (object)val5;
			}
			((UnityEvent)onClick).AddListener((UnityAction)obj);
			TextMeshProUGUI component4 = ((Component)val4.transform.GetChild(1)).GetComponent<TextMeshProUGUI>();
			((TMP_Text)component4).transform.localPosition = Vector3.zero;
			((TMP_Text)component4).alignment = (TextAlignmentOptions)514;
			((TMP_Text)component4).text = "[ Back ]";
			GameObject val6 = Object.Instantiate<GameObject>(val4, speedlootMenuContainer.transform);
			((Object)val6).name = "speedlootStart";
			val6.transform.localPosition = new Vector3(0f, -65f, 0f);
			val6.GetComponent<RectTransform>().sizeDelta = new Vector2(130f, 30f);
			((Component)val6.transform.GetChild(0)).GetComponent<RectTransform>().sizeDelta = new Vector2(130f, 25f);
			val6.transform.GetChild(0).localPosition = Vector3.zero;
			Button component5 = val6.GetComponent<Button>();
			ButtonClickedEvent onClick2 = component5.onClick;
			object obj2 = <>c.<>9__11_4;
			if (obj2 == null)
			{
				UnityAction val7 = delegate
				{
					//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
					//IL_00b3: Expected I4, but got Unknown
					speedlootMenuContainer.SetActive(false);
					LootrunBase.isInLootrun = true;
					GameNetworkManager.Instance.currentSaveFileName = "Speedloot";
					LootrunSettings lootrunSettings = new LootrunSettings
					{
						moon = LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text)
					};
					if (weatherDropdown.options[weatherDropdown.value].text == "Random")
					{
						lootrunSettings.weather = -2;
					}
					else
					{
						lootrunSettings.weather = (int)LootrunBase.weatherNameToType(weatherDropdown.options[weatherDropdown.value].text);
						LootrunBase.mls.LogInfo((object)("weather " + lootrunSettings.weather));
					}
					lootrunSettings.bees = beesToggle.isOn;
					lootrunSettings.spacials = specialsToggle.isOn;
					lootrunSettings.startJetpack = SJetpacksToggle.isOn;
					lootrunSettings.startCrusier = SCrusierToggle.isOn;
					lootrunSettings.randomseed = randomSeedToggle.isOn;
					if (int.TryParse(seedInput.text, out var result))
					{
						lootrunSettings.seed = result;
					}
					else
					{
						lootrunSettings.seed = 0;
					}
					if (int.TryParse(moneyAmountInput.text, out var result2))
					{
						lootrunSettings.money = result2;
					}
					else
					{
						lootrunSettings.money = 0;
					}
					LootrunBase.currentRunSettings = lootrunSettings;
					GameNetworkManager.Instance.StartHost();
				};
				<>c.<>9__11_4 = val7;
				obj2 = (object)val7;
			}
			((UnityEvent)onClick2).AddListener((UnityAction)obj2);
			TextMeshProUGUI component6 = ((Component)val6.transform.GetChild(1)).GetComponent<TextMeshProUGUI>();
			((TMP_Text)component6).transform.localPosition = Vector3.zero;
			((TMP_Text)component6).alignment = (TextAlignmentOptions)514;
			((TMP_Text)component6).text = "[ Start ]";
			ButtonClickedEvent onClick3 = component.onClick;
			object obj3 = <>c.<>9__11_5;
			if (obj3 == null)
			{
				UnityAction val8 = delegate
				{
					speedlootMenuContainer.SetActive(true);
				};
				<>c.<>9__11_5 = val8;
				obj3 = (object)val8;
			}
			((UnityEvent)onClick3).AddListener((UnityAction)obj3);
			UpdateBest(0);
			toggleSeedInput(randomSeedToggle.isOn);
		}

		public static void toggleSeedInput(bool val)
		{
			if (val)
			{
				seedInput.text = "";
				((Selectable)seedInput).interactable = false;
			}
			else
			{
				((Selectable)seedInput).interactable = true;
			}
		}

		public static void UpdateBest<T>(T type)
		{
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b1: Expected I4, but got Unknown
			if (weatherDropdown.options.Count == 0)
			{
				return;
			}
			LootrunSettings lootrunSettings = new LootrunSettings();
			lootrunSettings.moon = LootrunBase.MoonNameToID(moonsDropdown.options[moonsDropdown.value].text);
			if (weatherDropdown.options[weatherDropdown.value].text == "Random")
			{
				lootrunSettings.weather = -2;
			}
			else
			{
				lootrunSettings.weather = (int)LootrunBase.weatherNameToType(weatherDropdown.options[weatherDropdown.value].text);
				LootrunBase.mls.LogInfo((object)("weather " + lootrunSettings.weather));
			}
			lootrunSettings.bees = beesToggle.isOn;
			lootrunSettings.spacials = specialsToggle.isOn;
			lootrunSettings.startJetpack = SJetpacksToggle.isOn;
			lootrunSettings.startCrusier = SCrusierToggle.isOn;
			lootrunSettings.randomseed = randomSeedToggle.isOn;
			if (int.TryParse(seedInput.text, out var result))
			{
				lootrunSettings.seed = result;
			}
			else
			{
				lootrunSettings.seed = 0;
			}
			if (int.TryParse(moneyAmountInput.text, out var result2))
			{
				lootrunSettings.money = result2;
			}
			else
			{
				lootrunSettings.money = 0;
			}
			LootrunBase.currentRunSettings = lootrunSettings;
			float num = 0f;
			float num2 = -1f;
			for (int i = 0; i < LootrunBase.allLootruns.Count; i++)
			{
				if (LootrunBase.currentRunSettings.compare(LootrunBase.allLootruns[i].First))
				{
					float num3 = (float)((Vector2Int)(ref LootrunBase.allLootruns[i].Second.scrapCollectedOutOf)).x / (float)((Vector2Int)(ref LootrunBase.allLootruns[i].Second.scrapCollectedOutOf)).y;
					if (num2 == -1f)
					{
						num2 = LootrunBase.allLootruns[i].Second.time;
						num = num3;
					}
					else if (num3 > num)
					{
						num2 = LootrunBase.allLootruns[i].Second.time;
						num = num3;
					}
					else if (num3 == num && LootrunBase.allLootruns[i].Second.time < num2)
					{
						num2 = LootrunBase.allLootruns[i].Second.time;
						num = num3;
					}
				}
			}
			string empty = string.Empty;
			empty = ((num2 != -1f) ? $"{num * 100f:0.0}% - {LootrunBase.SecsToTimer(num2)}" : "No run found!");
			((TMP_Text)bestRunText).text = empty;
		}
	}
	[HarmonyPatch(typeof(PlayerControllerB))]
	internal class PlayerControllerBPatcher
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")]
		private static void ConnectClientToPlayerObjectPatch(PlayerControllerB __instance)
		{
			if (!((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)(object)__instance) && (((NetworkBehaviour)StartOfRound.Instance.localPlayerController).IsHost || ((NetworkBehaviour)StartOfRound.Instance.localPlayerController).IsServer))
			{
				LootrunNetworkHandler.instance.SyncInLootrunClientRpc(StartOfRound.Instance.localPlayerController.playerClientId, LootrunBase.isInLootrun);
			}
		}
	}
	[HarmonyPatch(typeof(RedLocustBees), "Start")]
	internal class RedLocustBeesStartPatch
	{
		[HarmonyPostfix]
		private static void StartHook(RedLocustBees __instance)
		{
			if (Object.op_Implicit((Object)(object)__instance.hive))
			{
				LootrunBase.CurrentRoundBees.Add(__instance.hive);
			}
		}
	}
	[HarmonyPatch(typeof(RoundManager), "waitForScrapToSpawnToSync")]
	internal class waitForScrapToSpawnToSyncPatch
	{
		[HarmonyPrefix]
		private static void waitForScrapToSpawnToSyncHook(object[] __args)
		{
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			if (!LootrunBase.isInLootrun)
			{
				return;
			}
			List<NetworkObjectReference> list = ((NetworkObjectReference[])__args[0]).ToList();
			LootrunBase.CurrentRoundScrap.Clear();
			NetworkObject val2 = default(NetworkObject);
			GrabbableObject item = default(GrabbableObject);
			for (int i = 0; i < list.Count; i++)
			{
				NetworkObjectReference val = list[i];
				if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null) && ((Component)val2).gameObject.TryGetComponent<GrabbableObject>(ref item))
				{
					LootrunBase.CurrentRoundScrap.Add(item);
				}
			}
		}
	}
	[HarmonyPatch]
	internal class StartOfRoundHook
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(StartOfRound), "Start")]
		private static void StartHook(StartOfRound __instance)
		{
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Expected I4, but got Unknown
			if (LootrunBase.isInLootrun && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer))
			{
				__instance.currentLevel = Object.Instantiate<SelectableLevel>(__instance.levels[LootrunBase.currentRunSettings.moon]);
				__instance.currentLevelID = LootrunBase.currentRunSettings.moon;
				TimeOfDay.Instance.currentLevel = __instance.currentLevel;
				RoundManager.Instance.currentLevel = __instance.currentLevel;
				if (LootrunBase.currentRunSettings.weather == -2)
				{
					__instance.currentLevel.currentWeather = __instance.currentLevel.randomWeathers[Random.Range(0, __instance.currentLevel.randomWeathers.Length)].weatherType;
					LootrunBase.mls.LogInfo((object)("w - " + ((object)(LevelWeatherType)(ref __instance.currentLevel.overrideWeatherType)).ToString()));
				}
				else
				{
					__instance.currentLevel.currentWeather = (LevelWeatherType)LootrunBase.currentRunSettings.weather;
				}
				TimeOfDay val = Object.FindObjectOfType<TimeOfDay>();
				val.quotaFulfilled = 0;
				val.timesFulfilledQuota = 0;
				val.UpdateProfitQuotaCurrentTime();
				__instance.ChangePlanet();
				__instance.SetMapScreenInfoToCurrentLevel();
				__instance.overrideRandomSeed = !LootrunBase.currentRunSettings.randomseed;
				__instance.overrideSeedNumber = LootrunBase.currentRunSettings.seed;
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\nNever";
				((TMP_Text)StartOfRound.Instance.profitQuotaMonitorText).text = "PROFIT QUOTA:\nAll of them";
				LootrunNetworkHandler.instance.SyncStatsClientRpc(LootrunBase.currentRunSettings.moon, (int)__instance.currentLevel.overrideWeatherType, LootrunBase.currentRunSettings.money);
			}
		}
	}
	[HarmonyPatch(typeof(StartOfRound), "LoadShipGrabbableItems")]
	internal class LoadShipGrabbableItemsPatch
	{
		[HarmonyPostfix]
		private static void LoadShipGrabbableItemsHook(StartOfRound __instance)
		{
			//IL_0138: 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_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: 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)
			//IL_021f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Unknown result type (might be due to invalid IL or missing references)
			if (!LootrunBase.isInLootrun || (!NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer))
			{
				return;
			}
			GameObject val = null;
			GameObject val2 = null;
			for (int i = 0; i < __instance.allItemsList.itemsList.Count; i++)
			{
				LootrunBase.mls.LogInfo((object)__instance.allItemsList.itemsList[i].itemName);
				if (__instance.allItemsList.itemsList[i].itemName == "Jetpack")
				{
					val = __instance.allItemsList.itemsList[i].spawnPrefab;
				}
				if (__instance.allItemsList.itemsList[i].itemName == "Weed killer")
				{
					val2 = __instance.allItemsList.itemsList[i].spawnPrefab;
				}
			}
			if (LootrunBase.currentRunSettings.startJetpack)
			{
				for (int j = 0; j < 4; j++)
				{
					GrabbableObject component = Object.Instantiate<GameObject>(val, new Vector3(-3.5f, 1f, -14.5f), Quaternion.identity, __instance.elevatorTransform).GetComponent<GrabbableObject>();
					component.fallTime = 1f;
					component.hasHitGround = true;
					component.scrapPersistedThroughRounds = true;
					component.isInElevator = true;
					component.isInShipRoom = true;
					((NetworkBehaviour)component).NetworkObject.Spawn(false);
				}
			}
			GameObject val3 = null;
			for (int k = 0; k < __instance.VehiclesList.Length; k++)
			{
				if (((Object)__instance.VehiclesList[k]).name == "CompanyCruiser")
				{
					val3 = __instance.VehiclesList[k];
				}
			}
			if (!LootrunBase.currentRunSettings.startCrusier)
			{
				return;
			}
			GameObject val4 = Object.Instantiate<GameObject>(val3, __instance.magnetPoint.position + __instance.magnetPoint.forward * 5f, Quaternion.identity, RoundManager.Instance.VehiclesContainer);
			__instance.attachedVehicle = val4.GetComponent<VehicleController>();
			__instance.isObjectAttachedToMagnet = true;
			((NetworkBehaviour)__instance.attachedVehicle).NetworkObject.Spawn(false);
			__instance.magnetOn = true;
			__instance.magnetLever.initialBoolState = true;
			__instance.magnetLever.setInitialState = true;
			__instance.magnetLever.SetInitialState();
			if (Object.op_Implicit((Object)(object)val2))
			{
				for (int l = 0; l < 2; l++)
				{
					GrabbableObject component2 = Object.Instantiate<GameObject>(val2, new Vector3(10f, 1.5f, -13f), Quaternion.identity, __instance.elevatorTransform).GetComponent<GrabbableObject>();
					component2.fallTime = 1f;
					component2.hasHitGround = true;
					component2.scrapPersistedThroughRounds = true;
					component2.isInElevator = true;
					component2.isInShipRoom = true;
					((NetworkBehaviour)component2).NetworkObject.Spawn(false);
				}
			}
		}
	}
	[HarmonyPatch(typeof(StartOfRound), "PassTimeToNextDay")]
	internal class PassTimeToNextDayPatch
	{
		[HarmonyPrefix]
		private static bool PassTimeToNextDayHook()
		{
			LootrunBase.LootrunTime = 0f;
			if (LootrunBase.isInLootrun)
			{
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(StartOfRound), "ShipHasLeft")]
	internal class ShipHasLeftPatch
	{
		[HarmonyPrefix]
		private static void ShipHasLeftHook()
		{
			//IL_0163: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			if (!LootrunBase.isInLootrun || (!NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer))
			{
				return;
			}
			TimeOfDay.Instance.currentDayTimeStarted = false;
			LootrunResults lootrunResults = new LootrunResults();
			int num = 0;
			for (int i = 0; i < RoundManager.Instance.scrapCollectedThisRound.Count; i++)
			{
				if (LootrunBase.CurrentRoundScrap.Contains(RoundManager.Instance.scrapCollectedThisRound[i]))
				{
					num++;
				}
				if (LootrunBase.currentRunSettings.bees && LootrunBase.CurrentRoundBees.Contains(RoundManager.Instance.scrapCollectedThisRound[i]))
				{
					num++;
				}
				if (LootrunBase.currentRunSettings.spacials && LootrunBase.CurrentRoundSpecials.Contains(RoundManager.Instance.scrapCollectedThisRound[i]))
				{
					num++;
				}
			}
			int num2 = LootrunBase.CurrentRoundScrap.Count;
			if (LootrunBase.currentRunSettings.bees)
			{
				num2 += LootrunBase.CurrentRoundBees.Count;
			}
			if (LootrunBase.currentRunSettings.spacials)
			{
				num2 += LootrunBase.CurrentRoundSpecials.Count;
			}
			lootrunResults.players = LootrunBase.playersThisRound;
			lootrunResults.time = LootrunBase.LootrunTime;
			lootrunResults.scrapCollectedOutOf = new Vector2Int(num, num2);
			LootrunBase.currentRunResults = lootrunResults;
			LootrunNetworkHandler.instance.SyncLootrunResultsClientRpc(LootrunBase.currentRunSettings, lootrunResults);
		}
	}
	[HarmonyPatch(typeof(StartOfRound), "AutoSaveShipData")]
	internal class AutoSaveShipDataPatch
	{
		[HarmonyPrefix]
		private static bool AutoSaveShipDataHook(StartOfRound __instance)
		{
			//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0561: Unknown result type (might be due to invalid IL or missing references)
			//IL_0518: Unknown result type (might be due to invalid IL or missing references)
			//IL_051d: Unknown result type (might be due to invalid IL or missing references)
			//IL_058a: Unknown result type (might be due to invalid IL or missing references)
			//IL_059e: Expected I4, but got Unknown
			//IL_045d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0462: Unknown result type (might be due to invalid IL or missing references)
			if (LootrunBase.isInLootrun)
			{
				HUDManager.Instance.saveDataIconAnimatorB.SetTrigger("save");
				LootrunBase.addRunToListAndSave(LootrunBase.currentRunSettings, LootrunBase.currentRunResults);
				if (!NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
				{
					return false;
				}
				LootrunNetworkHandler.instance.ClearInventoryClientRpc();
				List<GrabbableObject> list = Object.FindObjectsOfType<GrabbableObject>().ToList();
				NetworkObject val = default(NetworkObject);
				foreach (GrabbableObject item in list)
				{
					if (((Component)item).TryGetComponent<NetworkObject>(ref val))
					{
						val.Despawn(true);
					}
					if (Object.op_Implicit((Object)(object)((Component)item).gameObject))
					{
						Object.Destroy((Object)(object)((Component)item).gameObject);
					}
				}
				if (StartOfRound.Instance.localPlayerController.twoHanded)
				{
					HUDManager.Instance.PingHUDElement(HUDManager.Instance.Inventory, 1.5f, 1f, 0.13f);
					((Behaviour)HUDManager.Instance.holdingTwoHandedItem).enabled = false;
				}
				for (int i = 0; i < StartOfRound.Instance.localPlayerController.ItemSlots.Length; i++)
				{
					StartOfRound.Instance.localPlayerController.ItemSlots[i] = null;
				}
				for (int j = 0; j < HUDManager.Instance.itemSlotIcons.Length; j++)
				{
					((Behaviour)HUDManager.Instance.itemSlotIcons[j]).enabled = false;
				}
				if ((Object)(object)__instance.attachedVehicle != (Object)null)
				{
					((NetworkBehaviour)__instance.attachedVehicle).NetworkObject.Despawn(true);
					if ((Object)(object)((Component)__instance.attachedVehicle).gameObject != (Object)null)
					{
						Object.Destroy((Object)(object)((Component)__instance.attachedVehicle).gameObject);
					}
				}
				GameObject val2 = null;
				GameObject val3 = null;
				for (int k = 0; k < __instance.allItemsList.itemsList.Count; k++)
				{
					LootrunBase.mls.LogInfo((object)__instance.allItemsList.itemsList[k].itemName);
					if (__instance.allItemsList.itemsList[k].itemName == "Jetpack")
					{
						val2 = __instance.allItemsList.itemsList[k].spawnPrefab;
					}
					if (__instance.allItemsList.itemsList[k].itemName == "Weed killer")
					{
						val3 = __instance.allItemsList.itemsList[k].spawnPrefab;
					}
				}
				if (LootrunBase.currentRunSettings.startJetpack)
				{
					for (int l = 0; l < 4; l++)
					{
						GrabbableObject component = Object.Instantiate<GameObject>(val2, new Vector3(-3.5f, 1f, -14.5f), Quaternion.identity, __instance.elevatorTransform).GetComponent<GrabbableObject>();
						component.fallTime = 1f;
						component.hasHitGround = true;
						component.scrapPersistedThroughRounds = true;
						component.isInElevator = true;
						component.isInShipRoom = true;
						((NetworkBehaviour)component).NetworkObject.Spawn(false);
					}
				}
				GameObject val4 = null;
				for (int m = 0; m < __instance.VehiclesList.Length; m++)
				{
					if (((Object)__instance.VehiclesList[m]).name == "CompanyCruiser")
					{
						val4 = __instance.VehiclesList[m];
					}
				}
				if (LootrunBase.currentRunSettings.startCrusier)
				{
					GameObject val5 = Object.Instantiate<GameObject>(val4, __instance.magnetPoint.position + __instance.magnetPoint.forward * 5f, Quaternion.identity, RoundManager.Instance.VehiclesContainer);
					__instance.attachedVehicle = val5.GetComponent<VehicleController>();
					__instance.isObjectAttachedToMagnet = true;
					((NetworkBehaviour)__instance.attachedVehicle).NetworkObject.Spawn(false);
					__instance.magnetOn = true;
					__instance.magnetLever.initialBoolState = true;
					__instance.magnetLever.setInitialState = true;
					__instance.magnetLever.SetInitialState();
					if (Object.op_Implicit((Object)(object)val3))
					{
						for (int n = 0; n < 2; n++)
						{
							GrabbableObject component2 = Object.Instantiate<GameObject>(val3, new Vector3(10f, 1.5f, -13f), Quaternion.identity, __instance.elevatorTransform).GetComponent<GrabbableObject>();
							component2.fallTime = 1f;
							component2.hasHitGround = true;
							component2.scrapPersistedThroughRounds = true;
							component2.isInElevator = true;
							component2.isInShipRoom = true;
							((NetworkBehaviour)component2).NetworkObject.Spawn(false);
						}
					}
				}
				Terminal val6 = Object.FindObjectOfType<Terminal>();
				val6.groupCredits = LootrunBase.currentRunSettings.money;
				if (LootrunBase.currentRunSettings.weather == -2)
				{
					__instance.currentLevel.currentWeather = __instance.currentLevel.randomWeathers[Random.Range(0, __instance.currentLevel.randomWeathers.Length)].weatherType;
					LootrunBase.mls.LogInfo((object)("w - " + ((object)(LevelWeatherType)(ref __instance.currentLevel.overrideWeatherType)).ToString()));
				}
				else
				{
					__instance.currentLevel.currentWeather = (LevelWeatherType)LootrunBase.currentRunSettings.weather;
				}
				__instance.ChangePlanet();
				__instance.SetMapScreenInfoToCurrentLevel();
				LootrunNetworkHandler.instance.SyncStatsClientRpc(LootrunBase.currentRunSettings.moon, (int)__instance.currentLevel.overrideWeatherType, LootrunBase.currentRunSettings.money);
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(Terminal), "LoadNewNodeIfAffordable")]
	internal class TextPostProcessHook
	{
		[HarmonyPrefix]
		private static bool patch(object[] __args, Terminal __instance)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Expected O, but got Unknown
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Expected O, but got Unknown
			TerminalNode val = (TerminalNode)__args[0];
			if (val.buyRerouteToMoon != -1 && val.buyRerouteToMoon != -2 && LootrunBase.isInLootrun)
			{
				TerminalNode val2 = new TerminalNode();
				val2.displayText = "You can change planets while on a lootrun!\n";
				val2.clearPreviousText = true;
				val2.playClip = __instance.terminalNodes.specialNodes[24].playClip;
				val2.playSyncedClip = __instance.terminalNodes.specialNodes[24].playSyncedClip;
				__instance.LoadNewNode(val2);
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(TimeOfDay), "SetShipToLeaveOnMidnightClientRpc")]
	internal class SetShipToLeaveOnMidnightClientRpcPatcher
	{
		[HarmonyPrefix]
		private static bool SetShipToLeaveOnMidnightClientRpcPatch()
		{
			if (LootrunBase.isInLootrun)
			{
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch(typeof(TimeOfDay), "UpdateProfitQuotaCurrentTime")]
	internal class UpdateProfitQuotaCurrentTimePatch
	{
		[HarmonyPrefix]
		private static bool UpdateProfitQuotaCurrentTimeHook()
		{
			if (LootrunBase.isInLootrun)
			{
				return false;
			}
			return true;
		}
	}
	[HarmonyPatch]
	internal class TimeOfDayUpdatePatch
	{
		[HarmonyPrefix]
		[HarmonyPatch(typeof(TimeOfDay), "Update")]
		private static void UpdateHook(TimeOfDay __instance)
		{
			if (__instance.currentDayTimeStarted && LootrunBase.isInLootrun && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer))
			{
				LootrunBase.LootrunTime += Time.deltaTime;
				((TMP_Text)LootrunBase.timerText).text = LootrunBase.SecsToTimer(LootrunBase.LootrunTime);
				LootrunNetworkHandler.instance.SyncLootrunTimerClientRpc(LootrunBase.LootrunTime);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(TimeOfDay), "Awake")]
		private static void AwakeHook(TimeOfDay __instance)
		{
			if (LootrunBase.isInLootrun && __instance.quotaVariables != null)
			{
				__instance.quotaVariables.startingCredits = LootrunBase.currentRunSettings.money;
			}
		}
	}
}
namespace Lootrun.NetcodePatcher
{
	[AttributeUsage(AttributeTargets.Module)]
	internal class NetcodePatchedAssemblyAttribute : Attribute
	{
	}
}