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 ScrapMe v0.3.2
plugins/not_score.ScrapMe/ScrapMe.dll
Decompiled 3 weeks agousing System; using System.Collections; 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.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HG.Reflection; using HarmonyLib; using ItemQualities; using Microsoft.CodeAnalysis; using RiskOfOptions; using RiskOfOptions.Options; using RoR2; using RoR2.Items; using UnityEngine; using UnityEngine.Events; [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("ScrapMe")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+dd0d94e6831e6d6098a0cc3571d58899b30038d1")] [assembly: AssemblyProduct("ScrapMe")] [assembly: AssemblyTitle("ScrapMe")] [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 ScrapMe { public class BanRecords { public class CharItemRecord { internal Dictionary<BodyIndex, HashSet<ItemIndex>> record = new Dictionary<BodyIndex, HashSet<ItemIndex>>(); public HashSet<ItemIndex> this[BodyIndex index] { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return GetValue(index); } set { //IL_0006: Unknown result type (might be due to invalid IL or missing references) record[index] = value; } } private HashSet<ItemIndex> GetValue(BodyIndex key) { //IL_0007: 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_001a: Unknown result type (might be due to invalid IL or missing references) if (!record.ContainsKey(key)) { record[key] = new HashSet<ItemIndex>(); } return record[key]; } } internal class PresetBans { private readonly string charName; private readonly HashSet<string> itemNames; public PresetBans(string bodyName, IEnumerable<string> itemNames) { charName = bodyName; this.itemNames = new HashSet<string>(itemNames); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public void Resolve() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Invalid comparison between Unknown and I4 //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006f: 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_0074: Invalid comparison between Unknown and I4 //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: 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) if (charName == null) { return; } BodyIndex val = BodyCatalog.FindBodyIndex(charName); if ((int)val == -1) { Log.Warning("Couldn't find body matching " + charName + ", skipping"); return; } HashSet<ItemIndex> hashSet = new HashSet<ItemIndex>(); foreach (string itemName in itemNames) { ItemIndex val2 = ItemCatalog.FindItemIndex(itemName); if ((int)val2 == -1) { Log.Message("Couldn't find item matching " + itemName + ", skipping"); } else { hashSet.Add(val2); } } ScrapMe.plugin.bans.dev[val].UnionWith(hashSet); if (QualityCompat.enabled) { QualityCompat.SetQualityVariantBans(val); } } } public CharItemRecord dev = new CharItemRecord(); internal CharItemRecord quality = new CharItemRecord(); internal CharItemRecord user = new CharItemRecord(); internal CharItemRecord unbans = new CharItemRecord(); internal static readonly List<PresetBans> presets = new List<PresetBans>(2) { new PresetBans("RobRavagerBody", new <>z__ReadOnlyArray<string>(new string[2] { "JumpBoost", "JumpDamageStrike" })), new PresetBans("RobBelmontBody", new <>z__ReadOnlyArray<string>(new string[3] { "BarrierOnCooldown", "JumpBoost", "JumpDamageStrike" })) }; internal IEnumerable<BodyIndex> MappedBodies => dev.record.Keys.Union(quality.record.Keys).Union(user.record.Keys).Union(unbans.record.Keys); public HashSet<ItemIndex> All(BodyIndex index, bool withQuality = true) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //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) IEnumerable<ItemIndex> first = dev[index].Union(user[index]); if (withQuality) { first = first.Union(quality[index]); } return first.Except(unbans[index]).ToHashSet(); } } internal class ConfigManager { public readonly ConfigEntry<string> charNames = ((BaseUnityPlugin)ScrapMe.plugin).Config.Bind<string>("! Main", "Characters to Change", "", "Characters to look for, comma-separated. Must be as prefab names, i.e. CommandoBody."); public readonly Dictionary<string, ConfigEntry<string>> itemBans = new Dictionary<string, ConfigEntry<string>>(); public readonly Dictionary<string, ConfigEntry<string>> itemUnbans = new Dictionary<string, ConfigEntry<string>>(); public readonly HashSet<string> mappedChars = new HashSet<string>(); public bool BindBody(string body) { if (!mappedChars.Add(body)) { return false; } ConfigEntry<string> val = ((BaseUnityPlugin)ScrapMe.plugin).Config.Bind<string>("Characters", body + "_ItemBans", "", "Items to auto-scrap for " + body + ", comma-separated, using prefab names, i.e. HealingPotion."); itemBans[body] = val; RiskOfOptionsCompat.CreateConfigEntry(val); ConfigEntry<string> val2 = ((BaseUnityPlugin)ScrapMe.plugin).Config.Bind<string>("Characters", body + "_ItemUnbans", "", "Unbanned items for " + body + ". Use at your own risk; the items were likely banned for a reason."); itemUnbans[body] = val2; RiskOfOptionsCompat.CreateConfigEntry(val2); return true; } public void Load() { //IL_0087: 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_010f: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) ((BaseUnityPlugin)ScrapMe.plugin).Config.SaveOnConfigSet = false; IEnumerable<string> enumerable = from b in charNames.Value.Split(",") select b.Trim() into b where !string.IsNullOrEmpty(b) select b; foreach (string item in enumerable) { BodyIndex val = BodyCatalog.FindBodyIndex(item); BindBody(item); HashSet<string> source = new HashSet<string>(from b in itemBans[item].Value.Split(",") select b.Trim() into b where !string.IsNullOrEmpty(b) select b); ScrapMe.plugin.bans.user[val] = new HashSet<ItemIndex>(((IEnumerable<string>)source).Select((Func<string, ItemIndex>)ItemCatalog.FindItemIndex)); HashSet<string> source2 = new HashSet<string>(from b in itemUnbans[item].Value.Split(",") select b.Trim() into b where !string.IsNullOrEmpty(b) select b); ScrapMe.plugin.bans.unbans[val] = new HashSet<ItemIndex>(((IEnumerable<string>)source2).Select((Func<string, ItemIndex>)ItemCatalog.FindItemIndex)); if (QualityCompat.enabled) { QualityCompat.SetQualityVariantBans(val); } } ((BaseUnityPlugin)ScrapMe.plugin).Config.Save(); ((BaseUnityPlugin)ScrapMe.plugin).Config.SaveOnConfigSet = true; } public void Cleanup() { } public bool UnbindBody(string bodyName) { if (RiskOfOptionsCompat.mappedEntries.Contains(bodyName)) { return false; } ((BaseUnityPlugin)ScrapMe.plugin).Config.Remove(((ConfigEntryBase)itemBans[bodyName]).Definition); ((BaseUnityPlugin)ScrapMe.plugin).Config.Remove(((ConfigEntryBase)itemUnbans[bodyName]).Definition); return true; } } 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); } } public static class QualityCompat { private static bool? _enabled; public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.Gorakh.ItemQualities"); } return _enabled.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void SetQualityVariantBans() { //IL_0042: 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_0049: Unknown result type (might be due to invalid IL or missing references) if (!enabled) { return; } ScrapMe.plugin.bans.quality.record.Clear(); foreach (BodyIndex mappedBody in ScrapMe.plugin.bans.MappedBodies) { SetQualityVariantBans(mappedBody); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void SetQualityVariantBans(BodyIndex bodyIndex) { //IL_0021: 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_004b: 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_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: 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_006c: Invalid comparison between Unknown and I4 //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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) if (!enabled) { return; } HashSet<ItemIndex> hashSet = ScrapMe.plugin.bans.quality[bodyIndex]; hashSet.Clear(); foreach (ItemIndex item in ScrapMe.plugin.bans.All(bodyIndex, withQuality: false)) { for (QualityTier val = (QualityTier)(QualityCatalog.GetQualityTier(item) + 1); (int)val < 4; val = (QualityTier)(val + 1)) { ItemIndex itemIndexOfQuality = QualityCatalog.GetItemIndexOfQuality(item, val); if ((int)itemIndexOfQuality != -1) { hashSet.Add(itemIndexOfQuality); } } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static ItemIndex CarryQualityToNewItem(ItemIndex oldItem, ItemIndex newItem) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0018: 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) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if (!enabled) { return newItem; } if (QualityCatalog.GetQualityTier(oldItem) == QualityCatalog.GetQualityTier(newItem)) { return newItem; } return QualityCatalog.GetItemIndexOfQuality(newItem, QualityCatalog.GetQualityTier(oldItem)); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static IEnumerable<ItemIndex> GetQualityVariants(ItemIndex baseItemIndex) { //IL_0016: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected I4, but got Unknown //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected I4, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected I4, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected I4, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected I4, but got Unknown //IL_000d: Unknown result type (might be due to invalid IL or missing references) if (!enabled) { return new <>z__ReadOnlySingleElementList<ItemIndex>(baseItemIndex); } ItemQualityGroup itemQualityGroup = QualityCatalog.GetItemQualityGroup(QualityCatalog.FindItemQualityGroupIndex(baseItemIndex)); return new <>z__ReadOnlyArray<ItemIndex>((ItemIndex[])(object)new ItemIndex[5] { (ItemIndex)(int)itemQualityGroup.BaseItemIndex, (ItemIndex)(int)itemQualityGroup.UncommonItemIndex, (ItemIndex)(int)itemQualityGroup.RareItemIndex, (ItemIndex)(int)itemQualityGroup.EpicItemIndex, (ItemIndex)(int)itemQualityGroup.LegendaryItemIndex }); } } public static class RiskOfOptionsCompat { [CompilerGenerated] private static class <>O { public static UnityAction <0>__CreateCurrentBodyEntry; } private static bool? _enabled; internal static readonly HashSet<string> mappedEntries = new HashSet<string>(); public static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); } return _enabled.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void InitConfigMenu() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown if (enabled) { ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(ScrapMe.plugin.configManager.charNames)); object obj = <>O.<0>__CreateCurrentBodyEntry; if (obj == null) { UnityAction val = CreateCurrentBodyEntry; <>O.<0>__CreateCurrentBodyEntry = val; obj = (object)val; } ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Create Entry for Current Character", "! Main", (UnityAction)obj)); ModSettingsManager.AddOption((BaseOption)new GenericButtonOption("Apply Changes", "! Main", new UnityAction(ScrapMe.plugin.configManager.Load))); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void CreateCurrentBodyEntry() { IEnumerable<string> enumerable = PlayerCharacterMasterController.instances.Select((PlayerCharacterMasterController b) => ((Object)b.body).name); foreach (string item in enumerable) { string prefabNameFromClone = Utils.GetPrefabNameFromClone(item); if (ScrapMe.plugin.configManager.BindBody(prefabNameFromClone)) { ConfigEntry<string> charNames = ScrapMe.plugin.configManager.charNames; charNames.Value = charNames.Value + "," + prefabNameFromClone; Log.Info("Created entry for body " + prefabNameFromClone); } else { Log.Info("Already had entry for " + prefabNameFromClone + ", skipping"); } } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] internal static void CreateConfigEntry(ConfigEntry<string> associated) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown if (enabled) { string key = ((ConfigEntryBase)associated).Definition.Key; if (!mappedEntries.Contains(key)) { ModSettingsManager.AddOption((BaseOption)new StringInputFieldOption(associated)); mappedEntries.Add(key); } } } } public static class RoR2EventHooks { public static void Register() { RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad)); ItemTransformation.onItemTransformedServerGlobal += HandleItemTransform; } public static void HandleItemTransform(TryTransformResult result) { //IL_0001: 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_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Invalid comparison between Unknown and I4 //IL_0035: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: 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_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) Inventory inventory = result.inventory; if ((Object)(object)inventory == (Object)null) { return; } ItemIndex itemIndex = result.givenItem.itemIndex; if ((int)itemIndex == -1 || Utils.IsCorrespondingVoidInInv(itemIndex, inventory)) { return; } CharacterMaster component = ((Component)inventory).GetComponent<CharacterMaster>(); if ((Object)(object)component == (Object)null) { return; } CharacterBody body = component.GetBody(); if ((Object)(object)body == (Object)null || !ScrapMe.plugin.bans.All(body.bodyIndex).Contains(itemIndex)) { return; } ItemIndex replacementItem = Utils.GetReplacementItem(itemIndex); if (replacementItem != itemIndex) { if ((int)replacementItem == -1) { Log.Warning($"Replacing transformed item {itemIndex} with no item"); } ItemTransformation val = default(ItemTransformation); ((ItemTransformation)(ref val)).originalItemIndex = itemIndex; ((ItemTransformation)(ref val)).newItemIndex = replacementItem; ((ItemTransformation)(ref val)).maxToTransform = int.MaxValue; val.transformationType = (ItemTransformationTypeIndex)(-1); ItemTransformation val2 = val; TryTransformResult val3 = default(TryTransformResult); if (!((ItemTransformation)(ref val2)).TryTransform(inventory, ref val3)) { Log.Warning($"Failed to replace transformed item {itemIndex} with {replacementItem}"); } } } public static void OnLoad() { ScrapMe plugin = ScrapMe.plugin; plugin.PresetBans(); plugin.configManager.Load(); RiskOfOptionsCompat.InitConfigMenu(); } } internal static class RoR2Patches { [HarmonyPatch(typeof(GenericPickupController), "AttemptGrant")] [HarmonyPrefix] public static void ReplaceWithScrapIfBannedForChar(CharacterBody body, GenericPickupController __instance, bool __runOriginal) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Invalid comparison between Unknown and I4 //IL_0098: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Invalid comparison between Unknown and I4 //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) if (!__runOriginal || (Object)(object)__instance == (Object)null || (Object)(object)body == (Object)null) { return; } HashSet<ItemIndex> hashSet = ScrapMe.plugin.bans.All(body.bodyIndex); if (hashSet.Count == 0) { return; } UniquePickup pickup = __instance.pickup; PickupDef pickupDef = PickupCatalog.GetPickupDef(pickup.pickupIndex); if (pickupDef == null || (int)pickupDef.itemIndex == -1) { return; } Log.Debug(((Object)body).name + " picking up " + pickupDef.internalName); if (hashSet.Contains(pickupDef.itemIndex) && !((Object)(object)body.inventory == (Object)null) && !Utils.IsCorrespondingVoidInInv(pickupDef.itemIndex, body.inventory)) { ItemIndex replacementItem = Utils.GetReplacementItem(pickupDef.itemIndex); if ((int)replacementItem != -1) { ItemDef itemDef = ItemCatalog.GetItemDef(replacementItem); PickupIndex val = PickupCatalog.FindPickupIndex(itemDef.itemIndex); Log.Info($"Replacing {pickupDef.internalName} with {((Object)itemDef).name} (index {val})"); __instance.pickup = new UniquePickup { pickupIndex = val, decayValue = __instance.pickup.decayValue, upgradeValue = __instance.pickup.upgradeValue }; } } } } [BepInPlugin("not_score.ScrapMe", "ScrapMe", "0.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class ScrapMe : BaseUnityPlugin { public static ScrapMe plugin; public const string PluginGUID = "not_score.ScrapMe"; public const string PluginAuthor = "not_score"; public const string PluginName = "ScrapMe"; public const string PluginVersion = "0.3.0"; internal ConfigManager configManager; internal readonly BanRecords bans = new BanRecords(); internal void Awake() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown plugin = this; Log.Init(((BaseUnityPlugin)this).Logger); Harmony val = new Harmony("not_score.ScrapMe"); val.PatchAll(typeof(RoR2Patches)); configManager = new ConfigManager(); RoR2EventHooks.Register(); } public HashSet<ItemIndex> GetDevBans(BodyIndex bodyIndex) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 //IL_000f: Unknown result type (might be due to invalid IL or missing references) return ((int)bodyIndex == -1) ? null : bans.dev[bodyIndex]; } internal void PresetBans() { BanRecords.presets.ForEach(delegate(BanRecords.PresetBans preset) { preset.Resolve(); }); } } public static class Utils { private static Dictionary<ItemTier, ItemIndex> scrapLookup = new Dictionary<ItemTier, ItemIndex>(); [Obsolete] public static string GetPrefabNameFromItem(string itemName) { return itemName.Substring(itemName.IndexOf("Index.") + 6); } public static ItemIndex GetScrapForTier(ItemTier tier) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: 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_0018: 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_001a: 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_0049: Expected I4, but got Unknown //IL_00f1: 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) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: 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_00df: Unknown result type (might be due to invalid IL or missing references) if (!scrapLookup.ContainsKey(tier)) { switch ((int)tier) { case 3: scrapLookup[tier] = ItemCatalog.FindItemIndex("Pearl"); break; case 0: case 6: scrapLookup[tier] = ItemCatalog.FindItemIndex("ScrapWhite"); break; case 1: case 7: scrapLookup[tier] = ItemCatalog.FindItemIndex("ScrapGreen"); break; case 2: case 8: scrapLookup[tier] = ItemCatalog.FindItemIndex("ScrapRed"); break; case 4: case 9: scrapLookup[tier] = ItemCatalog.FindItemIndex("ScrapYellow"); break; default: Log.Error("Failed to find appropriate replacement for item in tier " + ((Object)ItemTierCatalog.GetItemTierDef(tier)).name); return (ItemIndex)0; } } return scrapLookup[tier]; } public static ItemIndex GetReplacementItem(ItemIndex item) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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) ItemIndex scrapForTier = GetScrapForTier(ItemCatalog.GetItemDef(item).tier); if (QualityCompat.enabled) { return QualityCompat.CarryQualityToNewItem(item, scrapForTier); } return scrapForTier; } public static string GetPrefabNameFromClone(string cloneName) { return cloneName.Substring(0, cloneName.LastIndexOf("(Clone)")); } public static string SanitizePrefabName(string prefabName) { return prefabName; } public static void CheckInventory(CharacterBody body) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0082: 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) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)body == (Object)null) { return; } HashSet<ItemIndex> hashSet = ScrapMe.plugin.bans.All(body.bodyIndex); foreach (ItemIndex item in hashSet) { int itemCountPermanent = body.inventory.GetItemCountPermanent(item); if (itemCountPermanent > 0) { body.inventory.RemoveItemPermanent(item, itemCountPermanent); body.inventory.GiveItemPermanent(GetReplacementItem(item), itemCountPermanent); } float tempItemRawValue = body.inventory.GetTempItemRawValue(item); if (tempItemRawValue > 0f) { body.inventory.RemoveItemTemp(item, (float)(int)Math.Ceiling(tempItemRawValue)); body.inventory.GiveItemTemp(GetReplacementItem(item), tempItemRawValue); } } } public static bool IsCorrespondingVoidInInv(ItemIndex item, Inventory inv) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) return GetCorrespondingVoids(item).Any((ItemIndex i) => (int)i != -1 && inv.GetItemCountEffective(i) > 0); } internal static IEnumerable<ItemIndex> GetCorrespondingVoids(ItemIndex corruptionCheck) { //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_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) //IL_000a: Invalid comparison between Unknown and I4 //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) ItemIndex transformedItemIndex = ContagiousItemManager.GetTransformedItemIndex(corruptionCheck); if ((int)transformedItemIndex == -1) { return Array.Empty<ItemIndex>(); } if (QualityCompat.enabled) { return QualityCompat.GetQualityVariants(transformedItemIndex); } return new <>z__ReadOnlySingleElementList<ItemIndex>(transformedItemIndex); } } } [CompilerGenerated] internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } [CompilerGenerated] internal sealed class <>z__ReadOnlySingleElementList<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { private sealed class Enumerator : IDisposable, IEnumerator, IEnumerator<T> { object IEnumerator.Current => _item; T IEnumerator<T>.Current => _item; public Enumerator(T item) { _item = item; } bool IEnumerator.MoveNext() { return !_moveNextCalled && (_moveNextCalled = true); } void IEnumerator.Reset() { _moveNextCalled = false; } void IDisposable.Dispose() { } } int ICollection.Count => 1; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => 1; T IReadOnlyList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } } int ICollection<T>.Count => 1; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } public <>z__ReadOnlySingleElementList(T item) { _item = item; } IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(_item); } void ICollection.CopyTo(Array array, int index) { array.SetValue(_item, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return EqualityComparer<T>.Default.Equals(_item, (T)value); } int IList.IndexOf(object value) { return (!EqualityComparer<T>.Default.Equals(_item, (T)value)) ? (-1) : 0; } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return new Enumerator(_item); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return EqualityComparer<T>.Default.Equals(_item, item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _item; } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return (!EqualityComparer<T>.Default.Equals(_item, item)) ? (-1) : 0; } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }