Decompiled source of ItemMarkerProMax v1.1.0
BepInEx/plugins/ItemMarkerProMax/ItemMarkerProMax.dll
Decompiled 4 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.Json; using System.Text.Json.Serialization; using AIGraph; using AK; using Agents; using BepInEx; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using BepInEx.Unity.IL2CPP.Utils.Collections; using GameData; using Gear; using HarmonyLib; using Hikaria.ItemMarker; using Hikaria.ItemMarker.Features; using Hikaria.ItemMarker.Framework; using Hikaria.ItemMarker.Handlers; using Hikaria.ItemMarker.Handlers.Markers; using Hikaria.ItemMarker.Managers; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.Attributes; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppSystem; using Il2CppSystem.Collections; using LevelGeneration; using Player; using SNetwork; using TMPro; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")] [assembly: AssemblyCompany("ItemMarkerProMax")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0")] [assembly: AssemblyProduct("ItemMarkerProMax")] [assembly: AssemblyTitle("ItemMarkerProMax")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] namespace ItemMarkerProMax { [BepInPlugin("QingJu.ItemMarkerProMax", "ItemMarkerProMax", "1.1.0")] public sealed class Plugin : BasePlugin { internal static readonly ItemMarker MarkerFeature = new ItemMarker(); public override void Load() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) Logs.Setup(((BasePlugin)this).Log); EntryPoint.Init(); ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerHost>(); ItemMarkerHost.Instance = ((BasePlugin)this).AddComponent<ItemMarkerHost>(); new Harmony("QingJu.ItemMarkerProMax").PatchAll(typeof(Plugin).Assembly); MarkerFeature.Init(); FeatureDriver.Attach(MarkerFeature); Logs.LogInfo("ItemMarkerProMax 1.1.0 loaded"); } } public static class PluginInfo { public const string GUID = "QingJu.ItemMarkerProMax"; public const string NAME = "ItemMarkerProMax"; public const string VERSION = "1.1.0"; } } namespace Hikaria.ItemMarker { public static class EntryPoint { public static void Init() { LocalizationService localizationService = (LocalizationService)(Hikaria.ItemMarker.Features.ItemMarker.Localization = new LocalizationService()); Logs.LogInfo($"Localization: {localizationService.EntryCount} generic texts read from the archived JSON"); } } internal static class Logs { private static ManualLogSource _logger; public static void Setup(ManualLogSource logger) { _logger = logger; } public static void LogDebug(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogDebug((object)(data?.ToString() ?? string.Empty)); } } public static void LogInfo(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogInfo((object)(data?.ToString() ?? string.Empty)); } } public static void LogWarning(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogWarning((object)(data?.ToString() ?? string.Empty)); } } public static void LogError(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogError((object)(data?.ToString() ?? string.Empty)); } } public static void LogMessage(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogInfo((object)(data?.ToString() ?? string.Empty)); } } public static void LogNotice(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogInfo((object)(data?.ToString() ?? string.Empty)); } } public static void LogSuccess(object data) { ManualLogSource logger = _logger; if (logger != null) { logger.LogInfo((object)(data?.ToString() ?? string.Empty)); } } public static void LogException(Exception ex) { ManualLogSource logger = _logger; if (logger != null) { logger.LogError((object)ex); } } } } namespace Hikaria.ItemMarker.Managers { public static class IconManager { private static Dictionary<string, Sprite> _customItemIconSprites = new Dictionary<string, Sprite>(); private static Dictionary<string, Texture2D> _customItemIconTextures = new Dictionary<string, Texture2D>(); public static bool TryGetCustomIcon(string fileName, out Sprite sprite) { return _customItemIconSprites.TryGetValue(fileName, out sprite); } internal static void Init() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets/icons"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string[] files = Directory.GetFiles(path, "*.png"); foreach (string path2 in files) { string fileName = Path.GetFileName(path2); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(path2); byte[] array = File.ReadAllBytes(path2); Texture2D val = new Texture2D(2, 2); if (ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(array))) { ((Object)val).name = fileNameWithoutExtension; ((Object)val).hideFlags = (HideFlags)61; _customItemIconTextures[fileName] = val; Sprite val2 = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 64f); ((Object)val2).name = Path.GetFileNameWithoutExtension(path2); ((Object)val2).hideFlags = (HideFlags)61; _customItemIconSprites[fileName] = val2; } } } } public static class ItemMarkerManager { private static bool _devMode; private static readonly Dictionary<Type, Type> _itemMarkers = new Dictionary<Type, Type>(); private static readonly HashSet<Type> _typesToInspect = new HashSet<Type>(); private static readonly Dictionary<int, HashSet<ItemMarkerBase>> _terminalItemMarkers = new Dictionary<int, HashSet<ItemMarkerBase>>(); private static readonly HashSet<ItemMarkerBase> _allItemMarkers = new HashSet<ItemMarkerBase>(); private static readonly Dictionary<ItemMarkerVisibleUpdateModeType, HashSet<ItemMarkerBase>> ItemMarkerAutoUpdateModeLookup = new Dictionary<ItemMarkerVisibleUpdateModeType, HashSet<ItemMarkerBase>> { { ItemMarkerVisibleUpdateModeType.World, new HashSet<ItemMarkerBase>() }, { ItemMarkerVisibleUpdateModeType.CourseNode, new HashSet<ItemMarkerBase>() }, { ItemMarkerVisibleUpdateModeType.Zone, new HashSet<ItemMarkerBase>() }, { ItemMarkerVisibleUpdateModeType.Dimension, new HashSet<ItemMarkerBase>() }, { ItemMarkerVisibleUpdateModeType.Manual, new HashSet<ItemMarkerBase>() }, { ItemMarkerVisibleUpdateModeType.Custom, new HashSet<ItemMarkerBase>() } }; public static bool DevMode { get { return _devMode; } set { if (_devMode == value) { return; } _devMode = value; if (_devMode) { foreach (ItemMarkerBase allItemMarker in _allItemMarkers) { allItemMarker.DoEnterDevMode(); if (!((Behaviour)allItemMarker).enabled) { CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateDevMode(allItemMarker)), (Action)null); } } return; } foreach (ItemMarkerBase allItemMarker2 in _allItemMarkers) { allItemMarker2.DoExitDevMode(); } } } private static IEnumerator UpdateDevMode(ItemMarkerBase marker) { WaitForSecondsRealtime yielder = new WaitForSecondsRealtime(0.2f); while (DevMode) { try { marker.DoDevModeUpdate(); } catch { } yield return yielder; } } internal static void Init() { ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerTag>(); ClassInjector.RegisterTypeInIl2Cpp<ItemScanner>(); ClassInjector.RegisterTypeInIl2Cpp<ItemInLevel_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_ComputerTerminal_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_PowerGenerator_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_HSU_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_HSUActivator_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_BulkheadDoorController_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_SecurityDoor_Locks_Marker>(); ClassInjector.RegisterTypeInIl2Cpp<LG_DisinfectionStation_Marker>(); } internal static void SearchGameObject() { foreach (Type item in _typesToInspect) { foreach (Object item2 in (Il2CppArrayBase<Object>)(object)Object.FindObjectsOfType(item)) { Component val = ((Il2CppObjectBase)item2).Cast<Component>(); if ((Object)(object)val.GetComponent<ItemMarkerBase>() == (Object)null) { ((Il2CppObjectBase)val.gameObject.AddComponent(_itemMarkers[item])).Cast<ItemMarkerBase>().SetupNavMarker(val); } } } } public static void RegisterItemMarker<C, T>() where C : Component where T : ItemMarkerBase { Type val = Il2CppType.Of<C>(true); _typesToInspect.Add(val); ClassInjector.RegisterTypeInIl2Cpp<T>(); _itemMarkers.Add(val, Il2CppType.Of<T>(true)); } internal static void RegisterItemMarker(ItemMarkerBase marker) { _allItemMarkers.Add(marker); if (DevMode) { marker.DoEnterDevMode(); } if (!((Behaviour)marker).enabled) { CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateDevMode(marker)), (Action)null); } } internal static void UnregisterItemMarker(ItemMarkerBase marker) { _allItemMarkers.Remove(marker); } internal static void RegisterTerminalItemMarker(int instanceId, ItemMarkerBase marker) { if (!_terminalItemMarkers.TryGetValue(instanceId, out var value)) { value = new HashSet<ItemMarkerBase>(); _terminalItemMarkers[instanceId] = value; } value.Add(marker); } internal static void UnregisterTerminalItemMarker(int instanceId, ItemMarkerBase marker) { if (_terminalItemMarkers.TryGetValue(instanceId, out var value)) { value.Remove(marker); if (value.Count == 0) { _terminalItemMarkers.Remove(instanceId); } } } internal static void OnTerminalPing(int instanceId) { if (!_terminalItemMarkers.TryGetValue(instanceId, out var value)) { return; } foreach (ItemMarkerBase item in value) { item.OnTerminalPing(); } } internal static void OnTerminalItemKeyUpdate(int instanceId, string key) { if (!_terminalItemMarkers.TryGetValue(instanceId, out var value)) { return; } foreach (ItemMarkerBase item in value) { item.OnTerminalItemKeyUpdate(key); } } internal static void RegisterItemMarkerAutoUpdate(ItemMarkerBase itemMarker) { if (ItemMarkerAutoUpdateModeLookup.TryGetValue(itemMarker.VisibleUpdateMode, out var value)) { value.Add(itemMarker); } } internal static void UnregisterItemMarkerAutoUpdate(ItemMarkerBase itemMarker) { if (ItemMarkerAutoUpdateModeLookup.TryGetValue(itemMarker.VisibleUpdateMode, out var value)) { value.Remove(itemMarker); } } internal static void OnPlayerCourseNodeChanged(AIG_CourseNode newNode) { if (DevMode) { foreach (ItemMarkerBase allItemMarker in _allItemMarkers) { allItemMarker.DoDevModeUpdate(); } return; } foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.CourseNode]) { item.OnPlayerCourseNodeChanged(newNode); } } internal static void OnPlayerZoneChanged(LG_Zone newZone) { if (DevMode) { foreach (ItemMarkerBase allItemMarker in _allItemMarkers) { allItemMarker.DoDevModeUpdate(); } return; } foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.Zone]) { item.OnPlayerZoneChanged(newZone); } } internal static void OnPlayerDimensionChanged(Dimension newDim) { if (DevMode) { foreach (ItemMarkerBase allItemMarker in _allItemMarkers) { allItemMarker.DoDevModeUpdate(); } return; } foreach (ItemMarkerBase item in ItemMarkerAutoUpdateModeLookup[ItemMarkerVisibleUpdateModeType.Dimension]) { item.OnPlayerDimensionChanged(newDim); } } } } namespace Hikaria.ItemMarker.Handlers { public abstract class ItemMarkerBase : MonoBehaviour { protected struct pBasicState { public bool IsDiscovered; public bool IsVisible; } protected bool m_discoverOnPlayerPing = true; protected bool m_discoverOnTerminalPing; protected bool m_markerAlwaysShowTitle; protected bool m_markerAlwaysShowDistance; protected float m_markerPlayerPingFadeOutTime = 12f; protected float m_markerTerminalPingFadeOutTime = 18f; protected ItemMarkerVisibleUpdateModeType m_markerVisibleUpdateMode; protected float m_markerVisibleWorldDistance = 30f; protected int m_markerVisibleCourseNodeDistance = 1; protected float m_markerAlpha = 0.9f; protected float m_markerAlphaADS = 0.4f; protected Color m_markerColor = Color.white; protected string m_markerTitle = string.Empty; protected eNavMarkerStyle m_markerStyle; protected float m_markerIconScale = 0.4f; protected int m_markerTitleFontSize = 50; protected bool m_markerTitleUseTerminalItemKey; protected bool m_overridePlayerPing = true; protected bool m_markerShowPin; protected LG_GenericTerminalItem m_terminalItem; protected NavMarker m_marker; protected float m_updateTimer; protected float m_markerForceVisibleTimer; protected NavMarkerOption[] m_stateOptions; protected readonly Dictionary<eBufferType, pBasicState> m_basicBuffers = new Dictionary<eBufferType, pBasicState>(); private PlayerAgent m_localPlayer; private bool m_isDiscovered; [HideFromIl2Cpp] public bool IsDiscovered { get { return m_isDiscovered; } set { m_isDiscovered = value; ForceUpdate(); } } [HideFromIl2Cpp] private bool AimButtonHeld { get { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0030: Invalid comparison between Unknown and I4 //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Invalid comparison between Unknown and I4 if ((Object)(object)LocalPlayerAgent == (Object)null || !((Agent)LocalPlayerAgent).Alive) { return false; } InventorySlot wieldedSlot = LocalPlayerAgent.Inventory.WieldedSlot; if ((int)wieldedSlot < 1 || (int)wieldedSlot > 3) { return false; } ItemEquippable wieldedItem = LocalPlayerAgent.Inventory.WieldedItem; if (wieldedItem == null) { return false; } return wieldedItem.AimButtonHeld; } } [HideFromIl2Cpp] public PlayerAgent LocalPlayerAgent { get { if ((Object)(object)m_localPlayer == (Object)null) { m_localPlayer = PlayerManager.GetLocalPlayerAgent(); } return m_localPlayer; } } [HideFromIl2Cpp] public virtual bool AllowDiscoverScan => !m_isDiscovered; [HideFromIl2Cpp] public virtual AIG_CourseNode CourseNode { get { LG_GenericTerminalItem terminalItem = m_terminalItem; if (terminalItem == null) { return null; } return terminalItem.SpawnNode; } } [HideFromIl2Cpp] public virtual Vector3 WorldPos => m_marker.m_trackingObj.transform.position; [HideFromIl2Cpp] public bool IsVisible => m_marker.IsVisible; [HideFromIl2Cpp] public bool IsVisibleAndInFocus { get { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 if (m_marker.IsVisible) { return (int)m_marker.m_currentState == 2; } return false; } } [HideFromIl2Cpp] public eNavMarkerStyle Style => m_markerStyle; [HideFromIl2Cpp] public bool AllowPing => m_markerShowPin; [HideFromIl2Cpp] public float PlayerPingFadeOutTime => m_markerPlayerPingFadeOutTime; [HideFromIl2Cpp] public float TerminalPingFadeOutTime => m_markerTerminalPingFadeOutTime; [HideFromIl2Cpp] internal ItemMarkerVisibleUpdateModeType VisibleUpdateMode => m_markerVisibleUpdateMode; [HideFromIl2Cpp] protected virtual string MarkerTitle => m_markerTitle; public ItemMarkerBase(IntPtr ptr) : base(ptr) { }//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) [HideFromIl2Cpp] public virtual void SetupNavMarker(Component comp) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) if (m_marker == null) { m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); } m_marker.SetStyle(m_markerStyle); m_marker.SetIconScale(m_markerIconScale); m_marker.SetPinEnabled(m_markerShowPin); m_marker.SetColor(m_markerColor); m_marker.SetAlpha(m_markerAlpha); m_marker.SetVisible(false); ((TMP_Text)m_marker.m_title).fontSizeMax = m_markerTitleFontSize; ((TMP_Text)m_marker.m_title).fontSizeMin = m_markerTitleFontSize; if (m_terminalItem == null) { m_terminalItem = comp.GetComponentInChildren<LG_GenericTerminalItem>(); } if ((Object)(object)m_terminalItem != (Object)null && m_terminalItem.SpawnNode == null) { LG_Area componentInParent = ((Component)m_terminalItem).GetComponentInParent<LG_Area>(); if ((Object)(object)componentInParent != (Object)null) { m_terminalItem.SpawnNode = componentInParent.m_courseNode; } } if (!string.IsNullOrEmpty(m_markerTitle)) { m_marker.SetTitle(m_markerTitle); } else if ((Object)(object)m_terminalItem != (Object)null && !string.IsNullOrEmpty(m_terminalItem.TerminalItemKey)) { m_marker.SetTitle(m_terminalItem.TerminalItemKey); } else { m_marker.SetTitle(((Object)comp.gameObject).name); } ((TMP_Text)m_marker.m_title).rectTransform.sizeDelta = new Vector2(((TMP_Text)m_marker.m_title).rectTransform.sizeDelta.x * 5f, ((TMP_Text)m_marker.m_title).rectTransform.sizeDelta.y); if (m_markerAlwaysShowTitle) { Il2CppStructArray<NavMarkerOption> stateOptions = m_marker.m_stateOptions; ((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 0x10); } if (m_markerAlwaysShowDistance) { Il2CppStructArray<NavMarkerOption> stateOptions = m_marker.m_stateOptions; ((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 8); } m_stateOptions = Il2CppArrayBase<NavMarkerOption>.op_Implicit((Il2CppArrayBase<NavMarkerOption>)(object)m_marker.m_stateOptions); if (m_overridePlayerPing) { foreach (Collider componentsInChild in comp.GetComponentsInChildren<Collider>(true)) { if ((Object)(object)((Component)componentsInChild).GetComponent<ItemMarkerTag>() == (Object)null) { ((Component)componentsInChild).gameObject.AddComponent<ItemMarkerTag>().Setup(this); } } } ((Behaviour)this).enabled = m_markerVisibleUpdateMode == ItemMarkerVisibleUpdateModeType.World || m_markerVisibleUpdateMode == ItemMarkerVisibleUpdateModeType.Custom; if (!((Behaviour)this).enabled) { CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateMarkerAlphaCoroutine()), (Action)null); } SNetEventAPI.OnResetSession += OnResetSession; SNetEventAPI.OnRecallComplete += OnRecallComplete; SNetEventAPI.OnBufferCommand += OnBufferCommand; ItemMarkerManager.RegisterItemMarkerAutoUpdate(this); if ((Object)(object)m_terminalItem != (Object)null) { ItemMarkerManager.RegisterTerminalItemMarker(((Object)m_terminalItem).GetInstanceID(), this); } ItemMarkerManager.RegisterItemMarker(this); } [HideFromIl2Cpp] public virtual bool OnPlayerPing() { if (!IsDiscovered && m_discoverOnPlayerPing) { IsDiscovered = true; } AttemptInteract((eNavMarkerInteractionType)0); m_marker.Ping(m_markerPlayerPingFadeOutTime); m_markerForceVisibleTimer = Clock.Time + m_markerPlayerPingFadeOutTime; if (!((Behaviour)this).enabled) { CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerPlayerPingFadeOutTime + 0.01f)), (Action)null); } return true; } [HideFromIl2Cpp] public virtual bool OnTerminalPing() { if (!IsDiscovered && m_discoverOnTerminalPing) { IsDiscovered = true; } AttemptInteract((eNavMarkerInteractionType)0); m_marker.Ping(m_markerTerminalPingFadeOutTime); m_markerForceVisibleTimer = Clock.Time + m_markerTerminalPingFadeOutTime; if (!((Behaviour)this).enabled) { CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerTerminalPingFadeOutTime + 0.01f)), (Action)null); } return true; } [HideFromIl2Cpp] public virtual void OnPlayerCourseNodeChanged(AIG_CourseNode newNode) { if (IsDiscovered) { if (newNode == null || CourseNode == null) { AttemptInteract((eNavMarkerInteractionType)1); } else if (AIG_CourseGraph.GetDistanceBetweenToNodes(CourseNode, ((Agent)LocalPlayerAgent).CourseNode) <= m_markerVisibleCourseNodeDistance) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } } [HideFromIl2Cpp] public virtual void OnPlayerZoneChanged(LG_Zone newZone) { if (IsDiscovered) { if ((Object)(object)newZone == (Object)null || CourseNode == null) { AttemptInteract((eNavMarkerInteractionType)1); } else if (CourseNode.m_zone.ID == newZone.ID) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } } [HideFromIl2Cpp] public virtual void OnPlayerDimensionChanged(Dimension newDim) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) if (IsDiscovered) { if (newDim == null || CourseNode == null) { AttemptInteract((eNavMarkerInteractionType)1); } else if (CourseNode.m_dimension.DimensionIndex == newDim.DimensionIndex) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } } [HideFromIl2Cpp] internal void OnTerminalItemKeyUpdate(string key) { if (m_markerTitleUseTerminalItemKey) { m_marker.SetTitle(key); } } [HideFromIl2Cpp] public void AttemptInteract(eNavMarkerInteractionType interaction) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Invalid comparison between Unknown and I4 if ((int)interaction == 0) { if (!m_marker.IsVisible) { m_marker.SetVisible(true); } } else if ((int)interaction == 1 && m_marker.IsVisible) { m_marker.SetVisible(false); } } protected virtual void Update() { if ((Object)(object)m_marker == (Object)null || m_updateTimer > Clock.Time) { return; } m_updateTimer = Clock.Time + 0.2f; if (ItemMarkerManager.DevMode) { OnDevUpdate(); return; } if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); return; } if (!IsDiscovered) { AttemptInteract((eNavMarkerInteractionType)1); return; } if ((Object)(object)LocalPlayerAgent == (Object)null) { AttemptInteract((eNavMarkerInteractionType)1); return; } switch (m_markerVisibleUpdateMode) { case ItemMarkerVisibleUpdateModeType.World: OnWorldUpdate(); break; case ItemMarkerVisibleUpdateModeType.Custom: OnCustomUpdate(); break; } } [HideFromIl2Cpp] protected virtual void OnWorldUpdate() { //IL_000b: 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) if (Vector3.Distance(m_marker.TrackingTrans.position, ((Component)LocalPlayerAgent).transform.position) <= m_markerVisibleWorldDistance) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected virtual void OnCustomUpdate() { } protected virtual void OnDestroy() { if ((Object)(object)m_marker != (Object)null) { GuiManager.NavMarkerLayer.RemoveMarker(m_marker); } SNetEventAPI.OnResetSession -= OnResetSession; SNetEventAPI.OnRecallComplete -= OnRecallComplete; SNetEventAPI.OnBufferCommand -= OnBufferCommand; ItemMarkerManager.UnregisterItemMarkerAutoUpdate(this); if ((Object)(object)m_terminalItem != (Object)null) { ItemMarkerManager.UnregisterTerminalItemMarker(((Object)m_terminalItem).GetInstanceID(), this); } ItemMarkerManager.UnregisterItemMarker(this); } protected virtual void FixedUpdate() { UpdateMarkerAlpha(); } [HideFromIl2Cpp] public void ForceUpdate() { if ((Object)(object)m_marker == (Object)null) { return; } UpdateMarkerTitle(); if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); return; } if (ItemMarkerManager.DevMode) { OnDevUpdate(); return; } if ((Object)(object)LocalPlayerAgent == (Object)null || ((Agent)LocalPlayerAgent).CourseNode == null) { AttemptInteract((eNavMarkerInteractionType)1); return; } if (!IsDiscovered) { AttemptInteract((eNavMarkerInteractionType)1); return; } switch (m_markerVisibleUpdateMode) { case ItemMarkerVisibleUpdateModeType.World: OnWorldUpdate(); break; case ItemMarkerVisibleUpdateModeType.CourseNode: OnPlayerCourseNodeChanged(((Agent)LocalPlayerAgent).CourseNode); break; case ItemMarkerVisibleUpdateModeType.Zone: OnPlayerZoneChanged(LocalPlayerAgent.m_lastEnteredZone); break; case ItemMarkerVisibleUpdateModeType.Dimension: OnPlayerDimensionChanged(((Agent)LocalPlayerAgent).Dimension); break; case ItemMarkerVisibleUpdateModeType.Manual: OnManualUpdate(); break; case ItemMarkerVisibleUpdateModeType.Custom: OnCustomUpdate(); break; } } [HideFromIl2Cpp] protected virtual void OnManualUpdate() { } [HideFromIl2Cpp] internal void DoDevModeUpdate() { OnDevUpdate(); } [HideFromIl2Cpp] internal void DoEnterDevMode() { OnEnterDevMode(); } [HideFromIl2Cpp] internal void DoExitDevMode() { OnExitDevMode(); } [HideFromIl2Cpp] protected virtual void OnEnterDevMode() { //IL_0010: 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_002e: 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_0047: Unknown result type (might be due to invalid IL or missing references) Il2CppStructArray<NavMarkerOption> stateOptions = m_marker.m_stateOptions; ((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 0x10); stateOptions = m_marker.m_stateOptions; ((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] = (NavMarkerOption)(((Il2CppArrayBase<NavMarkerOption>)(object)stateOptions)[1] | 8); m_marker.SetState(m_marker.m_currentState); ForceUpdate(); } [HideFromIl2Cpp] protected virtual void OnExitDevMode() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) m_marker.m_stateOptions = Il2CppStructArray<NavMarkerOption>.op_Implicit(m_stateOptions); m_marker.SetState(m_marker.m_currentState); ForceUpdate(); } [HideFromIl2Cpp] protected virtual void OnDevUpdate() { } [HideFromIl2Cpp] protected IEnumerator HideDelay(float delay) { yield return (object)new WaitForSecondsRealtime(delay); ForceUpdate(); } [HideFromIl2Cpp] private IEnumerator UpdateMarkerAlphaCoroutine() { WaitForFixedUpdate yielder = new WaitForFixedUpdate(); while ((Object)(object)m_marker != (Object)null) { UpdateMarkerAlpha(); yield return yielder; } } [HideFromIl2Cpp] public void UpdateMarkerTitle() { m_marker.SetTitle(MarkerTitle); } [HideFromIl2Cpp] public void UpdateMarkerAlpha() { if (m_marker.IsVisible) { if (AimButtonHeld) { m_marker.SetAlpha(m_markerAlphaADS); } else { m_marker.SetAlpha(m_markerAlpha); } } } [HideFromIl2Cpp] public void OnResetSession() { ResetBuffer(); } [HideFromIl2Cpp] protected virtual void ResetBuffer() { m_basicBuffers.Clear(); } [HideFromIl2Cpp] public void OnRecallComplete(eBufferType bufferType) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 //IL_000b: Unknown result type (might be due to invalid IL or missing references) if ((int)GameStateManager.CurrentStateName >= 10) { RecallBuffer(bufferType); ForceUpdate(); } } [HideFromIl2Cpp] protected virtual void CaptureToBuffer(eBufferType bufferType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) m_basicBuffers[bufferType] = new pBasicState { IsDiscovered = m_isDiscovered, IsVisible = m_marker.IsVisible }; } [HideFromIl2Cpp] protected virtual void RecallBuffer(eBufferType bufferType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (m_basicBuffers.TryGetValue(bufferType, out var value)) { m_marker.SetVisible(value.IsVisible); m_isDiscovered = value.IsDiscovered; } } [HideFromIl2Cpp] public void OnBufferCommand(pBufferCommand command) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 //IL_000a: 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) if ((int)command.operation == 1) { CaptureToBuffer(command.type); } } } public enum ItemMarkerVisibleUpdateModeType { World, CourseNode, Zone, Dimension, Manual, Custom } public class ItemMarkerTag : MonoBehaviour { [HideFromIl2Cpp] public ItemMarkerBase ItemMarker { get; private set; } public ItemMarkerTag(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public void Setup(ItemMarkerBase itemMarker) { ItemMarker = itemMarker; } } public class ItemScanner : MonoBehaviour { private bool m_isLocal; private PlayerAgent m_playerAgent; private Il2CppStructArray<RaycastHit> m_hits = new Il2CppStructArray<RaycastHit>((RaycastHit[])(object)new RaycastHit[30]); private int s_collCount; public ItemScanner(IntPtr ptr) : base(ptr) { } private void Awake() { m_playerAgent = ((Component)this).GetComponent<PlayerAgent>(); m_isLocal = ((Agent)m_playerAgent).IsLocallyOwned; } private void LateUpdate() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (m_isLocal) { s_collCount = Physics.SphereCastNonAlloc(m_playerAgent.FPSCamera.Position, 3f, m_playerAgent.FPSCamera.CameraRayDir, m_hits, 0f, LayerManager.MASK_PLAYER_INTERACT_SPHERE); } else { s_collCount = Physics.SphereCastNonAlloc(((Agent)m_playerAgent).EyePosition, 2.5f, ((Component)m_playerAgent).transform.forward, m_hits, 0.5f, LayerManager.MASK_PLAYER_INTERACT_SPHERE); } if (s_collCount == 0) { return; } for (int i = 0; i < s_collCount; i++) { RaycastHit val = ((Il2CppArrayBase<RaycastHit>)(object)m_hits)[i]; ItemMarkerTag component = ((Component)((RaycastHit)(ref val)).collider).GetComponent<ItemMarkerTag>(); if ((Object)(object)component != (Object)null && component.ItemMarker.AllowDiscoverScan) { component.ItemMarker.IsDiscovered = true; } } } } } namespace Hikaria.ItemMarker.Handlers.Markers { public class ItemInLevel_Marker : ItemMarkerBase { public struct pItemInLevelMarkerState { public bool IsPlacedInLevel; } public enum ItemMarkerTitleProviderType { PublicName, TerminalItemKey, Custom } private class ItemInLevelMarkerDefinition { public uint ItemID { get; set; } public bool IgnoreThisItem { get; set; } public string DataBlockName { get; set; } = string.Empty; public string PublicName { get; set; } = string.Empty; public string CustomTitle { get; set; } = string.Empty; public ItemMarkerTitleProviderType TitleType { get; set; } public SColor Color { get; set; } = Color.white.ToSColor(); public ItemMarkerVisibleUpdateModeType VisibleUpdateMode { get; set; } = ItemMarkerVisibleUpdateModeType.Custom; public float VisibleWorldDistance { get; set; } = 30f; public int VisibleCourseNodeDistance { get; set; } = 1; public float Alpha { get; set; } = 0.9f; public float AlphaADS { get; set; } = 0.4f; public float PlayerPingFadeOutTime { get; set; } = 12f; public float TerminalPingFadeOutTime { get; set; } = 18f; public bool AlwaysShowTitle { get; set; } public bool AlwaysShowDistance { get; set; } public bool UseCustomIcon { get; set; } public string CustomIconFileName { get; set; } = string.Empty; } private ItemInLevel m_item; private float m_itemCostOfBullet = 1f; private bool m_itemShowUses; private int m_itemUsesLeft; private InventorySlot m_itemSlot; private PlaceNavMarkerOnGO m_navMarkerPlacer; private bool m_isPlacedInLevel = true; private readonly Dictionary<eBufferType, pItemInLevelMarkerState> m_buffers = new Dictionary<eBufferType, pItemInLevelMarkerState>(); private static CustomSetting<Dictionary<uint, ItemInLevelMarkerDefinition>> ItemInLevelMarkerDefinitions = new CustomSetting<Dictionary<uint, ItemInLevelMarkerDefinition>>("ItemInLevelMarkerDefinitions", new Dictionary<uint, ItemInLevelMarkerDefinition>()); private static readonly InventorySlot[] ValidItemSlots; internal static readonly Dictionary<int, ItemInLevel_Marker> ItemInLevelMarkerLookup; [HideFromIl2Cpp] private bool IsPlacedInLevel { get { return m_isPlacedInLevel; } set { //IL_0066: 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_007b: Unknown result type (might be due to invalid IL or missing references) m_isPlacedInLevel = value; PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer; if (navMarkerPlacer != null) { NavMarker marker = navMarkerPlacer.m_marker; if (marker != null) { marker.SetVisible(false); } } if (!value) { m_markerForceVisibleTimer = 0f; if (m_marker.m_pingRoutine != null) { CoroutineManager.StopCoroutine(m_marker.m_pingRoutine); m_marker.Scale(m_marker.m_pingObj, m_marker.m_pinStartScale, m_marker.m_pinStartScale, Color.white, Color.white, 0f, (DelEasingFunction)null); } AttemptInteract((eNavMarkerInteractionType)1); } else { UpdateItemUsesLeft(); ForceUpdate(); } } } [HideFromIl2Cpp] protected override string MarkerTitle { get { //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Expected I4, but got Unknown //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_0031: Expected I4, but got Unknown //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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) InventorySlot itemSlot; if (ItemMarkerManager.DevMode) { itemSlot = m_itemSlot; switch (itemSlot - 4) { case 4: if (!m_item.internalSync.GetCurrentState().placement.hasBeenPickedUp) { return $"<color=red>{Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(1)}</color>\n{(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n"))}{m_markerTitle}"; } return (base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n")) + m_markerTitle; case 0: case 1: { if (CourseNode != null && (Object)(object)base.LocalPlayerAgent != (Object)null && ((Agent)base.LocalPlayerAgent).CourseNode != null && CourseNode.m_zone.ID != ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID) { DefaultInterpolatedStringHandler defaultInterpolatedStringHandler; if (m_itemShowUses) { defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(22, 4); defaultInterpolatedStringHandler.AppendLiteral("<color=red>"); defaultInterpolatedStringHandler.AppendFormatted(Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(3)); defaultInterpolatedStringHandler.AppendLiteral("</color>\n"); defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n")); LG_GenericTerminalItem terminalItem2 = m_terminalItem; defaultInterpolatedStringHandler.AppendFormatted(((terminalItem2 != null) ? terminalItem2.TerminalItemKey : null) ?? ((Item)m_item).PublicName); defaultInterpolatedStringHandler.AppendLiteral(" ×"); defaultInterpolatedStringHandler.AppendFormatted(m_itemUsesLeft); return defaultInterpolatedStringHandler.ToStringAndClear(); } defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(20, 3); defaultInterpolatedStringHandler.AppendLiteral("<color=red>"); defaultInterpolatedStringHandler.AppendFormatted(Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(3)); defaultInterpolatedStringHandler.AppendLiteral("</color>\n"); defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n")); LG_GenericTerminalItem terminalItem3 = m_terminalItem; defaultInterpolatedStringHandler.AppendFormatted(((terminalItem3 != null) ? terminalItem3.TerminalItemKey : null) ?? ((Item)m_item).PublicName); return defaultInterpolatedStringHandler.ToStringAndClear(); } if (m_itemShowUses) { DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(2, 3); defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n")); LG_GenericTerminalItem terminalItem4 = m_terminalItem; defaultInterpolatedStringHandler.AppendFormatted(((terminalItem4 != null) ? terminalItem4.TerminalItemKey : null) ?? ((Item)m_item).PublicName); defaultInterpolatedStringHandler.AppendLiteral(" ×"); defaultInterpolatedStringHandler.AppendFormatted(m_itemUsesLeft); return defaultInterpolatedStringHandler.ToStringAndClear(); } string obj = (base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(2) + "</color>\n")); LG_GenericTerminalItem terminalItem5 = m_terminalItem; return obj + (((terminalItem5 != null) ? terminalItem5.TerminalItemKey : null) ?? ((Item)m_item).PublicName); } case 3: case 5: { LG_GenericTerminalItem terminalItem = m_terminalItem; return ((terminalItem != null) ? terminalItem.TerminalItemKey : null) ?? ((Item)m_item).PublicName; } default: return m_markerTitle; } } itemSlot = m_itemSlot; switch (itemSlot - 4) { case 4: if (!m_item.internalSync.GetCurrentState().placement.hasBeenPickedUp) { return "<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.GetById(1) + "</color>\n" + m_markerTitle; } return m_markerTitle; case 0: case 1: if (m_itemShowUses) { return $"{m_markerTitle} ×{m_itemUsesLeft}"; } return m_markerTitle; case 3: case 5: { LG_GenericTerminalItem terminalItem6 = m_terminalItem; return ((terminalItem6 != null) ? terminalItem6.TerminalItemKey : null) ?? ((Item)m_item).PublicName; } default: return m_markerTitle; } } } [HideFromIl2Cpp] public override AIG_CourseNode CourseNode => m_item.CourseNode; [HideFromIl2Cpp] public override bool AllowDiscoverScan { get { if (base.AllowDiscoverScan) { return (Object)(object)m_item.container == (Object)null; } return false; } } public ItemInLevel_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_009b: Invalid comparison between Unknown and I4 //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Invalid comparison between Unknown and I4 //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Invalid comparison between Unknown and I4 //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) m_item = ((Il2CppObjectBase)comp).Cast<ItemInLevel>(); ItemDataBlock itemDataBlock = ((Item)m_item).ItemDataBlock; if (!ValidItemSlots.Contains(itemDataBlock.inventorySlot)) { Object.Destroy((Object)(object)this); return; } m_item.internalSync.OnSyncStateChange += Action<ePickupItemStatus, pPickupPlacement, PlayerAgent, bool>.op_Implicit((Action<ePickupItemStatus, pPickupPlacement, PlayerAgent, bool>)OnItemStateChange); m_navMarkerPlacer = ((Component)m_item).GetComponent<PlaceNavMarkerOnGO>(); m_itemSlot = itemDataBlock.inventorySlot; m_itemShowUses = !itemDataBlock.GUIShowAmmoInfinite && itemDataBlock.GUIShowAmmoTotalRel; m_markerShowPin = true; AmmoType ammoTypeFromSlot = PlayerAmmoStorage.GetAmmoTypeFromSlot(itemDataBlock.inventorySlot); if ((int)ammoTypeFromSlot != 3) { if ((int)ammoTypeFromSlot == 5) { m_itemCostOfBullet = 1f; if ((float)itemDataBlock.ConsumableAmmoMax == m_itemCostOfBullet) { m_itemShowUses = false; } } else { m_itemShowUses = false; } } else { m_itemCostOfBullet = 20f; } m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(((Component)m_item).gameObject); iPlayerPingTarget componentInChildren = ((Component)this).GetComponentInChildren<iPlayerPingTarget>(); m_markerStyle = (eNavMarkerStyle)((componentInChildren != null) ? ((int)componentInChildren.PingTargetStyle) : 0); m_markerTitle = itemDataBlock.publicName; m_terminalItem = ((Component)m_item).GetComponentInChildren<LG_GenericTerminalItem>(); if (ItemInLevelMarkerDefinitions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)itemDataBlock).persistentID, out var value)) { if (value.IgnoreThisItem) { Object.Destroy((Object)(object)this); return; } m_markerColor = value.Color.ToUnityColor(); m_markerTitle = value.CustomTitle; switch (value.TitleType) { case ItemMarkerTitleProviderType.PublicName: m_markerTitle = ((Item)m_item).PublicName; break; case ItemMarkerTitleProviderType.TerminalItemKey: m_markerTitleUseTerminalItemKey = true; if ((Object)(object)m_terminalItem != (Object)null) { m_markerTitle = m_terminalItem.TerminalItemKey; } break; case ItemMarkerTitleProviderType.Custom: m_markerTitle = value.CustomTitle; break; } m_markerVisibleUpdateMode = value.VisibleUpdateMode; m_markerVisibleWorldDistance = value.VisibleWorldDistance; m_markerVisibleCourseNodeDistance = value.VisibleCourseNodeDistance; m_markerAlpha = value.Alpha; m_markerAlphaADS = value.AlphaADS; m_markerAlwaysShowTitle = value.AlwaysShowTitle; m_markerAlwaysShowDistance = value.AlwaysShowDistance; m_markerPlayerPingFadeOutTime = value.PlayerPingFadeOutTime; m_markerTerminalPingFadeOutTime = value.TerminalPingFadeOutTime; if (value.UseCustomIcon && IconManager.TryGetCustomIcon(value.CustomIconFileName, out var sprite)) { foreach (SpriteRenderer componentsInChild in ((Component)m_marker.m_iconHolder).GetComponentsInChildren<SpriteRenderer>(true)) { componentsInChild.sprite = sprite; } } } ItemInLevelMarkerLookup[((Object)m_item).GetInstanceID()] = this; base.SetupNavMarker(comp); if ((int)m_itemSlot == 8) { UpdateMarkerTitle(); } GameEventAPI.OnGameStateChanged += OnGameStateChanged; } protected override void Update() { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { base.Update(); } } protected override void OnDestroy() { ItemInLevelMarkerLookup.Remove(((Object)m_item).GetInstanceID()); base.OnDestroy(); GameEventAPI.OnGameStateChanged -= OnGameStateChanged; } [HideFromIl2Cpp] public void OnItemStateChange(ePickupItemStatus status, pPickupPlacement placement, PlayerAgent playerAgent, bool isRecall) { //IL_0000: 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) //IL_000d: Invalid comparison between Unknown and I4 if ((int)status == 0) { IsPlacedInLevel = true; } else if ((int)status == 1) { if (!base.IsDiscovered) { base.IsDiscovered = true; } IsPlacedInLevel = false; } } [HideFromIl2Cpp] public void OnItemCustomDataUpdate(pItemData_Custom custom) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Invalid comparison between Unknown and I4 //IL_0010: Unknown result type (might be due to invalid IL or missing references) UpdateItemUsesLeft(); if ((int)m_itemSlot == 8 && custom.byteState > 0) { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] public override bool OnPlayerPing() { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); return true; } return base.OnPlayerPing(); } [HideFromIl2Cpp] public override bool OnTerminalPing() { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); return true; } return base.OnTerminalPing(); } [HideFromIl2Cpp] protected override void OnCustomUpdate() { //IL_0053: 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) if (IsPlacedInLevel) { if (CourseNode == null) { AttemptInteract((eNavMarkerInteractionType)1); } else if (CourseNode.m_zone.ID == ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID) { AttemptInteract((eNavMarkerInteractionType)0); } else if (Vector3.Distance(m_marker.TrackingTrans.position, ((Component)base.LocalPlayerAgent).transform.position) <= m_markerVisibleWorldDistance) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } } [HideFromIl2Cpp] protected override void OnWorldUpdate() { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { base.OnWorldUpdate(); } } [HideFromIl2Cpp] public override void OnPlayerCourseNodeChanged(AIG_CourseNode newNode) { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { base.OnPlayerCourseNodeChanged(newNode); } } [HideFromIl2Cpp] public override void OnPlayerZoneChanged(LG_Zone newZone) { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { base.OnPlayerZoneChanged(newZone); } } [HideFromIl2Cpp] public override void OnPlayerDimensionChanged(Dimension newDim) { if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { base.OnPlayerDimensionChanged(newDim); } } [HideFromIl2Cpp] private void OnGameStateChanged(eGameStateName preState, eGameStateName nextState) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 if ((int)nextState == 10) { UpdateItemUsesLeft(); } } [HideFromIl2Cpp] private void UpdateItemUsesLeft() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (m_itemShowUses) { m_itemUsesLeft = Mathf.FloorToInt(((Item)m_item).GetCustomData().ammo / m_itemCostOfBullet); UpdateMarkerTitle(); } } [HideFromIl2Cpp] protected override void OnEnterDevMode() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)m_itemSlot == 8) { PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer; if (navMarkerPlacer != null) { NavMarker marker = navMarkerPlacer.m_marker; if (marker != null) { marker.SetVisible(false); } } } base.OnEnterDevMode(); } [HideFromIl2Cpp] protected override void OnExitDevMode() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)m_itemSlot == 8) { PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer; if (navMarkerPlacer != null) { NavMarker marker = navMarkerPlacer.m_marker; if (marker != null) { marker.SetVisible(false); } } } base.OnExitDevMode(); } [HideFromIl2Cpp] protected override void OnDevUpdate() { //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_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected I4, but got Unknown //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); return; } if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); return; } UpdateMarkerTitle(); if ((Object)(object)base.LocalPlayerAgent == (Object)null || ((Agent)base.LocalPlayerAgent).CourseNode == null || CourseNode == null) { return; } InventorySlot itemSlot = m_itemSlot; switch (itemSlot - 4) { case 4: { PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer; if (navMarkerPlacer != null) { NavMarker marker = navMarkerPlacer.m_marker; if (marker != null) { marker.SetVisible(false); } } if (((Item)m_item).GetCustomData().byteState > 0) { AttemptInteract((eNavMarkerInteractionType)1); } else if (!((Il2CppObjectBase)m_item).Cast<CarryItemPickup_Core>().IsInteractable) { AttemptInteract((eNavMarkerInteractionType)1); } else { AttemptInteract((eNavMarkerInteractionType)0); } break; } case 0: case 1: if (CourseNode.m_zone.ID == ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID) { AttemptInteract((eNavMarkerInteractionType)0); } else if (Vector3.Distance(((Component)m_item).transform.position, ((Component)base.LocalPlayerAgent).transform.position) <= m_markerVisibleWorldDistance) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } break; case 3: case 5: if (!((Object)(object)((Il2CppObjectBase)m_item).TryCast<KeyItemPickup_Core>() != (Object)null) && CourseNode.m_zone.ID != ((Agent)base.LocalPlayerAgent).CourseNode.m_zone.ID) { AttemptInteract((eNavMarkerInteractionType)1); } else { AttemptInteract((eNavMarkerInteractionType)0); } break; default: AttemptInteract((eNavMarkerInteractionType)1); break; } } [HideFromIl2Cpp] protected override void CaptureToBuffer(eBufferType bufferType) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) base.CaptureToBuffer(bufferType); m_buffers[bufferType] = new pItemInLevelMarkerState { IsPlacedInLevel = IsPlacedInLevel }; } [HideFromIl2Cpp] protected override void RecallBuffer(eBufferType bufferType) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //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) base.RecallBuffer(bufferType); if (!m_buffers.TryGetValue(bufferType, out var value)) { IsPlacedInLevel = (int)m_item.internalSync.GetCurrentState().status == 0; } else { IsPlacedInLevel = value.IsPlacedInLevel; } if (!base.IsDiscovered && m_item.internalSync.GetCurrentState().placement.hasBeenPickedUp) { base.IsDiscovered = true; } } [HideFromIl2Cpp] protected override void ResetBuffer() { base.ResetBuffer(); m_buffers.Clear(); } [HideFromIl2Cpp] protected override void OnManualUpdate() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 //IL_0032: Unknown result type (might be due to invalid IL or missing references) if ((int)m_itemSlot == 8) { PlaceNavMarkerOnGO navMarkerPlacer = m_navMarkerPlacer; if (navMarkerPlacer != null) { NavMarker marker = navMarkerPlacer.m_marker; if (marker != null) { marker.SetVisible(false); } } UpdateMarkerTitle(); if (((Item)m_item).GetCustomData().byteState > 0) { AttemptInteract((eNavMarkerInteractionType)1); return; } if (!((Il2CppObjectBase)m_item).Cast<CarryItemPickup_Core>().IsInteractable) { AttemptInteract((eNavMarkerInteractionType)1); return; } } if (!IsPlacedInLevel) { AttemptInteract((eNavMarkerInteractionType)1); } else { AttemptInteract((eNavMarkerInteractionType)0); } } [HideFromIl2Cpp] internal static void OnGameDataInitialized() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Invalid comparison between Unknown and I4 //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Invalid comparison between Unknown and I4 //IL_00b9: 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_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected I4, but got Unknown foreach (ItemDataBlock allBlock in GameDataBlockBase<ItemDataBlock>.GetAllBlocks()) { if (!ValidItemSlots.Contains(allBlock.inventorySlot)) { continue; } if (!ItemInLevelMarkerDefinitions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID, out var value)) { ItemInLevelMarkerDefinition itemInLevelMarkerDefinition = new ItemInLevelMarkerDefinition(); itemInLevelMarkerDefinition.ItemID = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID; itemInLevelMarkerDefinition.DataBlockName = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).name; itemInLevelMarkerDefinition.PublicName = allBlock.publicName; itemInLevelMarkerDefinition.CustomTitle = allBlock.publicName; itemInLevelMarkerDefinition.VisibleUpdateMode = GetDefaultUpdateModeForSlot(allBlock.inventorySlot); itemInLevelMarkerDefinition.AlwaysShowTitle = (int)allBlock.inventorySlot == 8; itemInLevelMarkerDefinition.AlwaysShowDistance = (int)allBlock.inventorySlot == 8; ItemInLevelMarkerDefinition itemInLevelMarkerDefinition2 = itemInLevelMarkerDefinition; InventorySlot inventorySlot = allBlock.inventorySlot; ItemMarkerTitleProviderType titleType; switch (inventorySlot - 7) { case 1: titleType = ItemMarkerTitleProviderType.PublicName; break; case 0: case 2: titleType = ItemMarkerTitleProviderType.TerminalItemKey; break; default: titleType = ItemMarkerTitleProviderType.PublicName; break; } itemInLevelMarkerDefinition2.TitleType = titleType; value = itemInLevelMarkerDefinition; ItemInLevelMarkerDefinitions.Value[((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID] = value; } else { value.DataBlockName = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).name; value.ItemID = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID; value.PublicName = allBlock.publicName; } } } [HideFromIl2Cpp] private static ItemMarkerVisibleUpdateModeType GetDefaultUpdateModeForSlot(InventorySlot slot) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected I4, but got Unknown switch (slot - 4) { case 0: case 1: return ItemMarkerVisibleUpdateModeType.Custom; case 3: case 5: return ItemMarkerVisibleUpdateModeType.Zone; case 4: return ItemMarkerVisibleUpdateModeType.Manual; default: return ItemMarkerVisibleUpdateModeType.World; } } static ItemInLevel_Marker() { InventorySlot[] array = new InventorySlot[5]; RuntimeHelpers.InitializeArray(array, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); ValidItemSlots = (InventorySlot[])(object)array; ItemInLevelMarkerLookup = new Dictionary<int, ItemInLevel_Marker>(); } } public class LG_BulkheadDoorController_Marker : ItemMarkerBase { private LG_BulkheadDoorController_Core m_bulkDc; public LG_BulkheadDoorController_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) m_bulkDc = ((Il2CppObjectBase)comp).Cast<LG_BulkheadDoorController_Core>(); m_bulkDc.OnStateChangeCallback += Action<eBulkheadDCStatus, eBulkheadDCStatus>.op_Implicit((Action<eBulkheadDCStatus, eBulkheadDCStatus>)OnStateChangeCallback); m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = new Color(0.573f, 0.663f, 0.718f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_markerStyle = (eNavMarkerStyle)30; m_terminalItem = ((Il2CppObjectBase)m_bulkDc.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerShowPin = true; base.SetupNavMarker(comp); } [HideFromIl2Cpp] private void OnStateChangeCallback(eBulkheadDCStatus oldState, eBulkheadDCStatus newState) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 if ((int)newState == 3) { AttemptInteract((eNavMarkerInteractionType)1); } else { AttemptInteract((eNavMarkerInteractionType)0); } } [HideFromIl2Cpp] protected override void OnManualUpdate() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Invalid comparison between Unknown and I4 if ((int)m_bulkDc.m_stateReplicator.State.status == 3) { AttemptInteract((eNavMarkerInteractionType)1); } else { AttemptInteract((eNavMarkerInteractionType)0); } } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); } else { OnManualUpdate(); } } } public class LG_ComputerTerminal_Marker : ItemMarkerBase { private LG_ComputerTerminal m_terminal; public LG_ComputerTerminal_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_0017: 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_005d: Unknown result type (might be due to invalid IL or missing references) m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = Color.green; m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Zone; m_terminal = ((Il2CppObjectBase)comp).Cast<LG_ComputerTerminal>(); m_terminalItem = ((Il2CppObjectBase)m_terminal.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerStyle = (eNavMarkerStyle)6; m_markerAlwaysShowTitle = true; m_markerAlwaysShowDistance = true; m_markerShowPin = true; foreach (Collider componentsInChild in comp.GetComponentsInChildren<Collider>(true)) { if ((Object)(object)((Component)componentsInChild).GetComponent<PlayerPingTarget>() == (Object)null) { ((Component)componentsInChild).gameObject.AddComponent<PlayerPingTarget>().m_pingTargetStyle = (eNavMarkerStyle)6; } } base.SetupNavMarker(comp); } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); return; } PlayerAgent localPlayerAgent = base.LocalPlayerAgent; object obj; if (localPlayerAgent == null) { obj = null; } else { AIG_CourseNode courseNode = ((Agent)localPlayerAgent).CourseNode; obj = ((courseNode != null) ? courseNode.m_zone : null); } LG_Zone val = (LG_Zone)obj; if ((Object)(object)val == (Object)null) { AttemptInteract((eNavMarkerInteractionType)1); } else if (CourseNode.m_zone.ID == val.ID) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } } public class LG_DisinfectionStation_Marker : ItemMarkerBase { private LG_DisinfectionStation m_station; public LG_DisinfectionStation_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_0032: 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_0046: Unknown result type (might be due to invalid IL or missing references) m_station = ((Il2CppObjectBase)comp).Cast<LG_DisinfectionStation>(); m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = new Color(0.49f, 0.77f, 0.78f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_markerStyle = (eNavMarkerStyle)17; m_terminalItem = ((Il2CppObjectBase)m_station.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerShowPin = true; base.SetupNavMarker(comp); } [HideFromIl2Cpp] protected override void OnManualUpdate() { if (((Interact_Base)m_station.m_interact).IsActive) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); } else { OnManualUpdate(); } } } public class LG_HSUActivator_Marker : ItemMarkerBase { private LG_HSUActivator_Core m_hsuActivator; public LG_HSUActivator_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_0032: 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_0046: Unknown result type (might be due to invalid IL or missing references) m_hsuActivator = ((Il2CppObjectBase)comp).Cast<LG_HSUActivator_Core>(); m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = new Color(0.467f, 0.098f, 1f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_markerStyle = (eNavMarkerStyle)16; m_terminalItem = ((Il2CppObjectBase)m_hsuActivator.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerShowPin = true; base.SetupNavMarker(comp); } [HideFromIl2Cpp] protected override void OnManualUpdate() { if (((Behaviour)((Il2CppObjectBase)m_hsuActivator.m_insertHSUInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); } else { OnManualUpdate(); } } } public class LG_HSU_Marker : ItemMarkerBase { private LG_HSU m_hsu; public LG_HSU_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_0032: 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_0045: Unknown result type (might be due to invalid IL or missing references) m_hsu = ((Il2CppObjectBase)comp).Cast<LG_HSU>(); m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = new Color(0.467f, 0.098f, 1f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_markerStyle = (eNavMarkerStyle)8; m_terminalItem = ((Il2CppObjectBase)m_hsu.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerShowPin = true; base.SetupNavMarker(comp); } [HideFromIl2Cpp] protected override void OnManualUpdate() { if (((Interact_Base)m_hsu.m_pickupSampleInteraction).IsActive) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); } else { OnManualUpdate(); } } } public class LG_PowerGenerator_Marker : ItemMarkerBase { private LG_PowerGenerator_Core m_gene; public LG_PowerGenerator_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) m_gene = ((Il2CppObjectBase)comp).Cast<LG_PowerGenerator_Core>(); m_gene.OnSyncStatusChanged += Action<ePowerGeneratorStatus>.op_Implicit((Action<ePowerGeneratorStatus>)OnSyncStateChange); m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(comp.gameObject); m_markerColor = new Color(1f, 0.647f, 0f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_markerStyle = (eNavMarkerStyle)16; m_terminalItem = ((Il2CppObjectBase)m_gene.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerShowPin = true; base.SetupNavMarker(comp); } [HideFromIl2Cpp] private void OnSyncStateChange(ePowerGeneratorStatus status) { if (!base.IsDiscovered) { AttemptInteract((eNavMarkerInteractionType)1); } else if (((Behaviour)((Il2CppObjectBase)m_gene.m_powerCellInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected override void OnManualUpdate() { if (!m_gene.m_graphics.m_gfxSlot.active) { AttemptInteract((eNavMarkerInteractionType)1); } else if (((Behaviour)((Il2CppObjectBase)m_gene.m_powerCellInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled) { AttemptInteract((eNavMarkerInteractionType)0); } else { AttemptInteract((eNavMarkerInteractionType)1); } } [HideFromIl2Cpp] protected override void OnDevUpdate() { if (m_markerForceVisibleTimer >= Clock.Time) { AttemptInteract((eNavMarkerInteractionType)0); } else { OnManualUpdate(); } } } public class LG_SecurityDoor_Locks_Marker : ItemMarkerBase { private LG_SecurityDoor_Locks m_locks; private LG_SecurityDoor m_door; public LG_SecurityDoor_Locks_Marker(IntPtr ptr) : base(ptr) { } [HideFromIl2Cpp] public override void SetupNavMarker(Component comp) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0132: 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) m_locks = ((Il2CppObjectBase)comp).Cast<LG_SecurityDoor_Locks>(); m_door = m_locks.m_door; m_marker = GuiManager.NavMarkerLayer.PlaceCustomMarker((NavMarkerOption)18, ((Component)m_locks.m_intOpenDoor).gameObject, string.Empty, 0f, false); m_markerColor = new Color(0.467f, 0.098f, 1f); m_markerVisibleUpdateMode = ItemMarkerVisibleUpdateModeType.Manual; m_terminalItem = ((Il2CppObjectBase)m_door.m_terminalItem).Cast<LG_GenericTerminalItem>(); m_markerTitle = m_terminalItem.TerminalItemKey; m_markerStyle = (eNavMarkerStyle)0; m_markerIconScale = 0.275f; m_locks.OnApproached += Action.op_Implicit((Action)OnApproached); m_door.m_sync.OnDoorStateChange += Action<pDoorState, bool>.op_Implicit((Action<pDoorState, bool>)OnDoorStateChange); m_overridePlayerPing = false; m_markerShowPin = true; base.SetupNavMarker(comp); m_marker.SetVisualStates((NavMarkerOption)18, (NavMarkerOption)18, (NavMarkerOption)0, (NavMarkerOption)0); m_stateOptions = Il2CppArrayBase<NavMarkerOption>.op_Implicit((Il2CppArrayBase<NavMarkerOption>)(object)m_marker.m_stateOptions); ((Component)m_marker.m_titleSubObj).transform.localScale = Vector3.one * 1.75f; ((TMP_Text)m_marker.m_title).fontSizeMax = 50f; ((TMP_Text)m_marker.m_title).fontSizeMin = 15f; } [HideFromIl2Cpp] private void OnApproached() { base.IsDiscovered = true; } [HideFromIl2Cpp] private void OnDoorStateChange(pDoorState state, bool isRecall) { if (!base.IsDiscovered) { AttemptInteract((eNavMarkerInteractionType)1); } else { OnManualUpdate(); } } [HideFromIl2Cpp] protected override void OnManualUpdate() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //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_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_0034: 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_0039: Invalid comparison between Unknown and I4 //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Invalid comparison between Unknown and I4 //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Invalid comparison between Unknown and I4 //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Invalid comparison between Unknown and I4 //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_0067: 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_0046: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: 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_002a: Invalid comparison between Unknown and I4 //IL_0114: 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_0125: Unknown result type (might be due to invalid IL or missing references) eDoorStatus status = m_door.m_sync.GetCurrentSyncState().status; if ((int)status <= 6) { if ((int)status != 1) { if ((int)status == 3) { m_markerColor = ColorExt.Hex("#FF9DE7"); m_marker.SetColor(m_markerColor); m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_gateKeyItemNeeded.PublicName + "</color>"; m_marker.SetTitle(m_markerTitle); AttemptInteract((eNavMarkerInteractionType)0); return; } if ((int)status == 6) { m_markerColor = ColorExt.Hex("#FFA500"); m_marker.SetColor(m_markerColor); m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.m_powerGeneratorNeeded.PublicName + "</color>"; m_marker.SetTitle(m_markerTitle); AttemptInteract((eNavMarkerInteractionType)0); return; } } } else if (status - 9 > 1) { if ((int)status == 15) { m_markerColor = ColorExt.Hex("#92A9B7"); m_marker.SetColor(m_markerColor); m_markerTitle = "<color=orange>::REQ::</color>\n<color=white>" + m_locks.LinkedBulkheadDoorController.PublicName + "</color>"; m_marker.SetTitle(m_markerTitle); AttemptInteract((eNavMarkerInteractionType)0); return; } if ((int)status == 16) { } } AttemptInteract((eNavMarkerInteractionType)1); } [HideFromIl2Cpp] protected override void OnDevUpdate() { OnManualUpdate(); } } } namespace Hikaria.ItemMarker.Framework { public static class CoroutineManager { public static Coroutine StartCoroutine(IEnumerator routine) { return ((MonoBehaviour)ItemMarkerHost.Instance).StartCoroutine(routine); } public static void StopCoroutine(Coroutine routine) { if (routine != null) { ((MonoBehaviour)ItemMarkerHost.Instance).StopCoroutine(routine); } } } internal sealed class CustomSetting<T> { public T Value { get; } public CustomSetting(string name, T fallback) { string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, "Settings", name + ".json"); try { JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions { IncludeFields = true, PropertyNameCaseInsensitive = true }; jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); Value = (T)(File.Exists(path) ? ((object)JsonSerializer.Deserialize<T>(File.ReadAllText(path), jsonSerializerOptions)) : ((object)fallback)); T value = Value; if (value == null) { Value = fallback; } } catch (Exception ex) { Logs.LogWarning("Invalid settings file " + name + ".json; using defaults: " + ex.Message); Value = fallback; } } } public struct SColor { public float R { get; set; } public float G { get; set; } public float B { get; set; } public float A { get; set; } public Color ToUnityColor() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) return new Color(R, G, B, A); } } public static class SColorExtensions { public static SColor ToSColor(this Color color) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: 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_0031: Unknown result type (might be due to invalid IL or missing references) return new SColor { R = color.r, G = color.g, B = color.b, A = color.a }; } } public abstract class Feature { public abstract string Name { get; } public static ILocalizationService Localization { get; set; } public virtual void Init() { } public virtual void OnGameStateChanged(int state) { } public virtual void OnGameDataInitialized() { } } internal static class FeatureDriver { private static Feature _feature; private static bool _gameDataInitialized; internal static void Attach(Feature feature) { _feature = feature; GameEventAPI.OnGameStateChanged += OnGameStateChanged; } private static void OnGameStateChanged(eGameStateName previous, eGameStateName next) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Invalid comparison between Unknown and I4 //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected I4, but got Unknown if (_feature == null) { return; } if ((int)next == 10 && !_gameDataInitialized) { _gameDataInitialized = true; try { _feature.OnGameDataInitialized(); } catch (Exception ex) { Logs.LogException(ex); } } try { _feature.OnGameStateChanged((int)next); } catch (Exception ex2) { Logs.LogException(ex2); } } } public static class GameEventAPI { public static event Action<eGameStateName, eGameStateName> OnGameStateChanged; internal static void RaiseGameStateChanged(eGameStateName previous, eGameStateName next) { //IL_001f: 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) Action<eGameStateName, eGameStateName> onGameStateChanged = GameEventAPI.OnGameStateChanged; if (onGameStateChanged == null) { return; } Delegate[] invocationList = onGameStateChanged.GetInvocationList(); foreach (Delegate obj in invocationList) { try { ((Action<eGameStateName, eGameStateName>)obj)(previous, next); } catch (Exception ex) { Logs.LogException(ex); } } } } [HarmonyPatch(typeof(GameStateManager), "DoChangeState")] internal static class GameStateManagerChangePatch { private static void Prefix(out eGameStateName __state) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected I4, but got Unknown __state = (eGameStateName)(int)GameStateManager.CurrentStateName; } private static void Postfix(eGameStateName nextState, eGameStateName __state) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) GameEventAPI.RaiseGameStateChanged(__state, nextState); } } public interface ILocalizationService { string GetById(int id); } public class ItemMarkerHost : MonoBehaviour { internal static ItemMarkerHost Instance { get; set; } public ItemMarkerHost(IntPtr ptr) : base(ptr) { } } public sealed class LocalizationService : ILocalizationService { private const string ResourceMarker = "Localization."; private const string FallbackLanguage = "Chinese"; private readonly Dictionary<int, Dictionary<string, string>> _genericTexts = new Dictionary<int, Dictionary<string, string>>(); public string Language { get; set; } = "Chinese"; public int EntryCount => _genericTexts.Count; public LocalizationService() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); string[] manifestResourceNames = executingAssembly.GetManifestResourceNames(); foreach (string text in manifestResourceNames) { if (!text.Contains("Localization.", StringComparison.Ordinal)) { continue; } using Stream stream = executingAssembly.GetManifestResourceStream(text); if (stream != null) { Load(stream); } } } public string GetById(int id) { if (!_genericTexts.TryGetValue(id, out var value)) { return string.Empty; } return Pick(value, Language) ?? Pick(value, "Chinese") ?? Pick(value, "English") ?? Pick(value, "Comment") ?? string.Empty; } private static string Pick(Dictionary<string, string> texts, string key) { if (key == null || !texts.TryGetValue(key, out var value) || string.IsNullOrEmpty(value)) { return null; } return value; } private void Load(Stream stream) { using JsonDocument jsonDocument = JsonDocument.Parse(stream); if (!jsonDocument.RootElement.TryGetProperty("GenericTexts", out var value) || value.ValueKind != JsonValueKind.Object) { return; } foreach (JsonProperty item in value.EnumerateObject()) { if (!int.TryParse(item.Name, out var result) || item.Value.ValueKind != JsonValueKind.Object) { continue; } Dictionary<string, string> dictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); if (item.Value.TryGetProperty("Data", out var value2) && value2.ValueKind == JsonValueKind.Object) { foreach (JsonProperty item2 in value2.EnumerateObject()) { if (item2.Value.ValueKind == JsonValueKind.String) { dictionary[item2.Name] = item2.Value.GetString(); } } } if (item.Value.TryGetProperty("Comment", out var value3) && value3.ValueKind == JsonValueKind.String) { dictionary["Comment"] = value3.GetString(); } _genericTexts[result] = dictionary; } } } public static class SNetEventAPI { public static event Action OnResetSession; public static event Action<eBufferType> OnRecallComplete; public static event Action<pBufferCommand> OnBufferCommand; internal static void RaiseResetSession() { Invoke(SNetEventAPI.OnResetSession); } internal static void RaiseRecallComplete(eBufferType bufferType) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) Invoke(SNetEventAPI.OnRecallComplete, bufferType); } internal static void RaiseBufferCommand(pBufferCommand command) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) Invoke(SNetEventAPI.OnBufferCommand, command); } private static void Invoke(Delegate callbacks, params object[] args) { if ((object)callbacks == null) { return; } Delegate[] invocationList = callbacks.GetInvocationList(); foreach (Delegate obj in invocationList) { try { obj.DynamicInvoke(args); } catch (Exception ex) { Logs.LogException(ex); } } } } [HarmonyPatch(typeof(SNet_SyncManager), "OnResetSession")] internal static class SNetSyncManagerResetPatch { private static void Postfix() { SNetEventAPI.RaiseResetSession(); } } [HarmonyPatch(typeof(SNet_SyncManager), "OnRecallDone")] internal static class SNetSyncManagerRecallPatch { private static void Postfix(eBufferType bufferType) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) SNetEventAPI.RaiseRecallComplete(bufferType); } } [HarmonyPatch(typeof(SNet_Capture), "OnBufferCommand")] internal static class SNetCaptureBufferCommandPatch { private static void Prefix(pBufferCommand command) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) SNetEventAPI.RaiseBufferCommand(command); } } } namespace Hikaria.ItemMarker.Features { public class ItemMarker : Feature { [HarmonyPatch(typeof(PlayerAgent), "set_CourseNode")] private class PlayerAgent__set_CourseNode__Patch { private static bool nodeChanged; private static bool zoneChanged; private static bool dimensionChanged; private static AIG_CourseNode preNode; private static void Prefix(PlayerAgent __instance, AIG_CourseNode value) { //IL_00fc: 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_012a: 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) if (((Agent)__instance).IsLocallyOwned) { preNode = ((Agent)__instance).CourseNode; AIG_CourseNode obj = preNode; nodeChanged = ((obj != null) ? new int?(obj.NodeID) : ((int?)null)) != ((value != null) ? new int?(value.NodeID) : ((int?)null)); AIG_CourseNode obj2 = preNode; zoneChanged = ((obj2 != null) ? new int?(obj2.m_zone.ID) : ((int?)null)) != ((value != null) ? new int?(value.m_zone.ID) : ((int?)null)); AIG_CourseNode obj3 = preNode; dimensionChanged = ((obj3 != null) ? new eDimensionIndex?(obj3.m_dimension.DimensionIndex) : ((eDimensionIndex?)null)) != ((value != null) ? new eDimensionIndex?(value.m_dimension.DimensionIndex) : ((eDimensionIndex?)null)); } } private static void Postfix(AIG_CourseNode value) { if (nodeChanged) { nodeChanged = false; ItemMarkerManager.OnPlayerCourseNodeChanged(value); } if (zoneChanged) { zoneChanged = false; ItemMarkerManager.OnPlayerZoneChanged((value != null) ? value.m_zone : null); } if (dimensionChanged) { dimensionChanged = false; ItemMarkerManager.OnPlayerDimensionChanged((value != null) ? value.m_dimension : null); } } } [HarmonyPatch(typeof(PlayerAgent), "Setup")] private class PlayerAgent__Setup__Patch { private static void Postfix(PlayerAgent __instance) { if ((Object)(object)((Component)__instance).GetComponent<ItemScanner>() == (Object)null) { ((Component)__instance).gameObject.AddComponent<ItemScanner>(); } } } [HarmonyPatch(typeof(LG_ResourceContainer_Sync), "OnStateChange")] private class LG_ResourceContainer_Sync__OnStateChange__Patch { private static void Postfix(LG_ResourceContainer_Sync __instance, pResourceContainerItemState newState) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)newState.status != 3) { return; } foreach (ItemMarkerTag componentsInChild in ((Component)__instance).GetComponentsInChildren<ItemMarkerTag>(true)) { componentsInChild.ItemMarker.IsDiscovered = true; } } } [HarmonyPatch(typeof(SyncedNavMarkerWrapper), "OnStateChange")] private class SyncedNavMarkerWrapper__OnStateChange__Patch { private static bool Prefix(SyncedNavMarkerWrapper __instance, ref pNavMarkerState newState) { //IL_0010: 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_0022: Invalid comparison between Unknown and I4 //IL_00da: 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_0114: 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_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Invalid comparison between Unknown and I4 //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Invalid comparison between Unknown and I4 //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_013e: 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_014c: Invalid comparison between Unknown and I4 //IL_006c: 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_008d: 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_0099: Unknown result type (might be due to invalid IL or missing references) if (__instance.m_playerIndex == -1) { return true; } ItemMarkerTag itemMarkerTag = null; bool flag = false; if ((int)newState.status == 0 && (int)newState.style != 10 && (int)newState.style != 11) { foreach (Collider item in (Il2CppArrayBase<Collider>)(object)Physics.OverlapSphere(newState.worldPos, 0.001f, LayerManager.MASK_PING_TARGET)) { itemMarkerTag = ((Component)item).GetComponent<ItemMarkerTag>(); if (!((Object)(object)itemMarkerTag == (Object)null) && itemMarkerTag.ItemMarker.Style == newState.style) { if (itemMarkerTag.ItemMarker.OnPlayerPing()) { newState.worldPos = itemMarkerTag.ItemMarker.WorldPos; newState.status = (eNavMarkerStatus)0; flag = true; } break; } } } if (flag) { __instance.m_markerHideTimer = Clock.Time + itemMarkerTag.ItemMarker.PlayerPingFadeOutTime; ((Component)__instance).transform.position = newState.worldPos; __instance.m_marker.SetStyle(newState.style); __instance.m_marker.SetVisible(false); __instance.LastVisibleTerminalItemId = newState.terminalItemId; __instance.m_sound.UpdatePosition(newState.worldPos); if ((int)newState.style != 15 && PlayerManager.HasLocalPlayerAgent() && PlayerManager.GetLocalPlayerSlotIndex() != __instance.m_playerIndex) { if ((int)newState.style == 0 || (int)newState.style == 1) { __instance.m_sound.Post(EVENTS.PING_RECEIVED_GENERIC, true); } else { __instance.m_sound.Post(EVENTS.PING_RECEIVED_SPECIFIC, true); } } __instance.OnSyncedStateChange?.Invoke(__instance.m_playerIndex, newState); return false; } return true; } } [HarmonyPatch(typeof(LG_GenericTerminalItem), "PlayPing")] private class LG_GenericTerminalItem__PlayPing__Patch { private static void Postfix(LG_GenericTerminalItem __instance) { ItemMarkerManager.OnTerminalPing(((Object)__instance).GetInstanceID()); } } [HarmonyPatch(typeof(ItemSpawnManager), "SpawnItem")] private class ItemSpawnManager__SpawnItem__Patch { private static void Postfix(Item __result) { //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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) ItemInLevel val = ((__result != null) ? ((Il2CppObjectBase)__result).TryCast<ItemInLevel>() : null); if ((Object)(object)val == (Object)null) { return; } if ((Object)(object)((Component)val).GetComponent<ItemInLevel_Marker>() == (Object)null) { ((Component)val).gameObject.AddComponent<ItemInLevel_Marker>().SetupNavMarker((Component)(object)val); } if (val.CourseNode != null || val.internalSync == null || (int)val.internalSync.GetCurrentState().status != 0) { return; } pItemData pItemData = ((Item)val).Get_pItemData(); AIG_CourseNode courseNode = default(AIG_CourseNode); if (((pCourseNode)(ref pItemData.originCourseNode)).TryGet(ref courseNode)) { val.CourseNode = courseNode; return; } iTerminalItem component = ((Component)val).GetComponent<iTerminalItem>(); if (component != null) { if (component.SpawnNode == null) { LG_Area componentInParent = ((Component)((Il2CppObjectBase)component).Cast<LG_GenericTerminalItem>()).GetComponentInParent<LG_Area>(); if ((Object)(object)componentInParent != (Object)null) { component.SpawnNode = componentInParent.m_courseNode; } } if (val.CourseNode == null && component.SpawnNode != null) { val.CourseNode = component.SpawnNode; return; } } Transform parent = ((Component)val).transform.parent; object obj; if (parent == null) { obj = null; } else { Transform parent2 = parent.parent; obj = ((parent2 != null) ? ((Component)parent2).GetComponentInChildren<LG_PickupItem>() : null); } LG_PickupItem val2 = (LG_PickupItem)obj; if ((Object)(object)val2 != (Object)null) { val.CourseNode = val2.SpawnNode; } } } [HarmonyPatch(typeof(LG_ResourceContainer_Storage), "SetSpawnNode")] private class LG_ResourceContainer_Storage__SetSpawnNode__Patch { private static void Postfix(LG_ResourceContainer_Storage __instance, GameObject obj, AIG_CourseNode spawnNode) { //IL_0023: 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) foreach (ItemInLevel componentsInChild in obj.GetComponentsInChildren<ItemInLevel>()) { if (componentsInChild.CourseNode == null && (int)componentsInChild.internalSync.GetCurrentState().status == 0) { componentsInChild.CourseNode = spawnNode; } } } } [HarmonyPatch(typeof(CarryItemPickup_Core), "OnCustomDataUpdated")] private class CarryItemPickup_Core__OnCustomDataUpdated__Patch { private static void Postfix(CarryItemPickup_Core __instance, pItemData_Custom customDataCopy) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value)) { value.OnItemCustomDataUpdate(customDataCopy); } } } [HarmonyPatch(typeof(ResourcePackPickup), "OnCustomDataUpdated")] private class ResourcePackPickup__OnCustomDataUpdated__Patch { private static void Postfix(ResourcePackPickup __instance, pItemData_Custom customDataCopy) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value)) { value.OnItemCustomDataUpdate(customDataCopy); } } } [HarmonyPatch(typeof(ConsumablePickup_Core), "OnCustomDataUpdated")] private class ConsumablePickup_Core__OnCustomDataUpdated__Patch { private static void Postfix(ConsumablePickup_Core __instance, pItemData_Custom customDataCopy) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (ItemInLevel_Marker.ItemInLevelMarkerLookup.TryGetValue(((Object)__instance).GetInstanceID(), out var value)) { value.OnItemCustomDataUpdate(customDataCopy); } } } [HarmonyPatch(typeof(LG_ComputerTerminal), "Setup")] private class LG_ComputerTerminal__Setup__Patch { private static void Postfix