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 RegeneratingScrapTweak v1.1.0
RegeneratingScrapTweak.dll
Decompiled 6 months agousing System; using System.Collections.Generic; using System.Diagnostics; 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 Microsoft.CodeAnalysis; using On.RoR2; using R2API; using R2API.Utils; using RoR2; using RoR2.Audio; using RoR2.Items; using UnityEngine; using UnityEngine.AddressableAssets; [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("RegeneratingScrapTweak")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RegeneratingScrapTweak")] [assembly: AssemblyTitle("RegeneratingScrapTweak")] [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 RegeneratingScrapTweak { 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("Tero.RegeneratingScrapTweak", "RegeneratingScrapTweak", "1.1.0")] [R2APISubmoduleDependency(new string[] { "LanguageAPI" })] public class RegeneratingScrapTweak : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Init <>9__14_0; public static hook_IsAffordable <>9__14_1; public static hook_PayCost <>9__14_2; internal void <Awake>b__14_0(orig_Init orig) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(); if ((Object)(object)Items.RegeneratingScrap != (Object)null) { ItemDef itemDef = ItemCatalog.GetItemDef(Items.RegeneratingScrap.itemIndex); Log.LogDebug(itemDef.descriptionToken); Log.LogDebug(itemDef.pickupToken); } if (TradeForRed && TradeForYellow) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with ANY 3D Printer. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with ANY 3D Printer. At the start of each stage, it regenerates.", "en"); } else if (TradeForYellow) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsDamage>Overgrown</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsDamage>Overgrown</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } else if (TradeForRed) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsHealth>Legendary</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsHealth>Legendary</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } else { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common or <style=cIsHealing>Uncommon</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common or <style=cIsHealing>Uncommon</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } } internal bool <Awake>b__14_1(orig_IsAffordable orig, CostTypeDef self, int cost, Interactor activator) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Invalid comparison between Unknown and I4 //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Invalid comparison between Unknown and I4 if (self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 0) { CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return false; } Inventory inventory = component.inventory; if (!Object.op_Implicit((Object)(object)inventory)) { return false; } int num = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num = inventory.GetItemCountEffective(Items.RegeneratingScrap); } if (num >= cost) { return true; } return inventory.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)0, cost - num); } if (TradeForRed && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 2) { CharacterBody component2 = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component2)) { return false; } Inventory inventory2 = component2.inventory; if (!Object.op_Implicit((Object)(object)inventory2)) { return false; } int num2 = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num2 = inventory2.GetItemCountEffective(Items.RegeneratingScrap); } if (num2 >= cost) { return true; } return inventory2.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)2, cost - num2); } if (TradeForYellow && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 4) { CharacterBody component3 = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component3)) { return false; } Inventory inventory3 = component3.inventory; if (!Object.op_Implicit((Object)(object)inventory3)) { return false; } int num3 = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num3 = inventory3.GetItemCountEffective(Items.RegeneratingScrap); } if (num3 >= cost) { return true; } return inventory3.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)4, cost - num3); } return orig.Invoke(self, cost, activator); } internal void <Awake>b__14_2(orig_PayCost orig, CostTypeDef self, PayCostContext context, PayCostResults results) { //IL_0014: 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_003b: Invalid comparison between Unknown and I4 //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Invalid comparison between Unknown and I4 //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Expected O, but got Unknown if ((self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 0) || (TradeForRed && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 2) || (TradeForYellow && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 4)) { int num = 0; CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { orig.Invoke(self, context, results); return; } Inventory activatorInventory = context.activatorInventory; if (!Object.op_Implicit((Object)(object)activatorInventory)) { orig.Invoke(self, context, results); return; } if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num = activatorInventory.GetItemCountEffective(Items.RegeneratingScrap); } ItemTransformation val; if (num >= context.cost) { val = default(ItemTransformation); ((ItemTransformation)(ref val)).originalItemIndex = Items.RegeneratingScrap.itemIndex; ((ItemTransformation)(ref val)).newItemIndex = Items.RegeneratingScrapConsumed.itemIndex; ((ItemTransformation)(ref val)).maxToTransform = context.cost; ((ItemTransformation)(ref val)).forbidTempItems = true; ItemTransformation val2 = val; TryTransformResult val3 = default(TryTransformResult); if (((ItemTransformation)(ref val2)).TryTransform(activatorInventory, ref val3)) { results.AddTakenItemsFromTransformation(ref val3); } } else { context.cost -= num; orig.Invoke(self, context, results); if (num > 0) { val = default(ItemTransformation); ((ItemTransformation)(ref val)).originalItemIndex = Items.RegeneratingScrap.itemIndex; ((ItemTransformation)(ref val)).newItemIndex = Items.RegeneratingScrapConsumed.itemIndex; ((ItemTransformation)(ref val)).maxToTransform = num; ((ItemTransformation)(ref val)).forbidTempItems = true; ItemTransformation val4 = val; TryTransformResult val5 = default(TryTransformResult); if (((ItemTransformation)(ref val4)).TryTransform(activatorInventory, ref val5)) { results.AddTakenItemsFromTransformation(ref val5); } context.cost = num; } } if (num <= 0) { return; } EntitySoundManager.EmitSoundServer(NetworkSoundEventCatalog.FindNetworkSoundEventIndex("Play_item_proc_regenScrap_consume"), ((Component)context.activatorBody).gameObject); ModelLocator component2 = ((Component)context.activatorBody).GetComponent<ModelLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform modelTransform = component2.modelTransform; if (Object.op_Implicit((Object)(object)modelTransform)) { CharacterModel component3 = ((Component)modelTransform).GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component3)) { List<GameObject> itemDisplayObjects = component3.GetItemDisplayObjects(Items.RegeneratingScrap.itemIndex); if (itemDisplayObjects.Count > 0) { GameObject val6 = itemDisplayObjects[0]; GameObject val7 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionDisplay.prefab").WaitForCompletion(); EffectData val8 = new EffectData { origin = val6.transform.position, rotation = val6.transform.rotation }; EffectManager.SpawnEffect(val7, val8, true); } } } } EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionInPrinter.prefab").WaitForCompletion(), context.purchasedObject, "DropPivot", true); CharacterMasterNotificationQueue.SendTransformNotification(context.activatorBody.master, Items.RegeneratingScrap.itemIndex, Items.RegeneratingScrapConsumed.itemIndex, (TransformationType)0); MultiShopCardUtils.OnNonMoneyPurchase(context); } else { orig.Invoke(self, context, results); } } } public const string PluginGUID = "Tero.RegeneratingScrapTweak"; public const string PluginAuthor = "Tero"; public const string PluginName = "RegeneratingScrapTweak"; public const string PluginVersion = "1.1.0"; public static bool TradeForYellow; public static bool TradeForRed; public static ConfigEntry<bool> CanTradeForYellow { get; set; } public static ConfigEntry<bool> CanTradeForRed { get; set; } public void Awake() { //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); try { CanTradeForYellow = ((BaseUnityPlugin)this).Config.Bind<bool>("RegeneratingScrapTweak", "CanTradeForYellow", false, "Whether or not Regenerating Scrap can count as a Yellow item"); TradeForYellow = CanTradeForYellow.Value; } catch (Exception) { } try { CanTradeForRed = ((BaseUnityPlugin)this).Config.Bind<bool>("RegeneratingScrapTweak", "CanTradeForRed", false, "Whether or not Regenerating Scrap can count as a Red item"); TradeForRed = CanTradeForRed.Value; } catch (Exception) { } object obj = <>c.<>9__14_0; if (obj == null) { hook_Init val = delegate(orig_Init orig) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(); if ((Object)(object)Items.RegeneratingScrap != (Object)null) { ItemDef itemDef = ItemCatalog.GetItemDef(Items.RegeneratingScrap.itemIndex); Log.LogDebug(itemDef.descriptionToken); Log.LogDebug(itemDef.pickupToken); } if (TradeForRed && TradeForYellow) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with ANY 3D Printer. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with ANY 3D Printer. At the start of each stage, it regenerates.", "en"); } else if (TradeForYellow) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsDamage>Overgrown</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsDamage>Overgrown</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } else if (TradeForRed) { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsHealth>Legendary</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common, <style=cIsHealing>Uncommon</style>, or <style=cIsHealth>Legendary</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } else { LanguageAPI.Add("ITEM_REGENERATINGSCRAP_PICKUP", "Prioritized when used with Common or <style=cIsHealing>Uncommon</style> 3D Printers. Usable once per stage.", "en"); LanguageAPI.Add("ITEM_REGENERATINGSCRAP_DESC", "Does nothing. Prioritized when used with Common or <style=cIsHealing>Uncommon</style> 3D Printers. At the start of each stage, it regenerates.", "en"); } }; <>c.<>9__14_0 = val; obj = (object)val; } ItemCatalog.Init += (hook_Init)obj; object obj2 = <>c.<>9__14_1; if (obj2 == null) { hook_IsAffordable val2 = delegate(orig_IsAffordable orig, CostTypeDef self, int cost, Interactor activator) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Invalid comparison between Unknown and I4 //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Invalid comparison between Unknown and I4 if (self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 0) { CharacterBody component4 = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component4)) { return false; } Inventory inventory = component4.inventory; if (!Object.op_Implicit((Object)(object)inventory)) { return false; } int num2 = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num2 = inventory.GetItemCountEffective(Items.RegeneratingScrap); } if (num2 >= cost) { return true; } return inventory.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)0, cost - num2); } if (TradeForRed && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 2) { CharacterBody component5 = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component5)) { return false; } Inventory inventory2 = component5.inventory; if (!Object.op_Implicit((Object)(object)inventory2)) { return false; } int num3 = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num3 = inventory2.GetItemCountEffective(Items.RegeneratingScrap); } if (num3 >= cost) { return true; } return inventory2.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)2, cost - num3); } if (TradeForYellow && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 4) { CharacterBody component6 = ((Component)activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component6)) { return false; } Inventory inventory3 = component6.inventory; if (!Object.op_Implicit((Object)(object)inventory3)) { return false; } int num4 = 0; if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num4 = inventory3.GetItemCountEffective(Items.RegeneratingScrap); } if (num4 >= cost) { return true; } return inventory3.HasAtLeastXTotalRemovablePermanentItemsOfTier((ItemTier)4, cost - num4); } return orig.Invoke(self, cost, activator); }; <>c.<>9__14_1 = val2; obj2 = (object)val2; } CostTypeDef.IsAffordable += (hook_IsAffordable)obj2; object obj3 = <>c.<>9__14_2; if (obj3 == null) { hook_PayCost val3 = delegate(orig_PayCost orig, CostTypeDef self, PayCostContext context, PayCostResults results) { //IL_0014: 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_003b: Invalid comparison between Unknown and I4 //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Invalid comparison between Unknown and I4 //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Expected O, but got Unknown if ((self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 0) || (TradeForRed && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 2) || (TradeForYellow && self.costStringFormatToken == "COST_ITEM_FORMAT" && (int)self.itemTier == 4)) { int num = 0; CharacterBody component = ((Component)context.activator).GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { orig.Invoke(self, context, results); } else { Inventory activatorInventory = context.activatorInventory; if (!Object.op_Implicit((Object)(object)activatorInventory)) { orig.Invoke(self, context, results); } else { if ((Object)(object)Items.RegeneratingScrap != (Object)null) { num = activatorInventory.GetItemCountEffective(Items.RegeneratingScrap); } ItemTransformation val4; if (num >= context.cost) { val4 = default(ItemTransformation); ((ItemTransformation)(ref val4)).originalItemIndex = Items.RegeneratingScrap.itemIndex; ((ItemTransformation)(ref val4)).newItemIndex = Items.RegeneratingScrapConsumed.itemIndex; ((ItemTransformation)(ref val4)).maxToTransform = context.cost; ((ItemTransformation)(ref val4)).forbidTempItems = true; ItemTransformation val5 = val4; TryTransformResult val6 = default(TryTransformResult); if (((ItemTransformation)(ref val5)).TryTransform(activatorInventory, ref val6)) { results.AddTakenItemsFromTransformation(ref val6); } } else { context.cost -= num; orig.Invoke(self, context, results); if (num > 0) { val4 = default(ItemTransformation); ((ItemTransformation)(ref val4)).originalItemIndex = Items.RegeneratingScrap.itemIndex; ((ItemTransformation)(ref val4)).newItemIndex = Items.RegeneratingScrapConsumed.itemIndex; ((ItemTransformation)(ref val4)).maxToTransform = num; ((ItemTransformation)(ref val4)).forbidTempItems = true; ItemTransformation val7 = val4; TryTransformResult val8 = default(TryTransformResult); if (((ItemTransformation)(ref val7)).TryTransform(activatorInventory, ref val8)) { results.AddTakenItemsFromTransformation(ref val8); } context.cost = num; } } if (num > 0) { EntitySoundManager.EmitSoundServer(NetworkSoundEventCatalog.FindNetworkSoundEventIndex("Play_item_proc_regenScrap_consume"), ((Component)context.activatorBody).gameObject); ModelLocator component2 = ((Component)context.activatorBody).GetComponent<ModelLocator>(); if (Object.op_Implicit((Object)(object)component)) { Transform modelTransform = component2.modelTransform; if (Object.op_Implicit((Object)(object)modelTransform)) { CharacterModel component3 = ((Component)modelTransform).GetComponent<CharacterModel>(); if (Object.op_Implicit((Object)(object)component3)) { List<GameObject> itemDisplayObjects = component3.GetItemDisplayObjects(Items.RegeneratingScrap.itemIndex); if (itemDisplayObjects.Count > 0) { GameObject val9 = itemDisplayObjects[0]; GameObject val10 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionDisplay.prefab").WaitForCompletion(); EffectData val11 = new EffectData { origin = val9.transform.position, rotation = val9.transform.rotation }; EffectManager.SpawnEffect(val10, val11, true); } } } } EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionInPrinter.prefab").WaitForCompletion(), context.purchasedObject, "DropPivot", true); CharacterMasterNotificationQueue.SendTransformNotification(context.activatorBody.master, Items.RegeneratingScrap.itemIndex, Items.RegeneratingScrapConsumed.itemIndex, (TransformationType)0); MultiShopCardUtils.OnNonMoneyPurchase(context); } } } } else { orig.Invoke(self, context, results); } }; <>c.<>9__14_2 = val3; obj3 = (object)val3; } CostTypeDef.PayCost += (hook_PayCost)obj3; } } }