using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On.RoR2;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ItemDuplicator")]
[assembly: AssemblyDescription("Duplicates items on pickup with full configuration support")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ItemDuplicator")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 ItemDuplicator
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.yourname.itemduplicator", "ItemDuplicator", "1.0.2")]
public class ItemDuplicatorPlugin : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static IsDisabledDelegate <>9__17_0;
public static IsDisabledDelegate <>9__17_1;
public static IsDisabledDelegate <>9__17_2;
public static IsDisabledDelegate <>9__17_3;
public static IsDisabledDelegate <>9__17_4;
public static IsDisabledDelegate <>9__17_5;
internal bool <RegisterRiskOfOptions>b__17_0()
{
return !ModEnabled.Value;
}
internal bool <RegisterRiskOfOptions>b__17_1()
{
return !ModEnabled.Value;
}
internal bool <RegisterRiskOfOptions>b__17_2()
{
return !ModEnabled.Value;
}
internal bool <RegisterRiskOfOptions>b__17_3()
{
return !ModEnabled.Value;
}
internal bool <RegisterRiskOfOptions>b__17_4()
{
return !ModEnabled.Value;
}
internal bool <RegisterRiskOfOptions>b__17_5()
{
return !ModEnabled.Value;
}
}
[CompilerGenerated]
private sealed class <GiveItemsGradually>d__22 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public Inventory inventory;
public int total;
public ItemDuplicatorPlugin <>4__this;
public ItemIndex itemIndex;
private int <batchSize>5__2;
private int <given>5__3;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GiveItemsGradually>d__22(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
int num = <>1__state;
ItemDuplicatorPlugin itemDuplicatorPlugin = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
<batchSize>5__2 = 50;
<given>5__3 = 0;
break;
case 1:
<>1__state = -1;
break;
}
if (<given>5__3 < total)
{
if ((Object)(object)inventory == (Object)null)
{
return false;
}
int num2 = Mathf.Min(<batchSize>5__2, total - <given>5__3);
itemDuplicatorPlugin._givingBonus = true;
if (itemDuplicatorPlugin._giveItemOrig != null)
{
itemDuplicatorPlugin._giveItemOrig.Invoke(inventory, itemIndex, num2);
}
else
{
inventory.GiveItemPermanent(itemIndex, num2);
}
itemDuplicatorPlugin._givingBonus = false;
<given>5__3 += num2;
<>2__current = null;
<>1__state = 1;
return true;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public const string PluginGUID = "com.yourname.itemduplicator";
public const string PluginName = "ItemDuplicator";
public const string PluginVersion = "1.0.2";
internal static ManualLogSource? Log;
public static ConfigEntry<bool>? ModEnabled;
public static ConfigEntry<int>? DuplicateCount;
public static ConfigEntry<bool>? DuplicateLunarItems;
public static ConfigEntry<bool>? DuplicateVoidItems;
public static ConfigEntry<bool>? ShredderTakesFullStack;
public static ConfigEntry<bool>? PrinterTakesFullStack;
public static ConfigEntry<bool>? LockItemsOnPickup;
public static ConfigEntry<string>? LockDuration;
private bool _itemsLockedThisRun;
private bool _itemsLockedThisStage;
private bool _givingBonus;
private orig_GiveItem_ItemIndex_int? _giveItemOrig;
private bool _removingFullStack;
private void Awake()
{
Log = ((BaseUnityPlugin)this).Logger;
BindConfig();
if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
{
RegisterRiskOfOptions();
}
HookEvents();
Log.LogInfo((object)"ItemDuplicator v1.0.2 loaded!");
}
private void BindConfig()
{
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Expected O, but got Unknown
ModEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ModEnabled", true, "Master switch. When false the mod does nothing.");
DuplicateCount = ((BaseUnityPlugin)this).Config.Bind<int>("General", "DuplicateCount", 999, new ConfigDescription("How many copies of each item you receive on pickup (1 = normal, 999 = max stack).", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 999), Array.Empty<object>()));
DuplicateLunarItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Item Types", "DuplicateLunarItems", true, "Should lunar items (blue items) be duplicated?");
DuplicateVoidItems = ((BaseUnityPlugin)this).Config.Bind<bool>("Item Types", "DuplicateVoidItems", true, "Should void-tier items be duplicated? (Survivors of the Void DLC)");
ShredderTakesFullStack = ((BaseUnityPlugin)this).Config.Bind<bool>("Machines", "ShredderTakesFullStack", false, "When true the scrapper/shredder consumes the ENTIRE stack of the chosen item instead of just one.");
PrinterTakesFullStack = ((BaseUnityPlugin)this).Config.Bind<bool>("Machines", "PrinterTakesFullStack", false, "When true the 3D printer consumes the ENTIRE stack of the chosen item instead of just one.");
LockItemsOnPickup = ((BaseUnityPlugin)this).Config.Bind<bool>("Lock", "LockItemsOnPickup", false, "When true, picking up an item prevents you from collecting any more items for the lock duration.");
LockDuration = ((BaseUnityPlugin)this).Config.Bind<string>("Lock", "LockDuration", "stage", new ConfigDescription("How long the item-pickup lock lasts.", (AcceptableValueBase)(object)new AcceptableValueList<string>(new string[2] { "stage", "run" }), Array.Empty<object>()));
}
private void RegisterRiskOfOptions()
{
//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_002e: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//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_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
//IL_0069: 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_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Expected O, but got Unknown
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
//IL_00e7: Expected O, but got Unknown
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Expected O, but got Unknown
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Expected O, but got Unknown
//IL_012b: Expected O, but got Unknown
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Expected O, but got Unknown
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: 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_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Expected O, but got Unknown
//IL_016f: Expected O, but got Unknown
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Expected O, but got Unknown
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Expected O, but got Unknown
//IL_01b3: Expected O, but got Unknown
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Expected O, but got Unknown
//IL_01bd: 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_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: 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_01a9: Expected O, but got Unknown
//IL_01f7: Expected O, but got Unknown
//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
//IL_01fc: Expected O, but got Unknown
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Expected O, but got Unknown
ModSettingsManager.SetModDescription("Duplicate items on pickup. Configure multiplier, item types, machines, and lock behaviour.", "com.yourname.itemduplicator", "ItemDuplicator");
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(ModEnabled, new CheckBoxConfig
{
description = "Master switch. Turn off to disable the mod without uninstalling it."
}));
ModSettingsManager.AddOption((BaseOption)new IntSliderOption(DuplicateCount, new IntSliderConfig
{
description = "Total copies of each item received per pickup. 1 = vanilla, 999 = maximum stack.",
min = 0,
max = 999
}));
ConfigEntry<bool>? duplicateLunarItems = DuplicateLunarItems;
CheckBoxConfig val = new CheckBoxConfig
{
description = "Should lunar (blue) items be duplicated?"
};
object obj = <>c.<>9__17_0;
if (obj == null)
{
IsDisabledDelegate val2 = () => !ModEnabled.Value;
<>c.<>9__17_0 = val2;
obj = (object)val2;
}
((BaseOptionConfig)val).checkIfDisabled = (IsDisabledDelegate)obj;
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(duplicateLunarItems, val));
ConfigEntry<bool>? duplicateVoidItems = DuplicateVoidItems;
CheckBoxConfig val3 = new CheckBoxConfig
{
description = "Should void-tier items (Survivors of the Void DLC) be duplicated?"
};
object obj2 = <>c.<>9__17_1;
if (obj2 == null)
{
IsDisabledDelegate val4 = () => !ModEnabled.Value;
<>c.<>9__17_1 = val4;
obj2 = (object)val4;
}
((BaseOptionConfig)val3).checkIfDisabled = (IsDisabledDelegate)obj2;
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(duplicateVoidItems, val3));
ConfigEntry<bool>? shredderTakesFullStack = ShredderTakesFullStack;
CheckBoxConfig val5 = new CheckBoxConfig
{
description = "When ON, the scrapper/shredder removes your ENTIRE stack of the chosen item instead of just one."
};
object obj3 = <>c.<>9__17_2;
if (obj3 == null)
{
IsDisabledDelegate val6 = () => !ModEnabled.Value;
<>c.<>9__17_2 = val6;
obj3 = (object)val6;
}
((BaseOptionConfig)val5).checkIfDisabled = (IsDisabledDelegate)obj3;
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(shredderTakesFullStack, val5));
ConfigEntry<bool>? printerTakesFullStack = PrinterTakesFullStack;
CheckBoxConfig val7 = new CheckBoxConfig
{
description = "When ON, the 3D printer removes your ENTIRE stack of the input item instead of just one."
};
object obj4 = <>c.<>9__17_3;
if (obj4 == null)
{
IsDisabledDelegate val8 = () => !ModEnabled.Value;
<>c.<>9__17_3 = val8;
obj4 = (object)val8;
}
((BaseOptionConfig)val7).checkIfDisabled = (IsDisabledDelegate)obj4;
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(printerTakesFullStack, val7));
ConfigEntry<bool>? lockItemsOnPickup = LockItemsOnPickup;
CheckBoxConfig val9 = new CheckBoxConfig
{
description = "When ON, picking up an item prevents you from collecting more items until the lock expires."
};
object obj5 = <>c.<>9__17_4;
if (obj5 == null)
{
IsDisabledDelegate val10 = () => !ModEnabled.Value;
<>c.<>9__17_4 = val10;
obj5 = (object)val10;
}
((BaseOptionConfig)val9).checkIfDisabled = (IsDisabledDelegate)obj5;
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(lockItemsOnPickup, val9));
ConfigEntry<string>? lockDuration = LockDuration;
ChoiceConfig val11 = new ChoiceConfig
{
description = "How long the pickup lock lasts: 'stage' resets each stage, 'run' lasts the whole run. Only applies when Lock Items On Pickup is enabled."
};
object obj6 = <>c.<>9__17_5;
if (obj6 == null)
{
IsDisabledDelegate val12 = () => !ModEnabled.Value;
<>c.<>9__17_5 = val12;
obj6 = (object)val12;
}
((BaseOptionConfig)val11).checkIfDisabled = (IsDisabledDelegate)obj6;
ModSettingsManager.AddOption((BaseOption)new ChoiceOption((ConfigEntryBase)(object)lockDuration, val11));
}
private void HookEvents()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
Inventory.GiveItem_ItemIndex_int += new hook_GiveItem_ItemIndex_int(OnGiveItem);
Inventory.RemoveItem_ItemIndex_int += new hook_RemoveItem_ItemIndex_int(OnRemoveItem);
ShopTerminalBehavior.DropPickup += new hook_DropPickup(OnPrinterDrop);
Run.BeginStage += new hook_BeginStage(OnBeginStage);
Run.Start += new hook_Start(OnRunStart);
}
private void OnGiveItem(orig_GiveItem_ItemIndex_int orig, Inventory self, ItemIndex itemIndex, int count)
{
//IL_0009: 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)
_giveItemOrig = orig;
orig.Invoke(self, itemIndex, count);
if (!_givingBonus)
{
TryGiveBonus(self, itemIndex, count);
}
}
private void TryGiveBonus(Inventory self, ItemIndex itemIndex, int count)
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
if (!ModEnabled.Value || !NetworkServer.active || (LockItemsOnPickup.Value && ((LockDuration.Value.ToLower() == "run") ? _itemsLockedThisRun : _itemsLockedThisStage)))
{
return;
}
ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
if ((Object)(object)itemDef == (Object)null || !ShouldDuplicate(itemDef))
{
return;
}
int num = Mathf.Clamp(DuplicateCount.Value - 1, 0, 999) * count;
if (num > 0)
{
_givingBonus = true;
try
{
((MonoBehaviour)this).StartCoroutine(GiveItemsGradually(self, itemIndex, num));
}
finally
{
_givingBonus = false;
}
if (LockItemsOnPickup.Value)
{
_itemsLockedThisRun = true;
_itemsLockedThisStage = true;
}
}
}
[IteratorStateMachine(typeof(<GiveItemsGradually>d__22))]
private IEnumerator GiveItemsGradually(Inventory inventory, ItemIndex itemIndex, int total)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GiveItemsGradually>d__22(0)
{
<>4__this = this,
inventory = inventory,
itemIndex = itemIndex,
total = total
};
}
private bool ShouldDuplicate(ItemDef item)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Invalid comparison between Unknown and I4
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Invalid comparison between Unknown and I4
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Invalid comparison between Unknown and I4
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Invalid comparison between Unknown and I4
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Invalid comparison between Unknown and I4
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Invalid comparison between Unknown and I4
if ((int)item.tier == 3 && !DuplicateLunarItems.Value)
{
return false;
}
if (((int)item.tier == 6 || (int)item.tier == 7 || (int)item.tier == 8 || (int)item.tier == 9) && !DuplicateVoidItems.Value)
{
return false;
}
if ((int)item.tier == 5)
{
return false;
}
return true;
}
private void OnRemoveItem(orig_RemoveItem_ItemIndex_int orig, Inventory self, ItemIndex itemIndex, int count)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: 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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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)
if (!ModEnabled.Value || !ShredderTakesFullStack.Value || _removingFullStack)
{
orig.Invoke(self, itemIndex, count);
return;
}
if (!NetworkServer.active)
{
orig.Invoke(self, itemIndex, count);
return;
}
if (count != 1)
{
orig.Invoke(self, itemIndex, count);
return;
}
int itemCountPermanent = self.GetItemCountPermanent(itemIndex);
if (itemCountPermanent <= 1)
{
orig.Invoke(self, itemIndex, count);
return;
}
_removingFullStack = true;
try
{
orig.Invoke(self, itemIndex, itemCountPermanent);
}
finally
{
_removingFullStack = false;
}
}
private void OnPrinterDrop(orig_DropPickup orig, ShopTerminalBehavior self)
{
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Invalid comparison between Unknown and I4
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Invalid comparison between Unknown and I4
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Invalid comparison between Unknown and I4
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Invalid comparison between Unknown and I4
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: 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_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: 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_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
if (!ModEnabled.Value || !PrinterTakesFullStack.Value)
{
orig.Invoke(self);
return;
}
if (!NetworkServer.active)
{
orig.Invoke(self);
return;
}
PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>();
CharacterBody val = null;
if ((Object)(object)component?.lastActivator != (Object)null)
{
val = ((Component)component.lastActivator).GetComponent<CharacterBody>();
}
bool flag = (Object)(object)component != (Object)null && (int)component.costType != 0 && (int)component.costType != 1 && (int)component.costType != 2 && (int)component.costType != 3 && (int)component.costType != 14;
if ((Object)(object)((val != null) ? val.inventory : null) != (Object)null && flag)
{
PickupDef pickupDef = PickupCatalog.GetPickupDef(self.CurrentPickup().pickupIndex);
ItemDef val2 = ((pickupDef != null) ? ItemCatalog.GetItemDef(pickupDef.itemIndex) : null);
if ((Object)(object)val2 != (Object)null)
{
foreach (ItemIndex item in val.inventory.itemAcquisitionOrder)
{
if (val.inventory.GetItemCountPermanent(item) <= 0)
{
continue;
}
ItemDef itemDef = ItemCatalog.GetItemDef(item);
if (!((Object)(object)itemDef == (Object)null) && itemDef.tier == val2.tier)
{
int itemCountPermanent = val.inventory.GetItemCountPermanent(item);
if (itemCountPermanent > 1)
{
val.inventory.RemoveItemPermanent(item, itemCountPermanent - 1);
}
break;
}
}
}
}
orig.Invoke(self);
}
private void OnBeginStage(orig_BeginStage orig, Run self)
{
orig.Invoke(self);
_itemsLockedThisStage = false;
}
private void OnRunStart(orig_Start orig, Run self)
{
orig.Invoke(self);
_itemsLockedThisRun = false;
_itemsLockedThisStage = false;
}
}
}