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.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using HG.Reflection; using Microsoft.CodeAnalysis; using On.RoR2; using On.RoR2.Projectile; using R2API; using RoR2; using RoR2.Audio; using RoR2.Hologram; using RoR2.Projectile; using ShaderSwapper; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyCompany("LunarConstructor")] [assembly: AssemblyProduct("LunarConstructor")] [assembly: AssemblyTitle("LunarConstructor")] [assembly: AssemblyInformationalVersion("1.0.0+040d4e6ebae57843f8c9a778bd0a85ce04e480cd")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [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 { [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LunarConstructor { public class ConstructorCostHologramContent : MonoBehaviour { public string displayValue; public TextMeshPro targetTextMesh; private string oldDisplayValue; public Color colorValue; private Color oldColorValue; private void FixedUpdate() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //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_006f: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)targetTextMesh) && (displayValue != oldDisplayValue || colorValue != oldColorValue)) { oldDisplayValue = displayValue; oldColorValue = colorValue; ((TMP_Text)targetTextMesh).SetText(displayValue, true); ((Graphic)targetTextMesh).color = colorValue; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("acanthi.LunarConstructor", "LunarConstructor", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class LunarConstructor : BaseUnityPlugin { public const string PluginGUID = "acanthi.LunarConstructor"; public const string PluginAuthor = "acanthi"; public const string PluginName = "LunarConstructor"; public const string PluginVersion = "1.0.0"; private Material constructorMat = Addressables.LoadAssetAsync((object)"RoR2/Base/bazaar/matBazaarCauldron.mat").WaitForCompletion(); private Material waterMat = Addressables.LoadAssetAsync((object)"RoR2/Base/bazaar/matBazaarRedWhiteLiquid.mat").WaitForCompletion(); public static GameObject lunarConstructorPrefab; public static AssetBundle LunarConstructorAssets; public static GameObject ConstructorHologramContent; public GameObject ConstructorCostHologramContentPrefab() { //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) GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync((object)"RoR2/Base/Common/VFX/CostHologramContent.prefab").WaitForCompletion(), "CustomCostHologramContentPrefab", false); Object.DestroyImmediate((Object)(object)val.GetComponent()); ConstructorCostHologramContent constructorCostHologramContent = val.AddComponent(); constructorCostHologramContent.targetTextMesh = ((Component)val.transform.Find("Text")).GetComponent(); return val; } private void Awake() { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("LunarConstructor.lunarconstructor_assets")) { LunarConstructorAssets = AssetBundle.LoadFromStream(stream); } ((MonoBehaviour)this).StartCoroutine(ShaderSwapper.UpgradeStubbedShadersAsync(LunarConstructorAssets)); CreatePrefab(); Stage.onStageStartGlobal += Stage_onStageStartGlobal; PurchaseInteraction.GetInteractability += new hook_GetInteractability(LunarConstructor_GetInteractability); TinkerProjectile.TransmuteTargetObject += new hook_TransmuteTargetObject(TinkerProjectile_TransmuteTargetObject); ConstructorHologramContent = ConstructorCostHologramContentPrefab(); } private void TinkerProjectile_TransmuteTargetObject(orig_TransmuteTargetObject orig, TinkerProjectile self, GameObject targetObject) { TinkerableObjectAttributes val = default(TinkerableObjectAttributes); ConstructorManager constructorManager = default(ConstructorManager); if (!targetObject.TryGetComponent(ref val)) { orig.Invoke(self, targetObject); } else if (!val.IsTinkerable) { orig.Invoke(self, targetObject); } else if (targetObject.TryGetComponent(ref constructorManager)) { constructorManager.RollItemsServer(); orig.Invoke(self, targetObject); } else { orig.Invoke(self, targetObject); } } private Interactability LunarConstructor_GetInteractability(orig_GetInteractability orig, PurchaseInteraction self, Interactor activator) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_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) ConstructorManager constructorManager = default(ConstructorManager); if (((Component)self).TryGetComponent(ref constructorManager)) { CharacterBody component = ((Component)activator).GetComponent(); if (Object.op_Implicit((Object)(object)component) && (Object)(object)constructorManager.GetBodyHighestScrap(component) != (Object)null) { return orig.Invoke(self, activator); } return (Interactability)1; } return orig.Invoke(self, activator); } public static void Stage_onStageStartGlobal(Stage stage) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) if (!NetworkServer.active) { return; } Scene activeScene = SceneManager.GetActiveScene(); string name = ((Scene)(ref activeScene)).name; string text = name; if (!(text == "bazaar")) { if (text == "moon2") { SpawnLunarConstructor(new Vector3(-232.915f, -186.8033f, -323.1316f), Quaternion.Euler(0f, 64f, 0f)); } } else { SpawnLunarConstructor(new Vector3(-117.5476f, -23.2836f, -7.2528f), Quaternion.Euler(0f, 135f, 0f)); } } public static void SpawnLunarConstructor(Vector3 pos, Quaternion rot) { //IL_0006: 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) GameObject val = Object.Instantiate(lunarConstructorPrefab, pos, rot); NetworkServer.Spawn(val); } private void CreatePrefab() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_011c: 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) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Expected O, but got Unknown //IL_0297: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Expected O, but got Unknown //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_0387: Expected O, but got Unknown lunarConstructorPrefab = PrefabAPI.InstantiateClone(LunarConstructorAssets.LoadAsset("lunarconstructor.fbx"), "lunarConstructor"); ((Object)lunarConstructorPrefab).name = "LunarConstructor"; lunarConstructorPrefab.AddComponent(); lunarConstructorPrefab.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f); ((Renderer)((Component)lunarConstructorPrefab.transform.GetChild(1)).GetComponent()).sharedMaterial = constructorMat; ((Component)lunarConstructorPrefab.transform.GetChild(1)).gameObject.AddComponent(); ((Component)lunarConstructorPrefab.transform.GetChild(1)).transform.rotation = Quaternion.Euler(270f, 90f, 0f); ((Component)lunarConstructorPrefab.transform.GetChild(1)).transform.localScale = new Vector3(150f, 150f, 115f); ((Component)lunarConstructorPrefab.transform.GetChild(1)).transform.localPosition = new Vector3(0f, -1f, 0f); ((Component)lunarConstructorPrefab.transform.GetChild(0)).transform.localScale = new Vector3(150f, 150f, 115f); ((Component)lunarConstructorPrefab.transform.GetChild(0)).transform.localPosition = new Vector3(0f, 0f, 0f); ((Renderer)((Component)lunarConstructorPrefab.transform.GetChild(0)).GetComponent()).sharedMaterial = waterMat; ((Component)lunarConstructorPrefab.transform.GetChild(0)).gameObject.AddComponent().color = Color.white; GameObject val = Addressables.LoadAssetAsync((object)"RoR2/Base/bazaar/Bazaar_LunarInfectionLarge.prefab").WaitForCompletion(); GameObject val2 = PrefabAPI.InstantiateClone(val, "lunarConstructorShards"); val2.transform.parent = lunarConstructorPrefab.transform; val2.transform.localPosition = new Vector3(0f, -1f, 0f); val2.transform.localScale = new Vector3(0.25f, 0.25f, 0.25f); GameObject val3 = new GameObject("PickupDisplay", new Type[2] { typeof(PickupDisplay), typeof(Highlight) }); val3.transform.parent = lunarConstructorPrefab.transform; val3.transform.localPosition = new Vector3(0f, 1.65f, -0.75f); GameObject val4 = new GameObject("Hologram", new Type[1] { typeof(HologramProjector) }); val4.transform.parent = lunarConstructorPrefab.transform; val4.transform.localPosition = new Vector3(0f, -0.2f, 0.9f); val4.transform.rotation = Quaternion.Euler(0f, 180f, 0f); ConstructorManager constructorManager = lunarConstructorPrefab.AddComponent(); TinkerableObjectAttributes val5 = lunarConstructorPrefab.AddComponent(); PurchaseInteraction val6 = lunarConstructorPrefab.AddComponent(); val6.contextToken = "Construct Item (1 Scrap)"; val6.NetworkdisplayNameToken = "Lunar Constructor"; constructorManager.purchaseInteraction = val6; lunarConstructorPrefab.GetComponent().targetRenderer = (Renderer)(object)((Component)lunarConstructorPrefab.transform.GetChild(1)).GetComponent(); GameObject val7 = new GameObject(); GameObject val8 = Object.Instantiate(val7, lunarConstructorPrefab.transform); ((Collider)val8.AddComponent()).isTrigger = true; val8.AddComponent().entity = lunarConstructorPrefab; PrefabAPI.RegisterNetworkPrefab(lunarConstructorPrefab); } } public class ConstructorManager : NetworkBehaviour, IHologramContentProvider { public PurchaseInteraction purchaseInteraction; public PickupDisplay pickupDisplay; public HologramProjector hologram; public Highlight highlight; private GameObject shrineUseEffect = Addressables.LoadAssetAsync((object)"RoR2/Base/Common/VFX/ShrineUseEffect.prefab").WaitForCompletion(); private GameObject lunarRerollEffect = Addressables.LoadAssetAsync((object)"RoR2/Base/LunarRecycler/LunarRerollEffect.prefab").WaitForCompletion(); private ItemTag bannedItemTag = (ItemTag)15; private float refreshTimer; private const float refreshDuration = 1.5f; private bool waitingForRefresh; private UniquePickup refreshPrintItem; [SyncVar] private int whitePickupIndex = -1; [SyncVar] private int greenPickupIndex = -1; [SyncVar] private int redPickupIndex = -1; [SyncVar] private int yellowPickupIndex = -1; private int currentPickupTierIndex; [SyncVar] private GameObject closestPlayerObject; private NetworkInstanceId ___closestPlayerObjectNetId; private static int kRpcRpcClearPickup; private PickupIndex whitePickup { get { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //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_002c: Unknown result type (might be due to invalid IL or missing references) _ = whitePickupIndex; if (whitePickupIndex < 0) { return PickupIndex.none; } return new PickupIndex(whitePickupIndex); } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) NetworkwhitePickupIndex = value.value; } } private PickupIndex greenPickup { get { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //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_002c: Unknown result type (might be due to invalid IL or missing references) _ = greenPickupIndex; if (greenPickupIndex < 0) { return PickupIndex.none; } return new PickupIndex(greenPickupIndex); } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) NetworkgreenPickupIndex = value.value; } } private PickupIndex redPickup { get { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //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_002c: Unknown result type (might be due to invalid IL or missing references) _ = redPickupIndex; if (redPickupIndex < 0) { return PickupIndex.none; } return new PickupIndex(redPickupIndex); } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) NetworkredPickupIndex = value.value; } } private PickupIndex yellowPickup { get { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //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_002c: Unknown result type (might be due to invalid IL or missing references) _ = yellowPickupIndex; if (yellowPickupIndex < 0) { return PickupIndex.none; } return new PickupIndex(yellowPickupIndex); } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) NetworkyellowPickupIndex = value.value; } } private CharacterBody closestPlayer { get { return Object.op_Implicit((Object)(object)closestPlayerObject) ? closestPlayerObject.GetComponent() : null; } set { NetworkclosestPlayerObject = (Object.op_Implicit((Object)(object)value) ? ((Component)value).gameObject : null); } } public int NetworkwhitePickupIndex { get { return whitePickupIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar(value, ref whitePickupIndex, 1u); } } public int NetworkgreenPickupIndex { get { return greenPickupIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar(value, ref greenPickupIndex, 2u); } } public int NetworkredPickupIndex { get { return redPickupIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar(value, ref redPickupIndex, 4u); } } public int NetworkyellowPickupIndex { get { return yellowPickupIndex; } [param: In] set { ((NetworkBehaviour)this).SetSyncVar(value, ref yellowPickupIndex, 8u); } } public GameObject NetworkclosestPlayerObject { get { return closestPlayerObject; } [param: In] set { ((NetworkBehaviour)this).SetSyncVarGameObject(value, ref closestPlayerObject, 16u, ref ___closestPlayerObjectNetId); } } public void Start() { //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)pickupDisplay) && !Object.op_Implicit((Object)(object)highlight) && !Object.op_Implicit((Object)(object)hologram)) { pickupDisplay = ((Component)((Component)this).transform.Find("PickupDisplay")).GetComponent(); highlight = ((Component)((Component)this).transform.Find("PickupDisplay")).GetComponent(); pickupDisplay.highlight = highlight; highlight.highlightColor = (HighlightColor)2; hologram = ((Component)((Component)this).transform.Find("Hologram")).GetComponent(); } if (NetworkServer.active && Object.op_Implicit((Object)(object)Run.instance)) { purchaseInteraction.SetAvailable(true); RollItemsServer(); } ((UnityEvent)(object)purchaseInteraction.onPurchase).AddListener((UnityAction)OnPurchase); refreshPrintItem = UniquePickup.none; hologram.contentProvider = (IHologramContentProvider)(object)this; hologram.disableHologramRotation = true; } [Server] public void RollItemsServer() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void LunarConstructor.ConstructorManager::RollItemsServer()' called on client"); return; } whitePickup = PickFromList(Run.instance.availableTier1DropList).pickupIndex; greenPickup = PickFromList(Run.instance.availableTier2DropList).pickupIndex; redPickup = PickFromList(Run.instance.availableTier3DropList).pickupIndex; yellowPickup = PickFromList(Run.instance.availableBossDropList).pickupIndex; CallRpcClearPickup(); } [ClientRpc] public void RpcClearPickup() { pickupDisplay.SetPickup(ref UniquePickup.none, false); } public void FixedUpdate() { //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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_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_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) if (NetworkServer.active && Object.op_Implicit((Object)(object)Run.instance)) { closestPlayer = GetClosestPlayerWithScrapServer(); } UpdateDisplayClient(); if (!waitingForRefresh) { return; } refreshTimer -= Time.fixedDeltaTime; if (refreshTimer <= 0f) { purchaseInteraction.SetAvailable(true); waitingForRefresh = false; if (refreshPrintItem != UniquePickup.none) { PickupDropletController.CreatePickupDroplet(refreshPrintItem, ((Component)this).transform.position, (((Component)this).transform.forward + Vector3.up + Vector3.up) * 8f, true); refreshPrintItem = UniquePickup.none; } } } public void UpdateDisplayClient() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_0077: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009f: 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_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected I4, but got Unknown //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)pickupDisplay) || whitePickup == PickupIndex.none || greenPickup == PickupIndex.none || redPickup == PickupIndex.none || yellowPickup == PickupIndex.none) { return; } if (!(pickupDisplay.GetPickupIndex() == PickupIndex.none)) { pickupDisplay.GetPickupIndex(); if (0 == 0) { goto IL_00d6; } } PickupDisplay obj = pickupDisplay; UniquePickup val = new UniquePickup(whitePickup); obj.SetPickup(ref val, false); if (currentPickupTierIndex != 1) { DisplayRerollEffectClient(); } currentPickupTierIndex = 1; goto IL_00d6; IL_00d6: if (!Object.op_Implicit((Object)(object)closestPlayer) || (Object)(object)GetBodyHighestScrap(closestPlayer) == (Object)null) { return; } ItemTier tier = GetBodyHighestScrap(closestPlayer).tier; ItemTier val2 = tier; switch (val2 - 1) { case 3: { PickupDisplay obj4 = pickupDisplay; val = new UniquePickup(yellowPickup); obj4.SetPickup(ref val, false); if (currentPickupTierIndex != 4) { DisplayRerollEffectClient(); } currentPickupTierIndex = 4; break; } case 1: { PickupDisplay obj3 = pickupDisplay; val = new UniquePickup(redPickup); obj3.SetPickup(ref val, false); if (currentPickupTierIndex != 3) { DisplayRerollEffectClient(); } currentPickupTierIndex = 3; break; } case 0: { PickupDisplay obj5 = pickupDisplay; val = new UniquePickup(greenPickup); obj5.SetPickup(ref val, false); if (currentPickupTierIndex != 2) { DisplayRerollEffectClient(); } currentPickupTierIndex = 2; break; } default: { PickupDisplay obj2 = pickupDisplay; val = new UniquePickup(whitePickup); obj2.SetPickup(ref val, false); if (currentPickupTierIndex != 1) { DisplayRerollEffectClient(); } currentPickupTierIndex = 1; break; } } } public void DisplayRerollEffectClient() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown EffectManager.SpawnEffect(lunarRerollEffect, new EffectData { origin = ((Component)pickupDisplay).transform.position, rotation = Quaternion.identity, scale = 2f }, true); } public ItemDef GetBodyHighestScrap(CharacterBody body) { ItemTier tier; return GetBodyHighestScrap(body, out tier); } public ItemDef GetBodyHighestScrap(CharacterBody body, out ItemTier tier) { if ((Object)(object)body == (Object)null) { tier = (ItemTier)5; return null; } Inventory inventory = body.inventory; if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)inventory)) { if (inventory.GetItemCountPermanent(Items.ScrapYellow) > 0) { tier = (ItemTier)4; return Items.ScrapYellow; } if (inventory.GetItemCountPermanent(Items.ScrapRedSuppressed) > 0) { tier = (ItemTier)2; return Items.ScrapRedSuppressed; } if (inventory.GetItemCountPermanent(Items.ScrapRed) > 0) { tier = (ItemTier)2; return Items.ScrapRed; } if (inventory.GetItemCountPermanent(Items.RegeneratingScrap) > 0) { tier = (ItemTier)1; return Items.RegeneratingScrap; } if (inventory.GetItemCountPermanent(Items.ScrapGreenSuppressed) > 0) { tier = (ItemTier)1; return Items.ScrapGreenSuppressed; } if (inventory.GetItemCountPermanent(Items.ScrapGreen) > 0) { tier = (ItemTier)1; return Items.ScrapGreen; } if (inventory.GetItemCountPermanent(Items.ScrapWhiteSuppressed) > 0) { tier = (ItemTier)0; return Items.ScrapWhiteSuppressed; } if (inventory.GetItemCountPermanent(Items.ScrapWhite) > 0) { tier = (ItemTier)0; return Items.ScrapWhite; } } tier = (ItemTier)5; return null; } [Server] public CharacterBody GetClosestPlayerServer() { //IL_0016: 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_00a5: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'RoR2.CharacterBody LunarConstructor.ConstructorManager::GetClosestPlayerServer()' called on client"); return default(CharacterBody); } if (!NetworkServer.active) { Debug.Log((object)"GetClosestPlayerServer() called on client!"); } CharacterBody val = null; float num = 9999f; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance.master.GetBody() == (Object)null)) { float num2 = Vector3.Distance(instance.master.GetBody().transform.position, ((Component)this).transform.position); if ((Object)(object)val == (Object)null || num2 < num) { val = instance.master.GetBody(); num = num2; } } } return val; } [Server] public CharacterBody GetClosestPlayerWithScrapServer() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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) if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'RoR2.CharacterBody LunarConstructor.ConstructorManager::GetClosestPlayerWithScrapServer()' called on client"); return default(CharacterBody); } if (!NetworkServer.active) { Debug.Log((object)"GetClosestPlayerServerWithScrap() called on client!"); } CharacterBody val = null; float num = 9999f; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance.master.GetBody() == (Object)null) && !((Object)(object)GetBodyHighestScrap(instance.master.GetBody()) == (Object)null)) { float num2 = Vector3.Distance(instance.master.GetBody().transform.position, ((Component)this).transform.position); if ((Object)(object)val == (Object)null || num2 < num) { val = instance.master.GetBody(); num = num2; } } } return val; } public bool PassesFilter(PickupIndex pickupIndex) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0013: 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_0021: Invalid comparison between Unknown and I4 //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) if ((int)bannedItemTag == 0) { return true; } PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex); if ((int)pickupDef.itemIndex != -1) { return !ItemCatalog.GetItemDef(pickupDef.itemIndex).ContainsTag(bannedItemTag); } return true; } [Server] private UniquePickup PickFromList(List dropList) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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) if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'RoR2.UniquePickup LunarConstructor.ConstructorManager::PickFromList(System.Collections.Generic.List`1)' called on client"); return default(UniquePickup); } if (!NetworkServer.active) { return UniquePickup.none; } UniquePickup none = UniquePickup.none; if (dropList != null && dropList.Count > 0) { ((UniquePickup)(ref none))..ctor(Run.instance.treasureRng.NextElementUniform(dropList.Where(PassesFilter).ToList())); } return none; } [Server] public void OnPurchase(Interactor interactor) { //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: 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_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected I4, but got Unknown //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_0105: 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_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_00df: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'System.Void LunarConstructor.ConstructorManager::OnPurchase(RoR2.Interactor)' called on client"); return; } if (!NetworkServer.active) { Debug.LogWarning((object)"[Server] function 'ConstructorManager::OnPurchase(RoR2.Interactor)' called on client"); return; } purchaseInteraction.SetAvailable(false); waitingForRefresh = true; refreshTimer = 1.5f; CharacterBody component = ((Component)interactor).GetComponent(); ItemTier scrapTier; ItemDef andConsumeItem = GetAndConsumeItem(component, out scrapTier); if (Object.op_Implicit((Object)(object)andConsumeItem)) { PurchaseInteraction.CreateItemTakenOrb(component.corePosition, ((Component)this).gameObject, andConsumeItem.itemIndex); Util.PlaySound("Play_voidJailer_m1_impact", ((Component)this).gameObject); ItemTier val = scrapTier; ItemTier val2 = val; switch ((int)val2) { case 4: refreshPrintItem = new UniquePickup(yellowPickup); break; case 2: refreshPrintItem = new UniquePickup(redPickup); break; case 1: refreshPrintItem = new UniquePickup(greenPickup); break; case 0: refreshPrintItem = new UniquePickup(whitePickup); break; default: refreshPrintItem = UniquePickup.none; break; } } EffectManager.SpawnEffect(shrineUseEffect, new EffectData { origin = ((Component)this).gameObject.transform.position, rotation = Quaternion.identity, scale = 3f, color = Color32.op_Implicit(Color.cyan) }, true); } private ItemDef GetAndConsumeItem(CharacterBody interactorBody, out ItemTier scrapTier) { //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_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004b: 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_0070: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Expected I4, but got Unknown //IL_0095: 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_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Expected O, but got Unknown ItemTier tier; ItemDef bodyHighestScrap = GetBodyHighestScrap(interactorBody, out tier); bool flag = false; if ((Object)(object)bodyHighestScrap == (Object)null) { scrapTier = (ItemTier)5; return null; } if ((Object)(object)bodyHighestScrap == (Object)(object)Items.RegeneratingScrap) { ItemIndex itemIndex = bodyHighestScrap.itemIndex; ItemTransformation val = default(ItemTransformation); ((ItemTransformation)(ref val)).originalItemIndex = itemIndex; ((ItemTransformation)(ref val)).newItemIndex = (ItemIndex)(-1); ((ItemTransformation)(ref val)).maxToTransform = 1; ((ItemTransformation)(ref val)).forbidTempItems = true; ItemTransformation val2 = val; if (((ItemTransformation)(ref val2)).originalItemIndex == Items.RegeneratingScrap.itemIndex) { flag = true; ((ItemTransformation)(ref val2)).newItemIndex = Items.RegeneratingScrapConsumed.itemIndex; } TryTransformResult val3 = default(TryTransformResult); ((ItemTransformation)(ref val2)).TryTransform(interactorBody.inventory, ref val3); if (flag) { EntitySoundManager.EmitSoundServer(NetworkSoundEventCatalog.FindNetworkSoundEventIndex("Play_item_proc_regenScrap_consume"), ((Component)interactorBody).gameObject); ModelLocator component = ((Component)interactorBody).GetComponent(); if (Object.op_Implicit((Object)(object)component)) { Transform modelTransform = component.modelTransform; if (Object.op_Implicit((Object)(object)modelTransform)) { CharacterModel component2 = ((Component)modelTransform).GetComponent(); if (Object.op_Implicit((Object)(object)component2)) { List itemDisplayObjects = component2.GetItemDisplayObjects(Items.RegeneratingScrap.itemIndex); if (itemDisplayObjects.Count > 0) { GameObject val4 = itemDisplayObjects[0]; GameObject val5 = Addressables.LoadAssetAsync((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionDisplay.prefab").WaitForCompletion(); EffectData val6 = new EffectData { origin = val4.transform.position, rotation = val4.transform.rotation }; EffectManager.SpawnEffect(val5, val6, true); } } } } EffectManager.SimpleMuzzleFlash(Addressables.LoadAssetAsync((object)"RoR2/DLC1/RegeneratingScrap/RegeneratingScrapExplosionInPrinter.prefab").WaitForCompletion(), ((Component)this).gameObject, "Circle", true); CharacterMasterNotificationQueue.SendTransformNotification(interactorBody.master, Items.RegeneratingScrap.itemIndex, Items.RegeneratingScrapConsumed.itemIndex, (TransformationType)0); } } else { interactorBody.inventory.RemoveItemPermanent(bodyHighestScrap, 1); } scrapTier = (ItemTier)(int)tier; return bodyHighestScrap; } public bool ShouldDisplayHologram(GameObject viewer) { return true; } public GameObject GetHologramContentPrefab() { return LunarConstructor.ConstructorHologramContent; } public void UpdateHologramContent(GameObject hologramContentObject, Transform viewerBody) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //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_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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_008a: 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_0097: Unknown result type (might be due to invalid IL or missing references) ConstructorCostHologramContent component = hologramContentObject.GetComponent(); if (Object.op_Implicit((Object)(object)component)) { component.displayValue = "1 Scrap"; switch (currentPickupTierIndex) { case 1: component.colorValue = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)1)); break; case 2: component.colorValue = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)2)); break; case 3: component.colorValue = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)3)); break; case 4: component.colorValue = Color32.op_Implicit(ColorCatalog.GetColor((ColorIndex)13)); break; default: component.colorValue = Color.white; break; } } } private void UNetVersion() { } protected static void InvokeRpcRpcClearPickup(NetworkBehaviour obj, NetworkReader reader) { if (!NetworkClient.active) { Debug.LogError((object)"RPC RpcClearPickup called on server."); } else { ((ConstructorManager)(object)obj).RpcClearPickup(); } } public void CallRpcClearPickup() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { Debug.LogError((object)"RPC Function RpcClearPickup called on client."); return; } NetworkWriter val = new NetworkWriter(); val.Write((short)0); val.Write((short)2); val.WritePackedUInt32((uint)kRpcRpcClearPickup); val.Write(((Component)this).GetComponent().netId); ((NetworkBehaviour)this).SendRPCInternal(val, 0, "RpcClearPickup"); } static ConstructorManager() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown kRpcRpcClearPickup = -1133794592; NetworkBehaviour.RegisterRpcDelegate(typeof(ConstructorManager), kRpcRpcClearPickup, new CmdDelegate(InvokeRpcRpcClearPickup)); NetworkCRC.RegisterBehaviour("ConstructorManager", 0); } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { if (forceAll) { writer.WritePackedUInt32((uint)whitePickupIndex); writer.WritePackedUInt32((uint)greenPickupIndex); writer.WritePackedUInt32((uint)redPickupIndex); writer.WritePackedUInt32((uint)yellowPickupIndex); writer.Write(closestPlayerObject); return true; } bool flag = false; if ((((NetworkBehaviour)this).syncVarDirtyBits & (true ? 1u : 0u)) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.WritePackedUInt32((uint)whitePickupIndex); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 2u) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.WritePackedUInt32((uint)greenPickupIndex); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 4u) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.WritePackedUInt32((uint)redPickupIndex); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 8u) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.WritePackedUInt32((uint)yellowPickupIndex); } if ((((NetworkBehaviour)this).syncVarDirtyBits & 0x10u) != 0) { if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); flag = true; } writer.Write(closestPlayerObject); } if (!flag) { writer.WritePackedUInt32(((NetworkBehaviour)this).syncVarDirtyBits); } return flag; } public override void OnDeserialize(NetworkReader reader, bool initialState) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) if (initialState) { whitePickupIndex = (int)reader.ReadPackedUInt32(); greenPickupIndex = (int)reader.ReadPackedUInt32(); redPickupIndex = (int)reader.ReadPackedUInt32(); yellowPickupIndex = (int)reader.ReadPackedUInt32(); ___closestPlayerObjectNetId = reader.ReadNetworkId(); return; } int num = (int)reader.ReadPackedUInt32(); if (((uint)num & (true ? 1u : 0u)) != 0) { whitePickupIndex = (int)reader.ReadPackedUInt32(); } if (((uint)num & 2u) != 0) { greenPickupIndex = (int)reader.ReadPackedUInt32(); } if (((uint)num & 4u) != 0) { redPickupIndex = (int)reader.ReadPackedUInt32(); } if (((uint)num & 8u) != 0) { yellowPickupIndex = (int)reader.ReadPackedUInt32(); } if (((uint)num & 0x10u) != 0) { closestPlayerObject = reader.ReadGameObject(); } } public override void PreStartClient() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (!((NetworkInstanceId)(ref ___closestPlayerObjectNetId)).IsEmpty()) { NetworkclosestPlayerObject = ClientScene.FindLocalObject(___closestPlayerObjectNetId); } } } }