using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; 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 HarmonyLib; using InteractiveTerminalAPI.UI; using InteractiveTerminalAPI.UI.Application; using InteractiveTerminalAPI.UI.Cursor; using InteractiveTerminalAPI.UI.Page; using InteractiveTerminalAPI.UI.Screen; using Microsoft.CodeAnalysis; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; [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("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [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.Components")] [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("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LGUHome")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+8c5521e37f37e3d76518a16d04e5d1051842f105")] [assembly: AssemblyProduct("LGUHome")] [assembly: AssemblyTitle("LGUHome")] [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 LGUHome { internal class LGUHomeApplication : PageApplication { [CompilerGenerated] private sealed class d__8 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__8(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; Plugin.IsNavigating = false; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class d__10 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Terminal terminal; public string keyword; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: { <>1__state = -1; Plugin.IsNavigating = false; if ((Object)(object)terminal == (Object)null) { return false; } TMP_InputField screenText = terminal.screenText; screenText.text += keyword; terminal.textAdded = keyword.Length; terminal.OnSubmit(); return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private Terminal _terminal; private static Func _consNameGetter; private static bool _reflectionDone; public override void Initialization() { _terminal = Object.FindObjectOfType(); if (!_reflectionDone) { _reflectionDone = true; BuildReflectionCache(); } BuildHomeScreen(); } private static void BuildReflectionCache() { try { Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault((Assembly a) => a.GetName().Name == "LethalConstellations"); if (assembly == null) { return; } FieldInfo currentField = assembly.GetType("LethalConstellations.PluginCore.Collections")?.GetField("CurrentConstellationCM", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo consNameField = currentField?.FieldType.GetField("consName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (!(currentField == null) && !(consNameField == null)) { _consNameGetter = delegate { object value = currentField.GetValue(null); return (value == null) ? null : ((string)consNameField.GetValue(value)); }; Plugin.Log.LogInfo((object)"[Home] Constellation name getter cached."); } } catch (Exception ex) { Plugin.Log.LogWarning((object)("[Home] Could not cache constellation name getter: " + ex.Message)); } } private void BuildHomeScreen() { //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Expected O, but got Unknown string text = null; try { text = _consNameGetter?.Invoke(); } catch { } string text2 = (string.IsNullOrEmpty(text) ? " CONSTELLATIONS" : (" CONSTELLATIONS [" + text.ToUpperInvariant() + "]")); CursorElement[] array = (CursorElement[])(object)new CursorElement[4] { CursorElement.Create(text2, "", (Action)delegate { NavigateTo(Plugin.ConstellationsKeyword.Value); }, (Func)null, true), CursorElement.Create(" MOONS", "", (Action)delegate { NavigateTo(Plugin.MoonsKeyword.Value); }, (Func)null, true), CursorElement.Create(" SHOP", "", (Action)delegate { NavigateTo(Plugin.ShopKeyword.Value); }, (Func)null, true), CursorElement.Create(" TERMINAL PROMPT", "", (Action)TerminalPromptSelected, (Func)null, true) }; CursorMenu val = CursorMenu.Create(0, '>', array, (Func[])null); BoxedScreen val2 = new BoxedScreen(); val2.Title = Plugin.MenuTitle.Value; val2.elements = (ITextElement[])(object)new ITextElement[2] { (ITextElement)new TextElement { Text = " " }, (ITextElement)val }; BoxedScreen val3 = val2; base.currentPage = PageCursorElement.Create(0, (IScreen[])(object)new IScreen[1] { (IScreen)val3 }, new BaseCursorMenu[1] { (BaseCursorMenu)(object)val }); ((BaseInteractiveApplication)(object)this).currentCursorMenu = (BaseCursorMenu)(object)val; ((TerminalApplication)this).currentScreen = (IScreen)(object)val3; } protected override int GetEntriesPerPage(K[] entries) { return entries.Length; } private void TerminalPromptSelected() { Plugin.BypassLoadNewNodeRedirect = true; Plugin.IsNavigating = true; Object.Destroy((Object)(object)InteractiveTerminalManager.Instance); if ((Object)(object)_terminal != (Object)null) { ((MonoBehaviour)_terminal).StartCoroutine(ClearNavigatingFlag()); return; } Plugin.Log.LogWarning((object)"[Home] TerminalPromptSelected: terminal reference is null — clearing navigating flag synchronously."); Plugin.IsNavigating = false; } [IteratorStateMachine(typeof(d__8))] private static IEnumerator ClearNavigatingFlag() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__8(0); } private void NavigateTo(string keyword) { Terminal terminal = _terminal; Plugin.IsNavigating = true; Object.Destroy((Object)(object)InteractiveTerminalManager.Instance); if ((Object)(object)terminal == (Object)null) { Plugin.Log.LogWarning((object)("[Home] NavigateTo('" + keyword + "'): terminal reference is null — cannot submit keyword.")); Plugin.IsNavigating = false; } else { ((MonoBehaviour)terminal).StartCoroutine(SubmitNextFrame(terminal, keyword)); } } [IteratorStateMachine(typeof(d__10))] private static IEnumerator SubmitNextFrame(Terminal terminal, string keyword) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__10(0) { terminal = terminal, keyword = keyword }; } } [HarmonyPatch(typeof(Terminal), "BeginUsingTerminal")] internal static class BeginUsingTerminalPatch { [CompilerGenerated] private sealed class d__1 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Terminal terminal; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.15f); <>1__state = 1; return true; case 1: { <>1__state = -1; if ((Object)(object)terminal == (Object)null || !terminal.terminalInUse) { return false; } if ((Object)(object)InteractiveTerminalManager.Instance != (Object)null) { Plugin.Log.LogInfo((object)"[Home] BeginUsingTerminal fallback skipped — ITAPI already active."); return false; } Plugin.Log.LogInfo((object)"[Home] BeginUsingTerminal fallback: submitting home keyword."); TMP_InputField screenText = terminal.screenText; screenText.text += Plugin.HomeKeyword.Value; terminal.textAdded = Plugin.HomeKeyword.Value.Length; terminal.OnSubmit(); return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [HarmonyPostfix] private static void Postfix(Terminal __instance) { try { if ((Object)(object)__instance == (Object)null) { Plugin.Log.LogWarning((object)"[Home] BeginUsingTerminal Postfix: terminal is null — skipping fallback launch."); return; } Plugin.Log.LogInfo((object)"[Home] BeginUsingTerminal fired."); ((MonoBehaviour)__instance).StartCoroutine(LaunchHomeOnOpen(__instance)); } catch (Exception arg) { Plugin.Log.LogError((object)$"[Home] BeginUsingTerminal Postfix swallowed exception to protect specialInteractAnimation: {arg}"); } } [IteratorStateMachine(typeof(d__1))] private static IEnumerator LaunchHomeOnOpen(Terminal terminal) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__1(0) { terminal = terminal }; } } [HarmonyPatch(typeof(Terminal), "LoadNewNode")] internal static class LoadNewNodePatch { private static bool _isRedirecting; private static readonly HashSet _loggedNodes = new HashSet(); [HarmonyPrefix] private static bool Prefix(Terminal __instance, TerminalNode node) { if ((Object)(object)node == (Object)null) { return true; } string text = ((Object)node).name ?? ""; if (_loggedNodes.Add(text)) { string displayText = node.displayText; string text2 = ((displayText != null && displayText.Length > 60) ? node.displayText.Substring(0, 60) : (node.displayText ?? "")).Replace("\n", "\\n"); Plugin.Log.LogInfo((object)("[Home] LoadNewNode: name='" + text + "' displayText='" + text2 + "'")); } if (_isRedirecting) { return true; } if (Plugin.IsNavigating) { return true; } if ((Object)(object)InteractiveTerminalManager.Instance != (Object)null) { return true; } if (!ShouldRedirectToHome(__instance, node)) { return true; } if (Plugin.BypassLoadNewNodeRedirect) { Plugin.BypassLoadNewNodeRedirect = false; Plugin.Log.LogInfo((object)("[Home] LoadNewNode bypass active for '" + text + "' — letting it load.")); return true; } Plugin.Log.LogInfo((object)("[Home] LoadNewNode intercepted '" + text + "' — redirecting to home via ITAPI.")); _isRedirecting = true; TMP_InputField screenText = __instance.screenText; screenText.text += Plugin.HomeKeyword.Value; __instance.textAdded = Plugin.HomeKeyword.Value.Length; __instance.OnSubmit(); _isRedirecting = false; return false; } private static bool ShouldRedirectToHome(Terminal terminal, TerminalNode node) { List list = terminal.terminalNodes?.specialNodes; if (list != null && list.Count > 1 && (Object)(object)node == (Object)(object)list[1]) { return true; } if (string.Equals(((Object)node).name ?? "", Plugin.HomeKeyword.Value, StringComparison.OrdinalIgnoreCase)) { return true; } return false; } } [BepInPlugin("com.y4ngz.lguhome", "LGUHome", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public const string PLUGIN_GUID = "com.y4ngz.lguhome"; public const string PLUGIN_NAME = "LGUHome"; public const string PLUGIN_VERSION = "1.0.0"; internal static ManualLogSource Log; internal static Plugin Instance; internal static bool IsNavigating; internal static bool BypassLoadNewNodeRedirect; internal static ConfigEntry HomeKeyword; internal static ConfigEntry ConstellationsKeyword; internal static ConfigEntry MoonsKeyword; internal static ConfigEntry ShopKeyword; internal static ConfigEntry MenuTitle; private void Awake() { //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) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) Instance = this; Log = ((BaseUnityPlugin)this).Logger; try { Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); ManualLogSource log = Log; string[] obj = new string[5] { "[Home][Lifecycle] Plugin Awake on GameObject '", ((Object)((Component)this).gameObject).name, "' (sceneRoot? ", null, null }; Scene scene = ((Component)this).gameObject.scene; obj[3] = ((Scene)(ref scene)).name; obj[4] = "). DontDestroyOnLoad applied."; log.LogInfo((object)string.Concat(obj)); } catch (Exception ex) { Log.LogWarning((object)("[Home][Lifecycle] DontDestroyOnLoad threw: " + ex.Message)); } SceneManager.sceneLoaded += OnSceneLoaded_Diag; SceneManager.sceneUnloaded += OnSceneUnloaded_Diag; HomeKeyword = ((BaseUnityPlugin)this).Config.Bind("Main", "HomeKeyword", "home", "Terminal keyword that opens this home menu. Must match TerminalStuff's TerminalStartPage value."); ConstellationsKeyword = ((BaseUnityPlugin)this).Config.Bind("Main", "ConstellationsKeyword", "constellations", "Terminal keyword submitted when Constellations is selected from the home menu."); MoonsKeyword = ((BaseUnityPlugin)this).Config.Bind("Main", "MoonsKeyword", "moons", "Terminal keyword submitted when Moons is selected from the home menu."); ShopKeyword = ((BaseUnityPlugin)this).Config.Bind("Main", "ShopKeyword", "shop", "Terminal keyword submitted when Shop is selected from the home menu."); MenuTitle = ((BaseUnityPlugin)this).Config.Bind("Main", "MenuTitle", "FORTUNE-93 // MAIN TERMINAL", "Title shown at the top of the home menu box."); try { InteractiveTerminalManager.RegisterApplication(HomeKeyword.Value); Log.LogInfo((object)("LGUHome v1.0.0 loaded — home menu on keyword '" + HomeKeyword.Value + "'.")); } catch (Exception arg) { Log.LogError((object)$"Failed to register home application: {arg}"); } new Harmony("com.y4ngz.lguhome").PatchAll(typeof(Plugin).Assembly); } private void OnDestroy() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) string text = ""; try { text = Environment.StackTrace; } catch { } try { ManualLogSource log = Log; if (log != null) { string[] obj2 = new string[6] { "[Home][Lifecycle] Plugin.OnDestroy fired on GameObject '", ((Object)(object)((Component)this).gameObject != (Object)null) ? ((Object)((Component)this).gameObject).name : "", "' (active scene: '", null, null, null }; Scene activeScene = SceneManager.GetActiveScene(); obj2[3] = ((Scene)(ref activeScene)).name; obj2[4] = "'). Stack:\n"; obj2[5] = text; log.LogWarning((object)string.Concat(obj2)); } } catch { } } private static void OnSceneLoaded_Diag(Scene scene, LoadSceneMode mode) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) ManualLogSource log = Log; if (log != null) { log.LogInfo((object)$"[Home][Lifecycle] Scene loaded: '{((Scene)(ref scene)).name}' (mode={mode}). Plugin.Instance unity-null={(Object)(object)Instance == (Object)null}"); } } private static void OnSceneUnloaded_Diag(Scene scene) { ManualLogSource log = Log; if (log != null) { log.LogInfo((object)$"[Home][Lifecycle] Scene unloaded: '{((Scene)(ref scene)).name}'. Plugin.Instance unity-null={(Object)(object)Instance == (Object)null}"); } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }