Decompiled source of Last Resort v2.1.0

lastresort.dll

Decompiled a day 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 System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;

[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("atwhatcost")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("atwhatcost")]
[assembly: AssemblyTitle("atwhatcost")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LastResort
{
	public enum EnemyPreset
	{
		None,
		Beetle,
		Lemurian,
		Imp,
		HermitCrab,
		BeetleGuard,
		ElderLemurian,
		StoneGolem,
		BighornBison,
		ClayTemplar,
		MiniMushrum,
		Parent,
		Gup,
		Geep,
		Gip,
		LesserWisp,
		GreaterWisp,
		Jellyfish,
		BrassContraption,
		ClayDunestrider,
		BeetleQueen,
		ImpOverlord,
		StoneTitan,
		Vagrant,
		MagmaWorm,
		OverloadingWorm,
		SolusControlUnit,
		LunarGolem,
		LunarWisp,
		LunarExploder,
		VoidReaver,
		VoidJailer,
		VoidDevastator,
		VoidBarnacle,
		VoidInfestor,
		Direseeker,
		FalseSon,
		Custom
	}
	public enum EliteType
	{
		None = -1,
		Blazing,
		Overloading,
		Glacial,
		Malachite,
		Celestine,
		Void,
		Echo,
		Haunted,
		Earth,
		Aurelionite,
		Bead,
		Collective
	}
	public enum ItemTierPriority
	{
		Random,
		FavorWhite,
		FavorGreen,
		FavorRed,
		FavorBoss,
		FavorLunar,
		FavorVoid
	}
	public enum LogVerbosity
	{
		Minimal,
		Verbose
	}
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.gogogadgetjustice.lastresort", "Last Resort", "2.3.0")]
	[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
	public class LastResortPlugin : BaseUnityPlugin
	{
		public const string PluginGUID = "com.gogogadgetjustice.lastresort";

		public const string PluginName = "Last Resort";

		public const string PluginVersion = "2.3.0";

		private ConfigEntry<float> healthThresholdPercent;

		private ConfigEntry<bool> enableHealing;

		private ConfigEntry<float> healToPercent;

		private ConfigEntry<float> itemLossPercent;

		private ConfigEntry<ItemTierPriority> itemTierPriority;

		private ConfigEntry<float> cooldownSeconds;

		private ConfigEntry<float> invulnerabilitySeconds;

		private ConfigEntry<bool> enableForAllPlayers;

		private ConfigEntry<string> enabledPlayerNames;

		private ConfigEntry<string> disabledPlayerNames;

		private ConfigEntry<int> directorCreditsBase;

		private ConfigEntry<int> directorCreditsMultiplier;

		private ConfigEntry<EnemyPreset> enemy1Preset;

		private ConfigEntry<string> enemy1Master;

		private ConfigEntry<EliteType> enemy1EliteType;

		private ConfigEntry<int> enemy1BaseCount;

		private ConfigEntry<bool> enemy1ScaleWithUses;

		private ConfigEntry<int> enemy1ScalingMultiplier;

		private ConfigEntry<EnemyPreset> enemy2Preset;

		private ConfigEntry<string> enemy2Master;

		private ConfigEntry<EliteType> enemy2EliteType;

		private ConfigEntry<int> enemy2BaseCount;

		private ConfigEntry<bool> enemy2ScaleWithUses;

		private ConfigEntry<int> enemy2ScalingMultiplier;

		private ConfigEntry<EnemyPreset> enemy3Preset;

		private ConfigEntry<string> enemy3Master;

		private ConfigEntry<EliteType> enemy3EliteType;

		private ConfigEntry<int> enemy3BaseCount;

		private ConfigEntry<bool> enemy3ScaleWithUses;

		private ConfigEntry<int> enemy3ScalingMultiplier;

		private ConfigEntry<bool> chatNotifications;

		private ConfigEntry<bool> chatShowCredits;

		private ConfigEntry<bool> chatShowTotalEnemies;

		private ConfigEntry<bool> chatShowEnemyDetails;

		private ConfigEntry<LogVerbosity> logVerbosity;

		private Dictionary<CharacterBody, float> playerCooldowns = new Dictionary<CharacterBody, float>();

		private Dictionary<CharacterBody, int> playerTriggerCount = new Dictionary<CharacterBody, int>();

		public void Awake()
		{
			//IL_0563: Unknown result type (might be due to invalid IL or missing references)
			//IL_056d: Expected O, but got Unknown
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Awake called! Setting up config...");
			healthThresholdPercent = ((BaseUnityPlugin)this).Config.Bind<float>("1. Activation", "Health Threshold", 25f, "Health percentage threshold to trigger Last Resort");
			enableHealing = ((BaseUnityPlugin)this).Config.Bind<bool>("1. Activation", "Enable Healing", true, "Enable healing when Last Resort triggers");
			healToPercent = ((BaseUnityPlugin)this).Config.Bind<float>("1. Activation", "Heal To Percent", 100f, "Percentage of max HP to heal to when triggered (only if healing is enabled)");
			itemLossPercent = ((BaseUnityPlugin)this).Config.Bind<float>("1. Activation", "Item Loss Percent", 5f, "Percentage of items to lose when Last Resort triggers");
			itemTierPriority = ((BaseUnityPlugin)this).Config.Bind<ItemTierPriority>("1. Activation", "Item Tier Priority", ItemTierPriority.FavorGreen, "Which item tier to prioritize removing");
			cooldownSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("1. Activation", "Cooldown", 10f, "Cooldown in seconds before Last Resort can trigger again");
			invulnerabilitySeconds = ((BaseUnityPlugin)this).Config.Bind<float>("1. Activation", "Invulnerability Duration", 3f, "Seconds of invulnerability after activation");
			enableForAllPlayers = ((BaseUnityPlugin)this).Config.Bind<bool>("1. Activation", "Enable For All Players", true, "If true, Last Resort works for everyone. If false, use the player name lists below");
			enabledPlayerNames = ((BaseUnityPlugin)this).Config.Bind<string>("1. Activation", "Enabled Player Names", "", "Comma-separated list of player names to ENABLE Last Resort for (only used if EnableForAllPlayers is false). Example: PlayerOne,FriendName,NoobPlayer");
			disabledPlayerNames = ((BaseUnityPlugin)this).Config.Bind<string>("1. Activation", "Disabled Player Names", "", "Comma-separated list of player names to DISABLE Last Resort for (takes priority over enabled list). Example: ProPlayer,Veteran");
			directorCreditsBase = ((BaseUnityPlugin)this).Config.Bind<int>("2. Director Credits", "Minimum Base Pay", 10, "The Director always receives this amount per Last Resort activation");
			directorCreditsMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("2. Director Credits", "Multiple Activation Kickback", 20, "Added to base pay and increases with each activation (e.g., 100 means +100 on 1st use, +200 on 2nd, +300 on 3rd)");
			enemy1Preset = ((BaseUnityPlugin)this).Config.Bind<EnemyPreset>("3. Enemy Slot 1", "Enemy1 Preset", EnemyPreset.Beetle, "Select enemy preset or use Custom to manually set MasterName");
			enemy1Master = ((BaseUnityPlugin)this).Config.Bind<string>("3. Enemy Slot 1", "Custom MasterName?", "", "Master prefab name (only used if Preset is 'Custom' and otherwise ignored)");
			enemy1EliteType = ((BaseUnityPlugin)this).Config.Bind<EliteType>("3. Enemy Slot 1", "Elite Type", EliteType.Earth, "Elite type for this enemy");
			enemy1BaseCount = ((BaseUnityPlugin)this).Config.Bind<int>("3. Enemy Slot 1", "Base Count", 2, "Base number to spawn");
			enemy1ScaleWithUses = ((BaseUnityPlugin)this).Config.Bind<bool>("3. Enemy Slot 1", "Bring more friends to the party?", true, "Check to spawn more of this enemy with each Last Resort activation");
			enemy1ScalingMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("3. Enemy Slot 1", "Party Crasher Escalation Rate", 2, "[(useCount - 1) * this number] + basecount = total enemies added per activation. Ensure the box above is checked and you have at least 1 intial enemy.");
			enemy2Preset = ((BaseUnityPlugin)this).Config.Bind<EnemyPreset>("4. Enemy Slot 2", "Enemy2 Preset", EnemyPreset.VoidInfestor, "Select enemy preset or use Custom to manually set MasterName");
			enemy2Master = ((BaseUnityPlugin)this).Config.Bind<string>("4. Enemy Slot 2", "Custom MasterName?", "V", "Master prefab name (only used if Preset is 'Custom') and otherwise ignored");
			enemy2EliteType = ((BaseUnityPlugin)this).Config.Bind<EliteType>("4. Enemy Slot 2", "Elite Type", EliteType.Blazing, "Elite type for this enemy");
			enemy2BaseCount = ((BaseUnityPlugin)this).Config.Bind<int>("4. Enemy Slot 2", "Base Count", 3, "Base number to spawn");
			enemy2ScaleWithUses = ((BaseUnityPlugin)this).Config.Bind<bool>("4. Enemy Slot 2", "Bring more friends to the party?", true, "Spawn more of this enemy with each Last Resort activation");
			enemy2ScalingMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("4. Enemy Slot 2", "Party Crasher Escalation Rate", 2, "[(useCount - 1) * this number] + basecount = total enemies added per activation. Ensure the box above is checked and you have at least 1 intial enemy.");
			enemy3Preset = ((BaseUnityPlugin)this).Config.Bind<EnemyPreset>("5. Enemy Slot 3", "Enemy3 Preset", EnemyPreset.GreaterWisp, "Select enemy preset or use Custom to manually set MasterName");
			enemy3Master = ((BaseUnityPlugin)this).Config.Bind<string>("5. Enemy Slot 3", "Custgm MasterName>", "", "Master prefab name (only used if Preset is 'Custom')  and otherwise ignored ");
			enemy3EliteType = ((BaseUnityPlugin)this).Config.Bind<EliteType>("5. Enemy Slot 3", "Elite Type", EliteType.Earth, "Elite type for this enemy");
			enemy3BaseCount = ((BaseUnityPlugin)this).Config.Bind<int>("5. Enemy Slot 3", "Base Count", 1, "Base number to spawn");
			enemy3ScaleWithUses = ((BaseUnityPlugin)this).Config.Bind<bool>("5. Enemy Slot 3", "Bring more friends to the party?", false, "Toggle to spawn more of this enemy with each Last Resort activation");
			enemy3ScalingMultiplier = ((BaseUnityPlugin)this).Config.Bind<int>("5. Enemy Slot 3", "Party Crasher Escalation Rate", 0, "[(useCount - 1) * this number] + basecount = total enemies added per activation. Ensure the box above is checked .");
			chatNotifications = ((BaseUnityPlugin)this).Config.Bind<bool>("6. Chat & Logs", "Chat Notifications", true, "Enable chat notifications when Last Resort triggers");
			chatShowCredits = ((BaseUnityPlugin)this).Config.Bind<bool>("6. Chat & Logs", "Show Credits Added", true, "Show director credits added in chat notifications");
			chatShowTotalEnemies = ((BaseUnityPlugin)this).Config.Bind<bool>("6. Chat & Logs", "Show Total Enemies", true, "Show total number of enemies spawned in chat notifications");
			chatShowEnemyDetails = ((BaseUnityPlugin)this).Config.Bind<bool>("6. Chat & Logs", "Show Enemy Details", false, "Show detailed breakdown of each enemy type spawned in chat notifications");
			logVerbosity = ((BaseUnityPlugin)this).Config.Bind<LogVerbosity>("6. Chat & Logs", "Logging Verbosity", LogVerbosity.Minimal, "Set logging detail level (Minimal or Verbose)");
			SetupRiskOfOptions();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Config loaded!");
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Enemy 1 Elite: {enemy1EliteType.Value}");
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Enemy 2 Elite: {enemy2EliteType.Value}");
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Enemy 3 Elite: {enemy3EliteType.Value}");
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Setting up hooks...");
			HealthComponent.TakeDamage += new hook_TakeDamage(OnTakeDamage);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Last Resort v2.3.0 loaded successfully!");
		}

		private void SetupRiskOfOptions()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Expected O, but got Unknown
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Expected O, but got Unknown
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Expected O, but got Unknown
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Expected O, but got Unknown
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ec: 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_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011e: Expected O, but got Unknown
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Expected O, but got Unknown
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Expected O, but got Unknown
			//IL_015c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Expected O, but got Unknown
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0172: Unknown result type (might be due to invalid IL or missing references)
			//IL_017d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: 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_01a4: Expected O, but got Unknown
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Expected O, but got Unknown
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Expected O, but got Unknown
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cb: Expected O, but got Unknown
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Expected O, but got Unknown
			//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Expected O, but got Unknown
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0200: Unknown result type (might be due to invalid IL or missing references)
			//IL_0210: Expected O, but got Unknown
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0215: Expected O, but got Unknown
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0221: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Expected O, but got Unknown
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_023d: Expected O, but got Unknown
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_024e: Expected O, but got Unknown
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_025f: Expected O, but got Unknown
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_0270: Expected O, but got Unknown
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0283: Unknown result type (might be due to invalid IL or missing references)
			//IL_0290: Expected O, but got Unknown
			//IL_028b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0295: Expected O, but got Unknown
			//IL_029c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Expected O, but got Unknown
			//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)
			//IL_02b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c6: Expected O, but got Unknown
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Expected O, but got Unknown
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Expected O, but got Unknown
			//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ed: Expected O, but got Unknown
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Expected O, but got Unknown
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Expected O, but got Unknown
			//IL_0319: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Expected O, but got Unknown
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0334: Expected O, but got Unknown
			//IL_033b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0340: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Unknown result type (might be due to invalid IL or missing references)
			//IL_0354: Expected O, but got Unknown
			//IL_034f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0359: Expected O, but got Unknown
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Expected O, but got Unknown
			//IL_0371: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Expected O, but got Unknown
			//IL_0382: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Expected O, but got Unknown
			//IL_0393: Unknown result type (might be due to invalid IL or missing references)
			//IL_0398: Unknown result type (might be due to invalid IL or missing references)
			//IL_039f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Expected O, but got Unknown
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Expected O, but got Unknown
			//IL_03b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c2: Expected O, but got Unknown
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e2: Expected O, but got Unknown
			//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e7: Expected O, but got Unknown
			//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f8: Expected O, but got Unknown
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0409: Expected O, but got Unknown
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Expected O, but got Unknown
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Expected O, but got Unknown
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_043c: Expected O, but got Unknown
			if (!Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Risk of Options not found, skipping GUI setup");
				return;
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Setting up Risk of Options integration...");
			ModSettingsManager.SetModDescription("Cheat death and/or face escalating consequences");
			ModSettingsManager.AddOption((BaseOption)new StepSliderOption(healthThresholdPercent, new StepSliderConfig
			{
				min = 1f,
				max = 99f,
				increment = 1f,
				FormatString = "{0:0}%"
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableHealing));
			ModSettingsManager.AddOption((BaseOption)new StepSliderOption(healToPercent, new StepSliderConfig
			{
				min = 1f,
				max = 100f,
				increment = 1f,
				FormatString = "{0:0}%"
			}));
			ModSettingsManager.AddOption((BaseOption)new StepSliderOption(cooldownSeconds, new StepSliderConfig
			{
				min = 0f,
				max = 60f,
				increment = 1f,
				FormatString = "{0:0}s"
			}));
			ModSettingsManager.AddOption((BaseOption)new StepSliderOption(invulnerabilitySeconds, new StepSliderConfig
			{
				min = 0f,
				max = 10f,
				increment = 0.5f,
				FormatString = "{0:0.0}s"
			}));
			ModSettingsManager.AddOption((BaseOption)new StepSliderOption(itemLossPercent, new StepSliderConfig
			{
				min = 0f,
				max = 100f,
				increment = 1f,
				FormatString = "{0:0}%"
			}));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)itemTierPriority));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableForAllPlayers));
			ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(enabledPlayerNames));
			ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(disabledPlayerNames));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(directorCreditsBase, new IntSliderConfig
			{
				min = 0,
				max = 1000
			}));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(directorCreditsMultiplier, new IntSliderConfig
			{
				min = 0,
				max = 500
			}));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy1Preset));
			ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(enemy1Master));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy1EliteType));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy1BaseCount, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enemy1ScaleWithUses));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy1ScalingMultiplier, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy2Preset));
			ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(enemy2Master));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy2EliteType));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy2BaseCount, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enemy2ScaleWithUses));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy2ScalingMultiplier, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy3Preset));
			ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(enemy3Master));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)enemy3EliteType));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy3BaseCount, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enemy3ScaleWithUses));
			ModSettingsManager.AddOption((BaseOption)new IntSliderOption(enemy3ScalingMultiplier, new IntSliderConfig
			{
				min = 0,
				max = 10
			}));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chatNotifications));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chatShowCredits));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chatShowTotalEnemies));
			ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chatShowEnemyDetails));
			ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)logVerbosity));
			AddTemplateButtons();
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Risk of Options setup complete!");
		}

		private void AddTemplateButtons()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: 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_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Expected O, but got Unknown
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected O, but got Unknown
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Expected O, but got Unknown
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Expected O, but got Unknown
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Expected O, but got Unknown
			//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Expected O, but got Unknown
			//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Expected O, but got Unknown
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Expected O, but got Unknown
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Expected O, but got Unknown
			//IL_0149: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Expected O, but got Unknown
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Expected O, but got Unknown
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Expected O, but got Unknown
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0183: Expected O, but got Unknown
			//IL_019f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Expected O, but got Unknown
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Expected O, but got Unknown
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Expected O, but got Unknown
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Expected O, but got Unknown
			//IL_01f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ff: Expected O, but got Unknown
			//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Expected O, but got Unknown
			//IL_0220: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Expected O, but got Unknown
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_022f: Expected O, but got Unknown
			//IL_024b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Expected O, but got Unknown
			//IL_0250: Unknown result type (might be due to invalid IL or missing references)
			//IL_025a: Expected O, but got Unknown
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Training Wheels", "7. Templates", "Casual mode - no consequences, just safety net", "Apply Training Wheels", (UnityAction)delegate
			{
				ApplyTemplate_TrainingWheels();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Devil's Bargain", "7. Templates", "Default config - moderate consequences with scaling", "Apply Devil's Bargain", (UnityAction)delegate
			{
				ApplyTemplate_DevilsBargain();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Harsh Consequences", "7. Templates", "Hard mode - heavy item loss, tough enemies, aggressive scaling", "Apply Harsh consequences", (UnityAction)delegate
			{
				ApplyTemplate_Harshconsequences();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Boss Rush", "7. Templates", "All three slots spawn boss enemies with scaling", "Apply Boss Rush", (UnityAction)delegate
			{
				ApplyTemplate_BossRush();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Void the Noid", "7. Templates", "All void enemies, void item priority, aggressive scaling", "Apply Void Infection", (UnityAction)delegate
			{
				ApplyTemplate_VoidtheNoid();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Oops! All False Sons", "7. Templates", "Three elite False Sons. Very stupid very quickly.", "Apply Oops! All False Sons", (UnityAction)delegate
			{
				ApplyTemplate_OopsAllFalseSons();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Close Call", "7. Templates", "Casual - Another chance when they get you under 5% but don't finisn the job", "Apply Close Call", (UnityAction)delegate
			{
				ApplyTemplate_GenerousSecondChance();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Mistake Avalanche", "7. Templates", "Punishing early trigger with heavy item loss and brutal enemies", "Apply Mistake Avalanche", (UnityAction)delegate
			{
				ApplyTemplate_MistakeAvalanche();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Safety?", "7. Templates", "Still easy to die if you're reckless - heavy penalties", "Apply Safety Not Guaranteed", (UnityAction)delegate
			{
				ApplyTemplate_SafetyNotGuaranteed();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Drizz", "7. Templates", "Triggers at 99% health, drops you to 25% health, lose 90% items, massive director boost, 3 Wise Lemurians visit you each time.", "Apply Drizzle Demands Perfection", (UnityAction)delegate
			{
				ApplyTemplate_DrizzleDemandsPerfection();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Void Infection", "7. Templates", "3 flavors of Infestors with scaling that can get ugly fast", "Apply Void Infection", (UnityAction)delegate
			{
				ApplyTemplate_VoidInfection();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Falling Sky", "7. Templates", "Each trigger brings scaling overloaded lesser wisps, a glacial jellyfish, and scaling haunted brass contraptions that hide the last two.", "Apply Falling Sky", (UnityAction)delegate
			{
				ApplyTemplate_FallingSkyFalling();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("...", "7. Templates", "32 elite beetles swarm you with extreme scaling", "Apply Someone Saw a Cockroach up on Twelve", (UnityAction)delegate
			{
				ApplyTemplate_CockroachOnTwelve();
			}));
			ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Wellp", "7. Templates", "30 elite False Sons. Enjoy a slidesow until ror2.exe has stopped responding..", "Just Crash My Computer, Thanks", (UnityAction)delegate
			{
				ApplyTemplate_CrashMyComputer();
			}));
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Template buttons registered");
		}

		private void ApplyTemplate_TrainingWheels()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Training Wheels template");
			healthThresholdPercent.Value = 50f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 0f;
			cooldownSeconds.Value = 5f;
			invulnerabilitySeconds.Value = 5f;
			enemy1BaseCount.Value = 0;
			enemy2BaseCount.Value = 0;
			enemy3BaseCount.Value = 0;
			directorCreditsBase.Value = 0;
			directorCreditsMultiplier.Value = 0;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Training Wheels template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_DevilsBargain()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Devil's Bargain template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 5f;
			itemTierPriority.Value = ItemTierPriority.FavorGreen;
			cooldownSeconds.Value = 10f;
			invulnerabilitySeconds.Value = 3f;
			enemy1Preset.Value = EnemyPreset.Beetle;
			enemy1EliteType.Value = EliteType.Earth;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 2;
			enemy2Preset.Value = EnemyPreset.VoidInfestor;
			enemy2EliteType.Value = EliteType.Glacial;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 2;
			enemy3Preset.Value = EnemyPreset.GreaterWisp;
			enemy3EliteType.Value = EliteType.Blazing;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 2;
			directorCreditsBase.Value = 100;
			directorCreditsMultiplier.Value = 100;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Devil's Bargain template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_Harshconsequences()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Harsh consequences template");
			healthThresholdPercent.Value = 10f;
			enableHealing.Value = true;
			healToPercent.Value = 60f;
			itemLossPercent.Value = 30f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 20f;
			invulnerabilitySeconds.Value = 2f;
			enemy1Preset.Value = EnemyPreset.BeetleGuard;
			enemy1EliteType.Value = EliteType.Glacial;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 2;
			enemy2Preset.Value = EnemyPreset.Gup;
			enemy2EliteType.Value = EliteType.Celestine;
			enemy2BaseCount.Value = 2;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 3;
			enemy3Preset.Value = EnemyPreset.ClayDunestrider;
			enemy3EliteType.Value = EliteType.None;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 100;
			directorCreditsMultiplier.Value = 80;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Harsh consequences template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_BossRush()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Boss Rush template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 15f;
			itemTierPriority.Value = ItemTierPriority.FavorGreen;
			enemy1Preset.Value = EnemyPreset.StoneTitan;
			enemy1EliteType.Value = EliteType.Blazing;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 2;
			enemy2Preset.Value = EnemyPreset.BeetleQueen;
			enemy2EliteType.Value = EliteType.Malachite;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 2;
			enemy3Preset.Value = EnemyPreset.ImpOverlord;
			enemy3EliteType.Value = EliteType.Overloading;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 3;
			directorCreditsBase.Value = 20;
			directorCreditsMultiplier.Value = 10;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Boss Rush template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_VoidInfection()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Void Infection template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 75f;
			itemLossPercent.Value = 20f;
			itemTierPriority.Value = ItemTierPriority.FavorVoid;
			enemy1Preset.Value = EnemyPreset.VoidInfestor;
			enemy1EliteType.Value = EliteType.Glacial;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 3;
			enemy2Preset.Value = EnemyPreset.VoidInfestor;
			enemy2EliteType.Value = EliteType.Earth;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 3;
			enemy3Preset.Value = EnemyPreset.VoidInfestor;
			enemy3EliteType.Value = EliteType.Celestine;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 3;
			directorCreditsBase.Value = 15;
			directorCreditsMultiplier.Value = 10;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Void Infection template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_OopsAllFalseSons()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Oops! All False Sons template");
			healthThresholdPercent.Value = 15f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 30f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 15f;
			invulnerabilitySeconds.Value = 5f;
			enemy1Preset.Value = EnemyPreset.FalseSon;
			enemy1EliteType.Value = EliteType.Blazing;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 2;
			enemy2Preset.Value = EnemyPreset.FalseSon;
			enemy2EliteType.Value = EliteType.Malachite;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.FalseSon;
			enemy3EliteType.Value = EliteType.Overloading;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 2;
			directorCreditsBase.Value = 0;
			directorCreditsMultiplier.Value = 0;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Oops! All False Sons template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_GenerousSecondChance()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Close Call template");
			healthThresholdPercent.Value = 5f;
			enableHealing.Value = true;
			healToPercent.Value = 88f;
			itemLossPercent.Value = 20f;
			itemTierPriority.Value = ItemTierPriority.FavorGreen;
			cooldownSeconds.Value = 20f;
			invulnerabilitySeconds.Value = 10f;
			enemy1Preset.Value = EnemyPreset.Lemurian;
			enemy1EliteType.Value = EliteType.None;
			enemy1BaseCount.Value = 10;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 1;
			enemy2Preset.Value = EnemyPreset.Lemurian;
			enemy2EliteType.Value = EliteType.None;
			enemy2BaseCount.Value = 0;
			enemy2ScaleWithUses.Value = false;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.Lemurian;
			enemy3EliteType.Value = EliteType.None;
			enemy3BaseCount.Value = 0;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 10;
			directorCreditsMultiplier.Value = 10;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Close Call template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_MistakeAvalanche()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Mistake Avalanche template");
			healthThresholdPercent.Value = 50f;
			enableHealing.Value = true;
			healToPercent.Value = 50f;
			itemLossPercent.Value = 50f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 3f;
			invulnerabilitySeconds.Value = 4f;
			enemy1Preset.Value = EnemyPreset.Direseeker;
			enemy1EliteType.Value = EliteType.Blazing;
			enemy1BaseCount.Value = 3;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 2;
			enemy2Preset.Value = EnemyPreset.StoneTitan;
			enemy2EliteType.Value = EliteType.Malachite;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = false;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.BeetleQueen;
			enemy3EliteType.Value = EliteType.Overloading;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 1;
			directorCreditsMultiplier.Value = 1;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Mistake Avalanche template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_SafetyNotGuaranteed()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Safety Not Guaranteed template");
			healthThresholdPercent.Value = 10f;
			enableHealing.Value = true;
			healToPercent.Value = 50f;
			itemLossPercent.Value = 25f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 10f;
			invulnerabilitySeconds.Value = 3f;
			enemy1Preset.Value = EnemyPreset.BeetleGuard;
			enemy1EliteType.Value = EliteType.Malachite;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = false;
			enemy1ScalingMultiplier.Value = 0;
			enemy2Preset.Value = EnemyPreset.VoidJailer;
			enemy2EliteType.Value = EliteType.None;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 1;
			enemy3Preset.Value = EnemyPreset.ClayDunestrider;
			enemy3EliteType.Value = EliteType.None;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 30;
			directorCreditsMultiplier.Value = 20;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Safety Not Guaranteed template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_DrizzleDemandsPerfection()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Drizzle Demands Perfection template");
			healthThresholdPercent.Value = 99f;
			enableHealing.Value = true;
			healToPercent.Value = 25f;
			itemLossPercent.Value = 90f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 30f;
			invulnerabilitySeconds.Value = 1f;
			enemy1Preset.Value = EnemyPreset.Lemurian;
			enemy1EliteType.Value = EliteType.Celestine;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = false;
			enemy1ScalingMultiplier.Value = 0;
			enemy2Preset.Value = EnemyPreset.Lemurian;
			enemy2EliteType.Value = EliteType.Malachite;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = false;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.Lemurian;
			enemy3EliteType.Value = EliteType.Haunted;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 100;
			directorCreditsMultiplier.Value = 50;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Drizzle Demands Perfection template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_VoidtheNoid()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Void the Noid template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 75f;
			itemLossPercent.Value = 20f;
			itemTierPriority.Value = ItemTierPriority.FavorVoid;
			cooldownSeconds.Value = 10f;
			invulnerabilitySeconds.Value = 5f;
			enemy1Preset.Value = EnemyPreset.VoidReaver;
			enemy1EliteType.Value = EliteType.Void;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 1;
			enemy2Preset.Value = EnemyPreset.VoidJailer;
			enemy2EliteType.Value = EliteType.Void;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 1;
			enemy3Preset.Value = EnemyPreset.VoidDevastator;
			enemy3EliteType.Value = EliteType.Void;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = false;
			enemy3ScalingMultiplier.Value = 0;
			directorCreditsBase.Value = 5;
			directorCreditsMultiplier.Value = 5;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Void Infection template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_FallingSkyFalling()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Falling Sky Falling template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 10f;
			itemTierPriority.Value = ItemTierPriority.FavorGreen;
			cooldownSeconds.Value = 10f;
			invulnerabilitySeconds.Value = 3f;
			enemy1Preset.Value = EnemyPreset.LesserWisp;
			enemy1EliteType.Value = EliteType.Overloading;
			enemy1BaseCount.Value = 1;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 10;
			enemy2Preset.Value = EnemyPreset.Jellyfish;
			enemy2EliteType.Value = EliteType.Glacial;
			enemy2BaseCount.Value = 1;
			enemy2ScaleWithUses.Value = false;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.BrassContraption;
			enemy3EliteType.Value = EliteType.Haunted;
			enemy3BaseCount.Value = 2;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 2;
			directorCreditsBase.Value = 10;
			directorCreditsMultiplier.Value = 50;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Falling Sky Falling template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_CockroachOnTwelve()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Someone Saw a Cockroach up on Twelve template");
			healthThresholdPercent.Value = 40f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 15f;
			itemTierPriority.Value = ItemTierPriority.FavorGreen;
			cooldownSeconds.Value = 10f;
			invulnerabilitySeconds.Value = 3f;
			enemy1Preset.Value = EnemyPreset.Beetle;
			enemy1EliteType.Value = EliteType.None;
			enemy1BaseCount.Value = 5;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 20;
			enemy2Preset.Value = EnemyPreset.Beetle;
			enemy2EliteType.Value = EliteType.Celestine;
			enemy2BaseCount.Value = 2;
			enemy2ScaleWithUses.Value = false;
			enemy2ScalingMultiplier.Value = 0;
			enemy3Preset.Value = EnemyPreset.Beetle;
			enemy3EliteType.Value = EliteType.Malachite;
			enemy3BaseCount.Value = 1;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 1;
			directorCreditsBase.Value = 0;
			directorCreditsMultiplier.Value = 0;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Someone Saw a Cockroach up on Twelve template applied! Settings will take effect on next activation.");
		}

		private void ApplyTemplate_CrashMyComputer()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Applying Just Crash My Computer, Thanks template");
			healthThresholdPercent.Value = 25f;
			enableHealing.Value = true;
			healToPercent.Value = 100f;
			itemLossPercent.Value = 50f;
			itemTierPriority.Value = ItemTierPriority.FavorRed;
			cooldownSeconds.Value = 20f;
			invulnerabilitySeconds.Value = 5f;
			enemy1Preset.Value = EnemyPreset.FalseSon;
			enemy1EliteType.Value = EliteType.Overloading;
			enemy1BaseCount.Value = 10;
			enemy1ScaleWithUses.Value = true;
			enemy1ScalingMultiplier.Value = 5;
			enemy2Preset.Value = EnemyPreset.FalseSon;
			enemy2EliteType.Value = EliteType.Celestine;
			enemy2BaseCount.Value = 10;
			enemy2ScaleWithUses.Value = true;
			enemy2ScalingMultiplier.Value = 5;
			enemy3Preset.Value = EnemyPreset.FalseSon;
			enemy3EliteType.Value = EliteType.Malachite;
			enemy3BaseCount.Value = 10;
			enemy3ScaleWithUses.Value = true;
			enemy3ScalingMultiplier.Value = 5;
			directorCreditsBase.Value = 0;
			directorCreditsMultiplier.Value = 0;
			((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] Just Crash My Computer, Thanks template applied! Your PC will never forgive you.");
		}

		private string GetEliteName(int index)
		{
			if (1 == 0)
			{
			}
			string result = index switch
			{
				66 => "Normal", 
				0 => "Blazing", 
				1 => "Overloading", 
				2 => "Glacial", 
				3 => "Malachite", 
				4 => "Celestine", 
				5 => "Void", 
				6 => "Echo", 
				7 => "Haunted", 
				8 => "Mending", 
				9 => "Aurelionite", 
				10 => "Twisted", 
				11 => "Collective", 
				_ => "Unknown", 
			};
			if (1 == 0)
			{
			}
			return result;
		}

		private string GetMasterNameFromPreset(EnemyPreset preset, string fallbackMaster)
		{
			if (1 == 0)
			{
			}
			string result = preset switch
			{
				EnemyPreset.None => "", 
				EnemyPreset.Beetle => "BeetleMaster", 
				EnemyPreset.Lemurian => "LemurianMaster", 
				EnemyPreset.Imp => "ImpMaster", 
				EnemyPreset.HermitCrab => "HermitCrabMaster", 
				EnemyPreset.BeetleGuard => "BeetleGuardMaster", 
				EnemyPreset.ElderLemurian => "LemurianBruiserMaster", 
				EnemyPreset.StoneGolem => "GolemMaster", 
				EnemyPreset.BighornBison => "BisonMaster", 
				EnemyPreset.ClayTemplar => "ClayBruiserMaster", 
				EnemyPreset.MiniMushrum => "MiniMushroomMaster", 
				EnemyPreset.Parent => "ParentMaster", 
				EnemyPreset.Gup => "GupMaster", 
				EnemyPreset.Geep => "GeepMaster", 
				EnemyPreset.Gip => "GipMaster", 
				EnemyPreset.LesserWisp => "WispMaster", 
				EnemyPreset.GreaterWisp => "GreaterWispMaster", 
				EnemyPreset.Jellyfish => "JellyfishMaster", 
				EnemyPreset.BrassContraption => "BellMaster", 
				EnemyPreset.ClayDunestrider => "ClayBossMaster", 
				EnemyPreset.BeetleQueen => "BeetleQueen2Master", 
				EnemyPreset.ImpOverlord => "ImpBossMaster", 
				EnemyPreset.StoneTitan => "TitanMaster", 
				EnemyPreset.Vagrant => "VagrantMaster", 
				EnemyPreset.MagmaWorm => "MagmaWormMaster", 
				EnemyPreset.OverloadingWorm => "ElectricWormMaster", 
				EnemyPreset.SolusControlUnit => "RoboBallBossMaster", 
				EnemyPreset.LunarGolem => "LunarGolemMaster", 
				EnemyPreset.LunarWisp => "LunarWispMaster", 
				EnemyPreset.LunarExploder => "LunarExploderMaster", 
				EnemyPreset.VoidReaver => "NullifierMaster", 
				EnemyPreset.VoidJailer => "VoidJailerMaster", 
				EnemyPreset.VoidDevastator => "VoidMegaCrabMaster", 
				EnemyPreset.VoidBarnacle => "VoidBarnacleNoCastMaster", 
				EnemyPreset.VoidInfestor => "VoidInfestorMaster", 
				EnemyPreset.Direseeker => "DireSeekerBossMaster", 
				EnemyPreset.FalseSon => "FalseSonBossMaster", 
				EnemyPreset.Custom => fallbackMaster, 
				_ => fallbackMaster, 
			};
			if (1 == 0)
			{
			}
			return result;
		}

		private void OnTakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			orig.Invoke(self, damageInfo);
			if (Object.op_Implicit((Object)(object)self.body) && self.body.isPlayerControlled && self.alive)
			{
				float num = self.health / self.fullHealth * 100f;
				if (num <= healthThresholdPercent.Value)
				{
					TryActivateLastResort(self.body, self);
				}
			}
		}

		private void TryActivateLastResort(CharacterBody body, HealthComponent health)
		{
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Expected O, but got Unknown
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_06dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ea: Expected O, but got Unknown
			if (!IsPlayerAllowed(body) || (Object.op_Implicit((Object)(object)body.inventory) && body.inventory.GetItemCountPermanent(Items.ShieldOnly) > 0))
			{
				return;
			}
			if (playerCooldowns.ContainsKey(body))
			{
				float num = Time.time - playerCooldowns[body];
				if (num < cooldownSeconds.Value)
				{
					float num2 = cooldownSeconds.Value - num;
					if (chatNotifications.Value)
					{
						Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
						{
							baseToken = $"<color=#ffaa00>⏳ {body.GetUserName()} needs {num2:F0}s cooldown...</color>"
						});
					}
					return;
				}
			}
			if (!playerTriggerCount.ContainsKey(body))
			{
				playerTriggerCount[body] = 0;
			}
			playerTriggerCount[body]++;
			int num3 = playerTriggerCount[body];
			if (logVerbosity.Value == LogVerbosity.Verbose)
			{
				((BaseUnityPlugin)this).Logger.LogWarning((object)$"[Last Resort] ✅ ACTIVATING for {body.GetUserName()} (Use #{num3})!");
			}
			if (invulnerabilitySeconds.Value > 0f)
			{
				body.AddTimedBuff(Buffs.Immune, invulnerabilitySeconds.Value);
			}
			if (enableHealing.Value)
			{
				float num4 = health.fullHealth * (healToPercent.Value / 100f);
				float num5 = num4 - health.health;
				if (num5 > 0f)
				{
					health.Heal(num5, default(ProcChainMask), true);
				}
			}
			string text = "lost nothing";
			if (Object.op_Implicit((Object)(object)body.inventory) && itemLossPercent.Value > 0f)
			{
				text = RemoveRandomItems(body.inventory);
			}
			int num6 = 0;
			List<string> list = new List<string>();
			string masterNameFromPreset = GetMasterNameFromPreset(enemy1Preset.Value, enemy1Master.Value);
			string masterNameFromPreset2 = GetMasterNameFromPreset(enemy2Preset.Value, enemy2Master.Value);
			string masterNameFromPreset3 = GetMasterNameFromPreset(enemy3Preset.Value, enemy3Master.Value);
			int num7 = SpawnEnemySlot(body, masterNameFromPreset, (int)enemy1EliteType.Value, enemy1BaseCount.Value, enemy1ScaleWithUses.Value, enemy1ScalingMultiplier.Value, num3);
			num6 += num7;
			if (num7 > 0 && chatShowEnemyDetails.Value)
			{
				string arg = ((enemy1EliteType.Value != EliteType.None) ? (GetEliteName((int)enemy1EliteType.Value) + " ") : "");
				list.Add($"{num7} {arg}{enemy1Preset.Value}");
			}
			int num8 = SpawnEnemySlot(body, masterNameFromPreset2, (int)enemy2EliteType.Value, enemy2BaseCount.Value, enemy2ScaleWithUses.Value, enemy2ScalingMultiplier.Value, num3);
			num6 += num8;
			if (num8 > 0 && chatShowEnemyDetails.Value)
			{
				string arg2 = ((enemy2EliteType.Value != EliteType.None) ? (GetEliteName((int)enemy2EliteType.Value) + " ") : "");
				list.Add($"{num8} {arg2}{enemy2Preset.Value}");
			}
			int num9 = SpawnEnemySlot(body, masterNameFromPreset3, (int)enemy3EliteType.Value, enemy3BaseCount.Value, enemy3ScaleWithUses.Value, enemy3ScalingMultiplier.Value, num3);
			num6 += num9;
			if (num9 > 0 && chatShowEnemyDetails.Value)
			{
				string arg3 = ((enemy3EliteType.Value != EliteType.None) ? (GetEliteName((int)enemy3EliteType.Value) + " ") : "");
				list.Add($"{num9} {arg3}{enemy3Preset.Value}");
			}
			int num10 = directorCreditsBase.Value + num3 * directorCreditsMultiplier.Value;
			if (CombatDirector.instancesList.Count > 0)
			{
				foreach (CombatDirector instances in CombatDirector.instancesList)
				{
					if (Object.op_Implicit((Object)(object)instances) && ((Behaviour)instances).enabled)
					{
						instances.monsterCredit += (float)num10;
					}
				}
			}
			playerCooldowns[body] = Time.time;
			if (logVerbosity.Value == LogVerbosity.Verbose)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Credits Added: {num10}");
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Total Enemies: {num6}");
				((BaseUnityPlugin)this).Logger.LogInfo((object)"[Last Resort] ✅ Activation complete!");
			}
			if (chatNotifications.Value)
			{
				List<string> list2 = new List<string>();
				list2.Add($"<color=#ff6b6b>⚠ {body.GetUserName()}'s LAST RESORT #{num3}!");
				if (itemLossPercent.Value > 0f && text != "lost nothing" && text != "they had nothing to lose")
				{
					list2.Add(text);
				}
				if (chatShowEnemyDetails.Value && list.Count > 0)
				{
					list2.Add(string.Join(", ", list));
				}
				else if (chatShowTotalEnemies.Value && num6 > 0)
				{
					list2.Add($"{num6} enemies");
				}
				if (chatShowCredits.Value && num10 > 0)
				{
					list2.Add($"+{num10} credits");
				}
				string baseToken = string.Join(", ", list2) + "!</color>";
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = baseToken
				});
			}
		}

		private bool IsPlayerAllowed(CharacterBody body)
		{
			string playerName = body.GetUserName();
			if (!string.IsNullOrEmpty(disabledPlayerNames.Value))
			{
				string[] source = (from n in disabledPlayerNames.Value.Split(',')
					select n.Trim() into n
					where !string.IsNullOrEmpty(n)
					select n).ToArray();
				if (source.Any((string name) => playerName.Equals(name, StringComparison.OrdinalIgnoreCase)))
				{
					if (logVerbosity.Value == LogVerbosity.Verbose)
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("[Last Resort] " + playerName + " is in disabled list, skipping"));
					}
					return false;
				}
			}
			if (enableForAllPlayers.Value)
			{
				return true;
			}
			if (!string.IsNullOrEmpty(enabledPlayerNames.Value))
			{
				string[] source2 = (from n in enabledPlayerNames.Value.Split(',')
					select n.Trim() into n
					where !string.IsNullOrEmpty(n)
					select n).ToArray();
				if (source2.Any((string name) => playerName.Equals(name, StringComparison.OrdinalIgnoreCase)))
				{
					if (logVerbosity.Value == LogVerbosity.Verbose)
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("[Last Resort] " + playerName + " is in enabled list"));
					}
					return true;
				}
				if (logVerbosity.Value == LogVerbosity.Verbose)
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("[Last Resort] " + playerName + " is not in enabled list, skipping"));
				}
				return false;
			}
			return false;
		}

		private int SpawnEnemySlot(CharacterBody playerBody, string masterName, int eliteIndex, int baseCount, bool scaleWithUses, int scalingMultiplier, int useCount)
		{
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: 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_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: 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_00df: 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_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			if (baseCount <= 0 || string.IsNullOrEmpty(masterName))
			{
				return 0;
			}
			int num = (scaleWithUses ? (baseCount + (useCount - 1) * scalingMultiplier) : baseCount);
			GameObject val = MasterCatalog.FindMasterPrefab(masterName);
			if ((Object)(object)val == (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("[Last Resort] Could not find master prefab: " + masterName));
				return 0;
			}
			EliteDef eliteDef = GetEliteDef(eliteIndex);
			int num2 = 0;
			for (int i = 0; i < num; i++)
			{
				Vector3 onUnitSphere = Random.onUnitSphere;
				onUnitSphere.y = Mathf.Abs(onUnitSphere.y) * 0.6f;
				((Vector3)(ref onUnitSphere)).Normalize();
				float num3 = Random.Range(70f, 80f);
				Vector3 val2 = ((Component)playerBody).transform.position + onUnitSphere * num3;
				val2.y += 5f;
				GameObject val3 = Object.Instantiate<GameObject>(val, val2, Quaternion.identity);
				CharacterMaster component = val3.GetComponent<CharacterMaster>();
				if (Object.op_Implicit((Object)(object)component))
				{
					component.teamIndex = (TeamIndex)2;
					if ((Object)(object)eliteDef != (Object)null && Object.op_Implicit((Object)(object)component.inventory))
					{
						component.inventory.SetEquipmentIndex(eliteDef.eliteEquipmentDef.equipmentIndex, false);
						component.inventory.GiveItemPermanent(Items.BoostHp, Mathf.RoundToInt((eliteDef.healthBoostCoefficient - 1f) * 10f));
						component.inventory.GiveItemPermanent(Items.BoostDamage, Mathf.RoundToInt((eliteDef.damageBoostCoefficient - 1f) * 10f));
					}
					NetworkServer.Spawn(val3);
					CharacterBody val4 = component.SpawnBody(val2, Quaternion.identity);
					if (Object.op_Implicit((Object)(object)val4) && (Object)(object)eliteDef != (Object)null)
					{
						val4.AddTimedBuff(eliteDef.eliteEquipmentDef.passiveBuffDef, float.PositiveInfinity);
					}
					num2++;
				}
				else
				{
					Object.Destroy((Object)(object)val3);
				}
			}
			if (num2 > 0 && logVerbosity.Value == LogVerbosity.Verbose)
			{
				string eliteName = GetEliteName(eliteIndex);
				string arg = ((eliteIndex >= 0) ? (eliteName + " ") : "");
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"[Last Resort] Spawned {num2} {arg}{masterName}(s)");
			}
			return num2;
		}

		private EliteDef GetEliteDef(int eliteIndex)
		{
			if (1 == 0)
			{
			}
			EliteDef result = (EliteDef)(eliteIndex switch
			{
				0 => Elites.Fire, 
				1 => Elites.Lightning, 
				2 => Elites.Ice, 
				3 => Elites.Poison, 
				4 => Elites.Lunar, 
				5 => Elites.Void, 
				6 => Elites.Echo, 
				7 => Elites.Haunted, 
				8 => Elites.Earth, 
				9 => Elites.Aurelionite, 
				10 => Elites.Bead, 
				11 => Elites.Collective, 
				_ => null, 
			});
			if (1 == 0)
			{
			}
			return result;
		}

		private string RemoveRandomItems(Inventory inventory)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: 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_00ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: 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_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0113: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_019c: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Invalid comparison between Unknown and I4
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Invalid comparison between Unknown and I4
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Invalid comparison between Unknown and I4
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0188: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Invalid comparison between Unknown and I4
			//IL_0295: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			List<ItemIndex> list = new List<ItemIndex>();
			GenericStaticEnumerable<ItemIndex, AllItemsEnumerator> allItems = ItemCatalog.allItems;
			AllItemsEnumerator enumerator = allItems.GetEnumerator();
			try
			{
				while (((AllItemsEnumerator)(ref enumerator)).MoveNext())
				{
					ItemIndex current = ((AllItemsEnumerator)(ref enumerator)).Current;
					int itemCountPermanent = inventory.GetItemCountPermanent(current);
					for (int i = 0; i < itemCountPermanent; i++)
					{
						list.Add(current);
					}
				}
			}
			finally
			{
				((IDisposable)(AllItemsEnumerator)(ref enumerator)).Dispose();
			}
			if (list.Count == 0)
			{
				return "they had nothing to lose";
			}
			int num = Mathf.Max(1, Mathf.CeilToInt((float)list.Count * (itemLossPercent.Value / 100f)));
			List<ItemIndex> list2 = new List<ItemIndex>();
			List<ItemIndex> list3 = new List<ItemIndex>();
			ItemTierPriority value = itemTierPriority.Value;
			if (1 == 0)
			{
			}
			ItemTier val = (ItemTier)(value switch
			{
				ItemTierPriority.FavorWhite => 0, 
				ItemTierPriority.FavorGreen => 1, 
				ItemTierPriority.FavorRed => 2, 
				ItemTierPriority.FavorBoss => 4, 
				ItemTierPriority.FavorLunar => 3, 
				ItemTierPriority.FavorVoid => 6, 
				_ => 5, 
			});
			if (1 == 0)
			{
			}
			ItemTier val2 = val;
			if (itemTierPriority.Value != 0)
			{
				foreach (ItemIndex item in list)
				{
					ItemDef itemDef = ItemCatalog.GetItemDef(item);
					bool flag = false;
					if ((itemTierPriority.Value != ItemTierPriority.FavorVoid) ? (itemDef.tier == val2) : ((int)itemDef.tier == 6 || (int)itemDef.tier == 7 || (int)itemDef.tier == 8 || (int)itemDef.tier == 9))
					{
						list2.Add(item);
					}
					else
					{
						list3.Add(item);
					}
				}
			}
			else
			{
				list3 = list;
			}
			List<string> list4 = new List<string>();
			for (int j = 0; j < num; j++)
			{
				ItemIndex val3;
				if (list2.Count > 0 && Random.value < 0.7f)
				{
					int index = Random.Range(0, list2.Count);
					val3 = list2[index];
					list2.RemoveAt(index);
				}
				else if (list3.Count > 0)
				{
					int index2 = Random.Range(0, list3.Count);
					val3 = list3[index2];
					list3.RemoveAt(index2);
				}
				else
				{
					if (list2.Count <= 0)
					{
						break;
					}
					int index3 = Random.Range(0, list2.Count);
					val3 = list2[index3];
					list2.RemoveAt(index3);
				}
				inventory.RemoveItemPermanent(val3, 1);
				ItemDef itemDef2 = ItemCatalog.GetItemDef(val3);
				string text = Language.GetString(itemDef2.nameToken);
				if (string.IsNullOrEmpty(text) || text.Contains("_NAME"))
				{
					text = ((Object)itemDef2).name.Replace("Item", "");
				}
				list4.Add(text);
			}
			if (list4.Count == 1)
			{
				return "lost " + list4[0];
			}
			if (list4.Count == 2)
			{
				return "lost " + list4[0] + " and " + list4[1];
			}
			return $"lost {list4.Count} items";
		}
	}
}