Decompiled source of MultiMod v1.1.4

MultiMod.dll

Decompiled 2 months ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using DunGen;
using GameNetcodeStuff;
using HarmonyLib;
using LethalCompanyInputUtils.Api;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("MultiMod")]
[assembly: AssemblyDescription("MultiMod is a collection of different QoL modifications to enhance gameplay.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MultiMod")]
[assembly: AssemblyCopyright("Copyright © dsrdakota 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(true)]
[assembly: Guid("3bc2e3f2-4d6a-47c0-a9a0-8ce0bc007429")]
[assembly: AssemblyFileVersion("1.1.4.0")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.1.4.0")]
namespace MultiMod;

internal class InputDebug : LcInputActions
{
	[InputAction(/*Could not decode attribute arguments.*/)]
	public InputAction ExplodeKey { get; set; }

	[InputAction(/*Could not decode attribute arguments.*/)]
	public InputAction TeleportToShipKey { get; set; }

	[InputAction(/*Could not decode attribute arguments.*/)]
	public InputAction TeleportToMainKey { get; set; }
}
internal class InputToggles
{
}
[HarmonyPatch(typeof(DepositItemsDeskPatch))]
internal class DepositItemsDeskPatch
{
	private static DepositItemsDesk desk;

	[HarmonyPrefix]
	[HarmonyPatch(typeof(DepositItemsDeskPatch), "Start")]
	private static void OnStart(DepositItemsDesk __instance)
	{
		desk = __instance;
	}

	[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
	[HarmonyPatch(typeof(DepositItemsDeskPatch), "PlaceItemOnCounter")]
	private static void PlaceItemOnCounter(PlayerControllerB playerWhoTriggered)
	{
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		//IL_0073: 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_0083: Unknown result type (might be due to invalid IL or missing references)
		//IL_008d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0092: Unknown result type (might be due to invalid IL or missing references)
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0109: Unknown result type (might be due to invalid IL or missing references)
		//IL_0120: Unknown result type (might be due to invalid IL or missing references)
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		if (((Component)desk.deskObjectsContainer).GetComponentsInChildren<GrabbableObject>().Length < 64 && !desk.inGrabbingObjectsAnimation && (Object)(object)GameNetworkManager.Instance != (Object)null && (Object)(object)playerWhoTriggered == (Object)(object)GameNetworkManager.Instance.localPlayerController)
		{
			Vector3 val = RoundManager.RandomPointInBounds(((Collider)desk.triggerCollider).bounds);
			Bounds bounds = ((Collider)desk.triggerCollider).bounds;
			val.y = ((Bounds)(ref bounds)).min.y;
			RaycastHit val2 = default(RaycastHit);
			if (Physics.Raycast(new Ray(val + Vector3.up * 3f, Vector3.down), ref val2, 8f, 1048640, (QueryTriggerInteraction)2))
			{
				val = ((RaycastHit)(ref val2)).point;
			}
			val.y += playerWhoTriggered.currentlyHeldObjectServer.itemProperties.verticalOffset;
			val = ((Component)desk.deskObjectsContainer).transform.InverseTransformPoint(val);
			desk.AddObjectToDeskServerRpc(NetworkObjectReference.op_Implicit(((Component)playerWhoTriggered.currentlyHeldObjectServer).gameObject.GetComponent<NetworkObject>()));
			playerWhoTriggered.DiscardHeldObject(true, desk.deskObjectsContainer, val, false);
			Debug.Log((object)"discard held object called from deposit items desk");
		}
	}
}
[HarmonyPatch(typeof(GameNetworkManager))]
internal class GameNetworkManagerPatch
{
	public static int currentGameVersion;

	[HarmonyPatch("Awake")]
	public static void Prefix(GameNetworkManager __instance)
	{
		currentGameVersion = __instance.gameVersionNum;
	}
}
[HarmonyPatch(typeof(PlayerControllerBPatch))]
internal class PlayerControllerBPatch
{
	private static bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost;

	private static bool isServer = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsServer;

	[HarmonyPrefix]
	[HarmonyPatch(typeof(PlayerControllerB), "Start")]
	private static void OnStart(PlayerControllerB __instance)
	{
		isHost = ((NetworkBehaviour)__instance).IsHost;
		isServer = ((NetworkBehaviour)__instance).IsServer;
		if (((NetworkBehaviour)__instance).IsServer)
		{
			HUDManager.Instance.DisplayTip("MultiMod", "We are the server", false, false, "LC_Tip1");
		}
		if (((NetworkBehaviour)__instance).IsHost)
		{
			HUDManager.Instance.DisplayTip("MultiMod", "We are the host", false, false, "LC_Tip1");
		}
		MultiModPlugin.log.LogInfo((object)"Running OnStart");
		if ((Object)(object)__instance == (Object)(object)GameNetworkManager.Instance.localPlayerController)
		{
			MultiModPlugin.__localPlayer = __instance;
		}
	}

	[HarmonyPatch(typeof(PlayerControllerB), "Update")]
	[HarmonyPostfix]
	private static void UpdatePatch(ref float ___sprintMultiplier, ref float ___sprintMeter, ref bool ___isSprinting)
	{
		PlayerControllerB val = Object.FindObjectOfType<PlayerControllerB>();
		if (!isHost)
		{
			if (MultiModPlugin.InfiniteStaminaEnabledConfig.Value)
			{
				___sprintMeter = 1f;
			}
			if (___isSprinting)
			{
				___sprintMultiplier = ((MultiModPlugin.SprintSpeedConfig.Value > 50) ? 5 : MultiModPlugin.SprintSpeedConfig.Value);
			}
			else
			{
				___sprintMultiplier = ((MultiModPlugin.SprintSpeedConfig.Value > 20) ? 2 : MultiModPlugin.WalkSpeedConfig.Value);
			}
		}
		else
		{
			if (MultiModPlugin.InfiniteStaminaEnabledConfig.Value)
			{
				___sprintMeter = 1f;
			}
			if (___isSprinting)
			{
				___sprintMultiplier = ((!MultiModPlugin.HostDisablePlayerCheatsConfig.Value) ? (MultiModPlugin.SprintSpeedConfig.Value / 10) : ((MultiModPlugin.SprintSpeedConfig.Value > 50) ? 5 : MultiModPlugin.SprintSpeedConfig.Value));
			}
			else
			{
				___sprintMultiplier = ((!MultiModPlugin.HostDisablePlayerCheatsConfig.Value) ? (MultiModPlugin.WalkSpeedConfig.Value / 10) : ((MultiModPlugin.SprintSpeedConfig.Value > 20) ? 2 : MultiModPlugin.WalkSpeedConfig.Value));
			}
		}
	}

	[HarmonyPatch(typeof(PlayerControllerB), "Update")]
	[HarmonyPostfix]
	private static void UpdateJumpClimbWeightPatch(PlayerControllerB __instance)
	{
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0192: Unknown result type (might be due to invalid IL or missing references)
		//IL_0193: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		if ((Object)(object)__instance == (Object)(object)GameNetworkManager.Instance.localPlayerController)
		{
			MultiModPlugin.__localPlayer = __instance;
		}
		if (MultiModPlugin.ClimbSpeedEnabledConfig.Value)
		{
			__instance.climbSpeed = MultiModPlugin.ClimbSpeedMultiplierConfig.Value / 10;
		}
		else
		{
			__instance.climbSpeed = 4f;
		}
		if (MultiModPlugin.ThrowPowerConfig.Value > -1)
		{
			__instance.throwPower = ((!MultiModPlugin.HostDisablePlayerCheatsConfig.Value) ? (MultiModPlugin.ThrowPowerConfig.Value / 10) : ((MultiModPlugin.ThrowPowerConfig.Value > 200) ? 20 : (MultiModPlugin.ThrowPowerConfig.Value / 10)));
		}
		else
		{
			__instance.throwPower = 17f;
		}
		if (MultiModPlugin.WeightMultiplierConfig.Value > -1)
		{
			__instance.carryWeight = ((!MultiModPlugin.HostDisablePlayerCheatsConfig.Value) ? (MultiModPlugin.WeightMultiplierConfig.Value / 10) : ((MultiModPlugin.WeightMultiplierConfig.Value > 150) ? 15 : (MultiModPlugin.WeightMultiplierConfig.Value / 10)));
		}
		else
		{
			__instance.carryWeight = 1f;
		}
		if (MultiModPlugin.JumpPowerConfig.Value > -1)
		{
			__instance.jumpForce = ((!MultiModPlugin.HostDisablePlayerCheatsConfig.Value) ? (MultiModPlugin.JumpPowerConfig.Value / 10) : ((MultiModPlugin.JumpPowerConfig.Value > 200) ? 20 : (MultiModPlugin.JumpPowerConfig.Value / 10)));
		}
		else
		{
			__instance.jumpForce = 5f;
		}
		Vector3 oldPlayerPosition = __instance.oldPlayerPosition;
		oldPlayerPosition += new Vector3(10f, 10f, 10f);
		bool inShipPhase = RoundManager.Instance.playersManager.inShipPhase;
		if (__instance.isSinking)
		{
			__instance.TeleportPlayer(oldPlayerPosition, false, 0f, false, true);
			__instance.isSinking = false;
			__instance.UpdateSpecialAnimationValue(true, (short)0, 0f, false);
		}
		if (__instance.isUnderwater)
		{
			__instance.TeleportPlayer(oldPlayerPosition, false, 0f, false, true);
			__instance.isUnderwater = false;
			__instance.UpdateSpecialAnimationValue(true, (short)0, 0f, false);
		}
		if (MultiModPlugin.InfiniteHealthEnabledConfig.Value && !MultiModPlugin.HostDisablePlayerCheatsConfig.Value)
		{
			__instance.health = int.MaxValue;
		}
		else
		{
			__instance.health = __instance.health;
		}
	}

	[HarmonyPatch(typeof(PlayerControllerB), "Update")]
	[HarmonyPostfix]
	private static void UpdateHealthPatch(ref float ___health)
	{
		if (MultiModPlugin.InfiniteHealthEnabledConfig.Value && !MultiModPlugin.HostDisablePlayerCheatsConfig.Value)
		{
			___health = 2.1474836E+09f;
		}
		else
		{
			___health = ___health;
		}
	}

	[HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")]
	[HarmonyPostfix]
	public static void ConnectClientToPlayerObject(PlayerControllerB __instance)
	{
		MultiModPlugin.log.LogInfo((object)"Running ConnectClientToPlayerObject");
		if ((Object)(object)__instance == (Object)(object)GameNetworkManager.Instance.localPlayerController)
		{
			MultiModPlugin.__localPlayer = __instance;
			MultiModPlugin.__terminal = Object.FindObjectOfType<Terminal>();
			MultiModPlugin.__startOfRound = StartOfRound.Instance;
			MultiModPlugin.log.LogInfo((object)"updated all values");
		}
		else
		{
			MultiModPlugin.log.LogInfo((object)"not ready for some reason");
		}
	}
}
[HarmonyPatch(typeof(StartOfRoundPatch))]
internal class StartOfRoundPatch
{
	[HarmonyPatch(typeof(StartOfRound), "Start")]
	[HarmonyPostfix]
	public static void StartPatch(ref StartOfRound ___instance)
	{
		MultiModPlugin.__startOfRound = ___instance;
		___instance.maxShipItemCapacity = ((MultiModPlugin.MaxItemsInShipConfig.Value > 200) ? 200 : MultiModPlugin.MaxItemsInShipConfig.Value);
		MultiModPlugin.UpdateAllRandomSeeds();
	}

	[HarmonyPatch(typeof(StartOfRound), "Awake")]
	[HarmonyPostfix]
	public static void InvinciblePatch(ref bool ___allowLocalPlayerDeath)
	{
		___allowLocalPlayerDeath = !MultiModPlugin.InfiniteHealthEnabledConfig.Value;
	}
}
[HarmonyPatch(typeof(Terminal))]
internal class TerminalPatch
{
	[HarmonyPatch("Start")]
	[HarmonyPrefix]
	private static void StartPatch(Terminal __instance, ref int ___groupCredits)
	{
		bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost;
		MultiModPlugin.__terminal = __instance;
		if (!isHost)
		{
			return;
		}
		MultiModPlugin.log.LogInfo((object)"Terminal Start Event Running");
		MultiModPlugin.log.LogInfo((object)(TimeOfDay.Instance.daysUntilDeadline == TimeOfDay.Instance.quotaVariables.deadlineDaysAmount));
		MultiModPlugin.log.LogInfo((object)(TimeOfDay.Instance.profitQuota == TimeOfDay.Instance.quotaVariables.startingQuota));
		MultiModPlugin.log.LogInfo((object)((Object)RoundManager.Instance.currentLevel).name.ToLower());
		if (!MultiModPlugin.EnableCreditsModConfig.Value)
		{
			return;
		}
		if (MultiModPlugin.InfiniteCreditsConfig.Value)
		{
			__instance.groupCredits = int.MaxValue;
		}
		else if (MultiModPlugin.ConsecutiveCreditsConfig.Value)
		{
			if (!(((Object)RoundManager.Instance.currentLevel).name.ToLower() == "gordion") && !(RoundManager.Instance.currentLevel.PlanetName.ToLower() == "71 gordion") && RoundManager.Instance.currentLevel.levelID != 79)
			{
				__instance.groupCredits = (__instance.groupCredits += MultiModPlugin.CreditsToGiveConfig.Value);
			}
		}
		else
		{
			__instance.groupCredits = MultiModPlugin.CreditsToGiveConfig.Value;
		}
	}

	[HarmonyPatch("Update")]
	[HarmonyPostfix]
	private static void UpdatePatch()
	{
	}
}
[HarmonyPatch(typeof(TimeOfDayPatch))]
internal class TimeOfDayPatch
{
	[HarmonyPatch(typeof(TimeOfDay), "Awake")]
	[HarmonyPostfix]
	private static void AwakePatch(ref TimeOfDay __instance)
	{
		string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName;
		bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost;
		int timesFulfilledQuota = TimeOfDay.Instance.timesFulfilledQuota;
		int value = MultiModPlugin.DeadlineConfig.Value;
		if (isHost)
		{
			__instance.quotaVariables.deadlineDaysAmount = value;
			__instance.quotaVariables.startingCredits = MultiModPlugin.StartingCreditsConfig.Value;
			__instance.quotaVariables.randomizerMultiplier = MultiModPlugin.QuotaMultiplierConfig.Value / 10;
			if (MultiModPlugin.InfiniteDeadlineConfig.Value)
			{
				__instance.timeUntilDeadline = (int)(__instance.totalTime * (float)__instance.quotaVariables.deadlineDaysAmount);
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n INFINITE";
			}
			else
			{
				__instance.daysUntilDeadline = __instance.quotaVariables.deadlineDaysAmount;
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n " + __instance.daysUntilDeadline + "/" + __instance.quotaVariables.deadlineDaysAmount;
			}
		}
	}

	[HarmonyPatch(typeof(TimeOfDay), "Update")]
	[HarmonyPostfix]
	private static void UpdatePatch(ref TimeOfDay __instance)
	{
		string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName;
		bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost;
		int timesFulfilledQuota = TimeOfDay.Instance.timesFulfilledQuota;
		int value = MultiModPlugin.DeadlineConfig.Value;
		if (isHost)
		{
			__instance.quotaVariables.deadlineDaysAmount = value;
			__instance.quotaVariables.startingCredits = MultiModPlugin.StartingCreditsConfig.Value;
			__instance.quotaVariables.randomizerMultiplier = MultiModPlugin.QuotaMultiplierConfig.Value / 10;
			if (MultiModPlugin.InfiniteDeadlineConfig.Value)
			{
				__instance.timeUntilDeadline = (int)(__instance.totalTime * (float)__instance.quotaVariables.deadlineDaysAmount);
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n INFINITE";
			}
			else
			{
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n " + __instance.daysUntilDeadline + "/" + __instance.quotaVariables.deadlineDaysAmount;
			}
		}
	}

	[HarmonyPatch(typeof(TimeOfDay), "SetNewProfitQuota")]
	[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
	private static void SetNewProfitQuotaPatch(ref TimeOfDay __instance)
	{
		string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName;
		bool isHost = ((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost;
		int timesFulfilledQuota = TimeOfDay.Instance.timesFulfilledQuota;
		if (isHost)
		{
			__instance.quotaVariables.deadlineDaysAmount = MultiModPlugin.DeadlineConfig.Value;
			__instance.quotaVariables.randomizerMultiplier = MultiModPlugin.QuotaMultiplierConfig.Value / 10;
			TimeOfDay obj = __instance;
			obj.timesFulfilledQuota++;
			int num = __instance.quotaFulfilled - __instance.profitQuota;
			float num2 = Mathf.Clamp(1f + (float)__instance.timesFulfilledQuota * ((float)__instance.timesFulfilledQuota / __instance.quotaVariables.increaseSteepness), 0f, 10000f);
			num2 = __instance.quotaVariables.baseIncrease * num2 * (__instance.quotaVariables.randomizerCurve.Evaluate(Random.Range(0f, 1f)) * __instance.quotaVariables.randomizerMultiplier + 1f);
			__instance.profitQuota = (int)Mathf.Clamp((float)__instance.profitQuota + num2, 0f, 1E+09f);
			__instance.quotaFulfilled = 0;
			if (MultiModPlugin.InfiniteDeadlineConfig.Value)
			{
				__instance.timeUntilDeadline = (int)(__instance.totalTime * (float)__instance.quotaVariables.deadlineDaysAmount);
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n INFINITE";
			}
			else
			{
				__instance.timeUntilDeadline = __instance.totalTime * (float)__instance.quotaVariables.deadlineDaysAmount + 1f;
				((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n " + __instance.daysUntilDeadline + "/" + __instance.quotaVariables.deadlineDaysAmount;
			}
			int num3 = (int)Math.Ceiling((decimal)(num / 5 + 15 * __instance.daysUntilDeadline) * (decimal)MultiModPlugin.BonusCreditsMultiplierConfig.Value);
			__instance.SyncNewProfitQuotaClientRpc(__instance.profitQuota, num3, __instance.timesFulfilledQuota);
		}
	}

	[HarmonyPatch(typeof(TimeOfDay), "UpdateProfitQuotaCurrentTime")]
	[HarmonyPostfix]
	private static void UpdateProfitQuotaCurrentTimePatch(ref TimeOfDay __instance)
	{
		__instance.quotaVariables.deadlineDaysAmount = MultiModPlugin.DeadlineConfig.Value;
		__instance.quotaVariables.randomizerMultiplier = MultiModPlugin.QuotaMultiplierConfig.Value / 10;
		if (MultiModPlugin.InfiniteDeadlineConfig.Value)
		{
			__instance.timeUntilDeadline = (int)(__instance.totalTime * (float)__instance.quotaVariables.deadlineDaysAmount);
			((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n INFINITE";
		}
		else
		{
			((TMP_Text)StartOfRound.Instance.deadlineMonitorText).text = "DEADLINE:\n " + __instance.daysUntilDeadline + "/" + __instance.quotaVariables.deadlineDaysAmount;
		}
	}

	[HarmonyPatch(typeof(TimeOfDay), "SetBuyingRateForDay")]
	[HarmonyPostfix]
	public static void SetBuyingRateForDayPatch()
	{
		StartOfRound.Instance.companyBuyingRate = MultiModPlugin.BuyingRateConfig.Value / 10;
	}

	[HarmonyPatch(typeof(TimeOfDay), "OnDayChanged")]
	[HarmonyPostfix]
	public static void OnDayChangedPatch()
	{
		if (!((NetworkBehaviour)RoundManager.Instance).NetworkManager.IsHost)
		{
			return;
		}
		Terminal val = Object.FindObjectOfType<Terminal>();
		MultiModPlugin.log.LogInfo((object)"OnDayChanged Event Running");
		MultiModPlugin.log.LogInfo((object)(TimeOfDay.Instance.daysUntilDeadline == TimeOfDay.Instance.quotaVariables.deadlineDaysAmount));
		MultiModPlugin.log.LogInfo((object)(TimeOfDay.Instance.profitQuota == TimeOfDay.Instance.quotaVariables.startingQuota));
		MultiModPlugin.log.LogInfo((object)((Object)RoundManager.Instance.currentLevel).name.ToLower());
		if (!MultiModPlugin.EnableCreditsModConfig.Value)
		{
			return;
		}
		if (MultiModPlugin.InfiniteCreditsConfig.Value)
		{
			val.groupCredits = int.MaxValue;
		}
		else if (MultiModPlugin.ConsecutiveCreditsConfig.Value)
		{
			if (!(((Object)RoundManager.Instance.currentLevel).name.ToLower() == "gordion") && !(RoundManager.Instance.currentLevel.PlanetName.ToLower() == "71 gordion") && RoundManager.Instance.currentLevel.levelID != 79)
			{
				val.groupCredits = (val.groupCredits += MultiModPlugin.CreditsToGiveConfig.Value);
			}
		}
		else
		{
			val.groupCredits = MultiModPlugin.CreditsToGiveConfig.Value;
		}
	}
}
public enum CustomSeedsType
{
	UseGameDefault,
	UseModdedSeeds,
	UsedFixedSeeds
}
[BepInPlugin("com.dsrdakota.mods", "Multi Mod", "1.1.4")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class MultiModPlugin : BaseUnityPlugin
{
	internal static InputDebug InpDbg;

	internal static InputToggles InpTogg;

	public static ManualLogSource log;

	public static ConfigEntry<bool> HostDisablePlayerCheatsConfig;

	public static ConfigEntry<bool> EnableCreditsModConfig;

	public static ConfigEntry<int> StartingCreditsConfig;

	public static ConfigEntry<int> CreditsToGiveConfig;

	public static ConfigEntry<bool> ConsecutiveCreditsConfig;

	public static ConfigEntry<bool> InfiniteCreditsConfig;

	public static ConfigEntry<int> BonusCreditsMultiplierConfig;

	public static ConfigEntry<int> BuyingRateConfig;

	public static ConfigEntry<int> QuotaMultiplierConfig;

	public static ConfigEntry<bool> InfiniteDeadlineConfig;

	public static ConfigEntry<int> DeadlineConfig;

	public static ConfigEntry<float> ScrapAmountMultiplierConfig;

	public static ConfigEntry<float> ScrapValueMultiplierConfig;

	public static ConfigEntry<int> MaxItemsInShipConfig;

	public static ConfigEntry<CustomSeedsType> CustomSeedsTypeConfig;

	public static ConfigEntry<int> LevelRandomConfig;

	public static ConfigEntry<int> EnemySpawnRandomConfig;

	public static ConfigEntry<int> EnemyOutsideRandomConfig;

	public static ConfigEntry<int> AnomalyRandomConfig;

	public static ConfigEntry<int> MapRandomConfig;

	public static ConfigEntry<int> BreakerBoxRandomConfig;

	public static ConfigEntry<int> ChallengeMoonRandomConfig;

	public static ConfigEntry<int> ScrapValueRandomConfig;

	public static ConfigEntry<bool> InfiniteHealthEnabledConfig;

	public static ConfigEntry<bool> InfiniteStaminaEnabledConfig;

	public static ConfigEntry<int> SprintSpeedConfig;

	public static ConfigEntry<int> WalkSpeedConfig;

	public static ConfigEntry<int> ThrowPowerConfig;

	public static ConfigEntry<int> JumpPowerConfig;

	public static ConfigEntry<bool> ClimbSpeedEnabledConfig;

	public static ConfigEntry<int> ClimbSpeedMultiplierConfig;

	public static ConfigEntry<int> WeightMultiplierConfig;

	public static Random BaseRandomizer;

	public static Random ScrapValueRandomizer;

	public static Random MapSeedRandomizer;

	public static Random LevelSeedRandomizer;

	public static Random EnemySpawnRandomizer;

	public static Random OutsideEnemySpawnRandomizer;

	public static Random AnomalyRandomizer;

	public static Random BreakerBoxRandomizer;

	public static Random ChallengeMoonSeedRandomizer;

	public static PlayerControllerB __localPlayer;

	public static Terminal __terminal;

	public static StartOfRound __startOfRound;

	private void Awake()
	{
		//IL_05ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_05f2: Expected O, but got Unknown
		BaseRandomizer = new Random();
		HostDisablePlayerCheatsConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "!TODO Disable some player cheats", true, "!TODO This allows all players to play fairly. Set to true: sprint speed capped at 50, walk speed capped at 20, jump capped at 250 and NO invicibility.");
		QuotaMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Quota Multiplier", 10, "Multiplier to use after each quota met.");
		InfiniteDeadlineConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "Infinite Deadline", false, "Make the deadline infinite.");
		DeadlineConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Days to Deadline", 3, "Days left to deadline. (Deadline is only infinite when Infinite Deadline is enable).");
		MaxItemsInShipConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Set maximum number of items allowed in the ship. (Will cap at 240)", 80, (ConfigDescription)null);
		ScrapValueMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Host", "Scrap Value Multiplier", 1f, "Multiplier for the value of scrap spawned.");
		ScrapAmountMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<float>("Host", "Scrap Amount Multiplier", 1.05f, "Multiplier for the amount of scrap spawned.");
		StartingCreditsConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Starting Credits", 450, "Credits to start with.");
		EnableCreditsModConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "Enable Credits Modifications", true, "This will enable or disable all credits modifications in the following below.");
		InfiniteCreditsConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "Infinite Credits", false, "Infinitely have credits.");
		CreditsToGiveConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Credits To Give", 210, "Start the game with this amount of credits.");
		ConsecutiveCreditsConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "Give Credits Consecutively", false, "Consecutively give credits after every round with the Credits config.");
		BonusCreditsMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Bonus Credits Multiplier", 10, "Bonus multiplier to use when getting an over-quota bonus.");
		BuyingRateConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Host", "Company Buying Rate", 10, "Sets the default company buying rate.");
		CustomSeedsTypeConfig = ((BaseUnityPlugin)this).Config.Bind<CustomSeedsType>("Random Seeds", "Custom Random Seeds", CustomSeedsType.UseGameDefault, "Seed randomization will be controlled by the mod, fixed by the mod or game default.");
		CustomSeedsTypeConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {CustomSeedsTypeConfig.Value}");
			UpdateAllRandomSeeds();
		};
		ScrapValueRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Scrap Random Seed", 16542, "Random seed for the scrap spawned.");
		ScrapValueRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {ScrapValueRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		MapRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Map Random Seed", 52782, "Random seed for the map itself (shown upon landing).");
		MapRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {MapRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		LevelRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Level Random Seed", 878277, "Random seed for the level (Mansion/Facility?).");
		LevelRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {LevelRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		EnemySpawnRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Enemy Random Seed", 57447010, "Random seed for the enemies spawned in general.");
		EnemySpawnRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {CustomSeedsTypeConfig.Value}");
			UpdateAllRandomSeeds();
		};
		EnemyOutsideRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Enemies Outside Random Seed", 478755, "Random seed for the enemies spawned outside.");
		EnemyOutsideRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {EnemyOutsideRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		BreakerBoxRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Breaker Box Random Seed", 757522, "Random seed for the breaker box spawned.");
		BreakerBoxRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {BreakerBoxRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		AnomalyRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Anomaly Random Seed", 754447, "Random seed for the any anomalies.");
		CustomSeedsTypeConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {CustomSeedsTypeConfig.Value}");
			UpdateAllRandomSeeds();
		};
		ChallengeMoonRandomConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Random Seeds", "Challenge Moon Random Seed", 880088, "Random seed specific to the Challenge Moon.");
		ChallengeMoonRandomConfig.SettingChanged += delegate
		{
			log.LogInfo((object)$"Slider value changed to {ChallengeMoonRandomConfig.Value}");
			UpdateAllRandomSeeds();
		};
		InfiniteHealthEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Player", "Infinte Health", false, "Whether or not you have infinite health.");
		InfiniteStaminaEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Player", "Infinte Stamina", false, "Whether or not you have infinite stamina.");
		WalkSpeedConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Walk Speed", 10, "Change default walk speed.");
		SprintSpeedConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Sprint Speed", 20, "Change default sprint speed.");
		ThrowPowerConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Throw Power", 170, "Change default throwing power.");
		JumpPowerConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Jump Power", 150, "Change default jump power.");
		ClimbSpeedEnabledConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Player", "Climb Speed Enabled", false, "Change default climb speed for climbing ladders.");
		ClimbSpeedMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Climb Speed", 40, "Change default climb speed for ladders.");
		WeightMultiplierConfig = ((BaseUnityPlugin)this).Config.Bind<int>("Player", "Weight", 10, "Change the default weight multiplier. Useful only when carrying heavy items and not recommended below 0.5 (Def: 1.0)");
		log = ((BaseUnityPlugin)this).Logger;
		InpDbg = new InputDebug();
		InpTogg = new InputToggles();
		SetupKeybindCallbacks();
		Harmony val = new Harmony("com.dsrdakota.mods.multimod");
		val.PatchAll(typeof(MultiModPlugin));
		val.PatchAll(typeof(RoundManagerPatch));
		val.PatchAll(typeof(PlayerControllerBPatch));
		val.PatchAll(typeof(TimeOfDayPatch));
		val.PatchAll(typeof(TerminalPatch));
		val.PatchAll(typeof(GameNetworkManagerPatch));
		val.PatchAll(typeof(DepositItemsDeskPatch));
	}

	private void SetupKeybindCallbacks()
	{
		InpDbg.ExplodeKey.performed += OnExplodeKeyPressed;
		InpDbg.TeleportToMainKey.performed += OnTeleportToMainKeyPressed;
		InpDbg.TeleportToShipKey.performed += OnTeleportToShipKeyPressed;
	}

	private void OnExplodeKeyPressed(CallbackContext ctx)
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Invalid comparison between Unknown and I4
		log.LogInfo((object)"Running OnExplodeKeyPressed");
		if (__startOfRound.inShipPhase || !__startOfRound.shipHasLanded || (int)((CallbackContext)(ref ctx)).phase != 3 || !((CallbackContext)(ref ctx)).performed)
		{
			return;
		}
		log.LogInfo((object)("ishost: " + ((NetworkBehaviour)RoundManager.Instance).IsHost));
		log.LogInfo((object)("isserver: " + ((NetworkBehaviour)RoundManager.Instance).IsServer));
		log.LogInfo((object)("isclient: " + ((NetworkBehaviour)RoundManager.Instance).IsClient));
		log.LogInfo((object)("islocalplayer: " + ((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer));
		if (((NetworkBehaviour)RoundManager.Instance).IsClient || ((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer)
		{
			if (Object.op_Implicit((Object)(object)__localPlayer))
			{
				log.LogMessage((object)"Attempting tooooo killllllll");
				CoroutineHelper.Start(RunTheKill());
			}
			else
			{
				log.LogWarning((object)"Haven't gotten local player object yet.");
			}
		}
	}

	private static IEnumerator RunTheKill()
	{
		Vector3 PositionLastFrame = ((Component)__localPlayer.gameplayCamera).transform.position;
		yield return null;
		Vector3 PositionCurrentFrame = ((Component)__localPlayer.gameplayCamera).transform.position;
		Vector3 RagdollVelocity = (PositionCurrentFrame - PositionLastFrame) * 46f;
		RagdollVelocity.y *= 25f / 46f;
		log.LogMessage((object)"Running killllllll");
		RoundManager.Instance.PlayAudibleNoise(__localPlayer.serverPlayerPosition, 25f, 0.75f, 1, true, 0);
		__localPlayer.KillPlayer(RagdollVelocity, true, (CauseOfDeath)3, 0, default(Vector3));
	}

	private void OnTeleportToShipKeyPressed(CallbackContext ctx)
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Invalid comparison between Unknown and I4
		//IL_0173: Unknown result type (might be due to invalid IL or missing references)
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_017f: Unknown result type (might be due to invalid IL or missing references)
		log.LogInfo((object)"Running OnTeleportToShipKeyPressed");
		if (__startOfRound.inShipPhase || !__startOfRound.shipHasLanded || (int)((CallbackContext)(ref ctx)).phase != 3 || !((CallbackContext)(ref ctx)).performed)
		{
			return;
		}
		log.LogInfo((object)("ishost: " + ((NetworkBehaviour)RoundManager.Instance).IsHost));
		log.LogInfo((object)("isserver: " + ((NetworkBehaviour)RoundManager.Instance).IsServer));
		log.LogInfo((object)("isclient: " + ((NetworkBehaviour)RoundManager.Instance).IsClient));
		log.LogInfo((object)("islocalplayer: " + ((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer));
		if (!((NetworkBehaviour)RoundManager.Instance).IsClient && !((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer)
		{
			return;
		}
		if (Object.op_Implicit((Object)(object)__localPlayer))
		{
			if (!__localPlayer.isPlayerDead && (((NetworkBehaviour)RoundManager.Instance).IsClient || ((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer))
			{
				Vector3 position = StartOfRound.Instance.outsideShipSpawnPosition.position;
				__localPlayer.TeleportPlayer(position, false, 0f, false, true);
			}
		}
		else
		{
			log.LogWarning((object)"Haven't gotten local player object yet.");
		}
	}

	private void OnTeleportToMainKeyPressed(CallbackContext ctx)
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: Invalid comparison between Unknown and I4
		//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
		log.LogInfo((object)"Running OnTeleportToMainKeyPressed");
		if (__startOfRound.inShipPhase || !__startOfRound.shipHasLanded || (int)((CallbackContext)(ref ctx)).phase != 3 || !((CallbackContext)(ref ctx)).performed || ((Object)RoundManager.Instance.currentLevel).name.ToLower() == "gordion" || RoundManager.Instance.currentLevel.PlanetName.ToLower() == "71 gordion" || RoundManager.Instance.currentLevel.levelID == 79)
		{
			return;
		}
		log.LogInfo((object)("ishost: " + ((NetworkBehaviour)RoundManager.Instance).IsHost));
		log.LogInfo((object)("isserver: " + ((NetworkBehaviour)RoundManager.Instance).IsServer));
		log.LogInfo((object)("isclient: " + ((NetworkBehaviour)RoundManager.Instance).IsClient));
		log.LogInfo((object)("islocalplayer: " + ((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer));
		if (!((NetworkBehaviour)RoundManager.Instance).IsClient && !((NetworkBehaviour)RoundManager.Instance).IsLocalPlayer)
		{
			return;
		}
		if (Object.op_Implicit((Object)(object)__localPlayer))
		{
			if (!__localPlayer.isPlayerDead)
			{
				log.LogInfo((object)"Getting main entrance pos and teleporting player ...");
				Vector3 val = RoundManager.FindMainEntrancePosition(true, !__localPlayer.isInsideFactory);
				Vector3 position = ((Component)RoundManager.FindMainEntranceScript(!__localPlayer.isInsideFactory)).transform.position;
				log.LogInfo((object)("is pos null: " + false));
				log.LogInfo((object)(val.x + ", " + val.y + ", " + val.z));
				log.LogInfo((object)("is pos2 null: " + false));
				log.LogInfo((object)(position.x + ", " + position.y + ", " + position.z));
				__localPlayer.TeleportPlayer(val, false, 0f, false, true);
			}
		}
		else
		{
			log.LogWarning((object)"Haven't gotten local player object yet.");
		}
	}

	public static void UpdateAllRandomSeeds()
	{
		switch (CustomSeedsTypeConfig.Value)
		{
		case CustomSeedsType.UsedFixedSeeds:
			ScrapValueRandomizer = new Random(ScrapValueRandomConfig.Value);
			MapSeedRandomizer = new Random(MapRandomConfig.Value);
			LevelSeedRandomizer = new Random(LevelRandomConfig.Value);
			EnemySpawnRandomizer = new Random(EnemySpawnRandomConfig.Value);
			OutsideEnemySpawnRandomizer = new Random(EnemyOutsideRandomConfig.Value);
			AnomalyRandomizer = new Random(AnomalyRandomConfig.Value);
			BreakerBoxRandomizer = new Random(BreakerBoxRandomConfig.Value);
			ChallengeMoonSeedRandomizer = new Random(ChallengeMoonRandomConfig.Value);
			if (StartOfRound.Instance.isChallengeFile)
			{
				RoundManager.Instance.ChallengeMoonRandom = new Random(ChallengeMoonRandomConfig.Value);
			}
			StartOfRound.Instance.overrideRandomSeed = ((CustomSeedsTypeConfig.Value != 0) ? true : false);
			StartOfRound.Instance.overrideSeedNumber = ((CustomSeedsTypeConfig.Value != 0) ? MapSeedRandomizer.Next(13458240, int.MaxValue) : StartOfRound.Instance.randomMapSeed);
			RoundManager.Instance.ScrapValuesRandom = ScrapValueRandomizer;
			RoundManager.Instance.LevelRandom = LevelSeedRandomizer;
			RoundManager.Instance.EnemySpawnRandom = EnemySpawnRandomizer;
			RoundManager.Instance.OutsideEnemySpawnRandom = EnemySpawnRandomizer;
			RoundManager.Instance.AnomalyRandom = AnomalyRandomizer;
			RoundManager.Instance.BreakerBoxRandom = BreakerBoxRandomizer;
			break;
		case CustomSeedsType.UseModdedSeeds:
			ScrapValueRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			MapSeedRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			LevelSeedRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			EnemySpawnRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			OutsideEnemySpawnRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			AnomalyRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			BreakerBoxRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			ChallengeMoonSeedRandomizer = new Random(BaseRandomizer.Next(707, 77345663));
			if (StartOfRound.Instance.isChallengeFile)
			{
				RoundManager.Instance.ChallengeMoonRandom = new Random(BaseRandomizer.Next(707, 77345663));
			}
			StartOfRound.Instance.overrideRandomSeed = ((CustomSeedsTypeConfig.Value != 0) ? true : false);
			StartOfRound.Instance.overrideSeedNumber = ((CustomSeedsTypeConfig.Value != 0) ? MapSeedRandomizer.Next(13458240, int.MaxValue) : StartOfRound.Instance.randomMapSeed);
			RoundManager.Instance.ScrapValuesRandom = ScrapValueRandomizer;
			RoundManager.Instance.LevelRandom = LevelSeedRandomizer;
			RoundManager.Instance.EnemySpawnRandom = EnemySpawnRandomizer;
			RoundManager.Instance.OutsideEnemySpawnRandom = EnemySpawnRandomizer;
			RoundManager.Instance.AnomalyRandom = AnomalyRandomizer;
			RoundManager.Instance.BreakerBoxRandom = BreakerBoxRandomizer;
			break;
		case CustomSeedsType.UseGameDefault:
			break;
		}
	}
}
[HarmonyPatch(typeof(RoundManagerPatch))]
public static class RoundManagerPatch
{
	[HarmonyPatch("SpawnScrapInLevel")]
	[HarmonyPrefix]
	public static void SpawnScrapInLevelPrefix(RoundManager __instance)
	{
		__instance.scrapValueMultiplier = MultiModPlugin.ScrapValueMultiplierConfig.Value;
		__instance.scrapAmountMultiplier = MultiModPlugin.ScrapAmountMultiplierConfig.Value;
		MultiModPlugin.UpdateAllRandomSeeds();
		__instance.playersManager.shipDoorsEnabled = true;
	}

	[HarmonyPatch(typeof(RoundManager), "GenerateNewLevelClientRpc")]
	[HarmonyPostfix]
	public static void GenerateNewLevelClientRpc(ref RoundManager __instance)
	{
		__instance.scrapValueMultiplier = MultiModPlugin.ScrapValueMultiplierConfig.Value;
		__instance.scrapAmountMultiplier = MultiModPlugin.ScrapAmountMultiplierConfig.Value;
		MultiModPlugin.UpdateAllRandomSeeds();
	}

	[HarmonyPatch("GenerateNewLevelClientRpc")]
	[HarmonyPostfix]
	public static void GenerateNewLevelClientRpcPostfix(int randomSeed, int levelID)
	{
		MultiModPlugin.UpdateAllRandomSeeds();
	}
}