using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using Nekusoul.ShopsOnly; using Nekusoul.ShopsOnly.Properties; using On.RoR2; using RoR2; using RoR2.ContentManagement; using UnityEngine; [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("ShopsOnly")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f9c8d1148948b477534976c0c29f48dc742e1aff")] [assembly: AssemblyProduct("ShopsOnly")] [assembly: AssemblyTitle("ShopsOnly")] [assembly: AssemblyVersion("1.0.0.0")] namespace NekuSoul.ShopsOnly { [BepInPlugin("de.NekuSoul.ShopsOnly", "ShopsOnly", "3.0.3")] public class ShopsOnly : BaseUnityPlugin { private static readonly string[] ReplacedChoices = new string[8] { "Chest1", "Chest2", "CategoryChestDamage", "CategoryChestHealing", "CategoryChestUtility", "CategoryChest2Damage Variant", "CategoryChest2Healing Variant", "CategoryChest2Utility Variant" }; private readonly ContentPackProvider _content = new ContentPackProvider(); private Type _multiShopController; private FieldInfo _terminalGameObjectsField; private PropertyInfo _networkCostProperty; public void Awake() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown _multiShopController = typeof(MultiShopController); _terminalGameObjectsField = _multiShopController.GetField("terminalGameObjects", BindingFlags.Instance | BindingFlags.NonPublic); _networkCostProperty = _multiShopController.GetProperty("Networkcost", BindingFlags.Instance | BindingFlags.NonPublic); MultiShopController.CreateTerminals += new hook_CreateTerminals(MultiShopController_CreateTerminals); SceneDirector.GenerateInteractableCardSelection += new hook_GenerateInteractableCardSelection(SceneDirector_GenerateInteractableCardSelection); ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)_content); } private void MultiShopController_CreateTerminals(orig_CreateTerminals orig, MultiShopController self) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(_content.Artifact)) { orig.Invoke(self); return; } if (self.doEquipmentInstead) { orig.Invoke(self); return; } Xoroshiro128Plus val = (Xoroshiro128Plus)(_multiShopController.GetField("rng", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(self)); if (val == null) { orig.Invoke(self); return; } float num = val.RangeFloat(0f, 1f); if (num > 0.975f) { self.itemTier = (ItemTier)2; self.baseCost = 400; } else if (num > 0.8f) { self.itemTier = (ItemTier)1; self.baseCost = 50; } else { self.itemTier = (ItemTier)0; self.baseCost = 25; } int difficultyScaledCost = Run.instance.GetDifficultyScaledCost(self.baseCost); _networkCostProperty.SetValue(self, difficultyScaledCost); orig.Invoke(self); GameObject[] array = (GameObject[])_terminalGameObjectsField.GetValue(self); GameObject[] array2 = array; foreach (GameObject val2 in array2) { ShopTerminalBehavior component = val2.GetComponent(); component.itemTier = self.itemTier; component.dropTable = null; PurchaseInteraction component2 = val2.GetComponent(); component2.Networkcost = difficultyScaledCost; } } private WeightedSelection SceneDirector_GenerateInteractableCardSelection(orig_GenerateInteractableCardSelection orig, SceneDirector self) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0079: 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_00c1: 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_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) if (!RunArtifactManager.instance.IsArtifactEnabled(_content.Artifact)) { return orig.Invoke(self); } WeightedSelection val = orig.Invoke(self); float num = 0f; for (int i = 0; i < val.Count; i++) { ChoiceInfo choice = val.GetChoice(i); string name = ((Object)choice.value.spawnCard.prefab).name; if (ReplacedChoices.Contains(name)) { num += choice.weight; choice.weight = 0f; val.ModifyChoiceWeight(i, 0f); } } for (int j = 0; j < val.Count; j++) { ChoiceInfo choice2 = val.GetChoice(j); string name2 = ((Object)choice2.value.spawnCard.prefab).name; if (!(name2 != "TripleShop")) { num += choice2.weight; choice2.weight += num; val.ModifyChoiceWeight(j, choice2.weight); } } return val; } } } namespace Nekusoul.ShopsOnly { internal class ContentPackProvider : IContentPackProvider { [CompilerGenerated] private sealed class d__16 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public FinalizeAsyncArgs args; public ContentPackProvider <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__16(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; args.ReportProgress(1f); 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(); } } [CompilerGenerated] private sealed class d__15 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GetContentPackAsyncArgs args; public ContentPackProvider <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__15(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { if (<>1__state != 0) { return false; } <>1__state = -1; <>4__this.Artifact = ScriptableObject.CreateInstance(); <>4__this.Artifact.nameToken = "Artifact of Options"; <>4__this.Artifact.descriptionToken = "Regular chests are replaced with Multishop Terminals."; <>4__this.Artifact.smallIconDeselectedSprite = <>4__this.DisabledTexture; <>4__this.Artifact.smallIconSelectedSprite = <>4__this.EnabledTexture; args.output.artifactDefs.Add((ArtifactDef[])(object)new ArtifactDef[1] { <>4__this.Artifact }); args.ReportProgress(1f); 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(); } } [CompilerGenerated] private sealed class d__14 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LoadStaticContentAsyncArgs args; public ContentPackProvider <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>4__this.EnabledTexture = LoadSprite(Resources.enabled); args.ReportProgress(0.5f); <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <>4__this.DisabledTexture = LoadSprite(Resources.disabled); args.ReportProgress(1f); 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 string identifier => "de.NekuSoul.ShopsOnly"; public ArtifactDef Artifact { get; private set; } public Sprite EnabledTexture { get; private set; } public Sprite DisabledTexture { get; private set; } [IteratorStateMachine(typeof(d__14))] public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__14(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(d__15))] public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__15(0) { <>4__this = this, args = args }; } [IteratorStateMachine(typeof(d__16))] public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__16(0) { <>4__this = this, args = args }; } private static Sprite LoadSprite(byte[] resourceBytes) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) if (resourceBytes == null) { throw new ArgumentNullException("resourceBytes"); } Texture2D val = new Texture2D(128, 128, (TextureFormat)4, false); ImageConversion.LoadImage(val, resourceBytes, false); return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)); } } } namespace Nekusoul.ShopsOnly.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("Nekusoul.ShopsOnly.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static byte[] disabled { get { object @object = ResourceManager.GetObject("disabled", resourceCulture); return (byte[])@object; } } internal static byte[] enabled { get { object @object = ResourceManager.GetObject("enabled", resourceCulture); return (byte[])@object; } } internal Resources() { } } }