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 BlindItems v1.0.0
BlindItems.dll
Decompiled 2 years agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; 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 IL.RoR2.UI; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using On.RoR2.UI; using RiskOfOptions; using RiskOfOptions.Options; using RoR2; using RoR2.UI; 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.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("BlindItems")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BlindItems")] [assembly: AssemblyTitle("BlindItems")] [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 BlindItems { public class ItemAddressables { public static readonly AssetBundle assets = AssetBundle.LoadFromFile(Path.Combine(Paths.PluginPath, "MarkTullius-BlindItems/blinditemsbundle")); public Sprite whiteSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Scrap/texScrapWhiteIcon.png").WaitForCompletion(); public Sprite greenSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Scrap/texScrapGreenIcon.png").WaitForCompletion(); public Sprite redSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Scrap/texScrapRedIcon.png").WaitForCompletion(); public Sprite bossSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Scrap/texScrapYellowIcon.png").WaitForCompletion(); public Sprite voidWhiteSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ScrapVoid/texVoidScrapWhiteIcon.png").WaitForCompletion(); public Sprite voidGreenSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ScrapVoid/texVoidScrapGreenIcon.png").WaitForCompletion(); public Sprite voidRedSprite = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC1/ScrapVoid/texVoidScrapRedIcon.png").WaitForCompletion(); public Sprite lunarSprite = assets.LoadAsset<Sprite>("texScrapLunarIcon.png"); public Sprite equipSprite = assets.LoadAsset<Sprite>("texScrapEquipmentIcon.png"); public Sprite voidBossSprite = assets.LoadAsset<Sprite>("texVoidScrapBossIcon.png"); public static Sprite modIcon = assets.LoadAsset<Sprite>("modIcon.png"); } public class ItemInventory { public ItemInventory() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown GameEndReportPanelController.SetDisplayData += (hook_SetDisplayData)delegate(orig_SetDisplayData orig, GameEndReportPanelController self, DisplayData newDisplayData) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0027: 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_003f: 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 ItemIcon.SetItemIndex += new Manipulator(AllocateItemIcons); EquipmentCatalog.GetEquipmentDef += new hook_GetEquipmentDef(AllocateEquipIcon); orig.Invoke(self, newDisplayData); ItemIcon.SetItemIndex -= new Manipulator(AllocateItemIcons); EquipmentCatalog.GetEquipmentDef -= new hook_GetEquipmentDef(AllocateEquipIcon); }; } public void AllocateItemIcons(ILContext context) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(context); MethodInfo method = typeof(ItemCatalog).GetMethod("GetItemDef"); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction i) => ILPatternMatchingExt.MatchCall(i, (MethodBase)method) }); val.Remove(); method = typeof(Notifications).GetMethod("GetOrigItemDef"); val.Emit(OpCodes.Call, (MethodBase)method); } public EquipmentDef AllocateEquipIcon(orig_GetEquipmentDef orig, EquipmentIndex equipmentIndex) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return Notifications.GetOrigEquipDef(equipmentIndex); } } [BepInPlugin("MarkTullius.BlindItems", "BlindItems", "1.0.0")] public class Main : BaseUnityPlugin { public const string PluginGUID = "MarkTullius.BlindItems"; public const string PluginAuthor = "MarkTullius"; public const string PluginName = "BlindItems"; public const string PluginVersion = "1.0.0"; private Obfuscate _obfuscate; private Notifications _notifs; private Randomise _randomise; private PrinterFix _printerFix; private ItemInventory _itemInventory; public static List<ItemDef> itemNotifications; public static List<EquipmentDef> equipNotifications; public const string desc = "Obscures the pickup models and inventory icons, for items and equipments, by replacing them with '?' to add a cursed challenge where you don't know what you're picking up (scrapping/printing) until you have done so."; public static ConfigEntry<bool> RandomiseOrder { get; set; } public static ConfigEntry<bool> ObscureEquipment { get; set; } public static ConfigEntry<bool> ObscureNotifs { get; set; } public void Awake() { InitConfig(); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { BuildSettings(); } else { Debug.Log((object)"Risk of Options is not installed, skipping setup."); } itemNotifications = new List<ItemDef>(); equipNotifications = new List<EquipmentDef>(); _obfuscate = new Obfuscate(itemNotifications, equipNotifications); if (!ObscureNotifs.Value) { _notifs = new Notifications(itemNotifications, equipNotifications); } _randomise = new Randomise(); _printerFix = new PrinterFix(); _itemInventory = new ItemInventory(); } public void InitConfig() { RandomiseOrder = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Randomise Item Order Each Stage", false, "Turn on to randomise the order of your items every time you load into a new stage."); ObscureEquipment = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Obscure Current Equipment", true, "Turn off to retain the icon for your currently held equipment(s). Requires a restart"); ObscureNotifs = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Obscure Notifications", false, "Turn off to retain the icon and descriptions upon pickup/printing/scrapping. Requires a restart"); } public void BuildSettings() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown ModSettingsManager.SetModDescription("Obscures the pickup models and inventory icons, for items and equipments, by replacing them with '?' to add a cursed challenge where you don't know what you're picking up (scrapping/printing) until you have done so.", "MarkTullius.BlindItems", "BlindItems"); ModSettingsManager.SetModIcon(ItemAddressables.modIcon); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(RandomiseOrder)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ObscureEquipment, true)); } } public class Notifications { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_PushEquipmentNotification <>9__9_0; internal void <PushEquipmentNotification>b__9_0(orig_PushEquipmentNotification orig, CharacterMaster characterMaster, EquipmentIndex equipmentIndex) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Invalid comparison between Unknown and I4 //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown orig.Invoke(characterMaster, (EquipmentIndex)(-1)); EquipmentDef origEquipDef = GetOrigEquipDef(equipmentIndex); if (!((NetworkBehaviour)characterMaster).hasAuthority) { Debug.LogError((object)("Can't PushItemNotification for " + Util.GetBestMasterName(characterMaster) + " because they aren't local.")); return; } CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(characterMaster); if (Object.op_Implicit((Object)(object)notificationQueueForMaster) && (int)equipmentIndex != -1 && !((Object)(object)origEquipDef == (Object)null)) { float num = 6f; notificationQueueForMaster.PushNotification(new NotificationInfo((object)origEquipDef, (TransformationInfo)null), num); } } } public static List<ItemDef> itemNotifs; public static List<EquipmentDef> equipNotifs; private const float AddedNotificationDuration = 6f; private const float RemovedNotificationDuration = 3f; public Notifications(List<ItemDef> itemNotifications, List<EquipmentDef> equipNotifications) { itemNotifs = itemNotifications; equipNotifs = equipNotifications; Awake(); } public void Awake() { PushItemNotification(); PushItemRemovalNotification(); PushEquipmentNotification(); } public void PushItemNotification() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown CharacterMasterNotificationQueue.PushItemNotification += (hook_PushItemNotification)delegate(orig_PushItemNotification orig, CharacterMaster characterMaster, ItemIndex itemIndex) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown orig.Invoke(characterMaster, (ItemIndex)(-1)); ItemDef origItemDef = GetOrigItemDef(itemIndex); CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(characterMaster); if (ItemNotificationHandler(characterMaster, itemIndex, origItemDef, notificationQueueForMaster)) { float num = 6f; notificationQueueForMaster.PushNotification(new NotificationInfo((object)origItemDef, (TransformationInfo)null), num); } }; } public void PushItemRemovalNotification() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown PurchaseInteraction.CreateItemTakenOrb += (hook_CreateItemTakenOrb)delegate(orig_CreateItemTakenOrb orig, Vector3 effectOrigin, GameObject targetObject, ItemIndex itemIndex) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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) orig.Invoke(effectOrigin, targetObject, itemIndex); BuildItemRemovalNotification(itemIndex); }; ScrapperController.CreateItemTakenOrb += (hook_CreateItemTakenOrb)delegate(orig_CreateItemTakenOrb orig, Vector3 effectOrigin, GameObject targetObject, ItemIndex itemIndex) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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) orig.Invoke(effectOrigin, targetObject, itemIndex); BuildItemRemovalNotification(itemIndex); }; } public void BuildItemRemovalNotification(ItemIndex itemIndex) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_003f: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown CharacterMaster master = PlayerCharacterMasterController._instances[0].master; ItemDef origItemDef = GetOrigItemDef(itemIndex); CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(master); if (ItemNotificationHandler(master, itemIndex, origItemDef, notificationQueueForMaster)) { float num = 3f; TransformationInfo val = new TransformationInfo((TransformationType)3, (object)origItemDef); NotificationInfo val2 = new NotificationInfo((object)ItemCatalog.GetItemDef(itemIndex), val); notificationQueueForMaster.PushNotification(val2, num); } } public void PushEquipmentNotification() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__9_0; if (obj == null) { hook_PushEquipmentNotification val = delegate(orig_PushEquipmentNotification orig, CharacterMaster characterMaster, EquipmentIndex equipmentIndex) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Invalid comparison between Unknown and I4 //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown orig.Invoke(characterMaster, (EquipmentIndex)(-1)); EquipmentDef origEquipDef = GetOrigEquipDef(equipmentIndex); if (!((NetworkBehaviour)characterMaster).hasAuthority) { Debug.LogError((object)("Can't PushItemNotification for " + Util.GetBestMasterName(characterMaster) + " because they aren't local.")); } else { CharacterMasterNotificationQueue notificationQueueForMaster = CharacterMasterNotificationQueue.GetNotificationQueueForMaster(characterMaster); if (Object.op_Implicit((Object)(object)notificationQueueForMaster) && (int)equipmentIndex != -1 && !((Object)(object)origEquipDef == (Object)null)) { float num = 6f; notificationQueueForMaster.PushNotification(new NotificationInfo((object)origEquipDef, (TransformationInfo)null), num); } } }; <>c.<>9__9_0 = val; obj = (object)val; } CharacterMasterNotificationQueue.PushEquipmentNotification += (hook_PushEquipmentNotification)obj; } public static ItemDef GetOrigItemDef(ItemIndex itemIndex) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return itemNotifs.Find((ItemDef itemDef) => itemDef.itemIndex == itemIndex); } public static EquipmentDef GetOrigEquipDef(EquipmentIndex equipmentIndex) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return equipNotifs.Find((EquipmentDef equipDef) => equipDef.equipmentIndex == equipmentIndex); } public bool ItemNotificationHandler(CharacterMaster characterMaster, ItemIndex itemIndex, ItemDef itemDef, CharacterMasterNotificationQueue notificationQueue) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Invalid comparison between Unknown and I4 if (!((NetworkBehaviour)characterMaster).hasAuthority) { Debug.LogError((object)("Can't PushItemNotification for " + Util.GetBestMasterName(characterMaster) + " because they aren't local.")); return false; } if (Object.op_Implicit((Object)(object)notificationQueue) && (int)itemIndex != -1 && ((Object)(object)itemDef == (Object)null || itemDef.hidden)) { return false; } return true; } } public class Obfuscate { public const string itemName = "???"; private const string itemDescription = "?????"; private readonly ItemAddressables _addressables; public Obfuscate(List<ItemDef> itemNotifications, List<EquipmentDef> equipNotifications) { _addressables = new ItemAddressables(); Awake(itemNotifications, equipNotifications); } public void Awake(List<ItemDef> itemNotifications, List<EquipmentDef> equipNotifications) { ObfuscateItems(itemNotifications); ObfuscateEquipments(equipNotifications); } public void ObfuscateItems(List<ItemDef> itemNotifications) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown ItemCatalog.SetItemDefs += (hook_SetItemDefs)delegate(orig_SetItemDefs orig, ItemDef[] itemDefs) { //IL_0020: 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_006f: Invalid comparison between Unknown and I4 //IL_00a4: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(itemDefs); foreach (ItemDef val in itemDefs) { ItemDef val2 = ScriptableObject.CreateInstance<ItemDef>(); val2.itemIndex = val.itemIndex; val2.pickupIconSprite = val.pickupIconSprite; val2.nameToken = val.nameToken; val2.pickupToken = val.pickupToken; val2.hidden = val.hidden; itemNotifications.Add(val2); if ((int)val.deprecatedTier != 5) { val.pickupModelPrefab = PickupCatalog.GetHiddenPickupDisplayPrefab(); val.nameToken = "???"; val.pickupToken = "?????"; val.pickupIconSprite = GetPickupIconSprite(val.deprecatedTier); } } }; } public void ObfuscateEquipments(List<EquipmentDef> equipNotifications) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown EquipmentCatalog.SetEquipmentDefs += (hook_SetEquipmentDefs)delegate(orig_SetEquipmentDefs orig, EquipmentDef[] equipDefs) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(equipDefs); foreach (EquipmentDef val in equipDefs) { EquipmentDef val2 = ScriptableObject.CreateInstance<EquipmentDef>(); val2.equipmentIndex = val.equipmentIndex; val2.pickupIconSprite = val.pickupIconSprite; val2.nameToken = val.nameToken; val2.pickupToken = val.pickupToken; equipNotifications.Add(val2); val.pickupModelPrefab = PickupCatalog.GetHiddenPickupDisplayPrefab(); val.nameToken = "???"; val.pickupToken = "?????"; val.descriptionToken = "?????"; if (Main.ObscureEquipment.Value) { val.pickupIconSprite = _addressables.equipSprite; } } }; } public Sprite GetPickupIconSprite(ItemTier tier) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected I4, but got Unknown return (Sprite)((int)tier switch { 0 => _addressables.whiteSprite, 1 => _addressables.greenSprite, 2 => _addressables.redSprite, 4 => _addressables.bossSprite, 3 => _addressables.lunarSprite, 6 => _addressables.voidWhiteSprite, 7 => _addressables.voidGreenSprite, 8 => _addressables.voidRedSprite, 9 => _addressables.voidBossSprite, _ => null, }); } } public class PrinterFix { private const float yPos = 2.5f; public PrinterFix() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown InteractableSpawnCard.Spawn += new hook_Spawn(CorrectPickupPosition); } public void CorrectPickupPosition(orig_Spawn orig, InteractableSpawnCard self, Vector3 position, Quaternion rotation, DirectorSpawnRequest directorSpawnRequest, ref SpawnResult result) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: 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_007b: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, position, rotation, directorSpawnRequest, ref result); GameObject spawnedInstance = result.spawnedInstance; if (!((Object)spawnedInstance).name.Contains("Duplicator")) { return; } Transform child = spawnedInstance.transform.GetChild(0); if ((Object)(object)child != (Object)null && child.childCount > 2) { Transform child2 = child.GetChild(2); if ((Object)(object)child2 != (Object)null) { Vector3 localPosition = ((Component)child2).transform.localPosition; Vector3 localPosition2 = default(Vector3); ((Vector3)(ref localPosition2))..ctor(localPosition.x, 2.5f, localPosition.z); ((Component)spawnedInstance.transform.GetChild(0).GetChild(2)).transform.localPosition = localPosition2; } else { Debug.LogError((object)"Pickup display not found. Unable to adjust model height."); } } else { Debug.LogError((object)"Printer does not appear to have the correct number of children."); } } } public class Randomise { public Randomise() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown Stage.Start += new hook_Start(ShuffleItemOrder); } public void ShuffleItemOrder(orig_Start orig, Stage self) { orig.Invoke(self); if (Main.RandomiseOrder.Value) { List<ItemIndex> itemAcquisitionOrder = PlayerCharacterMasterController._instances[0].master.inventory.itemAcquisitionOrder; Util.ShuffleList<ItemIndex>(itemAcquisitionOrder); PlayerCharacterMasterController._instances[0].master.inventory.itemAcquisitionOrder = itemAcquisitionOrder; } } } }