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