Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ShopsOnly v4.0.0
ShopsOnly.dll
Decompiled a month agousing 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() { } } }