Decompiled source of DropInMultiplayer GUI v1.0.1

RoR2DropInMultiplayerHelper.dll

Decompiled 5 months ago
using System;
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.Bootstrap;
using HG.Reflection;
using Microsoft.CodeAnalysis;
using On.RoR2;
using On.RoR2.UI;
using RoR2;
using RoR2.UI;
using Survariants;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("RoR2DropInMultiplayerHelper")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Mod for Risk of Rain 2")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+9a1271e42d7ace9d78399501bd486979fabb1182")]
[assembly: AssemblyProduct("RoR2DropInMultiplayerHelper")]
[assembly: AssemblyTitle("RoR2DropInMultiplayerHelper")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class AllowNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class DisallowNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Method, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class DoesNotReturnAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class DoesNotReturnIfAttribute : Attribute
	{
		public bool ParameterValue { get; }

		public DoesNotReturnIfAttribute(bool parameterValue)
		{
			ParameterValue = parameterValue;
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MaybeNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MaybeNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public MaybeNullWhenAttribute(bool returnValue)
		{
			ReturnValue = returnValue;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class NotNullAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class NotNullIfNotNullAttribute : Attribute
	{
		public string ParameterName { get; }

		public NotNullIfNotNullAttribute(string parameterName)
		{
			ParameterName = parameterName;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	[DebuggerNonUserCode]
	internal sealed class NotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public NotNullWhenAttribute(bool returnValue)
		{
			ReturnValue = returnValue;
		}
	}
}
namespace RoR2DropInMultiplayerHelper
{
	internal class ModCompat
	{
		public static bool loaded_Survariants;

		public static void Init()
		{
			if (Chainloader.PluginInfos.ContainsKey("pseudopulse.Survariants"))
			{
				loaded_Survariants = true;
			}
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static bool Survariants_IsVariant(SurvivorDef survivorDef)
		{
			return SurvivorVariantCatalog.SurvivorVariantReverseMap.ContainsKey(survivorDef);
		}
	}
	[BepInPlugin("com.DestroyedClone.DropInMultiplayerHelper", "Drop In Multiplayer Helper", "1.0.1")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	public class Plugin : BaseUnityPlugin
	{
		public class KeepInactive : MonoBehaviour
		{
			public void Update()
			{
				((Component)this).gameObject.SetActive(false);
			}
		}

		public class DestroyOnEsc : MonoBehaviour
		{
			public void Update()
			{
				if (Input.GetKey((KeyCode)27))
				{
					Object.Destroy((Object)(object)((Component)this).gameObject);
				}
			}
		}

		public static GameObject displayInstance;

		public void Awake()
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Expected O, but got Unknown
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Expected O, but got Unknown
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected O, but got Unknown
			Chat.AddMessage_ChatMessageBase += new hook_AddMessage_ChatMessageBase(Chat_AddMessage_ChatMessageBase);
			SurvivorIconController.Awake += new hook_Awake(SurvivorIconController_Awake);
			Run.onClientGameOverGlobal += Run_onClientGameOverGlobal;
			CharacterSelectBarController.ShouldDisplaySurvivor += new hook_ShouldDisplaySurvivor(CharacterSelectBarController_ShouldDisplaySurvivor);
			Console.SubmitCmd_CmdSender_string_bool += new hook_SubmitCmd_CmdSender_string_bool(Console_SubmitCmd_CmdSender_string_bool);
			ModCompat.Init();
		}

		private void Console_SubmitCmd_CmdSender_string_bool(orig_SubmitCmd_CmdSender_string_bool orig, Console self, CmdSender sender, string cmd, bool recordSubmit)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			if (cmd == "pause" && !recordSubmit && Object.op_Implicit((Object)(object)displayInstance))
			{
				DestroyDisplayInstance();
			}
			else
			{
				orig.Invoke(self, sender, cmd, recordSubmit);
			}
		}

		private bool CharacterSelectBarController_ShouldDisplaySurvivor(orig_ShouldDisplaySurvivor orig, CharacterSelectBarController self, SurvivorDef survivorDef)
		{
			if (Object.op_Implicit((Object)(object)Run.instance) && ModCompat.loaded_Survariants && ModCompat.Survariants_IsVariant(survivorDef))
			{
				return true;
			}
			return orig.Invoke(self, survivorDef);
		}

		private void Run_onClientGameOverGlobal(Run run, RunReport runReport)
		{
			DestroyDisplayInstance();
		}

		private void SurvivorIconController_Awake(orig_Awake orig, SurvivorIconController self)
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Expected O, but got Unknown
			orig.Invoke(self);
			if (Object.op_Implicit((Object)(object)Run.instance))
			{
				((UnityEventBase)((Button)self.hgButton).onClick).RemoveAllListeners();
				LocalUser localUser = self.GetLocalUser();
				((UnityEvent)((Button)self.hgButton).onClick).AddListener((UnityAction)delegate
				{
					OnClick(self.survivorDef, localUser);
				});
			}
		}

		public void OnClick(SurvivorDef survivorDef, LocalUser localUser)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//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)
			if (Object.op_Implicit((Object)(object)localUser.cachedMaster) && localUser.currentNetworkUser.bodyIndexPreference == SurvivorCatalog.GetBodyIndexFromSurvivorIndex(survivorDef.survivorIndex))
			{
				DestroyDisplayInstance();
				return;
			}
			Console.instance.SubmitCmd(localUser.currentNetworkUser, "say \"/join_as " + survivorDef.cachedName + "\"", true);
			DestroyDisplayInstance();
		}

		private void Chat_AddMessage_ChatMessageBase(orig_AddMessage_ChatMessageBase orig, ChatMessageBase message)
		{
			orig.Invoke(message);
			UserChatMessage val = (UserChatMessage)(object)((message is UserChatMessage) ? message : null);
			if (val != null && (Object)(object)val.sender == (Object)(object)((Component)LocalUserManager.GetFirstLocalUser().currentNetworkUser).gameObject && val.text.ToUpperInvariant() == "/LIST_SURVIVORS")
			{
				DisplayCharacters();
			}
		}

		public static void DestroyDisplayInstance()
		{
			if (Object.op_Implicit((Object)(object)displayInstance))
			{
				Object.Destroy((Object)(object)displayInstance);
			}
		}

		public static void DisplayCharacters()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_0196: Unknown result type (might be due to invalid IL or missing references)
			if (!Object.op_Implicit((Object)(object)displayInstance))
			{
				GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/UI/CharacterSelectUI.prefab").WaitForCompletion();
				GameObject val2 = Object.Instantiate<GameObject>(val);
				((Behaviour)val2.GetComponent<CharacterSelectController>()).enabled = false;
				val2.transform.parent = ((Component)AchievementNotificationPanel.GetUserCanvas(LocalUserManager.GetFirstLocalUser())).transform;
				val2.AddComponent<DestroyOnEsc>();
				((Behaviour)val2.GetComponent<CursorOpener>()).enabled = false;
				((Component)val2.transform.Find("BottomSideFade")).gameObject.SetActive(false);
				((Component)val2.transform.Find("TopSideFade")).gameObject.SetActive(false);
				Transform val3 = val2.transform.Find("SafeArea");
				((Component)val3.Find("ReadyPanel")).gameObject.SetActive(false);
				((Component)val3.Find("RightHandPanel")).gameObject.SetActive(false);
				((Component)val3.Find("ChatboxPanel")).gameObject.SetActive(false);
				((Component)val3.Find("FooterPanel")).gameObject.SetActive(false);
				Transform obj = val3.Find("ConfigPanel(Clone)");
				if (obj != null)
				{
					((Component)obj).gameObject.SetActive(false);
				}
				Transform val4 = val3.Find("LeftHandPanel (Layer: Main)");
				((Component)val4.Find("BlurPanel")).gameObject.SetActive(false);
				((Component)val4.Find("BorderImage")).gameObject.SetActive(false);
				((Component)val4.Find("SurvivorInfoPanel, Active (Layer: Secondary)")).gameObject.AddComponent<KeepInactive>();
				val2.transform.localPosition = Vector3.zero;
				val2.transform.localScale = Vector3.one;
				displayInstance = val2;
			}
		}
	}
}