using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BubbetsItems;
using EntityStates;
using EntityStates.DroneAssemblyStation;
using EntityStates.DroneCombiner;
using EntityStates.DroneScrapper;
using EntityStates.Duplicator;
using EntityStates.MealPrep;
using EntityStates.Scrapper;
using HarmonyLib;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.DroneAssemblyStation;
using On.EntityStates.DroneCombiner;
using On.EntityStates.DroneScrapper;
using On.EntityStates.Duplicator;
using On.EntityStates.MealPrep;
using On.EntityStates.Scrapper;
using On.RoR2;
using R2API;
using RoR2;
using ShrineOfRepair.Behaviours;
using ShrineOfRepair.Modules;
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.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("LimitedInteractables")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+5c5354fbd558b225db284cbad0fe0113c85a74fe")]
[assembly: AssemblyProduct("LimitedInteractables")]
[assembly: AssemblyTitle("LimitedInteractables")]
[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 LimitedInteractables
{
public class CleansingPool
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_0;
public static Action <>9__0_1;
public static hook_Start <>9__0_2;
public static hook_OnInteractionBegin <>9__0_3;
public static hook_DropPickup <>9__0_4;
internal void <Patch>b__0_0(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscShrineCleanse", "RoR2/Base/ShrineCleanse/iscShrineCleanse.asset", Main.CleansingPoolFrequency.Value, Main.CleansingPoolCost.Value);
}
internal void <Patch>b__0_1()
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: 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)
//IL_0092: 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_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: 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_0090: 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_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
if (!Main.CleansingPoolTakesEquipments.Value)
{
ShrineCleanseBehavior.cleansableEquipments = Array.Empty<EquipmentIndex>();
LunarItemOrEquipmentCostTypeHelper.lunarEquipmentIndices = Array.Empty<EquipmentIndex>();
}
else
{
if (!Main.CleansingPoolVoidLunar.Value || !Chainloader.PluginInfos.ContainsKey("bubbet.bubbetsitems"))
{
return;
}
List<ItemIndex> list = new List<ItemIndex>(ShrineCleanseBehavior.cleansableItems);
ItemIndex val = (ItemIndex)0;
for (ItemIndex val2 = (ItemIndex)ItemCatalog.itemCount; val < val2; val = (ItemIndex)(val + 1))
{
ItemDef itemDef = ItemCatalog.GetItemDef(val);
if (isVoidLunar(itemDef.tier))
{
list.Add(val);
}
}
ShrineCleanseBehavior.cleansableItems = list.ToArray();
List<ItemIndex> list2 = new List<ItemIndex>();
list2.AddRange(ItemCatalog.lunarItemList);
ItemIndex val3 = (ItemIndex)0;
for (ItemIndex val4 = (ItemIndex)ItemCatalog.itemCount; val3 < val4; val3 = (ItemIndex)(val3 + 1))
{
ItemDef itemDef2 = ItemCatalog.GetItemDef(val3);
if (isVoidLunar(itemDef2.tier))
{
list2.Add(itemDef2.itemIndex);
}
}
LunarItemOrEquipmentCostTypeHelper.lunarItemIndices = list2.ToArray();
}
}
internal void <Patch>b__0_2(orig_Start orig, ShopTerminalBehavior self)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse"))
{
Main.InitUses(((Component)self).gameObject, Main.CleansingPoolUses.Value);
}
orig.Invoke(self);
}
internal void <Patch>b__0_3(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse") && Main.uses.ContainsKey(((Component)self).gameObject))
{
Main.uses[((Component)self).gameObject]--;
if (Main.uses[((Component)self).gameObject] <= 0)
{
((Behaviour)((Component)self).GetComponent<PurchaseInteraction>()).enabled = false;
}
}
orig.Invoke(self, activator);
}
internal void <Patch>b__0_4(orig_DropPickup orig, ShopTerminalBehavior self)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse") && Run.instance.runRNG.RangeFloat(0f, 1f) > Main.CleansingPoolChance.Value)
{
self.SetHasBeenPurchased(true);
}
else
{
orig.Invoke(self);
}
}
}
public static void Patch()
{
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Expected O, but got Unknown
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Expected O, but got Unknown
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscShrineCleanse", "RoR2/Base/ShrineCleanse/iscShrineCleanse.asset", Main.CleansingPoolFrequency.Value, Main.CleansingPoolCost.Value);
};
RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: 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)
//IL_0092: 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_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: 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_0090: 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_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
if (!Main.CleansingPoolTakesEquipments.Value)
{
ShrineCleanseBehavior.cleansableEquipments = Array.Empty<EquipmentIndex>();
LunarItemOrEquipmentCostTypeHelper.lunarEquipmentIndices = Array.Empty<EquipmentIndex>();
}
else if (Main.CleansingPoolVoidLunar.Value && Chainloader.PluginInfos.ContainsKey("bubbet.bubbetsitems"))
{
List<ItemIndex> list = new List<ItemIndex>(ShrineCleanseBehavior.cleansableItems);
ItemIndex val4 = (ItemIndex)0;
for (ItemIndex val5 = (ItemIndex)ItemCatalog.itemCount; val4 < val5; val4 = (ItemIndex)(val4 + 1))
{
ItemDef itemDef = ItemCatalog.GetItemDef(val4);
if (isVoidLunar(itemDef.tier))
{
list.Add(val4);
}
}
ShrineCleanseBehavior.cleansableItems = list.ToArray();
List<ItemIndex> list2 = new List<ItemIndex>();
list2.AddRange(ItemCatalog.lunarItemList);
ItemIndex val6 = (ItemIndex)0;
for (ItemIndex val7 = (ItemIndex)ItemCatalog.itemCount; val6 < val7; val6 = (ItemIndex)(val6 + 1))
{
ItemDef itemDef2 = ItemCatalog.GetItemDef(val6);
if (isVoidLunar(itemDef2.tier))
{
list2.Add(itemDef2.itemIndex);
}
}
LunarItemOrEquipmentCostTypeHelper.lunarItemIndices = list2.ToArray();
}
});
object obj = <>c.<>9__0_2;
if (obj == null)
{
hook_Start val = delegate(orig_Start orig, ShopTerminalBehavior self)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse"))
{
Main.InitUses(((Component)self).gameObject, Main.CleansingPoolUses.Value);
}
orig.Invoke(self);
};
<>c.<>9__0_2 = val;
obj = (object)val;
}
ShopTerminalBehavior.Start += (hook_Start)obj;
object obj2 = <>c.<>9__0_3;
if (obj2 == null)
{
hook_OnInteractionBegin val2 = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse") && Main.uses.ContainsKey(((Component)self).gameObject))
{
Main.uses[((Component)self).gameObject]--;
if (Main.uses[((Component)self).gameObject] <= 0)
{
((Behaviour)((Component)self).GetComponent<PurchaseInteraction>()).enabled = false;
}
}
orig.Invoke(self, activator);
};
<>c.<>9__0_3 = val2;
obj2 = (object)val2;
}
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2;
object obj3 = <>c.<>9__0_4;
if (obj3 == null)
{
hook_DropPickup val3 = delegate(orig_DropPickup orig, ShopTerminalBehavior self)
{
if (((Object)((Component)self).gameObject).name.Contains("ShrineCleanse") && Run.instance.runRNG.RangeFloat(0f, 1f) > Main.CleansingPoolChance.Value)
{
self.SetHasBeenPurchased(true);
}
else
{
orig.Invoke(self);
}
};
<>c.<>9__0_4 = val3;
obj3 = (object)val3;
}
ShopTerminalBehavior.DropPickup += (hook_DropPickup)obj3;
}
public static bool isVoidLunar(ItemTier tier)
{
//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)
return tier == BubbetsItemsPlugin.VoidLunarTier.tier;
}
}
public class DroneAssembly
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Converter<string, string> <>9__0_3;
public static hook_Awake <>9__0_0;
public static hook_OnInteractionBegin <>9__0_1;
public static hook_TransferItem <>9__0_2;
internal string <Patch>b__0_3(string x)
{
return x.Trim();
}
internal void <Patch>b__0_0(orig_Awake orig, PurchaseInteraction self)
{
//IL_0065: 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_0074: 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_0090: 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)
orig.Invoke(self);
if (NetworkServer.active && ((Object)self).name.Contains("DroneAssemblyStation"))
{
Main.InitUses(((Component)self).gameObject, Main.DroneAssemblyMaxUses.Value);
GameObject gameObject = ((Component)((Component)self).GetComponent<ModelLocator>().modelTransform).gameObject;
gameObject.transform.localPosition = gameObject.transform.localPosition + Vector3.up * 0.5f;
gameObject.transform.eulerAngles = gameObject.transform.eulerAngles + new Vector3(0f, 0f, 90f);
}
}
internal void <Patch>b__0_1(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("DroneAssemblyStation"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
}
internal void <Patch>b__0_2(orig_TransferItem orig, AssemblingDroneState self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().SetAvailable(false);
}
}
}
public static void Patch()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: 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_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
//IL_0188: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Expected O, but got Unknown
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: 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_00ec: Invalid comparison between Unknown and I8
//IL_01ad: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01b8: Expected O, but got Unknown
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
//IL_01dd: Expected O, but got Unknown
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
InteractableSpawnCard val = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/DLC3/DroneAssemblyStation/iscDroneAssemblyStation.asset").WaitForCompletion();
((SpawnCard)val).directorCreditCost = (int)Main.DroneAssemblyCost.Value;
val.maxSpawnsPerStage = Main.DroneAssemblyMaxSpawns.Value;
DirectorCard card = new DirectorCard
{
spawnCard = (SpawnCard)(object)val,
selectionWeight = (int)Main.DroneAssemblyFrequency.Value
};
DirectorCardHolder val2 = new DirectorCardHolder
{
Card = card,
InteractableCategory = (InteractableCategory)8
};
foreach (string item in Main.DroneAssemblyStages.Value.Split(',').ToList().ConvertAll((string x) => x.Trim()))
{
bool flag = false;
foreach (object value in Enum.GetValues(typeof(Stage)))
{
Stage val3 = (Stage)value;
if ((long)val3 == 1 || !(item == DirectorAPI.ToInternalStageName(val3)))
{
continue;
}
Helpers.AddNewInteractableToStage(val2, val3, "");
flag = true;
break;
}
if (!flag)
{
Helpers.AddNewInteractableToStage(val2, (Stage)1, item);
}
}
object obj = <>c.<>9__0_0;
if (obj == null)
{
hook_Awake val4 = delegate(orig_Awake orig, PurchaseInteraction self)
{
//IL_0065: 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_0074: 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_0090: 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)
orig.Invoke(self);
if (NetworkServer.active && ((Object)self).name.Contains("DroneAssemblyStation"))
{
Main.InitUses(((Component)self).gameObject, Main.DroneAssemblyMaxUses.Value);
GameObject gameObject = ((Component)((Component)self).GetComponent<ModelLocator>().modelTransform).gameObject;
gameObject.transform.localPosition = gameObject.transform.localPosition + Vector3.up * 0.5f;
gameObject.transform.eulerAngles = gameObject.transform.eulerAngles + new Vector3(0f, 0f, 90f);
}
};
<>c.<>9__0_0 = val4;
obj = (object)val4;
}
PurchaseInteraction.Awake += (hook_Awake)obj;
object obj2 = <>c.<>9__0_1;
if (obj2 == null)
{
hook_OnInteractionBegin val5 = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("DroneAssemblyStation"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
};
<>c.<>9__0_1 = val5;
obj2 = (object)val5;
}
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2;
object obj3 = <>c.<>9__0_2;
if (obj3 == null)
{
hook_TransferItem val6 = delegate(orig_TransferItem orig, AssemblingDroneState self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().SetAvailable(false);
}
};
<>c.<>9__0_2 = val6;
obj3 = (object)val6;
}
AssemblingDroneState.TransferItem += (hook_TransferItem)obj3;
}
}
public class DroneCombiner
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_0;
public static hook_Awake <>9__0_1;
public static hook_OnInteractionBegin <>9__0_2;
public static hook_OnEnter <>9__0_3;
internal void <Patch>b__0_0(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDroneCombinerStation", "RoR2/DLC3/DroneCombinerStation/iscDroneCombinerStation.asset", Main.DroneCombinerFrequency.Value, Main.DroneCombinerCost.Value, Main.DroneAssemblyMaxSpawns.Value);
}
internal void <Patch>b__0_1(orig_Awake orig, PurchaseInteraction self)
{
orig.Invoke(self);
if (NetworkServer.active && ((Object)self).name.Contains("DroneCombinerStation"))
{
Main.InitUses(((Component)self).gameObject, Main.DroneCombinerMaxUses.Value);
}
}
internal void <Patch>b__0_2(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("DroneCombinerStation"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
}
internal void <Patch>b__0_3(orig_OnEnter orig, DroneCombinerCombining self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().SetAvailable(false);
}
}
}
public static void Patch()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_005f: 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: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDroneCombinerStation", "RoR2/DLC3/DroneCombinerStation/iscDroneCombinerStation.asset", Main.DroneCombinerFrequency.Value, Main.DroneCombinerCost.Value, Main.DroneAssemblyMaxSpawns.Value);
};
object obj = <>c.<>9__0_1;
if (obj == null)
{
hook_Awake val = delegate(orig_Awake orig, PurchaseInteraction self)
{
orig.Invoke(self);
if (NetworkServer.active && ((Object)self).name.Contains("DroneCombinerStation"))
{
Main.InitUses(((Component)self).gameObject, Main.DroneCombinerMaxUses.Value);
}
};
<>c.<>9__0_1 = val;
obj = (object)val;
}
PurchaseInteraction.Awake += (hook_Awake)obj;
object obj2 = <>c.<>9__0_2;
if (obj2 == null)
{
hook_OnInteractionBegin val2 = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("DroneCombinerStation"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
};
<>c.<>9__0_2 = val2;
obj2 = (object)val2;
}
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2;
object obj3 = <>c.<>9__0_3;
if (obj3 == null)
{
hook_OnEnter val3 = delegate(orig_OnEnter orig, DroneCombinerCombining self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().SetAvailable(false);
}
};
<>c.<>9__0_3 = val3;
obj3 = (object)val3;
}
DroneCombinerCombining.OnEnter += (hook_OnEnter)obj3;
}
}
public class DroneScrapper
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_0;
public static hook_OnEnter <>9__0_1;
public static hook_OnEnter <>9__0_2;
internal void <Patch>b__0_0(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDroneScrapper", "RoR2/DLC3/DroneScrapper/iscDroneScrapper.asset", Main.DroneScrapperFrequency.Value, Main.DroneScrapperCost.Value);
}
internal void <Patch>b__0_1(orig_OnEnter orig, DroneScrapperBaseState self)
{
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject))
{
Main.uses.Add(gameObject, Main.DroneScrapperMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject] <= 0)
{
((Component)((EntityState)self).outer).GetComponent<DroneScrapperPickerController>().SetAvailable(false);
}
}
internal void <Patch>b__0_2(orig_OnEnter orig, DroneScrapping self)
{
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
orig.Invoke(self);
}
}
public static void Patch()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_005f: 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: Expected O, but got Unknown
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDroneScrapper", "RoR2/DLC3/DroneScrapper/iscDroneScrapper.asset", Main.DroneScrapperFrequency.Value, Main.DroneScrapperCost.Value);
};
object obj = <>c.<>9__0_1;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, DroneScrapperBaseState self)
{
GameObject gameObject2 = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject2))
{
Main.uses.Add(gameObject2, Main.DroneScrapperMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject2] <= 0)
{
((Component)((EntityState)self).outer).GetComponent<DroneScrapperPickerController>().SetAvailable(false);
}
};
<>c.<>9__0_1 = val;
obj = (object)val;
}
DroneScrapperBaseState.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__0_2;
if (obj2 == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, DroneScrapping self)
{
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
orig.Invoke(self);
};
<>c.<>9__0_2 = val2;
obj2 = (object)val2;
}
DroneScrapping.OnEnter += (hook_OnEnter)obj2;
}
}
public class Duplicator
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_0;
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_1;
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_2;
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_3;
public static hook_Awake <>9__0_4;
public static hook_OnInteractionBegin <>9__0_5;
public static hook_DropDroplet <>9__0_6;
internal void <Patch>b__0_0(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicator", "RoR2/Base/Duplicator/iscDuplicator.asset", Main.DuplicatorFrequencyWhite.Value, Main.DuplicatorCostWhite.Value);
}
internal void <Patch>b__0_1(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorLarge", "RoR2/Base/DuplicatorLarge/iscDuplicatorLarge.asset", Main.DuplicatorFrequencyGreen.Value, Main.DuplicatorCostGreen.Value);
}
internal void <Patch>b__0_2(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorMilitary", "RoR2/Base/DuplicatorMilitary/iscDuplicatorMilitary.asset", Main.DuplicatorFrequencyRed.Value, Main.DuplicatorCostRed.Value);
}
internal void <Patch>b__0_3(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorWild", "RoR2/Base/DuplicatorWild/iscDuplicatorWild.asset", Main.DuplicatorFrequencyYellow.Value, Main.DuplicatorCostYellow.Value);
}
internal void <Patch>b__0_4(orig_Awake orig, PurchaseInteraction self)
{
orig.Invoke(self);
if (NetworkServer.active)
{
if (((Object)self).name.Contains("DuplicatorWild"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesYellow.Value);
}
else if (((Object)self).name.Contains("DuplicatorMilitary"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesRed.Value);
}
else if (((Object)self).name.Contains("DuplicatorLarge"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesGreen.Value);
}
else if (((Object)self).name.Contains("Duplicator"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesWhite.Value);
}
}
}
internal void <Patch>b__0_5(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("Duplicator"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
}
internal void <Patch>b__0_6(orig_DropDroplet orig, Duplicating self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<ShopTerminalBehavior>().SetHasBeenPurchased(true);
((Component)((EntityState)self).outer).GetComponent<ShopTerminalBehavior>().SetNoPickup();
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().Networkavailable = false;
}
}
}
public static void Patch()
{
//IL_00a9: 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)
//IL_00b4: Expected O, but got Unknown
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Expected O, but got Unknown
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Expected O, but got Unknown
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicator", "RoR2/Base/Duplicator/iscDuplicator.asset", Main.DuplicatorFrequencyWhite.Value, Main.DuplicatorCostWhite.Value);
};
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorLarge", "RoR2/Base/DuplicatorLarge/iscDuplicatorLarge.asset", Main.DuplicatorFrequencyGreen.Value, Main.DuplicatorCostGreen.Value);
};
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorMilitary", "RoR2/Base/DuplicatorMilitary/iscDuplicatorMilitary.asset", Main.DuplicatorFrequencyRed.Value, Main.DuplicatorCostRed.Value);
};
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscDuplicatorWild", "RoR2/Base/DuplicatorWild/iscDuplicatorWild.asset", Main.DuplicatorFrequencyYellow.Value, Main.DuplicatorCostYellow.Value);
};
object obj = <>c.<>9__0_4;
if (obj == null)
{
hook_Awake val = delegate(orig_Awake orig, PurchaseInteraction self)
{
orig.Invoke(self);
if (NetworkServer.active)
{
if (((Object)self).name.Contains("DuplicatorWild"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesYellow.Value);
}
else if (((Object)self).name.Contains("DuplicatorMilitary"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesRed.Value);
}
else if (((Object)self).name.Contains("DuplicatorLarge"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesGreen.Value);
}
else if (((Object)self).name.Contains("Duplicator"))
{
Main.InitUses(((Component)self).gameObject, Main.DuplicatorUsesWhite.Value);
}
}
};
<>c.<>9__0_4 = val;
obj = (object)val;
}
PurchaseInteraction.Awake += (hook_Awake)obj;
object obj2 = <>c.<>9__0_5;
if (obj2 == null)
{
hook_OnInteractionBegin val2 = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
if (self.CanBeAffordedByInteractor(activator) && ((Object)self).name.Contains("Duplicator"))
{
Main.uses[((Component)self).gameObject]--;
}
orig.Invoke(self, activator);
};
<>c.<>9__0_5 = val2;
obj2 = (object)val2;
}
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj2;
object obj3 = <>c.<>9__0_6;
if (obj3 == null)
{
hook_DropDroplet val3 = delegate(orig_DropDroplet orig, Duplicating self)
{
orig.Invoke(self);
if (Main.uses.ContainsKey(((EntityState)self).gameObject) && Main.uses[((EntityState)self).gameObject] == 0)
{
((Component)((EntityState)self).outer).GetComponent<ShopTerminalBehavior>().SetHasBeenPurchased(true);
((Component)((EntityState)self).outer).GetComponent<ShopTerminalBehavior>().SetNoPickup();
((Component)((EntityState)self).outer).GetComponent<PurchaseInteraction>().Networkavailable = false;
}
};
<>c.<>9__0_6 = val3;
obj3 = (object)val3;
}
Duplicating.DropDroplet += (hook_DropDroplet)obj3;
}
}
public class LunarTablet
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<Stage> <>9__2_0;
public static hook_OnInteractionBegin <>9__2_1;
internal void <Patch>b__2_0(Stage self)
{
if (self.sceneDef.cachedName != "bazaar")
{
return;
}
GameObject obj = GameObject.Find("HOLDER: Store");
object obj2;
if (obj == null)
{
obj2 = null;
}
else
{
Transform transform = obj.transform;
if (transform == null)
{
obj2 = null;
}
else
{
Transform obj3 = transform.Find("LunarShop");
if (obj3 == null)
{
obj2 = null;
}
else
{
Transform obj4 = obj3.Find("LunarRecycler");
obj2 = ((obj4 != null) ? ((Component)obj4).GetComponent<PurchaseInteraction>() : null);
}
}
}
PurchaseInteraction val = (PurchaseInteraction)obj2;
if ((Object)(object)val != (Object)null)
{
if (Main.LunarTabletCost.Value == 0)
{
((Component)val).gameObject.SetActive(false);
return;
}
slab = ((Component)val).gameObject;
val.cost = Main.LunarTabletCost.Value;
uses = Main.LunarTabletUses.Value;
}
}
internal void <Patch>b__2_1(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
bool flag = self.CanBeAffordedByInteractor(activator);
orig.Invoke(self, activator);
if ((Object)(object)((Component)self).gameObject == (Object)(object)slab && flag)
{
uses--;
if (uses == 0)
{
((Behaviour)self).enabled = false;
}
}
}
}
public static GameObject slab;
public static int uses;
public static void Patch()
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
Stage.onStageStartGlobal += delegate(Stage self)
{
if (!(self.sceneDef.cachedName != "bazaar"))
{
GameObject obj2 = GameObject.Find("HOLDER: Store");
object obj3;
if (obj2 == null)
{
obj3 = null;
}
else
{
Transform transform = obj2.transform;
if (transform == null)
{
obj3 = null;
}
else
{
Transform obj4 = transform.Find("LunarShop");
if (obj4 == null)
{
obj3 = null;
}
else
{
Transform obj5 = obj4.Find("LunarRecycler");
obj3 = ((obj5 != null) ? ((Component)obj5).GetComponent<PurchaseInteraction>() : null);
}
}
}
PurchaseInteraction val2 = (PurchaseInteraction)obj3;
if ((Object)(object)val2 != (Object)null)
{
if (Main.LunarTabletCost.Value == 0)
{
((Component)val2).gameObject.SetActive(false);
}
else
{
slab = ((Component)val2).gameObject;
val2.cost = Main.LunarTabletCost.Value;
uses = Main.LunarTabletUses.Value;
}
}
}
};
object obj = <>c.<>9__2_1;
if (obj == null)
{
hook_OnInteractionBegin val = delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
bool flag = self.CanBeAffordedByInteractor(activator);
orig.Invoke(self, activator);
if ((Object)(object)((Component)self).gameObject == (Object)(object)slab && flag)
{
uses--;
if (uses == 0)
{
((Behaviour)self).enabled = false;
}
}
};
<>c.<>9__2_1 = val;
obj = (object)val;
}
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)obj;
}
}
[BepInPlugin("prodzpod.LimitedInteractables", "LimitedInteractables", "1.3.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Main : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<Stage> <>9__54_0;
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__54_1;
public static hook_GetContextString <>9__54_2;
public static hook_GetContextString <>9__54_3;
public static hook_GetContextString <>9__54_4;
public static hook_GetContextString <>9__54_5;
public static hook_GetDisplayName <>9__54_6;
internal void <Awake>b__54_0(Stage stage)
{
uses.Clear();
}
internal void <Awake>b__54_1(SceneDirector director, DirectorCardCategorySelection selection)
{
if (NetworkServer.active && Main.onGenerateInteractableCardSelection != null)
{
Main.onGenerateInteractableCardSelection(director, selection);
}
}
internal string <Awake>b__54_2(orig_GetContextString orig, PurchaseInteraction self, Interactor activator)
{
return orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
}
internal string <Awake>b__54_3(orig_GetContextString orig, ShrineCleanseBehavior self, Interactor activator)
{
return orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
}
internal string <Awake>b__54_4(orig_GetContextString orig, PickupPickerController self, Interactor activator)
{
return orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
}
internal string <Awake>b__54_5(orig_GetContextString orig, DroneScrapperPickerController self, Interactor activator)
{
return orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
}
internal string <Awake>b__54_6(orig_GetDisplayName orig, PurchaseInteraction self)
{
return orig.Invoke(self) + GetUsesString(((Component)self).gameObject);
}
}
public const string PluginGUID = "prodzpod.LimitedInteractables";
public const string PluginAuthor = "prodzpod";
public const string PluginName = "LimitedInteractables";
public const string PluginVersion = "1.3.0";
public static ManualLogSource Log;
public static Harmony Harmony;
public static PluginInfo pluginInfo;
public static ConfigFile Config;
public static ConfigEntry<int> ScrapperStackAtOnce;
public static ConfigEntry<float> ScrapperFrequency;
public static ConfigEntry<float> ScrapperCost;
public static ConfigEntry<int> ScrapperMaxUses;
public static ConfigEntry<float> ScrapperChance;
public static ConfigEntry<float> DroneScrapperFrequency;
public static ConfigEntry<float> DroneScrapperCost;
public static ConfigEntry<int> DroneScrapperMaxUses;
public static ConfigEntry<string> DroneAssemblyStages;
public static ConfigEntry<float> DroneAssemblyFrequency;
public static ConfigEntry<float> DroneAssemblyCost;
public static ConfigEntry<int> DroneAssemblyMaxUses;
public static ConfigEntry<int> DroneAssemblyMaxSpawns;
public static ConfigEntry<float> DroneCombinerFrequency;
public static ConfigEntry<float> DroneCombinerCost;
public static ConfigEntry<int> DroneCombinerMaxUses;
public static ConfigEntry<int> DroneCombinerMaxSpawns;
public static ConfigEntry<float> DuplicatorFrequencyWhite;
public static ConfigEntry<float> DuplicatorFrequencyGreen;
public static ConfigEntry<float> DuplicatorFrequencyRed;
public static ConfigEntry<float> DuplicatorFrequencyYellow;
public static ConfigEntry<float> DuplicatorCostWhite;
public static ConfigEntry<float> DuplicatorCostGreen;
public static ConfigEntry<float> DuplicatorCostRed;
public static ConfigEntry<float> DuplicatorCostYellow;
public static ConfigEntry<int> DuplicatorUsesWhite;
public static ConfigEntry<int> DuplicatorUsesGreen;
public static ConfigEntry<int> DuplicatorUsesRed;
public static ConfigEntry<int> DuplicatorUsesYellow;
public static ConfigEntry<string> RepairRepairList;
public static ConfigEntry<int> RepairStackAtOnce;
public static ConfigEntry<int> LunarTabletCost;
public static ConfigEntry<int> LunarTabletUses;
public static ConfigEntry<bool> CleansingPoolTakesEquipments;
public static ConfigEntry<bool> CleansingPoolVoidLunar;
public static ConfigEntry<float> CleansingPoolFrequency;
public static ConfigEntry<float> CleansingPoolCost;
public static ConfigEntry<int> CleansingPoolUses;
public static ConfigEntry<float> CleansingPoolChance;
public static ConfigEntry<int> CHEFMaxUses;
public static ConfigEntry<float> CHEFChance;
public static ConfigEntry<int> RecyclerMaxUses;
public static Dictionary<GameObject, int> uses;
public static event Action<SceneDirector, DirectorCardCategorySelection> onGenerateInteractableCardSelection;
public void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Expected O, but got Unknown
//IL_067b: Unknown result type (might be due to invalid IL or missing references)
//IL_0680: Unknown result type (might be due to invalid IL or missing references)
//IL_0686: Expected O, but got Unknown
//IL_06a0: Unknown result type (might be due to invalid IL or missing references)
//IL_06a5: Unknown result type (might be due to invalid IL or missing references)
//IL_06ab: Expected O, but got Unknown
//IL_06c5: Unknown result type (might be due to invalid IL or missing references)
//IL_06ca: Unknown result type (might be due to invalid IL or missing references)
//IL_06d0: Expected O, but got Unknown
//IL_06ea: Unknown result type (might be due to invalid IL or missing references)
//IL_06ef: Unknown result type (might be due to invalid IL or missing references)
//IL_06f5: Expected O, but got Unknown
//IL_070f: Unknown result type (might be due to invalid IL or missing references)
//IL_0714: Unknown result type (might be due to invalid IL or missing references)
//IL_071a: Expected O, but got Unknown
pluginInfo = ((BaseUnityPlugin)this).Info;
Harmony = new Harmony("prodzpod.LimitedInteractables");
Log = ((BaseUnityPlugin)this).Logger;
Config = new ConfigFile(Path.Combine(Paths.ConfigPath, "prodzpod.LimitedInteractables.cfg"), true);
uses = new Dictionary<GameObject, int>();
Stage.onServerStageComplete += delegate
{
uses.Clear();
};
DuplicatorFrequencyWhite = Config.Bind<float>("3D Printer Tweaks", "Common Printer Frequency", 1f, "Multiplier for Scrapper spawn frequency.");
DuplicatorFrequencyGreen = Config.Bind<float>("3D Printer Tweaks", "Uncommon Printer Frequency", 1f, "Multiplier for Scrapper spawn frequency.");
DuplicatorFrequencyRed = Config.Bind<float>("3D Printer Tweaks", "Legendary Printer Frequency", 1f, "Multiplier for Scrapper spawn frequency.");
DuplicatorFrequencyYellow = Config.Bind<float>("3D Printer Tweaks", "Boss Printer Frequency", 1f, "Multiplier for Scrapper spawn frequency.");
DuplicatorCostWhite = Config.Bind<float>("3D Printer Tweaks", "Common Printer Cost", 1f, "Multiplier for Scrapper spawn cost.");
DuplicatorCostGreen = Config.Bind<float>("3D Printer Tweaks", "Uncommon Printer Cost", 1f, "Multiplier for Scrapper spawn cost.");
DuplicatorCostRed = Config.Bind<float>("3D Printer Tweaks", "Legendary Printer Cost", 1f, "Multiplier for Scrapper spawn cost.");
DuplicatorCostYellow = Config.Bind<float>("3D Printer Tweaks", "Boss Printer Cost", 0.8f, "Multiplier for Scrapper spawn cost.");
DuplicatorUsesWhite = Config.Bind<int>("3D Printer Tweaks", "Common Printer Max Uses", 0, "Max number of items to duplicate. Set to 0 to disable.");
DuplicatorUsesGreen = Config.Bind<int>("3D Printer Tweaks", "Uncommon Printer Max Uses", 0, "Max number of items to duplicate. Set to 0 to disable.");
DuplicatorUsesRed = Config.Bind<int>("3D Printer Tweaks", "Legendary Printer Max Uses", 0, "Max number of items to duplicate. Set to 0 to disable.");
DuplicatorUsesYellow = Config.Bind<int>("3D Printer Tweaks", "Boss Printer Max Uses", 1, "Max number of items to duplicate. Set to 0 to disable.");
Duplicator.Patch();
ScrapperStackAtOnce = Config.Bind<int>("Scrapper Tweaks", "Scrapper Stacks at Once", 1, "Max number of items to scrap at once. Set to 0 to disable.");
ScrapperFrequency = Config.Bind<float>("Scrapper Tweaks", "Scrapper Frequency", 1f, "Multiplier for Scrapper spawn frequency.");
ScrapperCost = Config.Bind<float>("Scrapper Tweaks", "Scrapper Cost", 1f, "Multiplier for Scrapper spawn cost.");
ScrapperMaxUses = Config.Bind<int>("Scrapper Tweaks", "Scrapper Max Uses", 3, "Max number of items to scrap per scrapper. Set to 0 to disable.");
ScrapperChance = Config.Bind<float>("Scrapper Tweaks", "Scrapper Chance", 1f, "Chance for scrapper to give you scrap.");
Scrapper.Patch();
DroneScrapperFrequency = Config.Bind<float>("Drone Scrapper Tweaks", "Scrapper Frequency", 1f, "Multiplier for Drone Scrapper spawn frequency.");
DroneScrapperCost = Config.Bind<float>("Drone Scrapper Tweaks", "Scrapper Cost", 1f, "Multiplier for Drone Scrapper spawn cost.");
DroneScrapperMaxUses = Config.Bind<int>("Drone Scrapper Tweaks", "Scrapper Max Uses", 3, "Max number of drones to scrap per drone scrapper. Set to 0 to disable.");
DroneScrapper.Patch();
DroneAssemblyStages = Config.Bind<string>("Drone Assembly Station Tweaks", "Drone Assembly Station Stages", "", "Stages to spawn the unused station (separated by comma)");
DroneAssemblyMaxSpawns = Config.Bind<int>("Drone Assembly Station Tweaks", "Drone Assembly Station Max Spawns per Stage", -1, "Max number of stations per stage. Set to -1 to uncap.");
DroneAssemblyFrequency = Config.Bind<float>("Drone Assembly Station Tweaks", "Drone Assembly Station Frequency", 1f, "Drone Assembly Station spawn frequency.");
DroneAssemblyCost = Config.Bind<float>("Drone Assembly Station Tweaks", "Drone Assembly Station Cost", 15f, "Drone Assembly Station spawn cost. default is equal to combiner.");
DroneAssemblyMaxUses = Config.Bind<int>("Drone Assembly Station Tweaks", "Drone Assembly Station Max Uses", 1, "Max number of items to upgrade drones. Set to 0 to disable.");
DroneAssembly.Patch();
DroneCombinerMaxSpawns = Config.Bind<int>("Drone Combiner Station Tweaks", "Drone Combiner Station Max Spawns per Stage", 1, "Max number of stations per stage. Set to -1 to uncap.");
DroneCombinerFrequency = Config.Bind<float>("Drone Combiner Station Tweaks", "Drone Combiner Station Frequency", 1f, "Multiplier for Drone Combiner Station spawn frequency.");
DroneCombinerCost = Config.Bind<float>("Drone Combiner Station Tweaks", "Drone Combiner Station Cost", 1f, "Multiplier for Drone Combiner Station spawn cost.");
DroneCombinerMaxUses = Config.Bind<int>("Drone Combiner Station Tweaks", "Drone Combiner Station Max Uses", 3, "Max number of items to combine drones. Set to 0 to disable.");
DroneCombiner.Patch();
RepairRepairList = Config.Bind<string>("Shrine of Repair Tweaks", "Shrine of Repair True Repair List", "ExtraLifeConsumed, ExtraLifeVoidConsumed, FragileDamageBonusConsumed, HealingPotionConsumed, RegeneratingScrapConsumed, BossHunterConsumed", "List of repairs to count in the following configs.");
RepairStackAtOnce = Config.Bind<int>("Shrine of Repair Tweaks", "Shrine of Repair Stacks at Once", 0, "Max number of items to repair at once. ONLY AFFECTS ONES ON TRUE REPAIR LIST. Set to 0 to disable.");
if (Chainloader.PluginInfos.ContainsKey("com.Viliger.ShrineOfRepair") && RepairStackAtOnce.Value > 0)
{
ShrineRepair.Patch();
}
LunarTabletCost = Config.Bind<int>("Lunar Tablet Tweaks", "Lunar Tablet Start Cost", 5, "Set to 0 to remove it completely");
LunarTabletUses = Config.Bind<int>("Lunar Tablet Tweaks", "Lunar Tablet Max Uses", 0, "Set to 0 for vanilla behaviour");
LunarTablet.Patch();
CleansingPoolTakesEquipments = Config.Bind<bool>("Cleansing Pool Tweaks", "Cleansing Pool Accepts Lunar Equipments", true, "yeah");
CleansingPoolVoidLunar = Config.Bind<bool>("Cleansing Pool Tweaks", "Cleansing Pool Accepts Void Lunar", true, "Set to false to not accept void lunar at in Cleansing Pools.");
CleansingPoolFrequency = Config.Bind<float>("Cleansing Pool Tweaks", "Cleansing Pool Frequency", 1f, "Multiplier for Cleansing Pool spawn frequency.");
CleansingPoolCost = Config.Bind<float>("Cleansing Pool Tweaks", "Cleansing Pool Cost", 1f, "Multiplier for Cleansing Pool spawn cost.");
CleansingPoolUses = Config.Bind<int>("Cleansing Pool Tweaks", "Cleansing Pool Max Uses", 0, "Set to 0 for vanilla behaviour");
CleansingPoolChance = Config.Bind<float>("Cleansing Pool Tweaks", "Cleansing Pool Chance", 1f, "Chance for Cleansing Pool to give you scrap.");
CleansingPool.Patch();
CHEFMaxUses = Config.Bind<int>("CHEF Tweaks", "CHEF Max Uses", 3, "Max number of items to craft per chef. Set to 0 to disable.");
CHEFChance = Config.Bind<float>("CHEF Tweaks", "CHEF Chance", 1f, "Chance for chef to actually give you the item.");
MealPrep.Patch();
RecyclerMaxUses = Config.Bind<int>("Recycler Tweaks", "Recycler Max Uses", 1, "Vanilla: 1, set to 0 to disable.");
Recycler.Patch();
SceneDirector.onGenerateInteractableCardSelection += delegate(SceneDirector director, DirectorCardCategorySelection selection)
{
if (NetworkServer.active && Main.onGenerateInteractableCardSelection != null)
{
Main.onGenerateInteractableCardSelection(director, selection);
}
};
object obj = <>c.<>9__54_2;
if (obj == null)
{
hook_GetContextString val = (orig_GetContextString orig, PurchaseInteraction self, Interactor activator) => orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
<>c.<>9__54_2 = val;
obj = (object)val;
}
PurchaseInteraction.GetContextString += (hook_GetContextString)obj;
object obj2 = <>c.<>9__54_3;
if (obj2 == null)
{
hook_GetContextString val2 = (orig_GetContextString orig, ShrineCleanseBehavior self, Interactor activator) => orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
<>c.<>9__54_3 = val2;
obj2 = (object)val2;
}
ShrineCleanseBehavior.GetContextString += (hook_GetContextString)obj2;
object obj3 = <>c.<>9__54_4;
if (obj3 == null)
{
hook_GetContextString val3 = (orig_GetContextString orig, PickupPickerController self, Interactor activator) => orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
<>c.<>9__54_4 = val3;
obj3 = (object)val3;
}
PickupPickerController.GetContextString += (hook_GetContextString)obj3;
object obj4 = <>c.<>9__54_5;
if (obj4 == null)
{
hook_GetContextString val4 = (orig_GetContextString orig, DroneScrapperPickerController self, Interactor activator) => orig.Invoke(self, activator) + GetUsesString(((Component)self).gameObject);
<>c.<>9__54_5 = val4;
obj4 = (object)val4;
}
DroneScrapperPickerController.GetContextString += (hook_GetContextString)obj4;
object obj5 = <>c.<>9__54_6;
if (obj5 == null)
{
hook_GetDisplayName val5 = (orig_GetDisplayName orig, PurchaseInteraction self) => orig.Invoke(self) + GetUsesString(((Component)self).gameObject);
<>c.<>9__54_6 = val5;
obj5 = (object)val5;
}
PurchaseInteraction.GetDisplayName += (hook_GetDisplayName)obj5;
}
public static string GetUsesString(GameObject obj)
{
int usesInt = GetUsesInt(obj);
if (usesInt == -1)
{
return "";
}
return string.Format(" ({0} use{1})", usesInt, (usesInt > 1) ? "s" : "");
}
public static int GetUsesInt(GameObject obj)
{
if (uses.ContainsKey(obj) && uses[obj] > 0)
{
return uses[obj];
}
if ((Object)(object)obj == (Object)(object)LunarTablet.slab && LunarTablet.uses > 0)
{
return LunarTablet.uses;
}
if (Chainloader.PluginInfos.ContainsKey("com.Viliger.ShrineOfRepair"))
{
return GetRepairUses(obj);
}
return -1;
}
public static int GetRepairUses(GameObject obj)
{
ShrineOfRepairPickerManager component = obj.GetComponent<ShrineOfRepairPickerManager>();
if ((Object)(object)component != (Object)null && component.uses < ShrineOfRepairConfigManager.MaxUses.Value)
{
return ShrineOfRepairConfigManager.MaxUses.Value - component.uses;
}
return -1;
}
public static void InitUses(GameObject self, int use)
{
if (NetworkServer.active)
{
if (!uses.ContainsKey(self))
{
uses.Add(self, use);
}
else
{
uses[self] = use;
}
}
}
public static void TweakFrequencyAndCost(DirectorCardCategorySelection dccs, string name, string cscName, float frequency, float cost, int max = -2)
{
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: 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_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Expected O, but got Unknown
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
int categoryIndex = GetCategoryIndex(dccs, name);
if (categoryIndex < 0)
{
return;
}
DirectorCard card = GetCard(dccs, categoryIndex, name);
if (card == null)
{
return;
}
List<DirectorCard> list = dccs.categories[categoryIndex].cards.ToList();
list.Remove(card);
dccs.categories[categoryIndex].cards = list.ToArray();
if (!((float)card.selectionWeight * frequency <= 0f))
{
SpawnCard val = Addressables.LoadAssetAsync<SpawnCard>((object)cscName).WaitForCompletion();
val.directorCreditCost = Mathf.Max(1, (int)((float)val.directorCreditCost * cost));
if (max != -2)
{
((InteractableSpawnCard)val).maxSpawnsPerStage = max;
}
DirectorCard val2 = new DirectorCard
{
spawnCard = val,
selectionWeight = Mathf.Max(0, (int)((float)card.selectionWeight * frequency))
};
dccs.AddCard(categoryIndex, val2);
}
}
public static int GetCategoryIndex(DirectorCardCategorySelection dccs, string name)
{
for (int i = 0; i < dccs.categories.Length; i++)
{
DirectorCard[] cards = dccs.categories[i].cards;
foreach (DirectorCard val in cards)
{
if (((Object)val.spawnCard).name.StartsWith(name))
{
return i;
}
}
}
return -1;
}
public static DirectorCard GetCard(DirectorCardCategorySelection dccs, int category, string name)
{
DirectorCard[] cards = dccs.categories[category].cards;
foreach (DirectorCard val in cards)
{
if (((Object)val.spawnCard).name.StartsWith(name))
{
return val;
}
}
return null;
}
}
public class MealPrep
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnEnter <>9__0_0;
public static hook_OnEnter <>9__0_1;
internal void <Patch>b__0_0(orig_OnEnter orig, MealPrepBaseState self)
{
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject))
{
Main.uses.Add(gameObject, Main.CHEFMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject] <= 0)
{
((PickupPickerController)((Component)((EntityState)self).outer).GetComponent<CraftingController>()).SetAvailable(false);
}
}
internal void <Patch>b__0_1(orig_OnEnter orig, Cooking self)
{
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
if (Run.instance.runRNG.RangeFloat(0f, 1f) > Main.CHEFChance.Value)
{
((MealPrepBaseState)self).pickupToDrop = PickupIndex.none;
}
orig.Invoke(self);
}
}
public static void Patch()
{
//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
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
object obj = <>c.<>9__0_0;
if (obj == null)
{
hook_OnEnter val = delegate(orig_OnEnter orig, MealPrepBaseState self)
{
GameObject gameObject2 = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject2))
{
Main.uses.Add(gameObject2, Main.CHEFMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject2] <= 0)
{
((PickupPickerController)((Component)((EntityState)self).outer).GetComponent<CraftingController>()).SetAvailable(false);
}
};
<>c.<>9__0_0 = val;
obj = (object)val;
}
MealPrepBaseState.OnEnter += (hook_OnEnter)obj;
object obj2 = <>c.<>9__0_1;
if (obj2 == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, Cooking self)
{
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
if (Run.instance.runRNG.RangeFloat(0f, 1f) > Main.CHEFChance.Value)
{
((MealPrepBaseState)self).pickupToDrop = PickupIndex.none;
}
orig.Invoke(self);
};
<>c.<>9__0_1 = val2;
obj2 = (object)val2;
}
Cooking.OnEnter += (hook_OnEnter)obj2;
}
}
public class Recycler
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<Stage> <>9__1_0;
public static hook_Start <>9__1_1;
public static Func<Instruction, bool> <>9__1_4;
public static Func<Instruction, bool> <>9__1_5;
public static Func<GenericPickupController, bool> <>9__1_6;
public static Manipulator <>9__1_2;
public static hook_GetLocalizedStringByToken <>9__1_3;
internal void <Patch>b__1_0(Stage stage)
{
uses.Clear();
}
internal void <Patch>b__1_1(orig_Start orig, GenericPickupController self)
{
if (!uses.ContainsKey(self))
{
uses.Add(self, Main.RecyclerMaxUses.Value);
}
else
{
uses[self] = Main.RecyclerMaxUses.Value;
}
orig.Invoke(self);
}
internal void <Patch>b__1_2(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<GenericPickupController>(x, "set_NetworkRecycled")
});
val.Remove();
val.Emit(OpCodes.Ldloc_0);
val.EmitDelegate<Func<GenericPickupController, bool>>((Func<GenericPickupController, bool>)delegate(GenericPickupController self)
{
uses[self]--;
return (uses[self] == 0) ? true : false;
});
}
internal bool <Patch>b__1_4(Instruction x)
{
return ILPatternMatchingExt.MatchLdcI4(x, 1);
}
internal bool <Patch>b__1_5(Instruction x)
{
return ILPatternMatchingExt.MatchCallOrCallvirt<GenericPickupController>(x, "set_NetworkRecycled");
}
internal bool <Patch>b__1_6(GenericPickupController self)
{
uses[self]--;
if (uses[self] == 0)
{
return true;
}
return false;
}
internal string <Patch>b__1_3(orig_GetLocalizedStringByToken orig, Language self, string token)
{
if (token == "EQUIPMENT_RECYCLER_PICKUP")
{
string text = "Transform an Item or Equipment into a different one.";
if (Main.RecyclerMaxUses.Value > 0)
{
text = text + " Can only recycle up to " + Main.RecyclerMaxUses.Value + " times.";
}
return text;
}
if (token == "EQUIPMENT_RECYCLER_DESC")
{
string text2 = "<style=cIsUtility>Transform</style> an Item or Equipment into a different one.";
if (Main.RecyclerMaxUses.Value > 0)
{
text2 = text2 + " <style=cIsUtility>Can only be converted into the same tier " + Main.RecyclerMaxUses.Value + " times</style>.";
}
return text2;
}
return orig.Invoke(self, token);
}
}
public static Dictionary<GenericPickupController, int> uses;
public static void Patch()
{
//IL_0044: 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)
//IL_004f: 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_0074: Expected O, but got Unknown
//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
uses = new Dictionary<GenericPickupController, int>();
Stage.onServerStageComplete += delegate
{
uses.Clear();
};
object obj = <>c.<>9__1_1;
if (obj == null)
{
hook_Start val = delegate(orig_Start orig, GenericPickupController self)
{
if (!uses.ContainsKey(self))
{
uses.Add(self, Main.RecyclerMaxUses.Value);
}
else
{
uses[self] = Main.RecyclerMaxUses.Value;
}
orig.Invoke(self);
};
<>c.<>9__1_1 = val;
obj = (object)val;
}
GenericPickupController.Start += (hook_Start)obj;
object obj2 = <>c.<>9__1_2;
if (obj2 == null)
{
Manipulator val2 = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
ILCursor val4 = new ILCursor(il);
val4.GotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<GenericPickupController>(x, "set_NetworkRecycled")
});
val4.Remove();
val4.Emit(OpCodes.Ldloc_0);
val4.EmitDelegate<Func<GenericPickupController, bool>>((Func<GenericPickupController, bool>)delegate(GenericPickupController self)
{
uses[self]--;
return (uses[self] == 0) ? true : false;
});
};
<>c.<>9__1_2 = val2;
obj2 = (object)val2;
}
EquipmentSlot.FireRecycle += (Manipulator)obj2;
object obj3 = <>c.<>9__1_3;
if (obj3 == null)
{
hook_GetLocalizedStringByToken val3 = delegate(orig_GetLocalizedStringByToken orig, Language self, string token)
{
if (token == "EQUIPMENT_RECYCLER_PICKUP")
{
string text = "Transform an Item or Equipment into a different one.";
if (Main.RecyclerMaxUses.Value > 0)
{
text = text + " Can only recycle up to " + Main.RecyclerMaxUses.Value + " times.";
}
return text;
}
if (token == "EQUIPMENT_RECYCLER_DESC")
{
string text2 = "<style=cIsUtility>Transform</style> an Item or Equipment into a different one.";
if (Main.RecyclerMaxUses.Value > 0)
{
text2 = text2 + " <style=cIsUtility>Can only be converted into the same tier " + Main.RecyclerMaxUses.Value + " times</style>.";
}
return text2;
}
return orig.Invoke(self, token);
};
<>c.<>9__1_3 = val3;
obj3 = (object)val3;
}
Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj3;
}
}
public class Scrapper
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<SceneDirector, DirectorCardCategorySelection> <>9__0_0;
public static hook_PreStartClient <>9__0_1;
public static hook_OnEnter <>9__0_2;
public static hook_OnEnter <>9__0_3;
internal void <Patch>b__0_0(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscScrapper", "RoR2/Base/Scrapper/iscScrapper.asset", Main.ScrapperFrequency.Value, Main.ScrapperCost.Value);
}
internal void <Patch>b__0_1(orig_PreStartClient orig, ScrapperController self)
{
self.maxItemsToScrapAtATime = Main.ScrapperStackAtOnce.Value;
orig.Invoke(self);
}
internal void <Patch>b__0_2(orig_OnEnter orig, ScrapperBaseState self)
{
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject))
{
Main.uses.Add(gameObject, Main.ScrapperMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject] <= 0)
{
((Component)((EntityState)self).outer).GetComponent<PickupPickerController>().SetAvailable(false);
}
}
internal void <Patch>b__0_3(orig_OnEnter orig, Scrapping self)
{
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
if (Run.instance.runRNG.RangeFloat(0f, 1f) > Main.ScrapperChance.Value)
{
((ScrapperBaseState)self).scrapperController.pickupPrintQueue[0] = UniquePickup.none;
}
orig.Invoke(self);
}
}
public static void Patch()
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
//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_0056: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
Main.onGenerateInteractableCardSelection += delegate(SceneDirector dir, DirectorCardCategorySelection sel)
{
Main.TweakFrequencyAndCost(sel, "iscScrapper", "RoR2/Base/Scrapper/iscScrapper.asset", Main.ScrapperFrequency.Value, Main.ScrapperCost.Value);
};
if (Main.ScrapperStackAtOnce.Value > 0)
{
object obj = <>c.<>9__0_1;
if (obj == null)
{
hook_PreStartClient val = delegate(orig_PreStartClient orig, ScrapperController self)
{
self.maxItemsToScrapAtATime = Main.ScrapperStackAtOnce.Value;
orig.Invoke(self);
};
<>c.<>9__0_1 = val;
obj = (object)val;
}
ScrapperController.PreStartClient += (hook_PreStartClient)obj;
}
object obj2 = <>c.<>9__0_2;
if (obj2 == null)
{
hook_OnEnter val2 = delegate(orig_OnEnter orig, ScrapperBaseState self)
{
GameObject gameObject2 = ((Component)((EntityState)self).outer).gameObject;
if (!Main.uses.ContainsKey(gameObject2))
{
Main.uses.Add(gameObject2, Main.ScrapperMaxUses.Value);
}
orig.Invoke(self);
if (Main.uses[gameObject2] <= 0)
{
((Component)((EntityState)self).outer).GetComponent<PickupPickerController>().SetAvailable(false);
}
};
<>c.<>9__0_2 = val2;
obj2 = (object)val2;
}
ScrapperBaseState.OnEnter += (hook_OnEnter)obj2;
object obj3 = <>c.<>9__0_3;
if (obj3 == null)
{
hook_OnEnter val3 = delegate(orig_OnEnter orig, Scrapping self)
{
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
GameObject gameObject = ((Component)((EntityState)self).outer).gameObject;
if ((Object)(object)gameObject != (Object)null && Main.uses.ContainsKey(gameObject))
{
Main.uses[gameObject]--;
}
if (Run.instance.runRNG.RangeFloat(0f, 1f) > Main.ScrapperChance.Value)
{
((ScrapperBaseState)self).scrapperController.pickupPrintQueue[0] = UniquePickup.none;
}
orig.Invoke(self);
};
<>c.<>9__0_3 = val3;
obj3 = (object)val3;
}
Scrapping.OnEnter += (hook_OnEnter)obj3;
}
}
public class ShrineRepair
{
[HarmonyPatch(typeof(ShrineOfRepairPickerManager), "HandleSelection", new Type[] { typeof(int) })]
public class PatchSelection
{
public static void ILManipulator(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 3)
});
val.Emit(OpCodes.Ldloc_0);
val.EmitDelegate<Func<int, PickupDef, int>>((Func<int, PickupDef, int>)delegate(int count, PickupDef pickupDef)
{
//IL_0008: 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)
if (((pickupDef == null) ? (-1) : ((int)pickupDef.itemIndex)) == -1)
{
return count;
}
return repairList.Contains(((Object)ItemCatalog.GetItemDef(pickupDef.itemIndex)).name) ? Mathf.Min(count, Main.RepairStackAtOnce.Value) : count;
});
}
}
[HarmonyPatch(typeof(ShrineOfRepairPickerManager), "HandleInteraction", new Type[] { typeof(Interactor) })]
public class PatchInteraction
{
public static void ILManipulator(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 6)
});
val.Emit(OpCodes.Ldloc, 5);
val.EmitDelegate<Func<int, KeyValuePair<ItemIndex, ItemIndex>, int>>((Func<int, KeyValuePair<ItemIndex, ItemIndex>, int>)((int count, KeyValuePair<ItemIndex, ItemIndex> repairItems) => repairList.Contains(((Object)ItemCatalog.GetItemDef(repairItems.Key)).name) ? Mathf.Min(count, Main.RepairStackAtOnce.Value) : count));
}
}
public static List<string> repairList = new List<string>();
public static void Patch()
{
string[] array = Main.RepairRepairList.Value.Split(',');
foreach (string text in array)
{
repairList.Add(text.Trim());
}
Main.Log.LogDebug((object)("Repair Repair List: " + GeneralExtensions.Join<string>((IEnumerable<string>)repairList, (Func<string, string>)null, ", ")));
Main.Harmony.PatchAll(typeof(PatchSelection));
Main.Harmony.PatchAll(typeof(PatchInteraction));
}
}
}