using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using Microsoft.CodeAnalysis;
using On.RoR2;
using RoR2;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
[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.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("BazaarExpansion-Release")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+3b7603e16e8fe61559c0af926133d9160f7b75c7")]
[assembly: AssemblyProduct("BazaarExpansion-Release")]
[assembly: AssemblyTitle("BazaarExpansion-Release")]
[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 BazaarExpand
{
[BepInPlugin("com.Susciety.BazaarExpand", "BazaarExpand", "1.0.0")]
public class BazaarExpand : BaseUnityPlugin
{
internal class PrinterInfo
{
public Vector3 position;
public Vector3 rotation;
}
[CompilerGenerated]
private sealed class <>c__DisplayClass15_0
{
public List<AsyncOperationHandle> handles;
internal bool <PreloadAssetsParallel>b__0()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < handles.Count; i++)
{
AsyncOperationHandle val = handles[i];
if (!((AsyncOperationHandle)(ref val)).IsDone)
{
return false;
}
}
return true;
}
}
[CompilerGenerated]
private sealed class <PreloadAssetsParallel>d__15 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public BazaarExpand <>4__this;
private <>c__DisplayClass15_0 <>8__1;
private AsyncOperationHandle<SpawnCard> <hGold>5__2;
private AsyncOperationHandle<SpawnCard> <hCleanse>5__3;
private AsyncOperationHandle<SpawnCard> <hScrapper>5__4;
private AsyncOperationHandle<GameObject> <hCauldron>5__5;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <PreloadAssetsParallel>d__15(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
<>8__1 = null;
<hGold>5__2 = default(AsyncOperationHandle<SpawnCard>);
<hCleanse>5__3 = default(AsyncOperationHandle<SpawnCard>);
<hScrapper>5__4 = default(AsyncOperationHandle<SpawnCard>);
<hCauldron>5__5 = default(AsyncOperationHandle<GameObject>);
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0044: 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_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: 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_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Invalid comparison between Unknown and I4
//IL_0172: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Expected O, but got Unknown
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Invalid comparison between Unknown and I4
//IL_0204: Unknown result type (might be due to invalid IL or missing references)
//IL_020a: Invalid comparison between Unknown and I4
//IL_0237: Unknown result type (might be due to invalid IL or missing references)
//IL_023d: Invalid comparison between Unknown and I4
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>8__1 = new <>c__DisplayClass15_0();
<>8__1.handles = new List<AsyncOperationHandle>();
<hGold>5__2 = default(AsyncOperationHandle<SpawnCard>);
<hCleanse>5__3 = default(AsyncOperationHandle<SpawnCard>);
<hScrapper>5__4 = default(AsyncOperationHandle<SpawnCard>);
<hCauldron>5__5 = default(AsyncOperationHandle<GameObject>);
if (cfgChest.Value)
{
<hGold>5__2 = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/GoldChest/iscGoldChest.asset");
<>8__1.handles.Add(AsyncOperationHandle<SpawnCard>.op_Implicit(<hGold>5__2));
}
if (cfgPot.Value)
{
<hCleanse>5__3 = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/ShrineCleanse/iscShrineCleanse.asset");
<>8__1.handles.Add(AsyncOperationHandle<SpawnCard>.op_Implicit(<hCleanse>5__3));
}
if (cfgScrapper.Value)
{
<hScrapper>5__4 = Addressables.LoadAssetAsync<SpawnCard>((object)"RoR2/Base/Scrapper/iscScrapper.asset");
<>8__1.handles.Add(AsyncOperationHandle<SpawnCard>.op_Implicit(<hScrapper>5__4));
}
if (cfgEnableCadulron.Value)
{
<hCauldron>5__5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/LunarCauldron/LunarCauldron, RedToWhite Variant.prefab");
<>8__1.handles.Add(AsyncOperationHandle<GameObject>.op_Implicit(<hCauldron>5__5));
}
<>2__current = (object)new WaitUntil((Func<bool>)delegate
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < <>8__1.handles.Count; i++)
{
AsyncOperationHandle val = <>8__1.handles[i];
if (!((AsyncOperationHandle)(ref val)).IsDone)
{
return false;
}
}
return true;
});
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (cfgChest.Value && (int)<hGold>5__2.Status == 1)
{
goldChestCard = <hGold>5__2.Result;
}
if (cfgPot.Value && (int)<hCleanse>5__3.Status == 1)
{
shrineCleanseCard = <hCleanse>5__3.Result;
}
if (cfgScrapper.Value && (int)<hScrapper>5__4.Status == 1)
{
scrapperCard = <hScrapper>5__4.Result;
}
if (cfgEnableCadulron.Value && (int)<hCauldron>5__5.Status == 1)
{
lunarCauldronPrefab = <hCauldron>5__5.Result;
}
assetsLoaded = true;
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <SpawnWhenReady>d__16 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public BazaarExpand <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <SpawnWhenReady>d__16(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitUntil((Func<bool>)(() => assetsLoaded));
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
<>4__this.TrySpawnOnce();
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 static ConfigEntry<bool> cfgPot;
public static ConfigEntry<bool> cfgScrapper;
public static ConfigEntry<bool> cfgChest;
public static ConfigEntry<bool> cfgEnableCadulron;
public static ConfigEntry<bool> cfgGtoW;
public static ConfigEntry<int> cfgAmountTraded;
private static SpawnCard goldChestCard;
private static SpawnCard shrineCleanseCard;
private static SpawnCard scrapperCard;
private static GameObject lunarCauldronPrefab;
private static bool assetsLoadingStarted;
private static bool assetsLoaded;
private static bool spawnedOnce;
public void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Expected O, but got Unknown
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
ConfigFile val = new ConfigFile(Paths.ConfigPath + "\\BazaarExpand.cfg", true);
cfgChest = val.Bind<bool>("General", "Enable Golden Chest", true, "If enabled, spawn a Golden Chest in the bazaar.");
cfgPot = val.Bind<bool>("General", "Enable CleanPot", true, "If enabled, spawn a Cleansing Pool in the bazaar.");
cfgScrapper = val.Bind<bool>("General", "Enable Scrapper", true, "If enabled, spawn a Scrapper in the bazaar.");
cfgEnableCadulron = val.Bind<bool>("Lunar Cauldron", "Enable Reforge Cauldron", true, "If enabled, spawn a Special Cauldron in the bazaar.");
cfgGtoW = val.Bind<bool>("Lunar Cauldron", "GreenToWhite", true, "If enabled, Green Items reforge into 3 White Items instead of a red item.");
cfgAmountTraded = val.Bind<int>("Lunar Cauldron", "Items Amount Needed", 2, "Set the number of items needed to reforge.");
if (!assetsLoadingStarted)
{
assetsLoadingStarted = true;
((MonoBehaviour)this).StartCoroutine(PreloadAssetsParallel());
}
BazaarController.Start += new hook_Start(BazaarController_Start);
}
private void BazaarController_Start(orig_Start orig, BazaarController self)
{
orig.Invoke(self);
if (assetsLoaded)
{
TrySpawnOnce();
}
else
{
((MonoBehaviour)this).StartCoroutine(SpawnWhenReady());
}
}
[IteratorStateMachine(typeof(<PreloadAssetsParallel>d__15))]
private IEnumerator PreloadAssetsParallel()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <PreloadAssetsParallel>d__15(0)
{
<>4__this = this
};
}
[IteratorStateMachine(typeof(<SpawnWhenReady>d__16))]
private IEnumerator SpawnWhenReady()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <SpawnWhenReady>d__16(0)
{
<>4__this = this
};
}
private void TrySpawnOnce()
{
if (!spawnedOnce && !((Object)(object)Run.instance == (Object)null) && NetworkServer.active)
{
SpawnExpand();
}
}
private void SpawnExpand()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: 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_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: 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_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: 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_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)
//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_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Expected O, but got Unknown
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Expected O, but got Unknown
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0188: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Expected O, but got Unknown
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_0277: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_021e: Unknown result type (might be due to invalid IL or missing references)
//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
//IL_02ee: Expected O, but got Unknown
//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
//IL_02f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0300: Unknown result type (might be due to invalid IL or missing references)
//IL_0322: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0363: Unknown result type (might be due to invalid IL or missing references)
//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
//IL_0399: Unknown result type (might be due to invalid IL or missing references)
PrinterInfo printerInfo = new PrinterInfo
{
position = new Vector3(-87.1f, -24f, -7.2f),
rotation = new Vector3(0f, 72.6f, 0f)
};
PrinterInfo printerInfo2 = new PrinterInfo
{
position = new Vector3(-65.7f, -23.5f, -18.9f),
rotation = new Vector3(0f, 72.6f, 0f)
};
PrinterInfo printerInfo3 = new PrinterInfo
{
position = new Vector3(-82.1f, -23.7f, -5.2f),
rotation = new Vector3(0f, 72.6f, 0f)
};
PrinterInfo printerInfo4 = new PrinterInfo
{
position = new Vector3(-132f, -25f, -29.7f),
rotation = new Vector3(0f, 72.6f, 0f)
};
ArtifactDef val = ArtifactCatalog.FindArtifactDef("Sacrifice");
bool flag = false;
if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(val))
{
RunArtifactManager.instance.SetArtifactEnabledServer(val, false);
flag = true;
}
DirectorPlacementRule val2 = new DirectorPlacementRule
{
placementMode = (PlacementMode)0
};
if (cfgChest.Value && (Object)(object)goldChestCard != (Object)null)
{
DirectorSpawnRequest val3 = new DirectorSpawnRequest(goldChestCard, val2, Run.instance.runRNG);
GameObject spawnedInstance = goldChestCard.DoSpawn(printerInfo.position, Quaternion.identity, val3).spawnedInstance;
if (Object.op_Implicit((Object)(object)spawnedInstance))
{
PurchaseInteraction component = spawnedInstance.GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component))
{
component.Networkcost = 1;
component.costType = (CostTypeIndex)8;
}
ChestBehavior component2 = spawnedInstance.GetComponent<ChestBehavior>();
if (Object.op_Implicit((Object)(object)component2))
{
component2.tier1Chance = 0f;
component2.tier2Chance = 0f;
component2.tier3Chance = 1f;
component2.lunarChance = 0f;
}
spawnedInstance.transform.eulerAngles = printerInfo.rotation;
NetworkServer.Spawn(spawnedInstance);
}
}
if (cfgPot.Value && (Object)(object)shrineCleanseCard != (Object)null)
{
DirectorSpawnRequest val4 = new DirectorSpawnRequest(shrineCleanseCard, val2, Run.instance.runRNG);
GameObject spawnedInstance2 = shrineCleanseCard.DoSpawn(printerInfo2.position, Quaternion.identity, val4).spawnedInstance;
if (Object.op_Implicit((Object)(object)spawnedInstance2))
{
spawnedInstance2.transform.eulerAngles = printerInfo2.rotation;
NetworkServer.Spawn(spawnedInstance2);
}
}
if (cfgScrapper.Value && (Object)(object)scrapperCard != (Object)null)
{
DirectorSpawnRequest val5 = new DirectorSpawnRequest(scrapperCard, val2, Run.instance.runRNG);
GameObject spawnedInstance3 = scrapperCard.DoSpawn(printerInfo3.position, Quaternion.identity, val5).spawnedInstance;
if (Object.op_Implicit((Object)(object)spawnedInstance3))
{
spawnedInstance3.transform.eulerAngles = printerInfo3.rotation;
NetworkServer.Spawn(spawnedInstance3);
}
}
if (cfgEnableCadulron.Value && (Object)(object)lunarCauldronPrefab != (Object)null)
{
GameObject val6 = Object.Instantiate<GameObject>(lunarCauldronPrefab, printerInfo4.position, Quaternion.identity);
PurchaseInteraction component3 = val6.GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component3))
{
if (cfgGtoW.Value)
{
component3.costType = (CostTypeIndex)5;
}
component3.Networkcost = cfgAmountTraded.Value;
}
val6.transform.eulerAngles = printerInfo4.rotation;
NetworkServer.Spawn(val6);
}
if (flag && Object.op_Implicit((Object)(object)RunArtifactManager.instance))
{
RunArtifactManager.instance.SetArtifactEnabledServer(val, true);
}
}
}
}