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