using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
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.Configuration;
using BepInEx.Logging;
using EntityStates;
using EntityStates.ScavBackpack;
using Microsoft.CodeAnalysis;
using On.EntityStates.ScavBackpack;
using On.RoR2;
using On.RoR2.Artifacts;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("RegenChests")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+25763c68cb918e2f703c27d90830e2ad7eeab733")]
[assembly: AssemblyProduct("RegenChests")]
[assembly: AssemblyTitle("RegenChests")]
[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 RegenChests
{
public class Disposable : IDisposable
{
private readonly Action _dispose;
public static Disposable Empty { get; } = new Disposable(delegate
{
});
public Disposable(Action dispose)
{
_dispose = dispose;
}
public void Dispose()
{
_dispose();
}
}
public class CompositeDisposable : IDisposable
{
private readonly List<IDisposable> _disposables;
public CompositeDisposable()
{
_disposables = new List<IDisposable>();
}
public void Add(IDisposable disposable)
{
_disposables.Add(disposable);
}
public void AddRange(IEnumerable<IDisposable> disposables)
{
_disposables.AddRange(disposables);
}
public void Dispose()
{
foreach (IDisposable disposable in _disposables)
{
disposable.Dispose();
}
}
}
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Lawlzee.RegenChests", "Regen Chests", "1.0.0")]
public class RegenChestsPlugin : BaseUnityPlugin
{
public const string PluginGUID = "Lawlzee.RegenChests";
public const string PluginAuthor = "Lawlzee";
public const string PluginName = "Regen Chests";
public const string PluginVersion = "1.0.0";
public static ConfigEntry<bool> ModEnabled;
public static ConfigEntry<bool> ReplaceChestDropTable;
public static ConfigEntry<bool> ReplaceMultiShopDropTable;
public static ConfigEntry<bool> ReplaceAdaptiveChestDropTable;
public static ConfigEntry<bool> ReplaceChanceShrineDropTable;
public static ConfigEntry<bool> ReplaceLegendaryChestDropTable;
public static ConfigEntry<bool> ReplaceVoidPotentialDropTable;
public static ConfigEntry<bool> ReplaceVoidCradleDropTable;
public static ConfigEntry<bool> ReplaceLunarPodDropTable;
public static ConfigEntry<bool> ReplaceLunarBudsDropTable;
public static ConfigEntry<float> WhitePrinterSpawnMultiplier;
public static ConfigEntry<float> GreenPrinterSpawnMultiplier;
public static ConfigEntry<float> RedPrinterSpawnMultiplier;
public static ConfigEntry<float> YellowPrinterSpawnMultiplier;
public static ConfigEntry<bool> ReplaceLockboxDropTable;
public static ConfigEntry<bool> ReplaceCrashedMultishopDropTable;
public static ConfigEntry<bool> ReplaceBossHunterDropTable;
public static ConfigEntry<float> SpeedItemSpawnMultiplier;
public static ConfigEntry<bool> ReplaceBossDropTable;
public static ConfigEntry<bool> ReplaceAWUDropTable;
public static ConfigEntry<bool> ReplaceScavengerDropTable;
public static ConfigEntry<bool> ReplaceElderLemurianDropTable;
public static ConfigEntry<bool> ReplaceDoppelgangerDropTable;
public static ConfigEntry<bool> ReplaceSacrificeArtifactDropTable;
public static ConfigEntry<bool> ReplaceSimulacrumOrbDropTable;
public static ConfigEntry<bool> ReplaceVoidFieldsOrbDropTable;
public void Awake()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Expected O, but got Unknown
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Expected O, but got Unknown
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: 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_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Expected O, but got Unknown
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Expected O, but got Unknown
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Expected O, but got Unknown
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Expected O, but got Unknown
//IL_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Expected O, but got Unknown
//IL_0485: Unknown result type (might be due to invalid IL or missing references)
//IL_048f: Expected O, but got Unknown
//IL_0494: Unknown result type (might be due to invalid IL or missing references)
//IL_049e: Expected O, but got Unknown
//IL_04a3: Unknown result type (might be due to invalid IL or missing references)
//IL_04ad: Expected O, but got Unknown
//IL_04b2: Unknown result type (might be due to invalid IL or missing references)
//IL_04bc: Expected O, but got Unknown
//IL_04c1: Unknown result type (might be due to invalid IL or missing references)
//IL_04cb: Expected O, but got Unknown
//IL_04d0: Unknown result type (might be due to invalid IL or missing references)
//IL_04da: Expected O, but got Unknown
//IL_04df: Unknown result type (might be due to invalid IL or missing references)
//IL_04e9: Expected O, but got Unknown
//IL_04ee: Unknown result type (might be due to invalid IL or missing references)
//IL_04f8: Expected O, but got Unknown
//IL_04fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0507: Expected O, but got Unknown
//IL_050c: Unknown result type (might be due to invalid IL or missing references)
//IL_0516: Expected O, but got Unknown
//IL_051b: Unknown result type (might be due to invalid IL or missing references)
//IL_0520: Unknown result type (might be due to invalid IL or missing references)
//IL_052b: Unknown result type (might be due to invalid IL or missing references)
//IL_0536: Unknown result type (might be due to invalid IL or missing references)
//IL_0541: Unknown result type (might be due to invalid IL or missing references)
//IL_0551: Expected O, but got Unknown
//IL_054c: Unknown result type (might be due to invalid IL or missing references)
//IL_0556: Expected O, but got Unknown
//IL_055b: Unknown result type (might be due to invalid IL or missing references)
//IL_0560: Unknown result type (might be due to invalid IL or missing references)
//IL_056b: Unknown result type (might be due to invalid IL or missing references)
//IL_0576: Unknown result type (might be due to invalid IL or missing references)
//IL_0581: Unknown result type (might be due to invalid IL or missing references)
//IL_0591: Expected O, but got Unknown
//IL_058c: Unknown result type (might be due to invalid IL or missing references)
//IL_0596: Expected O, but got Unknown
//IL_059b: Unknown result type (might be due to invalid IL or missing references)
//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
//IL_05ab: Unknown result type (might be due to invalid IL or missing references)
//IL_05b6: Unknown result type (might be due to invalid IL or missing references)
//IL_05c1: Unknown result type (might be due to invalid IL or missing references)
//IL_05d1: Expected O, but got Unknown
//IL_05cc: Unknown result type (might be due to invalid IL or missing references)
//IL_05d6: Expected O, but got Unknown
//IL_05db: Unknown result type (might be due to invalid IL or missing references)
//IL_05e0: Unknown result type (might be due to invalid IL or missing references)
//IL_05eb: Unknown result type (might be due to invalid IL or missing references)
//IL_05f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0601: Unknown result type (might be due to invalid IL or missing references)
//IL_0611: Expected O, but got Unknown
//IL_060c: Unknown result type (might be due to invalid IL or missing references)
//IL_0616: Expected O, but got Unknown
//IL_061b: Unknown result type (might be due to invalid IL or missing references)
//IL_0625: Expected O, but got Unknown
//IL_062a: Unknown result type (might be due to invalid IL or missing references)
//IL_0634: Expected O, but got Unknown
//IL_0639: Unknown result type (might be due to invalid IL or missing references)
//IL_0643: Expected O, but got Unknown
//IL_0648: Unknown result type (might be due to invalid IL or missing references)
//IL_064d: Unknown result type (might be due to invalid IL or missing references)
//IL_0658: Unknown result type (might be due to invalid IL or missing references)
//IL_0663: Unknown result type (might be due to invalid IL or missing references)
//IL_066e: Unknown result type (might be due to invalid IL or missing references)
//IL_067e: Expected O, but got Unknown
//IL_0679: Unknown result type (might be due to invalid IL or missing references)
//IL_0683: Expected O, but got Unknown
//IL_0688: Unknown result type (might be due to invalid IL or missing references)
//IL_0692: Expected O, but got Unknown
//IL_0697: Unknown result type (might be due to invalid IL or missing references)
//IL_06a1: Expected O, but got Unknown
//IL_06a6: Unknown result type (might be due to invalid IL or missing references)
//IL_06b0: Expected O, but got Unknown
//IL_06b5: Unknown result type (might be due to invalid IL or missing references)
//IL_06bf: Expected O, but got Unknown
//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
//IL_06ce: Expected O, but got Unknown
//IL_06d3: Unknown result type (might be due to invalid IL or missing references)
//IL_06dd: Expected O, but got Unknown
//IL_06e2: Unknown result type (might be due to invalid IL or missing references)
//IL_06ec: Expected O, but got Unknown
//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
//IL_06fb: Expected O, but got Unknown
Log.Init(((BaseUnityPlugin)this).Logger);
ChestBehavior.Roll += new hook_Roll(ChestBehavior_Roll);
ShopTerminalBehavior.GenerateNewPickupServer_bool += new hook_GenerateNewPickupServer_bool(ShopTerminalBehavior_GenerateNewPickupServer_bool);
RouletteChestController.GenerateEntriesServer += new hook_GenerateEntriesServer(RouletteChestController_GenerateEntriesServer);
ShrineChanceBehavior.AddShrineStack += new hook_AddShrineStack(ShrineChanceBehavior_AddShrineStack);
FreeChestDropTable.GenerateDropPreReplacement += new hook_GenerateDropPreReplacement(FreeChestDropTable_GenerateDropPreReplacement);
OptionChestBehavior.Roll += new hook_Roll(OptionChestBehavior_Roll);
SceneDirector.GenerateInteractableCardSelection += new hook_GenerateInteractableCardSelection(SceneDirector_GenerateInteractableCardSelection);
EquipmentSlot.FireBossHunter += new hook_FireBossHunter(EquipmentSlot_FireBossHunter);
BossGroup.DropRewards += new hook_DropRewards(BossGroup_DropRewards);
Opening.FixedUpdate += new hook_FixedUpdate(Opening_FixedUpdate);
MasterDropDroplet.DropItems += new hook_DropItems(MasterDropDroplet_DropItems);
ChestBehavior.RollItem += new hook_RollItem(ChestBehavior_RollItem);
DoppelgangerDropTable.GenerateDropPreReplacement += new hook_GenerateDropPreReplacement(DoppelgangerDropTable_GenerateDropPreReplacement);
SacrificeArtifactManager.OnServerCharacterDeath += new hook_OnServerCharacterDeath(SacrificeArtifactManager_OnServerCharacterDeath);
InfiniteTowerWaveController.DropRewards += new hook_DropRewards(InfiniteTowerWaveController_DropRewards);
ArenaMonsterItemDropTable.GenerateUniqueDropsPreReplacement += new hook_GenerateUniqueDropsPreReplacement(ArenaMonsterItemDropTable_GenerateUniqueDropsPreReplacement);
ArenaMissionController.EndRound += new hook_EndRound(ArenaMissionController_EndRound);
ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Configuration", "Mod enabled", true, "Mod enabled");
ReplaceChestDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Chest", true, "Chests will drop Regenerating Scrap instead of items");
ReplaceMultiShopDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Multishop Terminal", true, "Multishop Terminals will drop Regenerating Scrap instead of items");
ReplaceAdaptiveChestDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Adaptive Chest", true, "Adaptive Chests will drop Regenerating Scrap instead of items");
ReplaceChanceShrineDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Shrine of Chance", true, "Shrine of Chance will drop Regenerating Scrap instead of items");
ReplaceLegendaryChestDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Legendary Chest", true, "Legendary Chests will drop Regenerating Scrap instead of items");
ReplaceVoidPotentialDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Void Potential", true, "Void Potential will drop Regenerating Scrap instead of items");
ReplaceVoidCradleDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Void Cradle", true, "Void Cradle will drop Regenerating Scrap instead of items");
ReplaceLunarPodDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Lunar Pod", false, "Lunar Pods will drop Regenerating Scrap instead of items");
ReplaceLunarBudsDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Chests", "Lunar Bud", false, "Lunar Buds in the Bazaar Between Time will always sell Regenerating Scrap");
WhitePrinterSpawnMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Printers", "White printer spawn multiplier", 0f, "Controls the spawn rate of white printers. 0.0x = never. 1.0x = default spawn rate. 2.0x = 2 times more likely to spawn printers.");
GreenPrinterSpawnMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Printers", "Green printer spawn multiplier", 10f, "Controls the spawn rate of green printers. 0.0x = never. 1.0x = default spawn rate. 2.0x = 2 times more likely to spawn printers.");
RedPrinterSpawnMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Printers", "Red printer spawn multiplier", 0f, "Controls the spawn rate of ref printers. 0.0x = never. 1.0x = default spawn rate. 2.0x = 2 times more likely to spawn printers.");
YellowPrinterSpawnMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Printers", "Yellow printer spawn multiplier", 0f, "Controls the spawn rate of yellow printers. 0.0x = never. 1.0x = default spawn rate. 2.0x = 2 times more likely to spawn printers.");
ReplaceLockboxDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Items", "Rusted Key", false, "Lockboxes will drop Regenerating Scrap instead of items");
ReplaceCrashedMultishopDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Items", "Crashed Multishop", false, "Crashed Multishop will drop Regenerating Scrap instead of items");
ReplaceBossHunterDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Items", "Trophy Hunters Tricorn", false, "Trophy Hunter's Tricorn will drop Regenerating Scrap instead of items");
SpeedItemSpawnMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Items", "Speed items spawn multiplier", 1f, "Controls the spawn rate of speed items. 0.0x = never. 1.0x = default spawn rate. 2.0x = 2 times more likely to spawn speed items.");
ReplaceBossDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobs", "Boss", true, "Defeating a Boss will drop Regenerating Scrap instead of items");
ReplaceAWUDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobs", "Alloy Worship Unit", true, "Alloy Worship Unit will drop Regenerating Scrap instead of items");
ReplaceScavengerDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobs", "Scavenger", true, "Scavenger will drop Regenerating Scrap instead of items");
ReplaceElderLemurianDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Mobs", "Elite Elder Lemurian", true, "The Elite Elder Lemurian in the hidden chamber of Abandoned Aqueduct will drop Regenerating Scrap instead of bands");
ReplaceDoppelgangerDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Artifacts", "Relentless Doppelganger", false, "The Relentless Doppelganger from the Artifact of Vengeance will drop Regenerating Scrap instead of items");
ReplaceSacrificeArtifactDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Artifacts", "Artifact of Sacrifice", true, "When using the Artifact of Sacrifice, mobs will drop Regenerating Scrap instead of items");
ReplaceSimulacrumOrbDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Waves", "Simulacrum", true, "The orb reward after each wave of Simulacrum will drop Regenerating Scrap instead of items");
ReplaceVoidFieldsOrbDropTable = ((BaseUnityPlugin)this).Config.Bind<bool>("Waves", "Void Fields", true, "The orb reward after each wave of the Void Fields will drop Regenerating Scrap instead of items");
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ModEnabled));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceChestDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceMultiShopDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceAdaptiveChestDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceChanceShrineDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceLegendaryChestDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceVoidPotentialDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceVoidCradleDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceLunarPodDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceLunarBudsDropTable));
ModSettingsManager.AddOption((BaseOption)new StepSliderOption(WhitePrinterSpawnMultiplier, new StepSliderConfig
{
min = 0f,
max = 50f,
increment = 0.05f,
formatString = "{0:0.##}x"
}));
ModSettingsManager.AddOption((BaseOption)new StepSliderOption(GreenPrinterSpawnMultiplier, new StepSliderConfig
{
min = 0f,
max = 50f,
increment = 0.05f,
formatString = "{0:0.##}x"
}));
ModSettingsManager.AddOption((BaseOption)new StepSliderOption(RedPrinterSpawnMultiplier, new StepSliderConfig
{
min = 0f,
max = 50f,
increment = 0.05f,
formatString = "{0:0.##}x"
}));
ModSettingsManager.AddOption((BaseOption)new StepSliderOption(YellowPrinterSpawnMultiplier, new StepSliderConfig
{
min = 0f,
max = 50f,
increment = 0.05f,
formatString = "{0:0.##}x"
}));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceLockboxDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceCrashedMultishopDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceBossHunterDropTable));
ModSettingsManager.AddOption((BaseOption)new StepSliderOption(SpeedItemSpawnMultiplier, new StepSliderConfig
{
min = 0f,
max = 5f,
increment = 0.05f,
formatString = "{0:0.##}x"
}));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceBossDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceAWUDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceScavengerDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceElderLemurianDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceDoppelgangerDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceSacrificeArtifactDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceSimulacrumOrbDropTable));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ReplaceVoidFieldsOrbDropTable));
ModSettingsManager.SetModIcon(LoadIconSprite());
Sprite LoadIconSprite()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
Texture2D val = new Texture2D(2, 2);
ImageConversion.LoadImage(val, File.ReadAllBytes(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "icon.png")));
return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0f, 0f));
}
}
private void ChestBehavior_Roll(orig_Roll orig, ChestBehavior self)
{
if (ModEnabled.Value && Object.op_Implicit((Object)(object)self.dropTable))
{
if (((Object)self.dropTable).name == "dtGoldChest")
{
if (ReplaceLegendaryChestDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ChestBehavior_Roll"))
{
orig.Invoke(self);
return;
}
}
}
else if (((Object)self.dropTable).name == "dtLockbox")
{
if (ReplaceLockboxDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ChestBehavior_Roll"))
{
orig.Invoke(self);
return;
}
}
}
else if (((Object)self.dropTable).name == "dtLunarChest")
{
if (ReplaceLunarPodDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ChestBehavior_Roll"))
{
orig.Invoke(self);
return;
}
}
}
else if (ReplaceChestDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ChestBehavior_Roll"))
{
orig.Invoke(self);
return;
}
}
}
orig.Invoke(self);
}
private void ShopTerminalBehavior_GenerateNewPickupServer_bool(orig_GenerateNewPickupServer_bool orig, ShopTerminalBehavior self, bool newHidden)
{
if (ModEnabled.Value)
{
if ((Object)(object)self.serverMultiShopController == (Object)null)
{
if (ReplaceLunarBudsDropTable.Value && ((Object)self.dropTable).name == "dtLunarChest")
{
using (ReplaceDropTable(self.dropTable, "ShopTerminalBehavior_GenerateNewPickupServer_bool"))
{
orig.Invoke(self, newHidden);
return;
}
}
}
else if (ReplaceMultiShopDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ShopTerminalBehavior_GenerateNewPickupServer_bool"))
{
orig.Invoke(self, newHidden);
return;
}
}
}
orig.Invoke(self, newHidden);
}
private void RouletteChestController_GenerateEntriesServer(orig_GenerateEntriesServer orig, RouletteChestController self, FixedTimeStamp startTime)
{
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
if (ModEnabled.Value && ReplaceAdaptiveChestDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "RouletteChestController_GenerateEntriesServer"))
{
orig.Invoke(self, startTime);
return;
}
}
orig.Invoke(self, startTime);
}
private void ShrineChanceBehavior_AddShrineStack(orig_AddShrineStack orig, ShrineChanceBehavior self, Interactor activator)
{
if (ModEnabled.Value && ReplaceChanceShrineDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "ShrineChanceBehavior_AddShrineStack"))
{
orig.Invoke(self, activator);
return;
}
}
orig.Invoke(self, activator);
}
private void BossGroup_DropRewards(orig_DropRewards orig, BossGroup self)
{
if (ModEnabled.Value)
{
if (self.bossDropChance == 0f && ((Object)self.dropTable).name == "dtTier3Item" && self.bossDropTables.Count == 1 && ((Object)self.bossDropTables[0]).name == "dtBossRoboBallBoss")
{
if (ReplaceAWUDropTable.Value)
{
Replace();
return;
}
}
else if (ReplaceBossDropTable.Value)
{
Replace();
return;
}
}
orig.Invoke(self);
void Replace()
{
using CompositeDisposable compositeDisposable = new CompositeDisposable();
if (Object.op_Implicit((Object)(object)self.dropTable))
{
compositeDisposable.Add(ReplaceDropTable(self.dropTable, "BossGroup_DropRewards"));
}
else
{
Log.Info("dropTable is " + (((object)self.dropTable)?.GetType().Name ?? "null"));
}
foreach (PickupDropTable item in self.bossDropTables.Distinct())
{
compositeDisposable.Add(ReplaceDropTable(item, "BossGroup_DropRewards"));
}
orig.Invoke(self);
}
}
private bool EquipmentSlot_FireBossHunter(orig_FireBossHunter orig, EquipmentSlot self)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
if (ModEnabled.Value && ReplaceBossHunterDropTable.Value)
{
self.UpdateTargets(Equipment.BossHunter.equipmentIndex, true);
HurtBox hurtBox = self.currentTarget.hurtBox;
object obj;
if (hurtBox == null)
{
obj = null;
}
else
{
HealthComponent healthComponent = hurtBox.healthComponent;
if (healthComponent == null)
{
obj = null;
}
else
{
CharacterBody body = healthComponent.body;
if (body == null)
{
obj = null;
}
else
{
GameObject gameObject = ((Component)body).gameObject;
obj = ((gameObject != null) ? gameObject.GetComponent<DeathRewards>() : null);
}
}
}
DeathRewards val = (DeathRewards)obj;
if (!Object.op_Implicit((Object)(object)hurtBox) || !Object.op_Implicit((Object)(object)val))
{
return false;
}
using (ReplaceDropTable(val.bossDropTable, "EquipmentSlot_FireBossHunter"))
{
return orig.Invoke(self);
}
}
return orig.Invoke(self);
}
private void Opening_FixedUpdate(orig_FixedUpdate orig, Opening self)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Expected O, but got Unknown
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
if (ModEnabled.Value && ReplaceScavengerDropTable.Value)
{
ChestBehavior component = ((EntityState)self).GetComponent<ChestBehavior>();
BasicPickupDropTable dropTable = (BasicPickupDropTable)component.dropTable;
using (CreateSelectorCopy(dropTable.selector, delegate(WeightedSelection<PickupIndex> x)
{
dropTable.selector = x;
}))
{
dropTable.selector.Clear();
List<PickupIndex> list = new List<PickupIndex> { PickupCatalog.FindPickupIndex(MiscPickups.LunarCoin.miscPickupIndex) };
dropTable.Add(Run.instance.availableTier1DropList, component.tier1Chance / (float)Run.instance.availableTier1DropList.Count);
dropTable.Add(Run.instance.availableTier2DropList, component.tier2Chance / (float)Run.instance.availableTier2DropList.Count);
dropTable.Add(Run.instance.availableTier3DropList, component.tier3Chance / (float)Run.instance.availableTier3DropList.Count);
dropTable.Add(Run.instance.availableLunarCombinedDropList, component.lunarChance / (float)Run.instance.availableLunarCombinedDropList.Count);
dropTable.Add(list, component.lunarCoinChance);
using (ReplaceDropTable((PickupDropTable)(object)dropTable, "Opening_FixedUpdate"))
{
orig.Invoke(self);
return;
}
}
}
orig.Invoke(self);
}
private void ChestBehavior_RollItem(orig_RollItem orig, ChestBehavior self)
{
if (ModEnabled.Value && ReplaceScavengerDropTable.Value)
{
self.Roll();
}
else
{
orig.Invoke(self);
}
}
private PickupIndex FreeChestDropTable_GenerateDropPreReplacement(orig_GenerateDropPreReplacement orig, FreeChestDropTable self, Xoroshiro128Plus rng)
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: 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_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (ModEnabled.Value && ReplaceCrashedMultishopDropTable.Value)
{
orig.Invoke(self, rng);
using (ReplaceDropTable((PickupDropTable)(object)self, "FreeChestDropTable_GenerateDropPreReplacement"))
{
return PickupDropTable.GenerateDropFromWeightedSelection(rng, self.selector);
}
}
return orig.Invoke(self, rng);
}
private PickupIndex DoppelgangerDropTable_GenerateDropPreReplacement(orig_GenerateDropPreReplacement orig, DoppelgangerDropTable self, Xoroshiro128Plus rng)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
if (ModEnabled.Value && ReplaceDoppelgangerDropTable.Value)
{
using (ReplaceDropTable((PickupDropTable)(object)self, "DoppelgangerDropTable_GenerateDropPreReplacement"))
{
return orig.Invoke(self, rng);
}
}
return orig.Invoke(self, rng);
}
private void SacrificeArtifactManager_OnServerCharacterDeath(orig_OnServerCharacterDeath orig, DamageReport damageReport)
{
if (ModEnabled.Value && ReplaceSacrificeArtifactDropTable.Value)
{
using (ReplaceDropTable(SacrificeArtifactManager.dropTable, "SacrificeArtifactManager_OnServerCharacterDeath"))
{
orig.Invoke(damageReport);
return;
}
}
orig.Invoke(damageReport);
}
private void MasterDropDroplet_DropItems(orig_DropItems orig, MasterDropDroplet self)
{
if (ModEnabled.Value && ReplaceElderLemurianDropTable.Value)
{
using (CompositeDisposable compositeDisposable = new CompositeDisposable())
{
PickupDropTable[] dropTables = self.dropTables;
foreach (PickupDropTable dropTable in dropTables)
{
compositeDisposable.Add(ReplaceDropTable(dropTable, "MasterDropDroplet_DropItems"));
}
orig.Invoke(self);
return;
}
}
orig.Invoke(self);
}
private void OptionChestBehavior_Roll(orig_Roll orig, OptionChestBehavior self)
{
if (ModEnabled.Value && ReplaceVoidPotentialDropTable.Value)
{
using (ReplaceDropTable(self.dropTable, "OptionChestBehavior_Roll"))
{
orig.Invoke(self);
return;
}
}
orig.Invoke(self);
}
private WeightedSelection<DirectorCard> SceneDirector_GenerateInteractableCardSelection(orig_GenerateInteractableCardSelection orig, SceneDirector self)
{
WeightedSelection<DirectorCard> val = orig.Invoke(self);
if (ModEnabled.Value)
{
Dictionary<string, ConfigEntry<float>> dictionary = new Dictionary<string, ConfigEntry<float>>
{
["iscDuplicator"] = WhitePrinterSpawnMultiplier,
["iscDuplicatorLarge"] = GreenPrinterSpawnMultiplier,
["iscDuplicatorMilitary"] = RedPrinterSpawnMultiplier,
["iscDuplicatorWild"] = YellowPrinterSpawnMultiplier
};
for (int i = 0; i < val.choices.Length; i++)
{
ref ChoiceInfo<DirectorCard> reference = ref val.choices[i];
if (reference.value != null && dictionary.TryGetValue(((Object)reference.value.spawnCard).name, out var value) && value.Value != 1f)
{
float weight = reference.weight;
val.ModifyChoiceWeight(i, reference.weight * value.Value);
Log.Debug($"iscDuplicator weight changed from {weight} to {reference.weight}");
}
}
}
return val;
}
private void InfiniteTowerWaveController_DropRewards(orig_DropRewards orig, InfiniteTowerWaveController self)
{
if (ModEnabled.Value && ReplaceSimulacrumOrbDropTable.Value)
{
using (ReplaceDropTable(self.rewardDropTable, "InfiniteTowerWaveController_DropRewards"))
{
orig.Invoke(self);
return;
}
}
orig.Invoke(self);
}
private PickupIndex[] ArenaMonsterItemDropTable_GenerateUniqueDropsPreReplacement(orig_GenerateUniqueDropsPreReplacement orig, ArenaMonsterItemDropTable self, int maxDrops, Xoroshiro128Plus rng)
{
if (ModEnabled.Value && ReplaceSimulacrumOrbDropTable.Value)
{
using (ReplaceDropTable((PickupDropTable)(object)self, "ArenaMonsterItemDropTable_GenerateUniqueDropsPreReplacement"))
{
return orig.Invoke(self, maxDrops, rng);
}
}
return orig.Invoke(self, maxDrops, rng);
}
private void ArenaMissionController_EndRound(orig_EndRound orig, ArenaMissionController self)
{
if (ModEnabled.Value && ReplaceVoidFieldsOrbDropTable.Value)
{
using (CompositeDisposable compositeDisposable = new CompositeDisposable())
{
PickupDropTable[] playerRewardOrder = self.playerRewardOrder;
foreach (PickupDropTable dropTable in playerRewardOrder)
{
compositeDisposable.Add(ReplaceDropTable(dropTable, "ArenaMissionController_EndRound"));
}
orig.Invoke(self);
return;
}
}
orig.Invoke(self);
}
private IDisposable ReplaceDropTable(PickupDropTable dropTable, string caller)
{
BasicPickupDropTable basicDropTable = default(BasicPickupDropTable);
ref BasicPickupDropTable reference = ref basicDropTable;
PickupDropTable obj = dropTable;
reference = (BasicPickupDropTable)(object)((obj is BasicPickupDropTable) ? obj : null);
if (basicDropTable != null)
{
IDisposable result = CreateSelectorCopy(basicDropTable.selector, delegate(WeightedSelection<PickupIndex> x)
{
basicDropTable.selector = x;
});
ReplaceDropTableSelector(basicDropTable.selector);
return result;
}
ExplicitPickupDropTable explicitDropTable = default(ExplicitPickupDropTable);
ref ExplicitPickupDropTable reference2 = ref explicitDropTable;
PickupDropTable obj2 = dropTable;
reference2 = (ExplicitPickupDropTable)(object)((obj2 is ExplicitPickupDropTable) ? obj2 : null);
if (explicitDropTable != null)
{
IDisposable result2 = CreateSelectorCopy(explicitDropTable.weightedSelection, delegate(WeightedSelection<PickupIndex> x)
{
explicitDropTable.weightedSelection = x;
});
ReplaceDropTableSelector(explicitDropTable.weightedSelection);
return result2;
}
FreeChestDropTable freeChestDropTable = default(FreeChestDropTable);
ref FreeChestDropTable reference3 = ref freeChestDropTable;
PickupDropTable obj3 = dropTable;
reference3 = (FreeChestDropTable)(object)((obj3 is FreeChestDropTable) ? obj3 : null);
if (freeChestDropTable != null)
{
IDisposable result3 = CreateSelectorCopy(freeChestDropTable.selector, delegate(WeightedSelection<PickupIndex> x)
{
freeChestDropTable.selector = x;
});
ReplaceDropTableSelector(freeChestDropTable.selector);
return result3;
}
DoppelgangerDropTable doppelgangerDropTable = default(DoppelgangerDropTable);
ref DoppelgangerDropTable reference4 = ref doppelgangerDropTable;
PickupDropTable obj4 = dropTable;
reference4 = (DoppelgangerDropTable)(object)((obj4 is DoppelgangerDropTable) ? obj4 : null);
if (doppelgangerDropTable != null)
{
IDisposable result4 = CreateSelectorCopy(doppelgangerDropTable.selector, delegate(WeightedSelection<PickupIndex> x)
{
doppelgangerDropTable.selector = x;
});
ReplaceDropTableSelector(doppelgangerDropTable.selector);
return result4;
}
ArenaMonsterItemDropTable arenaMonsterItemDropTable = default(ArenaMonsterItemDropTable);
ref ArenaMonsterItemDropTable reference5 = ref arenaMonsterItemDropTable;
PickupDropTable obj5 = dropTable;
reference5 = (ArenaMonsterItemDropTable)(object)((obj5 is ArenaMonsterItemDropTable) ? obj5 : null);
if (arenaMonsterItemDropTable != null)
{
IDisposable result5 = CreateSelectorCopy(arenaMonsterItemDropTable.selector, delegate(WeightedSelection<PickupIndex> x)
{
arenaMonsterItemDropTable.selector = x;
});
ReplaceDropTableSelector(arenaMonsterItemDropTable.selector);
return result5;
}
Log.Warning("Failed to override " + caller + " dropTable");
Log.Warning(caller + " dropTable is of type " + (((object)dropTable)?.GetType().FullName ?? "null"));
return Disposable.Empty;
void ReplaceDropTableSelector(WeightedSelection<PickupIndex> selector)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Invalid comparison between Unknown and I4
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < selector.Count; i++)
{
ref ChoiceInfo<PickupIndex> reference6 = ref selector.choices[i];
if ((int)((PickupIndex)(ref reference6.value)).itemIndex != -1)
{
reference6.value = PickupCatalog.FindPickupIndex("ItemIndex.RegeneratingScrap");
}
}
UpdateSpeedItemsSpawnRate(selector);
Log.Debug(caller + " " + ((object)dropTable).GetType().Name + " replaced");
}
}
private void UpdateSpeedItemsSpawnRate(WeightedSelection<PickupIndex> selector)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: 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_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0212: Unknown result type (might be due to invalid IL or missing references)
if (SpeedItemSpawnMultiplier.Value == 1f)
{
return;
}
(ItemIndex, float)[] source = new(ItemIndex, float)[14]
{
(Items.Hoof.itemIndex, 1f),
(Items.SprintBonus.itemIndex, 1f),
(Items.AttackSpeedAndMoveSpeed.itemIndex, 1f),
(Items.SprintOutOfCombat.itemIndex, 1f),
(Items.JumpBoost.itemIndex, 1f),
(Items.MoveSpeedOnKill.itemIndex, 1f),
(Items.WardOnLevel.itemIndex, 0.33f),
(Items.WarCryOnMultiKill.itemIndex, 0.33f),
(Items.LunarBadLuck.itemIndex, 0.33f),
(Items.AlienHead.itemIndex, 0.33f),
(Items.UtilitySkillMagazine.itemIndex, 0.33f),
(Items.HalfAttackSpeedHalfCooldowns.itemIndex, 0.33f),
(Items.Phasing.itemIndex, 0.25f),
(Items.Bandolier.itemIndex, 0.25f)
};
(EquipmentIndex, float)[] source2 = new(EquipmentIndex, float)[5]
{
(Equipment.TeamWarCry.equipmentIndex, 0.5f),
(Equipment.Gateway.equipmentIndex, 0.5f),
(Equipment.Jetpack.equipmentIndex, 0.5f),
(Equipment.FireBallDash.equipmentIndex, 0.5f),
(Equipment.Tonic.equipmentIndex, 0.5f)
};
for (int i = 0; i < selector.choices.Length; i++)
{
ref ChoiceInfo<PickupIndex> reference = ref selector.choices[i];
PickupDef pickupDef = ((PickupIndex)(ref reference.value)).pickupDef;
float num = (from x in source
where x.Item == pickupDef.itemIndex
select x.Weigth).Concat(from x in source2
where x.Equipement == pickupDef.equipmentIndex
select x.Weigth).FirstOrDefault();
if (num > 0f)
{
float weight = reference.weight;
selector.ModifyChoiceWeight(i, reference.weight + reference.weight * (SpeedItemSpawnMultiplier.Value - 1f) * num);
Log.Debug($"{((PickupIndex)(ref reference.value)).pickupDef.nameToken} weight changed from {weight} to {reference.weight}");
}
}
}
private IDisposable CreateSelectorCopy(WeightedSelection<PickupIndex> selector, Action<WeightedSelection<PickupIndex>> setSelector)
{
WeightedSelection<PickupIndex> oldSelector = selector;
setSelector(new WeightedSelection<PickupIndex>(8)
{
Capacity = selector.Capacity,
choices = selector.choices.ToArray(),
totalWeight = selector.totalWeight,
Count = selector.Count
});
return new Disposable(delegate
{
setSelector(oldSelector);
});
}
}
}