Decompiled source of ChangeWingStageNumber v1.0.0

plugins/ChangeWingStageNumber/ChangeWingStageNumber.dll

Decompiled 2 hours ago
using System;
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 BepInEx.Logging;
using EntityStates;
using EntityStates.Missions.AccessCodes.Node;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using On.EntityStates.Missions.AccessCodes.Node;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.ContentManagement;
using RoR2.ExpansionManagement;
using RoR2.Navigation;
using RoR2BepInExPack.GameAssetPaths.Version_1_35_0;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("ChangeWingStageNumber")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+6e6f3a6fae61fdb3adc9985a55872bde9273d877")]
[assembly: AssemblyProduct("ChangeWingStageNumber")]
[assembly: AssemblyTitle("ChangeWingStageNumber")]
[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 ChangeWingStageNumber
{
	public class AccessNodeControllerNux : NetworkBehaviour
	{
		private PurchaseInteraction purchaseInteraction;

		private EntityStateMachine esm;

		private GameObject fightPrefab = Main.portalPrefab;

		private SolusFight solusFight;

		public void Start()
		{
			purchaseInteraction = ((Component)this).GetComponent<PurchaseInteraction>();
			esm = ((Component)this).GetComponent<EntityStateMachine>();
			GameObject val = Object.Instantiate<GameObject>(fightPrefab, ((Component)this).transform);
			solusFight = ((Component)val.transform.GetChild(0)).GetComponent<SolusFight>();
			if (NetworkServer.active && Object.op_Implicit((Object)(object)purchaseInteraction))
			{
				purchaseInteraction.SetAvailable(true);
				((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)OnPurchase);
			}
		}

		private void OnEnable()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			TeleporterInteraction.onTeleporterBeginChargingGlobal += TurnOffNode;
			if (NetworkServer.active)
			{
				Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage
				{
					baseToken = "ACCESSCODES_SPAWNED"
				});
			}
		}

		private void OnDisable()
		{
			TeleporterInteraction.onTeleporterBeginChargingGlobal -= TurnOffNode;
		}

		[Server]
		public void TurnOffNode(TeleporterInteraction interaction)
		{
			if (!NetworkServer.active)
			{
				Debug.LogWarning((object)"[Server] function 'AccessNodeControllerNux::TurnOffNode(RoR2.TeleporterInteraction)' called on client");
			}
			else
			{
				purchaseInteraction.SetAvailable(false);
			}
		}

		[Server]
		public void OnPurchase(Interactor interactor)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			if (!NetworkServer.active)
			{
				Debug.LogWarning((object)"[Server] function 'AccessNodeControllerNux::OnPurchase(RoR2.Interactor)' called on client");
				return;
			}
			purchaseInteraction.SetAvailable(false);
			esm.SetState((EntityState)new NodeActive());
			((OverrideFightBase)solusFight).TriggerServer();
		}
	}
	internal static class Log
	{
		internal static ManualLogSource _logSource;

		internal static void Init(ManualLogSource logSource)
		{
			_logSource = logSource;
		}

		private static string getLogPrefix(string callerPath, string callerMemberName, int callerLineNumber)
		{
			int num = callerPath.LastIndexOf("ChangeWingStageNumber");
			if (num >= 0)
			{
				callerPath = callerPath.Substring(num + "ChangeWingStageNumber".Length + 1);
			}
			return $"{callerPath}:{callerLineNumber} ({callerMemberName}) ";
		}

		internal static void Error(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogError((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Error_NoCallerPrefix(object data)
		{
			_logSource.LogError(data);
		}

		internal static void Fatal(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogFatal((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Fatal_NoCallerPrefix(object data)
		{
			_logSource.LogFatal(data);
		}

		internal static void Info(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogInfo((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Info_NoCallerPrefix(object data)
		{
			_logSource.LogInfo(data);
		}

		internal static void Message(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogMessage((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Message_NoCallerPrefix(object data)
		{
			_logSource.LogMessage(data);
		}

		internal static void Warning(object data, [CallerFilePath] string callerPath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = -1)
		{
			_logSource.LogWarning((object)(getLogPrefix(callerPath, callerMemberName, callerLineNumber) + data));
		}

		internal static void Warning_NoCallerPrefix(object data)
		{
			_logSource.LogWarning(data);
		}
	}
	[BepInPlugin("Nuxlar.ChangeWingStageNumber", "ChangeWingStageNumber", "1.0.0")]
	public class Main : BaseUnityPlugin
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static Manipulator <0>__BaseStateOnEnterCallerMethodModifier;
		}

		public const string PluginGUID = "Nuxlar.ChangeWingStageNumber";

		public const string PluginAuthor = "Nuxlar";

		public const string PluginName = "ChangeWingStageNumber";

		public const string PluginVersion = "1.0.0";

		private const BindingFlags allFlags = (BindingFlags)(-1);

		private static ConfigEntry<bool> goToMoon;

		public static GameObject portalPrefab;

		private static GameObject nodePrefab;

		private static InteractableSpawnCard interactableSpawnCard = ScriptableObject.CreateInstance<InteractableSpawnCard>();

		internal static Main Instance { get; private set; }

		public static string PluginDirectory { get; private set; }

		private static ConfigFile CWSNConfig { get; set; }

		public void Awake()
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Expected O, but got Unknown
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Expected O, but got Unknown
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Expected O, but got Unknown
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_006f: 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_007a: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Expected O, but got Unknown
			Instance = this;
			CWSNConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.ChangeWingStageNumber.cfg", true);
			goToMoon = CWSNConfig.Bind<bool>("General", "Moon Portal", true, "Portal after Solus Heart goes to the Moon.");
			Log.Init(((BaseUnityPlugin)this).Logger);
			MethodInfo? method = typeof(Main).GetMethod("BaseStateOnEnterCaller", (BindingFlags)(-1));
			object obj = <>O.<0>__BaseStateOnEnterCallerMethodModifier;
			if (obj == null)
			{
				Manipulator val = BaseStateOnEnterCallerMethodModifier;
				<>O.<0>__BaseStateOnEnterCallerMethodModifier = val;
				obj = (object)val;
			}
			new ILHook((MethodBase)method, (Manipulator)obj);
			LoadAssets();
			AccessCodesMissionController.OnStartServer += new hook_OnStartServer(DieInAFire);
			AccessNodesBaseState.OnEnter += new hook_OnEnter(ReplaceOnEnter);
			NodeActive.OnEnter += new hook_OnEnter(KillMe);
			if (goToMoon.Value)
			{
				SolusWebMissionController.SpawnPortal += new hook_SpawnPortal(ChangeDestination);
			}
		}

		private void KillMe(orig_OnEnter orig, NodeActive self)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: 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_0052: 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)
			//IL_005d: Expected O, but got Unknown
			if (!Object.op_Implicit((Object)(object)((AccessNodesBaseState)self).childLocator))
			{
				((AccessNodesBaseState)self).childLocator = ((EntityState)self).GetComponent<ChildLocator>();
			}
			((AccessNodesBaseState)self).SwapMaterials((NodeStates)1);
			GameObject completedEffectPrefab = AccessNodesBaseState.completedEffectPrefab;
			if (Object.op_Implicit((Object)(object)completedEffectPrefab))
			{
				Transform val = ((AccessNodesBaseState)self).childLocator.FindChild(AccessNodesBaseState.effectAttachString);
				EffectData val2 = new EffectData
				{
					origin = val.position,
					rotation = val.rotation
				};
				val2.SetChildLocatorTransformReference(((Component)val).gameObject, 0);
				EffectManager.SpawnEffect(completedEffectPrefab, val2, true);
			}
			BaseStateOnEnterCaller((AccessNodesBaseState)(object)self);
		}

		private void ChangeDestination(orig_SpawnPortal orig, SolusWebMissionController self, GameObject prefab, Transform spawnPoint, bool setRunNextStage)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)prefab == (Object)null) && !((Object)(object)spawnPoint == (Object)null))
			{
				GameObject val = Object.Instantiate<GameObject>(prefab, spawnPoint.position, spawnPoint.rotation);
				if (setRunNextStage)
				{
					val.GetComponent<SceneExitController>().destinationScene = SceneCatalog.GetSceneDefFromSceneName("moon2");
				}
				NetworkServer.Spawn(val);
			}
		}

		private void ReplaceOnEnter(orig_OnEnter orig, AccessNodesBaseState self)
		{
			Transform val = self.childLocator.FindChild("OFF");
			if (Object.op_Implicit((Object)(object)val))
			{
				self._nodeMeshAnimator = ((Component)val).GetComponent<Animator>();
			}
		}

		private void DieInAFire(orig_OnStartServer orig, AccessCodesMissionController self)
		{
		}

		private static void LoadAssets()
		{
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//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_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)
			AssetReferenceT<GameObject> obj = new AssetReferenceT<GameObject>(RoR2_DLC3_AccessCodesNode.Access_Codes_Node_prefab);
			AssetReferenceT<GameObject> obj2 = new AssetReferenceT<GameObject>(RoR2_DLC3_AccessCodesNode.Access_Codes_Portals_prefab);
			new AssetReferenceT<GameObject>(RoR2_DLC3_AccessCodesNode.GROUP__Access_Codes_prefab);
			AssetReferenceT<ExpansionDef> val = new AssetReferenceT<ExpansionDef>(RoR2_DLC3.DLC3_asset);
			ExpansionDef def = AssetAsyncReferenceManager<ExpansionDef>.LoadAsset(val, (AsyncReferenceHandleUnloadType)2).WaitForCompletion();
			portalPrefab = AssetAsyncReferenceManager<GameObject>.LoadAsset(obj2, (AsyncReferenceHandleUnloadType)2).WaitForCompletion();
			AsyncOperationHandle<GameObject> val2 = AssetAsyncReferenceManager<GameObject>.LoadAsset(obj, (AsyncReferenceHandleUnloadType)2);
			val2.Completed += delegate(AsyncOperationHandle<GameObject> x)
			{
				//IL_006d: 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_00f8: Unknown result type (might be due to invalid IL or missing references)
				//IL_0103: Unknown result type (might be due to invalid IL or missing references)
				//IL_010e: Unknown result type (might be due to invalid IL or missing references)
				//IL_011a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0156: Unknown result type (might be due to invalid IL or missing references)
				//IL_015b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0166: Unknown result type (might be due to invalid IL or missing references)
				//IL_0172: Expected O, but got Unknown
				//IL_0172: 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_017e: 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_0186: Expected O, but got Unknown
				//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
				nodePrefab = PrefabAPI.InstantiateClone(x.Result, "AccessNodeNux", true);
				Object.Destroy((Object)(object)nodePrefab.GetComponent<ProxyInteraction>());
				Object.Destroy((Object)(object)nodePrefab.GetComponent<AccessCodesNodeController>());
				Object.Destroy((Object)(object)nodePrefab.GetComponent<EventLockableInteractable>());
				nodePrefab.AddComponent<ExpansionRequirementComponent>().requiredExpansion = def;
				nodePrefab.GetComponent<EntityStateMachine>().initialStateType = new SerializableEntityStateType(typeof(NodesOnAndReady));
				PurchaseInteraction obj3 = nodePrefab.AddComponent<PurchaseInteraction>();
				obj3.contextToken = "ACCESSCODES_NAME";
				obj3.NetworkdisplayNameToken = "ACCESSCODES_NAME";
				nodePrefab.AddComponent<AccessNodeControllerNux>();
				nodePrefab.GetComponent<Highlight>().targetRenderer = (Renderer)(object)((Component)nodePrefab.transform.Find("Model/AccessCodeNodeModel/mdlAccessCodesNode/meshBody")).GetComponent<SkinnedMeshRenderer>();
				((Object)interactableSpawnCard).name = "iscPointOfInterestTheseNutsOnYourChin";
				((SpawnCard)interactableSpawnCard).prefab = nodePrefab;
				((SpawnCard)interactableSpawnCard).sendOverNetwork = true;
				((SpawnCard)interactableSpawnCard).hullSize = (HullClassification)1;
				((SpawnCard)interactableSpawnCard).nodeGraphType = (GraphType)0;
				((SpawnCard)interactableSpawnCard).requiredFlags = (NodeFlags)0;
				((SpawnCard)interactableSpawnCard).forbiddenFlags = (NodeFlags)16;
				((SpawnCard)interactableSpawnCard).directorCreditCost = 0;
				((SpawnCard)interactableSpawnCard).occupyPosition = true;
				interactableSpawnCard.orientToFloor = true;
				interactableSpawnCard.skipSpawnWhenSacrificeArtifactEnabled = false;
				interactableSpawnCard.maxSpawnsPerStage = 1;
				DirectorCard card = new DirectorCard
				{
					selectionWeight = 1000,
					spawnCard = (SpawnCard)(object)interactableSpawnCard
				};
				DirectorCardHolder val3 = new DirectorCardHolder
				{
					Card = card,
					InteractableCategory = (InteractableCategory)2
				};
				foreach (Stage item in new List<Stage>
				{
					(Stage)16384,
					(Stage)1099511627776L
				})
				{
					Helpers.AddNewInteractableToStage(val3, item, "");
				}
			};
		}

		private static void BaseStateOnEnterCaller(AccessNodesBaseState self)
		{
		}

		private static void BaseStateOnEnterCallerMethodModifier(ILContext il)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//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)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			ILCursor val = new ILCursor(il);
			val.Emit(OpCodes.Ldarg_0);
			val.Emit(OpCodes.Call, (MethodBase)typeof(AccessNodesBaseState).GetMethod("OnEnter", (BindingFlags)(-1)));
		}
	}
}