using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using On;
using Steamworks;
using Steamworks.Data;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.InputSystem.Utilities;
using UnityEngine.ProBuilder;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: AssemblyCompany("Ryokune")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Enhance your multiplayer experience by having additional lobby related QoL features in game!")]
[assembly: AssemblyFileVersion("2.0.1.0")]
[assembly: AssemblyInformationalVersion("2.0.1+160a4c9a0984fdc8422ef5f8b0e6e81b5d28ddb8")]
[assembly: AssemblyProduct("Better_Lobbies")]
[assembly: AssemblyTitle("ryokune.better_lobbies")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/VisualError/Better-Lobbies")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.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.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;
}
}
[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;
}
}
}
[AttributeUsage(AttributeTargets.Method)]
internal class HookInitAttribute : Attribute
{
}
[BepInPlugin("ryokune.better_lobbies", "Better_Lobbies", "2.0.1")]
public class Plugin : BaseUnityPlugin
{
public static ManualLogSource Log;
private void Awake()
{
Log = ((BaseUnityPlugin)this).Logger;
Log.LogInfo((object)"Plugin Better_Lobbies is loaded!");
Hook();
}
private static void Hook()
{
Log.LogInfo((object)"Starting Hooks!");
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type[] array = types;
foreach (Type type in array)
{
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo[] array2 = methods;
foreach (MethodInfo methodInfo in array2)
{
if (methodInfo.GetCustomAttribute<HookInitAttribute>() != null)
{
Log.LogDebug((object)("Hooking " + type.Name));
methodInfo.Invoke(null, null);
}
}
}
}
}
internal static class LCMPluginInfo
{
public const string PLUGIN_GUID = "ryokune.better_lobbies";
public const string PLUGIN_NAME = "Better_Lobbies";
public const string PLUGIN_VERSION = "2.0.1";
}
namespace Better_Lobbies.Hooks
{
internal class EnterLobbyCode
{
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__InitializeField;
public static UnityAction<string> <1>__onSubmit;
public static UnityAction<string> <2>__onEndEdit;
public static UnityAction<string> <3>__onDeselect;
public static OnValidateInput <4>__ValidateInput;
}
private static GameObject? FieldObj;
internal static TMP_InputField? InputField;
private static bool stop;
[HookInit]
internal static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__InitializeField;
if (obj == null)
{
hook_Awake val = InitializeField;
<>O.<0>__InitializeField = val;
obj = (object)val;
}
MenuManager.Awake += (hook_Awake)obj;
}
private static void InitializeField(orig_Awake orig, MenuManager self)
{
orig.Invoke(self);
GetFieldObj();
if (!((Object)(object)FieldObj == (Object)null) && !FieldObj.activeInHierarchy)
{
FieldObj.SetActive(true);
GetInputField(FieldObj);
InitializeInputField(InputField);
Plugin.Log.LogInfo((object)"Initialized Lobby search field!");
}
}
private static void GetFieldObj()
{
if ((Object)(object)FieldObj == (Object)null)
{
FieldObj = GameObject.Find("/Canvas/MenuContainer/LobbyList/JoinCode");
Plugin.Log.LogDebug((object)$"Trying to find Lobby Code Field OBJ. Got: {(Object)(object)FieldObj != (Object)null}");
}
}
private static void GetInputField(GameObject gameObject)
{
if ((Object)(object)InputField == (Object)null)
{
InputField = gameObject.GetComponent<TMP_InputField>();
Plugin.Log.LogDebug((object)$"Trying to find Input Field. Got: {(Object)(object)InputField != (Object)null}");
}
}
private static void InitializeInputField(TMP_InputField? field)
{
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Expected O, but got Unknown
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Expected O, but got Unknown
if (!((Object)(object)field == (Object)null))
{
((Selectable)field).interactable = true;
((TMP_Text)((Component)field.placeholder).gameObject.GetComponent<TextMeshProUGUI>()).text = "Search or Enter a room code...";
((UnityEventBase)field.onEndEdit).m_PersistentCalls.Clear();
((UnityEventBase)field.onEndTextSelection).m_PersistentCalls.Clear();
((UnityEventBase)field.onSubmit).m_PersistentCalls.Clear();
((UnityEvent<string>)(object)field.onSubmit).AddListener((UnityAction<string>)onSubmit);
((UnityEvent<string>)(object)field.onEndEdit).AddListener((UnityAction<string>)onEndEdit);
((UnityEvent<string>)(object)field.onDeselect).AddListener((UnityAction<string>)onDeselect);
OnValidateInput onValidateInput = field.onValidateInput;
object obj = <>O.<4>__ValidateInput;
if (obj == null)
{
OnValidateInput val = ValidateInput;
<>O.<4>__ValidateInput = val;
obj = (object)val;
}
field.onValidateInput = (OnValidateInput)Delegate.Combine((Delegate?)(object)onValidateInput, (Delegate?)obj);
}
}
private static void onEndEdit(string value)
{
stop = false;
}
private static void onDeselect(string value)
{
stop = false;
if ((Object)(object)InputField != (Object)null)
{
InputField.text = "";
}
}
private static char ValidateInput(string text, int charIndex, char addedChar)
{
Plugin.Log.LogWarning((object)addedChar);
if (addedChar == '"')
{
stop = true;
}
if ((!char.IsDigit(addedChar) && !char.IsControl(addedChar)) || stop)
{
return '\0';
}
return addedChar;
}
private static void onSubmit(string value)
{
//IL_001d: 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_004d: 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)
if (!ulong.TryParse(value, out var result))
{
SteamLobbyManager? instance = SteamLobbyManager.Instance;
if (instance != null)
{
instance.LoadServerList();
}
}
Lobby val = default(Lobby);
((Lobby)(ref val))..ctor(SteamId.op_Implicit(result));
if (Utility.IsNullOrWhiteSpace(((Lobby)(ref val)).GetData("vers")))
{
SteamLobbyManager? instance2 = SteamLobbyManager.Instance;
if (instance2 != null)
{
instance2.LoadServerList();
}
}
else
{
LobbySlot.JoinLobbyAfterVerifying(val, ((Lobby)(ref val)).Owner.Id);
}
}
}
internal class InGameMenu
{
[CompilerGenerated]
private static class <>O
{
public static hook_Start <0>__InsertCustomUI;
public static hook_OpenQuickMenu <1>__OpenQuickMenu;
public static hook_CloseQuickMenu <2>__QuickMenuManager_CloseQuickMenu;
}
private static GameObject? QuickMenu;
private static GameObject? DebugMenu;
private static GameObject? LobbyCodeObj;
private static GameObject? QuitObj;
private static TextMeshProUGUI? LobbyCodeTextMesh;
private static RectTransform? LobbyCodeRect;
private static RectTransform? ResumeRect;
[HookInit]
private static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//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_003b: Expected O, but got Unknown
//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_005b: Expected O, but got Unknown
object obj = <>O.<0>__InsertCustomUI;
if (obj == null)
{
hook_Start val = InsertCustomUI;
<>O.<0>__InsertCustomUI = val;
obj = (object)val;
}
QuickMenuManager.Start += (hook_Start)obj;
object obj2 = <>O.<1>__OpenQuickMenu;
if (obj2 == null)
{
hook_OpenQuickMenu val2 = OpenQuickMenu;
<>O.<1>__OpenQuickMenu = val2;
obj2 = (object)val2;
}
QuickMenuManager.OpenQuickMenu += (hook_OpenQuickMenu)obj2;
object obj3 = <>O.<2>__QuickMenuManager_CloseQuickMenu;
if (obj3 == null)
{
hook_CloseQuickMenu val3 = QuickMenuManager_CloseQuickMenu;
<>O.<2>__QuickMenuManager_CloseQuickMenu = val3;
obj3 = (object)val3;
}
QuickMenuManager.CloseQuickMenu += (hook_CloseQuickMenu)obj3;
}
private static void QuickMenuManager_CloseQuickMenu(orig_CloseQuickMenu orig, QuickMenuManager self)
{
orig.Invoke(self);
if ((Object)(object)LobbyCodeTextMesh != (Object)null)
{
((TMP_Text)LobbyCodeTextMesh).text = "> Lobby Code";
}
}
private static void OpenQuickMenu(orig_OpenQuickMenu orig, QuickMenuManager self)
{
orig.Invoke(self);
AdjustLobbyCode();
AddCrewCount();
}
private static void AddCrewCount()
{
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
GameObject? quickMenu = QuickMenu;
TextMeshProUGUI val = ((quickMenu != null) ? ((Component)quickMenu.transform.Find("PlayerList/Image/Header")).GetComponentInChildren<TextMeshProUGUI>() : null);
if (!((Object)(object)val == (Object)null))
{
object arg = (StartOfRound.Instance?.connectedPlayersAmount ?? 0) + 1;
Lobby value = GameNetworkManager.Instance.currentLobby.Value;
object arg2 = ((Lobby)(ref value)).MaxMembers;
value = GameNetworkManager.Instance.currentLobby.Value;
((TMP_Text)val).text = string.Format("CREW ({0}/{1}):\n{2}", arg, arg2, ((Lobby)(ref value)).GetData("name"));
}
}
private static void AdjustLobbyCode()
{
//IL_0061: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)LobbyCodeRect == (Object)null || (Object)(object)LobbyCodeObj == (Object)null)
{
return;
}
if ((Object)(object)DebugMenu != (Object)null && DebugMenu.activeSelf)
{
LobbyCodeObj.transform.SetParent(DebugMenu.transform);
((Transform)LobbyCodeRect).localPosition = new Vector3(125f, 185f, 0f);
((Transform)LobbyCodeRect).localScale = new Vector3(1f, 1f, 1f);
}
else if ((Object)(object)ResumeRect != (Object)null && (Object)(object)QuitObj != (Object)null)
{
GameObject? lobbyCodeObj = LobbyCodeObj;
if (lobbyCodeObj != null)
{
lobbyCodeObj.transform.SetParent(QuitObj.transform.parent);
}
((Transform)LobbyCodeRect).localPosition = ((Transform)ResumeRect).localPosition + new Vector3(0f, -55.5941f, 0f);
((Transform)LobbyCodeRect).localScale = ((Transform)ResumeRect).localScale;
}
}
private static void InsertCustomUI(orig_Start orig, QuickMenuManager self)
{
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: 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_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Expected O, but got Unknown
orig.Invoke(self);
QuickMenu = GameObject.Find("/Systems/UI/Canvas/QuickMenu/");
Transform obj = QuickMenu.transform.Find("DebugMenu");
DebugMenu = ((obj != null) ? ((Component)obj).gameObject : null);
Transform obj2 = QuickMenu.transform.Find("MainButtons/Quit/");
QuitObj = ((obj2 != null) ? ((Component)obj2).gameObject : null);
if (!((Object)(object)QuitObj == (Object)null))
{
ResumeRect = QuitObj.GetComponent<RectTransform>();
LobbyCodeObj = Object.Instantiate<GameObject>(QuitObj.gameObject, QuitObj.transform.parent);
LobbyCodeTextMesh = LobbyCodeObj.GetComponentInChildren<TextMeshProUGUI>();
Button LobbyCodeButton = LobbyCodeObj.GetComponent<Button>();
LobbyCodeRect = LobbyCodeObj.GetComponent<RectTransform>();
((Transform)LobbyCodeRect).localPosition = QuitObj.transform.localPosition + new Vector3(0f, -55.5941f, 0f);
((Transform)LobbyCodeRect).localScale = QuitObj.transform.localScale;
((UnityEventBase)LobbyCodeButton.onClick).m_PersistentCalls.Clear();
((UnityEvent)LobbyCodeButton.onClick).AddListener((UnityAction)delegate
{
((MonoBehaviour)LobbyCodeButton).StartCoroutine(CopyCode(LobbyCodeTextMesh));
});
((Object)LobbyCodeObj).name = "CopyLobbyCode";
((TMP_Text)LobbyCodeTextMesh).text = "> Lobby Code";
}
}
private static IEnumerator CopyCode(TextMeshProUGUI textMesh)
{
if (!GameNetworkManager.Instance.currentLobby.HasValue)
{
((TMP_Text)textMesh).text = "Can't get Lobby code!";
}
else
{
((TMP_Text)textMesh).text = "(Copied to clipboard!)";
Lobby value = GameNetworkManager.Instance.currentLobby.Value;
SteamId id = ((Lobby)(ref value)).Id;
string text = ((object)(SteamId)(ref id)).ToString();
string[] obj = new string[5] { "Lobby Code: ", text, "\nLobby Name: \"", null, null };
value = GameNetworkManager.Instance.currentLobby.Value;
obj[3] = ((Lobby)(ref value)).GetData("name");
obj[4] = "\"";
GUIUtility.systemCopyBuffer = string.Concat(obj);
Plugin.Log.LogInfo((object)("Lobby code copied to clipboard: " + text));
}
yield return (object)new WaitForSeconds(1.2f);
((TMP_Text)textMesh).text = "> Lobby Code";
}
}
internal class LobbyConnection
{
[CompilerGenerated]
private static class <>O
{
public static hook_OnEnable <0>__GameNetworkManager_OnEnable;
public static Action<Lobby> <1>__SetPreviouslyJoinedLobby;
}
internal static Lobby? PreviousLobby;
[HookInit]
private static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__GameNetworkManager_OnEnable;
if (obj == null)
{
hook_OnEnable val = GameNetworkManager_OnEnable;
<>O.<0>__GameNetworkManager_OnEnable = val;
obj = (object)val;
}
GameNetworkManager.OnEnable += (hook_OnEnable)obj;
}
private static void GameNetworkManager_OnEnable(orig_OnEnable orig, GameNetworkManager self)
{
orig.Invoke(self);
SteamMatchmaking.OnLobbyEntered += SetPreviouslyJoinedLobby;
}
private static void SetPreviouslyJoinedLobby(Lobby obj)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//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_003b: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkManager.Singleton.IsHost && !NetworkManager.Singleton.IsServer)
{
PreviousLobby = obj;
ManualLogSource log = Plugin.Log;
Lobby value = PreviousLobby.Value;
log.LogDebug((object)$"Setting previously joined lobby to {((Lobby)(ref value)).Id}");
}
}
}
internal class LobbyList
{
[CompilerGenerated]
private static class <>O
{
public static hook_loadLobbyListAndFilter <0>__SteamLobbyManager_loadLobbyListAndFilter;
}
[HookInit]
private static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__SteamLobbyManager_loadLobbyListAndFilter;
if (obj == null)
{
hook_loadLobbyListAndFilter val = SteamLobbyManager_loadLobbyListAndFilter;
<>O.<0>__SteamLobbyManager_loadLobbyListAndFilter = val;
obj = (object)val;
}
SteamLobbyManager.loadLobbyListAndFilter += (hook_loadLobbyListAndFilter)obj;
}
private static IEnumerator SteamLobbyManager_loadLobbyListAndFilter(orig_loadLobbyListAndFilter orig, SteamLobbyManager self, Lobby[] lobbyList)
{
//IL_0012: 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_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_0021: 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_0068: Unknown result type (might be due to invalid IL or missing references)
if (LobbyConnection.PreviousLobby.HasValue)
{
if (!lobbyList.Contains(LobbyConnection.PreviousLobby.Value))
{
ArrayUtility.Add<Lobby>(lobbyList, lobbyList[0]);
Plugin.Log.LogInfo((object)"Adding private lobby as rejoinable");
}
else
{
int num = MiscHelpers.IndexOf<Lobby>((IEnumerable<Lobby>)lobbyList, LobbyConnection.PreviousLobby.Value);
lobbyList[num] = lobbyList[0];
}
lobbyList[0] = LobbyConnection.PreviousLobby.Value;
}
return orig.Invoke(self, lobbyList);
}
}
internal class LobbySlot
{
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__LobbySlot_Awake;
}
[HookInit]
private static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__LobbySlot_Awake;
if (obj == null)
{
hook_Awake val = LobbySlot_Awake;
<>O.<0>__LobbySlot_Awake = val;
obj = (object)val;
}
LobbySlot.Awake += (hook_Awake)obj;
}
private static void LobbySlot_Awake(orig_Awake orig, LobbySlot self)
{
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: 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_00fc: Expected O, but got Unknown
LobbySlot self2 = self;
orig.Invoke(self2);
((TMP_Text)self2.playerCount).text = $"{((Lobby)(ref self2.thisLobby)).MemberCount} / {((Lobby)(ref self2.thisLobby)).MaxMembers}";
Button componentInChildren = ((Component)self2).GetComponentInChildren<Button>();
if ((Object)(object)componentInChildren != (Object)null)
{
Button val = Object.Instantiate<Button>(componentInChildren, ((Component)componentInChildren).transform.parent);
((Object)val).name = "LobbyCode";
RectTransform component = ((Component)val).GetComponent<RectTransform>();
component.anchoredPosition -= new Vector2(78f, 0f);
TextMeshProUGUI TextMesh = ((Component)val).GetComponentInChildren<TextMeshProUGUI>();
((TMP_Text)TextMesh).text = "Code";
((UnityEventBase)val.onClick).m_PersistentCalls.Clear();
((UnityEvent)val.onClick).AddListener((UnityAction)delegate
{
((MonoBehaviour)self2).StartCoroutine(CopyCode(self2, TextMesh));
});
((MonoBehaviour)self2).StartCoroutine(InitializeRejoin(self2, componentInChildren));
}
}
private static IEnumerator CopyCode(LobbySlot lobbySlot, TextMeshProUGUI textMesh)
{
string text = ((object)(SteamId)(ref lobbySlot.lobbyId)).ToString();
if (Utility.IsNullOrWhiteSpace(text))
{
((TMP_Text)textMesh).text = "Can't get Lobby code!";
}
else
{
GUIUtility.systemCopyBuffer = "Lobby Code: " + text + "\nLobby Name: \"" + ((TMP_Text)lobbySlot.LobbyName).text + "\"";
Plugin.Log.LogInfo((object)("Lobby code copied to clipboard: " + text));
((TMP_Text)textMesh).text = "Copied!";
}
yield return (object)new WaitForSeconds(1.2f);
((TMP_Text)textMesh).text = "Code";
}
private static IEnumerator InitializeRejoin(LobbySlot lobbySlot, Button joinButton)
{
LobbySlot lobbySlot2 = lobbySlot;
if (LobbyConnection.PreviousLobby.HasValue)
{
yield return (object)new WaitUntil((Func<bool>)(() => SteamId.op_Implicit(((Lobby)(ref lobbySlot2.thisLobby)).Id) != 0));
Lobby value = LobbyConnection.PreviousLobby.Value;
if (SteamId.op_Implicit(((Lobby)(ref value)).Id) == SteamId.op_Implicit(lobbySlot2.lobbyId))
{
TextMeshProUGUI componentInChildren = ((Component)joinButton).GetComponentInChildren<TextMeshProUGUI>();
((TMP_Text)componentInChildren).text = "Rejoin";
}
}
}
}
internal class SteamLobbyManager
{
[CompilerGenerated]
private static class <>O
{
public static hook_OnEnable <0>__SteamLobbyManager_OnEnable;
}
internal static SteamLobbyManager? Instance;
[HookInit]
private static void Init()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__SteamLobbyManager_OnEnable;
if (obj == null)
{
hook_OnEnable val = SteamLobbyManager_OnEnable;
<>O.<0>__SteamLobbyManager_OnEnable = val;
obj = (object)val;
}
SteamLobbyManager.OnEnable += (hook_OnEnable)obj;
}
private static void SteamLobbyManager_OnEnable(orig_OnEnable orig, SteamLobbyManager self)
{
orig.Invoke(self);
Instance = self;
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}