Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ArtifactOfOrder v1.0.2
plugins/ArtifactOfOrder.dll
Decompiled 8 months agousing 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 HG.Reflection; using Microsoft.CodeAnalysis; using On.RoR2; using R2API; using RoR2; using UnityEngine; 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: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ArtifactOfOrder")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ArtifactOfOrder")] [assembly: AssemblyTitle("ArtifactOfOrder")] [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 ArtifactOfOrder { public abstract class ArtifactBase { public ArtifactDef ArtifactDef; public abstract string ArtifactName { get; } public abstract string ArtifactLangTokenName { get; } public abstract string ArtifactDescription { get; } public abstract Sprite ArtifactEnabledIcon { get; } public abstract Sprite ArtifactDisabledIcon { get; } public bool ArtifactEnabled => RunArtifactManager.instance.IsArtifactEnabled(ArtifactDef); public abstract void Init(ConfigFile config); protected void CreateLang() { LanguageAPI.Add("ARTIFACT_" + ArtifactLangTokenName + "_NAME", ArtifactName); LanguageAPI.Add("ARTIFACT_" + ArtifactLangTokenName + "_DESCRIPTION", ArtifactDescription); } protected void CreateArtifact() { ArtifactDef = ScriptableObject.CreateInstance<ArtifactDef>(); ArtifactDef.cachedName = "ARTIFACT_" + ArtifactLangTokenName; ArtifactDef.nameToken = "ARTIFACT_" + ArtifactLangTokenName + "_NAME"; ArtifactDef.descriptionToken = "ARTIFACT_" + ArtifactLangTokenName + "_DESCRIPTION"; ArtifactDef.smallIconSelectedSprite = ArtifactEnabledIcon; ArtifactDef.smallIconDeselectedSprite = ArtifactDisabledIcon; ContentAddition.AddArtifactDef(ArtifactDef); } public abstract void Hooks(); } internal class ArtifactOfOrder : ArtifactBase { public static ConfigEntry<bool> ShouldPearlsBeSeperate; public static ConfigEntry<bool> ShouldLunarEquipBeSeperate; public static ConfigEntry<bool> OverrideCommandArtifact; public static ConfigEntry<bool> DelusionSlotMachine; public Dictionary<ItemTier, PickupIndex> itemList = new Dictionary<ItemTier, PickupIndex>(); public static List<EquipmentDef> ListOfEliteAspects = new List<EquipmentDef>(); public PickupIndex OrderEquipment; public PickupIndex OrderLunarEquipment; public PickupIndex OrderEliteAspect; public override string ArtifactName => "Artifact of Order"; public override string ArtifactLangTokenName => "ARTIFACT_OF_ORDER"; public override string ArtifactDescription => "All items of the same rarity are the same item."; public override Sprite ArtifactEnabledIcon => Main.mainBundle.LoadAsset<Sprite>("order_enabled.png"); public override Sprite ArtifactDisabledIcon => Main.mainBundle.LoadAsset<Sprite>("order_disabled.png"); public override void Init(ConfigFile config) { CreateConfig(config); CreateLang(); CreateArtifact(); Hooks(); } private void CreateConfig(ConfigFile config) { ShouldPearlsBeSeperate = config.Bind<bool>("Artifact: " + ArtifactName, "Should pearls be sperate:", true, "Should pearls be counted as seperate from boss items?"); ShouldLunarEquipBeSeperate = config.Bind<bool>("Artifact: " + ArtifactName, "Should lunar equipment be sperate:", true, "Should lunar equipment be counted as seperate from regular equipment?"); OverrideCommandArtifact = config.Bind<bool>("Artifact: " + ArtifactName, "Override artifact of command:", false, "Should the artifact of order overwrite the artifact of command?"); DelusionSlotMachine = config.Bind<bool>("Artifact: " + ArtifactName, "Make delusion a slot machine:", false, "Should the three choices in the artifact of delusion all be the same item (with only 1 being correct still)?"); } public override void Hooks() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown PickupDropletController.CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3 += new hook_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3(CheckArtifactOfOrder); Run.onRunDestroyGlobal += ResetVars; RunArtifactManager.onArtifactEnabledGlobal += new ArtifactStateChangeDelegate(OnArtifactEnabled); RunArtifactManager.onArtifactDisabledGlobal += new ArtifactStateChangeDelegate(OnArtifactDisabled); } [SystemInitializer(new Type[] { typeof(EliteCatalog) })] private static void CreateAspectList() { EliteDef[] eliteDefs = EliteCatalog.eliteDefs; foreach (EliteDef val in eliteDefs) { ListOfEliteAspects.Add(val.eliteEquipmentDef); } } private void OnArtifactEnabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if (!((Object)(object)artifactDef != (Object)(object)ArtifactDef) && NetworkServer.active) { SceneDirector.onGenerateInteractableCardSelection += RemoveScrapperAndPrinter; } } private void OnArtifactDisabled(RunArtifactManager runArtifactManager, ArtifactDef artifactDef) { if (!((Object)(object)artifactDef != (Object)(object)ArtifactDef)) { SceneDirector.onGenerateInteractableCardSelection += RemoveScrapperAndPrinter; } } private void ResetVars(Run run) { itemList.Clear(); } private void RemoveScrapperAndPrinter(SceneDirector SceneDirector, DirectorCardCategorySelection dccs) { dccs.RemoveCardsThatFailFilter((Predicate<DirectorCard>)ChangesItem); } internal static bool ChangesItem(DirectorCard card) { return !Object.op_Implicit((Object)(object)card.GetSpawnCard().prefab.GetComponent<ShopTerminalBehavior>()) && !Object.op_Implicit((Object)(object)card.GetSpawnCard().prefab.GetComponent<ScrapperController>()); } private void CheckArtifactOfOrder(orig_CreatePickupDroplet_CreatePickupInfo_Vector3_Vector3 orig, CreatePickupInfo pickupInfo, Vector3 position, Vector3 velocity) { //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && base.ArtifactEnabled) { if (pickupInfo.pickerOptions != null) { for (int i = 0; i < pickupInfo.pickerOptions.Length; i++) { PickupIndex pickupIndex = pickupInfo.pickerOptions[i].pickupIndex; PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex); AddReplaceItem(ref pickupIndex, ref pickupDef); pickupInfo.pickerOptions[i].pickupIndex = pickupIndex; } } else { PickupIndex pickupIndex2 = ((CreatePickupInfo)(ref pickupInfo)).pickupIndex; PickupDef pickupDef2 = PickupCatalog.GetPickupDef(pickupIndex2); AddReplaceItem(ref pickupIndex2, ref pickupDef2); ((CreatePickupInfo)(ref pickupInfo)).pickupIndex = pickupIndex2; } } orig.Invoke(pickupInfo, position, velocity); } private void AddReplaceItem(ref PickupIndex pickupIndex, ref PickupDef pickupDef) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Invalid comparison between Unknown and I4 //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Invalid comparison between Unknown and I4 //IL_0030: 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_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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007c: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Invalid comparison between Unknown and I4 //IL_00bb: 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_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Invalid comparison between Unknown and I4 //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_013b: 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_014b: Invalid comparison between Unknown and I4 //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0299: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Invalid comparison between Unknown and I4 //IL_01ed: 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_01fd: Invalid comparison between Unknown and I4 //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0261: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: 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_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) PickupIndex val; if (itemList.ContainsKey(pickupDef.itemTier) && (int)pickupDef.itemTier != 5) { val = pickupIndex; string? text = ((object)(PickupIndex)(ref val)).ToString(); val = itemList[pickupDef.itemTier]; Log.Info("Converting " + text + " to " + ((object)(PickupIndex)(ref val)).ToString()); pickupIndex = itemList[pickupDef.itemTier]; } else if ((int)pickupDef.itemTier != 5) { string? text2 = ((object)(ItemTier)(ref pickupDef.itemTier)).ToString(); val = pickupIndex; Log.Info(text2 + " added as " + ((object)(PickupIndex)(ref val)).ToString()); itemList.Add(pickupDef.itemTier, pickupIndex); } else if ((int)pickupDef.itemTier == 5 && (int)pickupDef.equipmentIndex != -1) { if (ListOfEliteAspects.Contains(EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex))) { if ((int)PickupCatalog.GetPickupDef(OrderEliteAspect).equipmentIndex != -1) { val = pickupIndex; string? text3 = ((object)(PickupIndex)(ref val)).ToString(); val = OrderEliteAspect; Log.Info("Converting " + text3 + " to " + ((object)(PickupIndex)(ref val)).ToString()); pickupIndex = OrderEliteAspect; } else { val = pickupIndex; Log.Info("Elite aspect added as " + ((object)(PickupIndex)(ref val)).ToString()); OrderEliteAspect = pickupIndex; } } else if (pickupDef.isLunar) { if ((int)PickupCatalog.GetPickupDef(OrderLunarEquipment).equipmentIndex != -1) { val = pickupIndex; string? text4 = ((object)(PickupIndex)(ref val)).ToString(); val = OrderLunarEquipment; Log.Info("Converting " + text4 + " to " + ((object)(PickupIndex)(ref val)).ToString()); pickupIndex = OrderLunarEquipment; } else { val = pickupIndex; Log.Info("Lunar equipment added as " + ((object)(PickupIndex)(ref val)).ToString()); OrderLunarEquipment = pickupIndex; } } else if ((int)PickupCatalog.GetPickupDef(OrderEquipment).equipmentIndex != -1) { val = pickupIndex; string? text5 = ((object)(PickupIndex)(ref val)).ToString(); val = OrderEquipment; Log.Info("Converting " + text5 + " to " + ((object)(PickupIndex)(ref val)).ToString()); pickupIndex = OrderEquipment; } else { val = pickupIndex; Log.Info("Equipment added as " + ((object)(PickupIndex)(ref val)).ToString()); OrderEquipment = pickupIndex; } } else { val = pickupIndex; Debug.Log((object)("Letting " + ((object)(PickupIndex)(ref val)).ToString() + " pass through")); } } } 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("Nerdman.ArtifactOfOrder", "ArtifactOfOrder", "1.0.2")] public class Main : BaseUnityPlugin { public static AssetBundle mainBundle; public const string bundleName = "artifact_of_order"; public const string assetBundleFolder = "assetbundles"; public List<ArtifactBase> Artifacts = new List<ArtifactBase>(); public const string PluginGUID = "Nerdman.ArtifactOfOrder"; public const string PluginAuthor = "Nerdman"; public const string PluginName = "ArtifactOfOrder"; public const string PluginVersion = "1.0.2"; public static PluginInfo PInfo { get; private set; } public static string AssetBundlePath => Path.Combine(Path.GetDirectoryName(PInfo.Location), "assetbundles", "artifact_of_order"); public bool ValidateArtifact(ArtifactBase artifact, List<ArtifactBase> artifactList) { bool value = ((BaseUnityPlugin)this).Config.Bind<bool>("Artifact: " + artifact.ArtifactName, "Enable Artifact?", true, "Should this artifact appear for selection?").Value; if (value) { artifactList.Add(artifact); } return value; } public void Awake() { PInfo = ((BaseUnityPlugin)this).Info; mainBundle = AssetBundle.LoadFromFile(AssetBundlePath); Log.Init(((BaseUnityPlugin)this).Logger); IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(ArtifactBase)) select type; foreach (Type item in enumerable) { ArtifactBase artifactBase = (ArtifactBase)Activator.CreateInstance(item); if (ValidateArtifact(artifactBase, Artifacts)) { artifactBase.Init(((BaseUnityPlugin)this).Config); } } } private void Update() { } } }