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 AIGraph;
using Agents;
using BepInEx.Unity.IL2CPP.Utils.Collections;
using GameData;
using Gear;
using Hikaria.Core;
using Hikaria.Core.Interfaces;
using Hikaria.ItemMarker.Features;
using Hikaria.ItemMarker.Handlers;
using Hikaria.ItemMarker.Handlers.Markers;
using Hikaria.ItemMarker.Managers;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using LevelGeneration;
using Player;
using SNetwork;
using TMPro;
using TheArchive.Core;
using TheArchive.Core.Attributes;
using TheArchive.Core.Attributes.Feature.Settings;
using TheArchive.Core.FeaturesAPI;
using TheArchive.Core.Localization;
using TheArchive.Core.Models;
using TheArchive.Core.ModulesAPI;
using TheArchive.Interfaces;
using TheArchive.Loader;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Hikaria.ItemMarker")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+f763f1f8d120edd709825d19c90e45a40dcbb5bb")]
[assembly: AssemblyProduct("Hikaria.ItemMarker")]
[assembly: AssemblyTitle("Hikaria.ItemMarker")]
[assembly: AssemblyVersion("1.0.0.0")]
public enum ItemMarkerVisibleUpdateModeType
{
World,
CourseNode,
Zone,
Dimension,
Manual,
Dev
}
namespace Hikaria.ItemMarker
{
[ArchiveDependency(/*Could not decode attribute arguments.*/)]
[ArchiveModule("Hikaria.ItemMarker", "ItemMarker", "1.0.0")]
public class EntryPoint : IArchiveModule
{
public bool ApplyHarmonyPatches => false;
public bool UsesLegacyPatches => false;
public ArchiveLegacyPatcher Patcher { get; set; }
public string ModuleGroup => FeatureGroup.op_Implicit(FeatureGroups.GetOrCreateModuleGroup("Item Marker", new Dictionary<Language, string>
{
{
(Language)0,
"Item Marker"
},
{
(Language)1,
"物品标记"
}
}));
public void Init()
{
Logs.LogMessage("OK");
}
public void OnExit()
{
}
public void OnLateUpdate()
{
}
public void OnSceneWasLoaded(int buildIndex, string sceneName)
{
}
}
internal static class Logs
{
private static IArchiveLogger _logger;
private static IArchiveLogger Logger => _logger ?? (_logger = LoaderWrapper.CreateLoggerInstance("Hikaria.ItemMarker", ConsoleColor.White));
public static void LogDebug(object data)
{
Logger.Debug(data.ToString());
}
public static void LogError(object data)
{
Logger.Error(data.ToString());
}
public static void LogInfo(object data)
{
Logger.Info(data.ToString());
}
public static void LogMessage(object data)
{
Logger.Msg(ConsoleColor.White, data.ToString());
}
public static void LogWarning(object data)
{
Logger.Warning(data.ToString());
}
public static void LogNotice(object data)
{
Logger.Notice(data.ToString());
}
public static void LogSuccess(object data)
{
Logger.Success(data.ToString());
}
public static void LogException(Exception ex)
{
Logger.Exception(ex);
}
}
public static class PluginInfo
{
public const string GUID = "Hikaria.ItemMarker";
public const string NAME = "ItemMarker";
public const string VERSION = "1.0.0";
}
}
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.Dev,
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)
{
marker.DoDevModeUpdate();
yield return yielder;
}
}
internal static void Init()
{
ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerTag>(false);
ClassInjector.RegisterTypeInIl2Cpp<ItemScanner>(false);
ClassInjector.RegisterTypeInIl2Cpp<ItemMarkerBase>(false);
ClassInjector.RegisterTypeInIl2Cpp<ItemInLevel_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_ComputerTerminal_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_PowerGenerator_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_HSU_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_HSUActivator_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_BulkheadDoorController_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_SecurityDoor_Locks_Marker>(false);
ClassInjector.RegisterTypeInIl2Cpp<LG_DisinfectionStation_Marker>(false);
}
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>(false);
_itemMarkers.Add(val, Il2CppType.Of<T>(true));
}
internal static void RegisterItemMarker(ItemMarkerBase marker)
{
_allItemMarkers.Add(marker);
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 = new HashSet<ItemMarkerBase>();
_terminalItemMarkers[instanceId] = value;
}
value.Remove(marker);
}
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 class ItemMarkerBase : MonoBehaviour, IOnResetSession, IOnRecallComplete, IOnBufferCommand
{
protected struct pBasicState
{
public bool IsDiscovered;
public bool IsVisible;
}
protected bool m_markerAlwaysShowTitle;
protected bool m_markerAlwaysShowDistance;
protected float m_markerPingFadeOutTime = 12f;
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 readonly Dictionary<eBufferType, pBasicState> m_basicBuffers = new Dictionary<eBufferType, pBasicState>();
private PlayerAgent m_localPlayer;
private bool m_isDiscovered;
public bool IsDiscovered
{
get
{
return m_isDiscovered;
}
set
{
m_isDiscovered = value;
ForceUpdate();
}
}
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;
}
}
public PlayerAgent LocalPlayerAgent
{
get
{
if ((Object)(object)m_localPlayer == (Object)null)
{
m_localPlayer = PlayerManager.GetLocalPlayerAgent();
}
return m_localPlayer;
}
}
public virtual bool AllowDiscoverScan => !m_isDiscovered;
public virtual AIG_CourseNode CourseNode => m_terminalItem.SpawnNode;
public bool IsVisible => m_marker.IsVisible;
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;
}
}
public eNavMarkerStyle Style => m_markerStyle;
internal ItemMarkerVisibleUpdateModeType VisibleUpdateMode => m_markerVisibleUpdateMode;
protected virtual string MarkerTitle => m_markerTitle;
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_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: 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 (!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 * 3f, ((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);
}
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;
if (!((Behaviour)this).enabled)
{
CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(UpdateMarkerAlphaCoroutine()), (Action)null);
}
GameEventAPI.RegisterListener<ItemMarkerBase>(this);
ItemMarkerManager.RegisterItemMarkerAutoUpdate(this);
if ((Object)(object)m_terminalItem != (Object)null)
{
ItemMarkerManager.RegisterTerminalItemMarker(((Object)m_terminalItem).GetInstanceID(), this);
}
ItemMarkerManager.RegisterItemMarker(this);
}
public virtual void OnPlayerPing()
{
if (!IsDiscovered)
{
IsDiscovered = true;
}
AttemptInteract((eNavMarkerInteractionType)0);
m_marker.Ping(m_markerPingFadeOutTime);
m_markerForceVisibleTimer = Clock.Time + m_markerPingFadeOutTime;
if (!((Behaviour)this).enabled)
{
CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerPingFadeOutTime + 0.01f)), (Action)null);
}
}
public virtual void OnTerminalPing()
{
AttemptInteract((eNavMarkerInteractionType)0);
m_marker.Ping(m_markerPingFadeOutTime);
m_markerForceVisibleTimer = Clock.Time + m_markerPingFadeOutTime;
if (!((Behaviour)this).enabled)
{
CoroutineManager.StartCoroutine(CollectionExtensions.WrapToIl2Cpp(HideDelay(m_markerPingFadeOutTime + 0.01f)), (Action)null);
}
}
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);
}
}
}
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);
}
}
}
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);
}
}
}
internal void OnTerminalItemKeyUpdate(string key)
{
if (m_markerTitleUseTerminalItemKey)
{
m_marker.SetTitle(key);
}
}
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))
{
m_updateTimer = Clock.Time + 0.2f;
if (ItemMarkerManager.DevMode)
{
OnDevUpdate();
}
else if (m_markerForceVisibleTimer >= Clock.Time)
{
AttemptInteract((eNavMarkerInteractionType)0);
}
else if (!IsDiscovered)
{
AttemptInteract((eNavMarkerInteractionType)1);
}
else if (!((Object)(object)LocalPlayerAgent == (Object)null) && m_markerVisibleUpdateMode == ItemMarkerVisibleUpdateModeType.World)
{
OnWorldUpdate();
}
}
}
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);
}
}
protected virtual void OnDestroy()
{
if ((Object)(object)m_marker != (Object)null)
{
GuiManager.NavMarkerLayer.RemoveMarker(m_marker);
}
GameEventAPI.UnregisterListener<ItemMarkerBase>(this);
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();
}
public void ForceUpdate()
{
if ((Object)(object)m_marker == (Object)null)
{
return;
}
UpdateMarkerTitle();
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.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;
}
}
protected virtual void OnManualUpdate()
{
}
internal void DoDevModeUpdate()
{
OnDevUpdate();
}
internal void DoEnterDevMode()
{
OnEnterDevMode();
}
internal void DoExitDevMode()
{
OnExitDevMode();
}
protected virtual void OnEnterDevMode()
{
ForceUpdate();
}
protected virtual void OnExitDevMode()
{
ForceUpdate();
}
protected virtual void OnDevUpdate()
{
}
protected IEnumerator HideDelay(float delay)
{
yield return (object)new WaitForSecondsRealtime(delay);
ForceUpdate();
}
private IEnumerator UpdateMarkerAlphaCoroutine()
{
WaitForFixedUpdate yielder = new WaitForFixedUpdate();
while (Object.op_Implicit((Object)(object)m_marker))
{
UpdateMarkerAlpha();
yield return yielder;
}
}
public void UpdateMarkerTitle()
{
m_marker.SetTitle(MarkerTitle);
}
public void UpdateMarkerAlpha()
{
if (m_marker.IsVisible)
{
if (AimButtonHeld)
{
m_marker.SetAlpha(m_markerAlphaADS);
}
else
{
m_marker.SetAlpha(m_markerAlpha);
}
}
}
public void OnResetSession()
{
ResetBuffer();
}
protected virtual void ResetBuffer()
{
m_basicBuffers.Clear();
}
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();
}
}
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
};
}
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;
}
}
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 class ItemMarkerTag : MonoBehaviour
{
[HideFromIl2Cpp]
public ItemMarkerBase ItemMarker { get; private set; }
[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;
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, IOnGameStateChanged
{
public struct pItemInLevelMarkerState
{
public bool IsPlacedInLevel;
}
private class ItemInLevelMarkerDescription
{
public uint ItemID { get; set; }
public string DataBlockName { get; set; } = string.Empty;
public string PublicName { get; set; } = string.Empty;
public string Title { get; set; } = string.Empty;
public bool UsePublicName { get; set; }
public bool UseTerminalItemKey { get; set; }
public SColor Color { get; set; } = SColor.op_Implicit(Color.white);
public ItemMarkerVisibleUpdateModeType VisibleUpdateMode { get; set; }
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 IconScale { get; set; } = 0.4f;
public float PingFadeOutTime { get; set; } = 12f;
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_allowDiscoverScan;
private bool m_isPlacedInLevel = true;
private readonly Dictionary<eBufferType, pItemInLevelMarkerState> m_buffers = new Dictionary<eBufferType, pItemInLevelMarkerState>();
private static CustomSettings<Dictionary<uint, ItemInLevelMarkerDescription>> ItemInLevelMarkerDescriptions = new CustomSettings<Dictionary<uint, ItemInLevelMarkerDescription>>("ItemInLevelMarkerDescriptions", new Dictionary<uint, ItemInLevelMarkerDescription>(), (Action<Dictionary<uint, ItemInLevelMarkerDescription>>)null, (LoadingTime)1, true);
private static readonly InventorySlot[] ValidItemSlots;
internal static readonly Dictionary<int, ItemInLevel_Marker> ItemInLevelMarkerLookup;
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();
}
}
}
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.Get(1u)}</color>\n{(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</color>\n"))}{m_markerTitle}";
}
return (base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</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.Get(3u));
defaultInterpolatedStringHandler.AppendLiteral("</color>\n");
defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</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.Get(3u));
defaultInterpolatedStringHandler.AppendLiteral("</color>\n");
defaultInterpolatedStringHandler.AppendFormatted(base.IsDiscovered ? string.Empty : ("<color=red>" + Hikaria.ItemMarker.Features.ItemMarker.Localization.Get(2u) + "</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.Get(2u) + "</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.Get(2u) + "</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.Get(1u) + "</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;
}
}
}
public override AIG_CourseNode CourseNode => m_item.CourseNode;
public override bool AllowDiscoverScan
{
get
{
if (base.AllowDiscoverScan)
{
return m_allowDiscoverScan;
}
return false;
}
}
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_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Invalid comparison between Unknown and I4
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Invalid comparison between Unknown and I4
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Expected O, but got I4
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_02ad: Unknown result type (might be due to invalid IL or missing references)
//IL_02b3: Invalid comparison between Unknown and I4
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0138->IL0138: Incompatible stack types: O vs I4
//IL_0133->IL0138: Incompatible stack types: I4 vs O
//IL_0133->IL0138: Incompatible stack types: O vs I4
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_allowDiscoverScan = (Object)(object)m_item.container == (Object)null && (int)m_itemSlot != 7 && (int)m_itemSlot != 9;
m_marker = GuiManager.NavMarkerLayer.PrepareGenericMarker(((Component)m_item).gameObject);
object obj = this;
iPlayerPingTarget componentInChildren = ((Component)this).GetComponentInChildren<iPlayerPingTarget>();
int num;
if (componentInChildren != null)
{
obj = componentInChildren.PingTargetStyle;
num = (int)obj;
}
else
{
num = 0;
obj = num;
num = (int)obj;
}
((ItemMarkerBase)num).m_markerStyle = (eNavMarkerStyle)obj;
m_markerTitle = itemDataBlock.publicName;
m_terminalItem = ((Component)m_item).GetComponentInChildren<LG_GenericTerminalItem>();
if (ItemInLevelMarkerDescriptions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)itemDataBlock).persistentID, out var value))
{
m_markerColor = SColor.op_Implicit(value.Color);
m_markerTitle = value.Title;
if (value.UsePublicName)
{
m_markerTitle = ((Item)m_item).PublicName;
}
if (value.UseTerminalItemKey)
{
m_markerTitleUseTerminalItemKey = true;
if ((Object)(object)m_terminalItem != (Object)null)
{
m_markerTitle = m_terminalItem.TerminalItemKey;
}
}
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_markerPingFadeOutTime = value.PingFadeOutTime;
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();
}
}
protected override void Update()
{
if (IsPlacedInLevel)
{
base.Update();
}
}
protected override void OnDestroy()
{
ItemInLevelMarkerLookup.Remove(((Object)m_item).GetInstanceID());
base.OnDestroy();
}
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;
}
}
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);
}
}
public override void OnPlayerPing()
{
if (IsPlacedInLevel)
{
base.OnPlayerPing();
}
}
public override void OnTerminalPing()
{
if (IsPlacedInLevel)
{
base.OnTerminalPing();
}
}
protected override void OnWorldUpdate()
{
if (IsPlacedInLevel)
{
base.OnWorldUpdate();
}
}
public override void OnPlayerCourseNodeChanged(AIG_CourseNode newNode)
{
if (IsPlacedInLevel)
{
base.OnPlayerCourseNodeChanged(newNode);
}
}
public override void OnPlayerZoneChanged(LG_Zone newZone)
{
if (IsPlacedInLevel)
{
base.OnPlayerZoneChanged(newZone);
}
}
public override void OnPlayerDimensionChanged(Dimension newDim)
{
if (IsPlacedInLevel)
{
base.OnPlayerDimensionChanged(newDim);
}
}
public 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();
}
}
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();
}
}
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();
}
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();
}
protected override void OnDevUpdate()
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: 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_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected I4, but got Unknown
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
if (!IsPlacedInLevel)
{
AttemptInteract((eNavMarkerInteractionType)1);
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;
}
}
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
};
}
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
base.RecallBuffer(bufferType);
if (!m_buffers.TryGetValue(bufferType, out var value))
{
IsPlacedInLevel = (int)m_item.internalSync.GetCurrentState().status == 0;
}
else
{
IsPlacedInLevel = value.IsPlacedInLevel;
}
}
protected override void ResetBuffer()
{
base.ResetBuffer();
m_buffers.Clear();
}
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);
}
}
internal static void OnGameDataInitialized()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Invalid comparison between Unknown and I4
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Invalid comparison between Unknown and I4
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Invalid comparison between Unknown and I4
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Invalid comparison between Unknown and I4
foreach (ItemDataBlock allBlock in GameDataBlockBase<ItemDataBlock>.GetAllBlocks())
{
if (ValidItemSlots.Contains(allBlock.inventorySlot))
{
if (!ItemInLevelMarkerDescriptions.Value.TryGetValue(((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID, out var value))
{
value = new ItemInLevelMarkerDescription
{
ItemID = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).persistentID,
DataBlockName = ((GameDataBlockBase<ItemDataBlock>)(object)allBlock).name,
PublicName = allBlock.publicName,
Title = allBlock.publicName,
VisibleUpdateMode = GetDefaultUpdateModeForSlot(allBlock.inventorySlot),
AlwaysShowTitle = ((int)allBlock.inventorySlot == 8),
AlwaysShowDistance = ((int)allBlock.inventorySlot == 8),
UsePublicName = ((int)allBlock.inventorySlot == 8),
UseTerminalItemKey = ((int)allBlock.inventorySlot == 7 || (int)allBlock.inventorySlot == 9)
};
ItemInLevelMarkerDescriptions.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;
}
}
}
}
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.World;
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 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);
}
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);
}
}
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);
}
}
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 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);
}
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 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);
}
protected override void OnManualUpdate()
{
if (((Interact_Base)m_station.m_interact).IsActive)
{
AttemptInteract((eNavMarkerInteractionType)0);
}
else
{
AttemptInteract((eNavMarkerInteractionType)1);
}
}
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 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);
}
protected override void OnManualUpdate()
{
if (((Behaviour)((Il2CppObjectBase)m_hsuActivator.m_insertHSUInteraction).Cast<LG_GenericCarryItemInteractionTarget>()).isActiveAndEnabled)
{
AttemptInteract((eNavMarkerInteractionType)0);
}
else
{
AttemptInteract((eNavMarkerInteractionType)1);
}
}
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 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);
}
protected override void OnManualUpdate()
{
if (((Interact_Base)m_hsu.m_pickupSampleInteraction).IsActive)
{
AttemptInteract((eNavMarkerInteractionType)0);
}
else
{
AttemptInteract((eNavMarkerInteractionType)1);
}
}
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 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);
}
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);
}
}
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);
}
}
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 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_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: 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);
((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;
}
private void OnApproached()
{
base.IsDiscovered = true;
}
private void OnDoorStateChange(pDoorState state, bool isRecall)
{
//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_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Invalid comparison between Unknown and I4
//IL_0025: 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_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Invalid comparison between Unknown and I4
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Invalid comparison between Unknown and I4
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Invalid comparison between Unknown and I4
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: 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_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Invalid comparison between Unknown and I4
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Invalid comparison between Unknown and I4
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
eDoorStatus status = state.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);
}
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);
}
protected override void OnDevUpdate()
{
OnManualUpdate();
}
}
}
namespace Hikaria.ItemMarker.Features
{
[EnableFeatureByDefault]
[DisallowInGameToggle]
[HideInModSettings]
[DoNotSaveToConfig]
public class ItemMarker : Feature
{
public class ItemMarkerSettings
{
[FSDisplayName("开发者模式")]
[FSHide]
public bool DevMode
{
get
{
return ItemMarkerManager.DevMode;
}
set
{
ItemMarkerManager.DevMode = value;
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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) : null) != ((value != null) ? new int?(value.NodeID) : null);
AIG_CourseNode obj2 = preNode;
zoneChanged = ((obj2 != null) ? new int?(obj2.m_zone.ID) : null) != ((value != null) ? new int?(value.m_zone.ID) : null);
AIG_CourseNode obj3 = preNode;
dimensionChanged = ((obj3 != null) ? new eDimensionIndex?(obj3.m_dimension.DimensionIndex) : null) != ((value != null) ? new eDimensionIndex?(value.m_dimension.DimensionIndex) : 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);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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>();
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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;
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class SyncedNavMarkerWrapper__OnStateChange__Patch
{
private static bool Prefix(SyncedNavMarkerWrapper __instance, pNavMarkerState oldState, pNavMarkerState newState)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: 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_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Invalid comparison between Unknown and I4
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Invalid comparison between Unknown and I4
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
if (__instance.m_playerIndex == -1)
{
return true;
}
if ((int)newState.status != 0)
{
return true;
}
bool flag = false;
if ((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 = ((Component)item).GetComponent<ItemMarkerTag>();
if (!((Object)(object)component == (Object)null) && component.ItemMarker.Style == newState.style)
{
component.ItemMarker.OnPlayerPing();
flag = true;
}
}
}
return !flag;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_GenericTerminalItem__PlayPing__Patch
{
private static void Postfix(LG_GenericTerminalItem __instance)
{
ItemMarkerManager.OnTerminalPing(((Object)__instance).GetInstanceID());
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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) ? component.SpawnNode : null) != 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;
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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;
}
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
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);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_ComputerTerminal__Setup__Patch
{
private static void Postfix(LG_ComputerTerminal __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_ComputerTerminal_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_ComputerTerminal_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_GenericTerminalItem__Setup__Patch
{
private static void Postfix(LG_GenericTerminalItem __instance, string key)
{
ItemMarkerManager.OnTerminalItemKeyUpdate(((Object)__instance).GetInstanceID(), key);
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_WardenObjective_Reactor__OnBuildDone__Patch
{
private static void Postfix(LG_WardenObjective_Reactor __instance)
{
if (__instance.SpawnNode != null && (Object)(object)__instance.m_terminal != (Object)null && !__instance.SpawnNode.m_zone.TerminalsSpawnedInZone.Contains(__instance.m_terminal))
{
__instance.SpawnNode.m_zone.TerminalsSpawnedInZone.Add(__instance.m_terminal);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_BulkheadDoorController_Core__Setup__Patch
{
private static void Postfix(LG_BulkheadDoorController_Core __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_BulkheadDoorController_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_BulkheadDoorController_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_PowerGenerator_Core__Setup__Patch
{
private static void Postfix(LG_PowerGenerator_Core __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_PowerGenerator_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_PowerGenerator_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_HSU__Setup__Patch
{
private static void Postfix(LG_HSU __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_HSU_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_HSU_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_HSUActivator_Core__SetupAsWardenObjective__Patch
{
private static void Postfix(LG_HSUActivator_Core __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_HSUActivator_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_HSUActivator_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_HSUActivator_Core__SetupFromCustomGeomorph__Patch
{
private static void Postfix(LG_HSUActivator_Core __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_HSUActivator_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_HSUActivator_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_SecurityDoor_Locks__SetupForBulkheadDC__Patch
{
private static void Postfix(LG_SecurityDoor_Locks __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_SecurityDoor_Locks__SetupForGateKey__Patch
{
private static void Postfix(LG_SecurityDoor_Locks __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_SecurityDoor_Locks__SetupForPowerGenerator__Patch
{
private static void Postfix(LG_SecurityDoor_Locks __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_SecurityDoor_Locks_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_SecurityDoor_Locks_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LG_DisinfectionStation__Setup__Patch
{
private static void Postfix(LG_DisinfectionStation __instance)
{
if ((Object)(object)((Component)__instance).GetComponent<LG_DisinfectionStation_Marker>() == (Object)null)
{
((Component)__instance).gameObject.AddComponent<LG_DisinfectionStation_Marker>().SetupNavMarker((Component)(object)__instance);
}
}
}
public override string Name => "物品标记";
public static ILocalizationService Localization { get; set; }
[FeatureConfig]
public static ItemMarkerSettings Settings { get; set; }
public override void Init()
{
IconManager.Init();
ItemMarkerManager.Init();
}
public override void OnGameStateChanged(int state)
{
if (state == 10)
{
ItemMarkerManager.SearchGameObject();
}
}
public override void OnGameDataInitialized()
{
ItemInLevel_Marker.OnGameDataInitialized();
}
}
}