Decompiled source of ShopsOnly v4.0.0

ShopsOnly.dll

Decompiled a month ago
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<ShopTerminalBehavior>();
				component.itemTier = self.itemTier;
				component.dropTable = null;
				PurchaseInteraction component2 = val2.GetComponent<PurchaseInteraction>();
				component2.Networkcost = difficultyScaledCost;
			}
		}

		private WeightedSelection<DirectorCard> 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<DirectorCard> val = orig.Invoke(self);
			float num = 0f;
			for (int i = 0; i < val.Count; i++)
			{
				ChoiceInfo<DirectorCard> 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<DirectorCard> 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 <FinalizeAsync>d__16 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public FinalizeAsyncArgs args;

			public ContentPackProvider <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <FinalizeAsync>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 <GenerateContentPackAsync>d__15 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public GetContentPackAsyncArgs args;

			public ContentPackProvider <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <GenerateContentPackAsync>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<ArtifactDef>();
				<>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 <LoadStaticContentAsync>d__14 : IEnumerator<object>, IEnumerator, IDisposable
		{
			private int <>1__state;

			private object <>2__current;

			public LoadStaticContentAsyncArgs args;

			public ContentPackProvider <>4__this;

			object IEnumerator<object>.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			object IEnumerator.Current
			{
				[DebuggerHidden]
				get
				{
					return <>2__current;
				}
			}

			[DebuggerHidden]
			public <LoadStaticContentAsync>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(<LoadStaticContentAsync>d__14))]
		public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <LoadStaticContentAsync>d__14(0)
			{
				<>4__this = this,
				args = args
			};
		}

		[IteratorStateMachine(typeof(<GenerateContentPackAsync>d__15))]
		public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <GenerateContentPackAsync>d__15(0)
			{
				<>4__this = this,
				args = args
			};
		}

		[IteratorStateMachine(typeof(<FinalizeAsync>d__16))]
		public IEnumerator FinalizeAsync(FinalizeAsyncArgs args)
		{
			//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
			return new <FinalizeAsync>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()
		{
		}
	}
}