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.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using R2API.Utils;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
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("OopsAllVoid")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+cdbdfa5ce0bddd8135a7eac9a9792b889f8b2538")]
[assembly: AssemblyProduct("OopsAllVoid")]
[assembly: AssemblyTitle("OopsAllVoid")]
[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 OopsAllVoid
{
internal static class Log
{
internal static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void LogDebug(object data)
{
_logSource.LogDebug(data);
}
internal static void LogError(object data)
{
_logSource.LogError(data);
}
internal static void LogFatal(object data)
{
_logSource.LogFatal(data);
}
internal static void LogInfo(object data)
{
_logSource.LogInfo(data);
}
internal static void LogMessage(object data)
{
_logSource.LogMessage(data);
}
internal static void LogWarning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInPlugin("zombieseatflesh7.OopsAllVoid", "OopsAllVoid", "1.1.1")]
public class OopsAllVoid : BaseUnityPlugin
{
public const string PluginGUID = "zombieseatflesh7.OopsAllVoid";
public const string PluginAuthor = "zombieseatflesh7";
public const string PluginName = "OopsAllVoid";
public const string PluginVersion = "1.1.1";
public static PluginInfo PInfo { get; private set; }
public void Awake()
{
Log.Init(((BaseUnityPlugin)this).Logger);
PInfo = ((BaseUnityPlugin)this).Info;
ModAssets.Init();
CorruptionArtifact.Init();
}
}
public static class CorruptionArtifact
{
[CompilerGenerated]
private static class <>O
{
public static ArtifactStateChangeDelegate <0>__OnArtifactEnabled;
public static ArtifactStateChangeDelegate <1>__OnArtifactDisabled;
public static hook_DropRewards <2>__BossGroup_DropRewards;
public static Action<SceneDirector, DirectorCardCategorySelection> <3>__OnGenerateInteractableCardSelection;
}
public static ArtifactDef Corruption;
public static InteractableSpawnCard duplicatorT1SpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/Duplicator/iscDuplicator.asset").WaitForCompletion();
public static InteractableSpawnCard duplicatorT2SpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/DuplicatorLarge/iscDuplicatorLarge.asset").WaitForCompletion();
public static InteractableSpawnCard duplicatorT3SpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/DuplicatorMilitary/iscDuplicatorMilitary.asset").WaitForCompletion();
public static InteractableSpawnCard duplicatorBossSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/DuplicatorWild/iscDuplicatorWild.asset").WaitForCompletion();
public static InteractableSpawnCard scrapperSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/Scrapper/iscScrapper.asset").WaitForCompletion();
public static InteractableSpawnCard smallDamageChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/CategoryChest/iscCategoryChestDamage.asset").WaitForCompletion();
public static InteractableSpawnCard smallHealingChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/CategoryChest/iscCategoryChestHealing.asset").WaitForCompletion();
public static InteractableSpawnCard smallUtilityChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/Base/CategoryChest/iscCategoryChestUtility.asset").WaitForCompletion();
public static InteractableSpawnCard largeDamageChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/DLC1/CategoryChest2/iscCategoryChest2Damage.asset").WaitForCompletion();
public static InteractableSpawnCard largeHealingChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/DLC1/CategoryChest2/iscCategoryChest2Healing.asset").WaitForCompletion();
public static InteractableSpawnCard largeUtilityChestSpawnCard = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/DLC1/CategoryChest2/iscCategoryChest2Utility.asset").WaitForCompletion();
public static List<PickupDropTable> DropTables = null;
public static float[][] DropTableValues = null;
public static void Init()
{
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Expected O, but got Unknown
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
Corruption = ScriptableObject.CreateInstance<ArtifactDef>();
Corruption.cachedName = "ArtifactOfCorruption";
Corruption.nameToken = "Artifact of Corruption";
Corruption.descriptionToken = "Replaces all items except equipment and lunar items with void items.";
Corruption.smallIconSelectedSprite = ModAssets.AssetBundle.LoadAsset<Sprite>("texArtifactCorruptionEnabled.png");
Corruption.smallIconDeselectedSprite = ModAssets.AssetBundle.LoadAsset<Sprite>("texArtifactCorruptionDisabled.png");
ContentAddition.AddArtifactDef(Corruption);
object obj = <>O.<0>__OnArtifactEnabled;
if (obj == null)
{
ArtifactStateChangeDelegate val = OnArtifactEnabled;
<>O.<0>__OnArtifactEnabled = val;
obj = (object)val;
}
RunArtifactManager.onArtifactEnabledGlobal += (ArtifactStateChangeDelegate)obj;
object obj2 = <>O.<1>__OnArtifactDisabled;
if (obj2 == null)
{
ArtifactStateChangeDelegate val2 = OnArtifactDisabled;
<>O.<1>__OnArtifactDisabled = val2;
obj2 = (object)val2;
}
RunArtifactManager.onArtifactDisabledGlobal += (ArtifactStateChangeDelegate)obj2;
}
private static void OnArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
{
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Expected O, but got Unknown
if ((Object)(object)artifactDef != (Object)(object)Corruption || !NetworkServer.active)
{
return;
}
DropTables = Reflection.GetFieldValue<List<PickupDropTable>>(typeof(PickupDropTable), "instancesList");
DropTableValues = new float[DropTables.Count()][];
int num = 0;
foreach (BasicPickupDropTable item in DropTables.OfType<BasicPickupDropTable>())
{
DropTableValues[num] = new float[6];
DropTableValues[num][0] = item.tier1Weight;
DropTableValues[num][1] = item.tier2Weight;
DropTableValues[num][2] = item.tier3Weight;
DropTableValues[num][3] = item.voidTier1Weight;
DropTableValues[num][4] = item.voidTier2Weight;
DropTableValues[num][5] = item.voidTier3Weight;
item.voidTier1Weight = item.tier1Weight + item.voidTier1Weight;
item.voidTier2Weight = item.tier2Weight + item.voidTier2Weight;
item.voidTier3Weight = item.tier3Weight + item.voidTier3Weight;
item.tier1Weight = 0f;
item.tier2Weight = 0f;
item.tier3Weight = 0f;
num++;
}
Reflection.InvokeMethod(typeof(PickupDropTable), "RegenerateAll", new object[1] { Run.instance });
object obj = <>O.<2>__BossGroup_DropRewards;
if (obj == null)
{
hook_DropRewards val = BossGroup_DropRewards;
<>O.<2>__BossGroup_DropRewards = val;
obj = (object)val;
}
BossGroup.DropRewards += (hook_DropRewards)obj;
SceneDirector.onGenerateInteractableCardSelection += OnGenerateInteractableCardSelection;
}
private static void OnArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef)
{
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Expected O, but got Unknown
if ((Object)(object)artifactDef != (Object)(object)Corruption)
{
return;
}
int num = 0;
foreach (BasicPickupDropTable item in DropTables.OfType<BasicPickupDropTable>())
{
item.tier1Weight = DropTableValues[num][0];
item.tier2Weight = DropTableValues[num][1];
item.tier3Weight = DropTableValues[num][2];
item.voidTier1Weight = DropTableValues[num][3];
item.voidTier2Weight = DropTableValues[num][4];
item.voidTier3Weight = DropTableValues[num][5];
num++;
}
DropTables = null;
DropTableValues = null;
object obj = <>O.<2>__BossGroup_DropRewards;
if (obj == null)
{
hook_DropRewards val = BossGroup_DropRewards;
<>O.<2>__BossGroup_DropRewards = val;
obj = (object)val;
}
BossGroup.DropRewards -= (hook_DropRewards)obj;
SceneDirector.onGenerateInteractableCardSelection -= OnGenerateInteractableCardSelection;
}
public static void BossGroup_DropRewards(orig_DropRewards orig, BossGroup self)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
List<PickupIndex> fieldValue = Reflection.GetFieldValue<List<PickupIndex>>((object)self, "bossDrops");
List<PickupDropTable> fieldValue2 = Reflection.GetFieldValue<List<PickupDropTable>>((object)self, "bossDropTables");
Xoroshiro128Plus fieldValue3 = Reflection.GetFieldValue<Xoroshiro128Plus>((object)self, "rng");
for (int i = 0; i < fieldValue.Count; i++)
{
fieldValue[i] = fieldValue3.NextElementUniform<PickupIndex>(Run.instance.availableVoidBossDropList);
}
for (int j = 0; j < fieldValue2.Count; j++)
{
fieldValue.Add(fieldValue3.NextElementUniform<PickupIndex>(Run.instance.availableVoidBossDropList));
}
Reflection.SetFieldValue<List<PickupDropTable>>((object)self, "bossDropTables", new List<PickupDropTable>());
orig.Invoke(self);
}
private static void OnGenerateInteractableCardSelection(SceneDirector sceneDirector, DirectorCardCategorySelection dccs)
{
dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)InteractableFilter);
}
private static bool InteractableFilter(DirectorCard card)
{
if ((Object)(object)card.spawnCard == (Object)(object)duplicatorT1SpawnCard || (Object)(object)card.spawnCard == (Object)(object)duplicatorT2SpawnCard || (Object)(object)card.spawnCard == (Object)(object)duplicatorT3SpawnCard || (Object)(object)card.spawnCard == (Object)(object)duplicatorBossSpawnCard || (Object)(object)card.spawnCard == (Object)(object)scrapperSpawnCard || (Object)(object)card.spawnCard == (Object)(object)smallDamageChestSpawnCard || (Object)(object)card.spawnCard == (Object)(object)smallHealingChestSpawnCard || (Object)(object)card.spawnCard == (Object)(object)smallUtilityChestSpawnCard || (Object)(object)card.spawnCard == (Object)(object)largeDamageChestSpawnCard || (Object)(object)card.spawnCard == (Object)(object)largeHealingChestSpawnCard || (Object)(object)card.spawnCard == (Object)(object)largeUtilityChestSpawnCard)
{
return false;
}
return true;
}
}
public static class ModAssets
{
public static AssetBundle AssetBundle;
public const string dllName = "OopsAllVoid.dll";
public const string bundleName = "oavassetbundle";
public static void Init()
{
AssetBundle = AssetBundle.LoadFromFile(OopsAllVoid.PInfo.Location.Replace("OopsAllVoid.dll", "oavassetbundle"));
if ((Object)(object)AssetBundle == (Object)null)
{
Log.LogInfo("Failed to load AssetBundle!");
}
}
}
}