Decompiled source of InstaDeath v1.0.1

InstaDeath.dll

Decompiled 4 months ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using Configgy;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.SceneManagement;

[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("InstaDeath")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("InstaDeath")]
[assembly: AssemblyTitle("InstaDeath")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace InstaDeath
{
	[BepInPlugin("zordy.instadeath", "InstaDeath", "1.0.0")]
	internal class Plugin : BaseUnityPlugin
	{
		private static NewMovement mainPlayer = null;

		private bool gameScene;

		public static bool restartedScene;

		[Configgable("", "Restart Mission", 0, "If enabled, restarts mission, if not, restarts from checkpoint.")]
		public static ConfigToggle restartMission = new ConfigToggle(false);

		public static ConfigBuilder ConfigBuilder { get; private set; }

		private void Awake()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Expected O, but got Unknown
			ConfigBuilder = new ConfigBuilder("InstaDeath", (string)null);
			ConfigBuilder.BuildAll();
			SceneManager.sceneLoaded += SceneManager_sceneLoaded;
			Harmony.CreateAndPatchAll(typeof(Plugin), (string)null);
		}

		private void OnDestroy()
		{
			SceneManager.sceneLoaded -= SceneManager_sceneLoaded;
		}

		private void SceneManager_sceneLoaded(Scene scene, LoadSceneMode loadSceneMode)
		{
			if (!Object.op_Implicit((Object)(object)GameObject.Find("Main Menu State")))
			{
				gameScene = true;
				mainPlayer = Object.FindObjectOfType<NewMovement>();
				restartedScene = false;
				if ((Object)(object)mainPlayer != (Object)null)
				{
					Console.WriteLine("Found player successfully!");
				}
			}
			else
			{
				gameScene = false;
				restartedScene = false;
				mainPlayer = null;
			}
		}

		private IEnumerator PlayerValidCheck()
		{
			if (restartedScene)
			{
				while ((Object)(object)Object.FindObjectOfType<NewMovement>() != (Object)(object)mainPlayer)
				{
					mainPlayer = Object.FindObjectOfType<NewMovement>();
				}
				restartedScene = false;
			}
			yield return null;
		}

		private void Update()
		{
			if (gameScene && Object.op_Implicit((Object)(object)mainPlayer) && !restartedScene && mainPlayer.dead)
			{
				if (((ConfigValueElement<bool>)(object)restartMission).Value)
				{
					MonoSingleton<OptionsManager>.Instance.RestartMission();
				}
				else
				{
					MonoSingleton<OptionsManager>.Instance.RestartCheckpoint();
				}
				restartedScene = true;
				((MonoBehaviour)this).StartCoroutine(PlayerValidCheck());
			}
		}
	}
	internal class PluginInfo
	{
		public const string GUID = "zordy.instadeath";

		public const string Name = "InstaDeath";

		public const string Version = "1.0.0";
	}
}