using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using HarmonyLib;
using Il2Cpp;
using Il2CppAssets.Scripts.Inventory__Items__Pickups;
using Il2CppAssets.Scripts.Saves___Serialization.Progression.Achievements;
using Il2CppAssets.Scripts.Saves___Serialization.Progression.Unlocks;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using MegabonkToggleEverything;
using MelonLoader;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(ToggleEverything), "MegabonkToggleEverything", "0.1.0", "NanobotZ", null)]
[assembly: MelonGame("Ved", "Megabonk")]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("MegabonkToggleEverything")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("MegabonkToggleEverything")]
[assembly: AssemblyTitle("MegabonkToggleEverything")]
[assembly: NeutralResourcesLanguage("en-US")]
[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 MegabonkToggleEverything
{
public class ToggleEverything : MelonMod
{
internal static Instance Logger;
public override void OnInitializeMelon()
{
Logger = ((MelonBase)this).LoggerInstance;
((MelonBase)this).HarmonyInstance.PatchAll();
((MelonBase)this).LoggerInstance.Msg($"Initialized with {((MelonBase)this).HarmonyInstance.GetPatchedMethods().Count()} patches.");
}
}
internal static class Extensions
{
internal static bool In<T>(this T item, params T[] array)
{
return array.Contains(item);
}
internal static bool IsModTogglable(this UnlockableBase unlockable)
{
Enumerator<WeaponData> enumerator = DataManager.Instance.unsortedWeapons.GetEnumerator();
while (enumerator.MoveNext())
{
if ((Object)(object)enumerator.Current == (Object)(object)unlockable)
{
return true;
}
}
Enumerator<TomeData> enumerator2 = DataManager.Instance.unsortedTomes.GetEnumerator();
while (enumerator2.MoveNext())
{
if ((Object)(object)enumerator2.Current == (Object)(object)unlockable)
{
return true;
}
}
Enumerator<ItemData> enumerator3 = DataManager.Instance.unsortedItems.GetEnumerator();
while (enumerator3.MoveNext())
{
if ((Object)(object)enumerator3.Current == (Object)(object)unlockable)
{
return true;
}
}
return false;
}
}
[HarmonyPatch]
internal static class MyAchievementsPatches
{
[HarmonyPatch(typeof(MyAchievements), "CanToggleActivation")]
[HarmonyPrefix]
private static bool MyAchievements_CanToggleActivation_Prefix(ref bool __result, UnlockableBase unlockable)
{
if (unlockable.IsModTogglable())
{
__result = true;
return false;
}
return true;
}
[HarmonyPatch(typeof(MyAchievements), "IsActivated")]
[HarmonyPrefix]
private static bool MyAchievements_IsActivated_Prefix(ref bool __result, UnlockableBase unlockable)
{
__result = !SaveManager.Instance.progression.inactivated.Contains(unlockable.GetInternalName());
return false;
}
[HarmonyPatch(typeof(RunUnlockables), "OnNewRunStarted")]
[HarmonyPostfix]
private static void RunUnlockables_OnNewRunStarted_Postfix()
{
if (SaveManager.Instance.progression.inactivated.Count == 0)
{
return;
}
ToggleEverything.Logger.Msg("Banishing:");
Enumerator<string> enumerator = SaveManager.Instance.progression.inactivated.GetEnumerator();
while (enumerator.MoveNext())
{
string item = enumerator.Current;
UnlockableBase val = DataManager.Instance.unsortedUnlockables.Find(Predicate<UnlockableBase>.op_Implicit((Func<UnlockableBase, bool>)((UnlockableBase x) => x.GetInternalName() == item && x.IsModTogglable())));
ItemData val2 = DataManager.Instance.unsortedItems.Find(Predicate<ItemData>.op_Implicit((Func<ItemData, bool>)((ItemData x) => ((UnlockableBase)x).GetInternalName() == item)));
if ((Object)(object)val != (Object)null)
{
RunUnlockables.BanishUpgradable(val);
ToggleEverything.Logger.Msg($"- {((Object)val).name} / {val.GetInternalName()} (Upgradable)");
}
if ((Object)(object)val2 != (Object)null)
{
RunUnlockables.BanishItem(val2);
ToggleEverything.Logger.Msg($"- {((Object)val).name} / {((UnlockableBase)val2).GetInternalName()} (Item)");
}
}
}
}
}