using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Core.Logging.Interpolation; using BepInEx.Logging; using BepInEx.Unity.IL2CPP; using Il2CppInterop.Runtime.Injection; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("TrailMarkers")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TrailMarkers")] [assembly: AssemblyTitle("TrailMarkers")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace TrailMarkers { public enum MarkerType { Cairn, Ribbon, GlowMoss } internal static class MarkerVisuals { private static Shader _cachedShader; private static Shader GetWorkingShader() { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown if ((Object)(object)_cachedShader != (Object)null) { return _cachedShader; } string[] array = new string[7] { "Universal Render Pipeline/Lit", "Universal Render Pipeline/Simple Lit", "Universal Render Pipeline/Unlit", "HDRP/Lit", "Standard", "Legacy Shaders/Diffuse", "Sprites/Default" }; string[] array2 = array; bool flag = default(bool); foreach (string text in array2) { Shader val = Shader.Find(text); if (!((Object)(object)val != (Object)null)) { continue; } ManualLogSource log = Plugin.Log; if (log != null) { BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(30, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("MarkerVisuals: using shader '"); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(text); ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("'"); } log.LogInfo(val2); } _cachedShader = val; return val; } ManualLogSource log2 = Plugin.Log; if (log2 != null) { log2.LogWarning((object)"MarkerVisuals: no known URP shader found by name."); } return null; } private static void ApplyColor(Renderer rend, Color color) { //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_001a: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) Shader workingShader = GetWorkingShader(); if ((Object)(object)workingShader != (Object)null) { Material val = new Material(workingShader); if (val.HasProperty("_BaseColor")) { val.SetColor("_BaseColor", color); } if (val.HasProperty("_Color")) { val.SetColor("_Color", color); } rend.material = val; } else { rend.material.color = color; } } public static GameObject Build(MarkerType type, Vector3 position, Quaternion rotation) { //IL_0045: 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_0055: Unknown result type (might be due to invalid IL or missing references) if (1 == 0) { } GameObject val = (GameObject)(type switch { MarkerType.Cairn => BuildCairn(), MarkerType.Ribbon => BuildRibbon(), MarkerType.GlowMoss => BuildGlowMoss(), _ => BuildCairn(), }); if (1 == 0) { } GameObject val2 = val; val2.transform.position = position; val2.transform.rotation = ((type == MarkerType.Cairn) ? Quaternion.identity : rotation); return val2; } private static GameObject BuildCairn() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("TrailMarker_Cairn"); float[] array = new float[4] { 0.28f, 0.22f, 0.16f, 0.1f }; Color color = default(Color); ((Color)(ref color))..ctor(0.55f, 0.53f, 0.5f); float num = 0f; float num2 = 0f; float[] array2 = array; foreach (float num3 in array2) { GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0); val2.transform.SetParent(val.transform, false); val2.transform.localScale = new Vector3(num3 * 2f, num3 * 1.1f, num3 * 2f); float num4 = num3 * 0.55f; num += num2 + num4; num2 = num4; val2.transform.localPosition = new Vector3(Random.Range(-0.015f, 0.015f), num, Random.Range(-0.015f, 0.015f)); Object.Destroy((Object)(object)val2.GetComponent()); ApplyColor(val2.GetComponent(), color); } CapsuleCollider val3 = val.AddComponent(); val3.height = num + 0.2f; val3.radius = 0.3f; val3.center = new Vector3(0f, (num + 0.2f) / 2f, 0f); ((Collider)val3).isTrigger = true; return val; } private static GameObject BuildRibbon() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_003b: 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_0089: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("TrailMarker_Ribbon"); GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)3); val2.transform.SetParent(val.transform, false); val2.transform.localScale = new Vector3(0.06f, 0.28f, 0.01f); val2.transform.localPosition = new Vector3(0f, 1.2f, 0.02f); Object.Destroy((Object)(object)val2.GetComponent()); Color[] array = (Color[])(object)new Color[3] { new Color(0.85f, 0.15f, 0.15f), new Color(0.95f, 0.75f, 0.1f), new Color(0.15f, 0.55f, 0.85f) }; ApplyColor(val2.GetComponent(), array[Random.Range(0, array.Length)]); SphereCollider val3 = val.AddComponent(); val3.radius = 0.25f; ((Collider)val3).isTrigger = true; return val; } private static GameObject BuildGlowMoss() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_003b: 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_0090: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("TrailMarker_GlowMoss"); GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)0); val2.transform.SetParent(val.transform, false); val2.transform.localScale = new Vector3(0.35f, 0.12f, 0.3f); val2.transform.localPosition = new Vector3(0f, 0.05f, 0f); Object.Destroy((Object)(object)val2.GetComponent()); Color val3 = default(Color); ((Color)(ref val3))..ctor(0.3f, 0.9f, 0.5f); Renderer component = val2.GetComponent(); ApplyColor(component, val3); Material material = component.material; if (material.HasProperty("_EmissionColor")) { material.EnableKeyword("_EMISSION"); material.SetColor("_EmissionColor", val3 * 2.5f); } Light val4 = val.AddComponent(); val4.type = (LightType)2; val4.color = val3; val4.range = 3.5f; val4.intensity = 1.5f; SphereCollider val5 = val.AddComponent(); val5.radius = 0.3f; ((Collider)val5).isTrigger = true; return val; } } public struct MarkerData { public string Id; public ulong OwnerId; public MarkerType Type; public Vector3 Position; public Quaternion Rotation; public Color OwnerColor; } public interface INetworkAdapter { ulong LocalPlayerId { get; } event Action MarkerConfirmed; event Action MarkerRemoved; event Action> FullSyncReceived; void RequestPlace(MarkerData data); void RequestRemove(string markerId); void RequestFullSync(); } public class LocalOnlyAdapter : INetworkAdapter { public ulong LocalPlayerId => 1uL; public event Action MarkerConfirmed; public event Action MarkerRemoved; public event Action> FullSyncReceived; public void RequestPlace(MarkerData data) { this.MarkerConfirmed?.Invoke(data); } public void RequestRemove(string markerId) { this.MarkerRemoved?.Invoke(markerId); } public void RequestFullSync() { this.FullSyncReceived?.Invoke(new List()); } } public static class NetworkAdapter { public static void RegisterHandlers() { } } [BepInPlugin("gogogadgetjustice.bigwalk.trailmarkers", "Trail Markers", "1.0.0")] public class Plugin : BasePlugin { public static ManualLogSource Log; public override void Load() { Log = ((BasePlugin)this).Log; Log.LogInfo((object)"Trail Markers loaded."); ClassInjector.RegisterTypeInIl2Cpp(); ClassInjector.RegisterTypeInIl2Cpp(); TrailMarkerConfig.Init(((BasePlugin)this).Config); TrailMarkerManager.EnsureExists(); } } public class TrailMarker : MonoBehaviour { public string MarkerId; public ulong OwnerId; public MarkerType Type; public Color OwnerColor; public TrailMarker(IntPtr ptr) : base(ptr) { } public MarkerData ToData() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_005b: Unknown result type (might be due to invalid IL or missing references) return new MarkerData { Id = MarkerId, OwnerId = OwnerId, Type = Type, Position = ((Component)this).transform.position, Rotation = ((Component)this).transform.rotation, OwnerColor = OwnerColor }; } } public static class TrailMarkerConfig { public static ConfigEntry PlaceKey { get; private set; } public static ConfigEntry CycleTypeKey { get; private set; } public static ConfigEntry PickUpKey { get; private set; } public static ConfigEntry PlaceRange { get; private set; } public static ConfigEntry DropToGroundMaxDistance { get; private set; } public static ConfigEntry MaxMarkers { get; private set; } public static ConfigEntry FifoRemoval { get; private set; } public static void Init(ConfigFile config) { PlaceKey = config.Bind("Controls", "PlaceKey", (KeyCode)116, "Key to place a trail marker."); CycleTypeKey = config.Bind("Controls", "CycleTypeKey", (KeyCode)9, "Key to cycle through marker types."); PickUpKey = config.Bind("Controls", "PickUpKey", (KeyCode)101, "Key to pick up nearest marker."); PlaceRange = config.Bind("Settings", "PlaceRange", 10f, "Max range to place/pickup markers."); DropToGroundMaxDistance = config.Bind("Settings", "DropToGroundMaxDistance", 2f, "Max distance to snap markers to floor geometry."); MaxMarkers = config.Bind("Settings", "MaxMarkers", 10, "Max markers per player."); FifoRemoval = config.Bind("Settings", "FifoRemoval", true, "Automatically remove oldest marker when at cap."); } } public class TrailMarkerManager : MonoBehaviour { private readonly Dictionary> _ownerMarkers = new Dictionary>(); private readonly Dictionary _byId = new Dictionary(); private INetworkAdapter _net; private MarkerType _selectedType = MarkerType.GlowMoss; public static TrailMarkerManager Instance { get; private set; } public TrailMarkerManager(IntPtr ptr) : base(ptr) { } public static void EnsureExists() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown if (!((Object)(object)Instance != (Object)null)) { GameObject val = new GameObject("TrailMarkerManager"); Object.DontDestroyOnLoad((Object)(object)val); Instance = val.AddComponent(); } } private void Awake() { Instance = this; _net = new LocalOnlyAdapter(); _net.MarkerConfirmed += OnMarkerConfirmed; _net.MarkerRemoved += OnMarkerRemovedRemote; _net.FullSyncReceived += OnFullSync; _net.RequestFullSync(); ManualLogSource log = Plugin.Log; if (log != null) { log.LogInfo((object)"TrailMarkerManager ready."); } } private void Update() { //IL_0006: 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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown if (Input.GetKeyDown(TrailMarkerConfig.CycleTypeKey.Value)) { _selectedType = (MarkerType)((int)(_selectedType + 1) % 3); ManualLogSource log = Plugin.Log; if (log != null) { bool flag = default(bool); BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(19, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Trail Marker type: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(_selectedType); } log.LogInfo(val); } } if (Input.GetKeyDown(TrailMarkerConfig.PlaceKey.Value)) { TryPlaceMarker(); } if (Input.GetKeyDown(TrailMarkerConfig.PickUpKey.Value)) { TryPickUpNearest(); } } public void CreateMarkerAt(Vector3 position, ulong ownerId) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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) MarkerData data = new MarkerData { Id = Guid.NewGuid().ToString("N"), OwnerId = ownerId, Type = _selectedType, Position = position, Rotation = Quaternion.identity }; OnMarkerConfirmed(data); } private void TryPlaceMarker() { //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Expected O, but got Unknown //IL_0411: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //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_0044: 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) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) //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_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: 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_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) bool flag = default(bool); try { Camera main = Camera.main; if (main == null || (Object)(object)main == (Object)null) { return; } Vector3 position = ((Component)main).transform.position; Vector3 forward = ((Component)main).transform.forward; Transform root = ((Component)main).transform.root; Vector3 val = position + forward * 0.5f; float num = Mathf.Max(0f, TrailMarkerConfig.PlaceRange.Value - 0.5f); RaycastHit[] array = Il2CppArrayBase.op_Implicit((Il2CppArrayBase)(object)Physics.RaycastAll(val, forward, num, -1, (QueryTriggerInteraction)0)); if (array == null || array.Length == 0) { return; } Array.Sort(array, (RaycastHit a, RaycastHit b) => ((RaycastHit)(ref a)).distance.CompareTo(((RaycastHit)(ref b)).distance)); RaycastHit? val2 = null; RaycastHit[] array2 = array; for (int num2 = 0; num2 < array2.Length; num2++) { RaycastHit value = array2[num2]; if (!((Object)(object)((RaycastHit)(ref value)).collider == (Object)null) && !((RaycastHit)(ref value)).collider.isTrigger && !((Object)((RaycastHit)(ref value)).collider).name.Contains("Plane") && (!((Object)(object)root != (Object)null) || !((Object)(object)((RaycastHit)(ref value)).transform.root == (Object)(object)root))) { val2 = value; break; } } if (!val2.HasValue) { return; } RaycastHit value2 = val2.Value; Vector3 val3 = ((RaycastHit)(ref value2)).point + ((RaycastHit)(ref value2)).normal * 0.05f; Vector3 normal = ((RaycastHit)(ref value2)).normal; float value3 = TrailMarkerConfig.DropToGroundMaxDistance.Value; if (value3 > 0f) { try { Vector3 val4 = val3 + Vector3.up * 0.5f; RaycastHit[] array3 = Il2CppArrayBase.op_Implicit((Il2CppArrayBase)(object)Physics.RaycastAll(val4, Vector3.down, value3 + 0.5f, -1, (QueryTriggerInteraction)0)); if (array3 != null && array3.Length != 0) { Array.Sort(array3, (RaycastHit a, RaycastHit b) => ((RaycastHit)(ref a)).distance.CompareTo(((RaycastHit)(ref b)).distance)); RaycastHit[] array4 = array3; for (int num3 = 0; num3 < array4.Length; num3++) { RaycastHit val5 = array4[num3]; if (!((Object)(object)((RaycastHit)(ref val5)).collider == (Object)null) && !((RaycastHit)(ref val5)).collider.isTrigger && !((Object)((RaycastHit)(ref val5)).collider).name.Contains("Plane") && (!((Object)(object)root != (Object)null) || !((Object)(object)((RaycastHit)(ref val5)).transform.root == (Object)(object)root)) && !(Vector3.Dot(((RaycastHit)(ref val5)).normal, Vector3.up) < 0.5f)) { val3 = ((RaycastHit)(ref val5)).point + ((RaycastHit)(ref val5)).normal * 0.02f; normal = ((RaycastHit)(ref val5)).normal; break; } } } } catch (Exception ex) { ManualLogSource log = Plugin.Log; if (log != null) { BepInExWarningLogInterpolatedStringHandler val6 = new BepInExWarningLogInterpolatedStringHandler(20, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val6).AppendLiteral("Ground-check error: "); ((BepInExLogInterpolatedStringHandler)val6).AppendFormatted(ex.Message); } log.LogWarning(val6); } } } ulong localPlayerId = _net.LocalPlayerId; if (MakeRoomForNewMarker(localPlayerId)) { MarkerData data = new MarkerData { Id = Guid.NewGuid().ToString("N"), OwnerId = localPlayerId, Type = _selectedType, Position = val3, Rotation = Quaternion.FromToRotation(Vector3.up, normal) }; _net.RequestPlace(data); } } catch (Exception ex2) { ManualLogSource log2 = Plugin.Log; if (log2 != null) { BepInExErrorLogInterpolatedStringHandler val7 = new BepInExErrorLogInterpolatedStringHandler(22, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val7).AppendLiteral("TryPlaceMarker error: "); ((BepInExLogInterpolatedStringHandler)val7).AppendFormatted(ex2); } log2.LogError(val7); } } } private bool MakeRoomForNewMarker(ulong owner) { if (!_ownerMarkers.TryGetValue(owner, out var value) || value.Count < TrailMarkerConfig.MaxMarkers.Value) { return true; } if (TrailMarkerConfig.FifoRemoval.Value) { TrailMarker value2 = value.First.Value; _net.RequestRemove(value2.MarkerId); return true; } return false; } private void TryPickUpNearest() { //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) try { Camera main = Camera.main; if (main == null || (Object)(object)main == (Object)null) { return; } ulong localPlayerId = _net.LocalPlayerId; if (!_ownerMarkers.TryGetValue(localPlayerId, out var value) || value.Count == 0) { return; } TrailMarker trailMarker = null; float num = TrailMarkerConfig.PlaceRange.Value; foreach (TrailMarker item in value) { float num2 = Vector3.Distance(((Component)main).transform.position, ((Component)item).transform.position); if (num2 < num) { num = num2; trailMarker = item; } } if ((Object)(object)trailMarker != (Object)null) { _net.RequestRemove(trailMarker.MarkerId); } } catch (Exception ex) { ManualLogSource log = Plugin.Log; if (log != null) { bool flag = default(bool); BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(24, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val).AppendLiteral("TryPickUpNearest error: "); ((BepInExLogInterpolatedStringHandler)val).AppendFormatted(ex); } log.LogError(val); } } } private void OnMarkerConfirmed(MarkerData data) { //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_0023: 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) try { if (!_byId.ContainsKey(data.Id)) { GameObject val = MarkerVisuals.Build(data.Type, data.Position, data.Rotation); TrailMarker trailMarker = val.AddComponent(); trailMarker.MarkerId = data.Id; trailMarker.OwnerId = data.OwnerId; trailMarker.Type = data.Type; _byId[data.Id] = trailMarker; if (!_ownerMarkers.TryGetValue(data.OwnerId, out var value)) { value = new LinkedList(); _ownerMarkers[data.OwnerId] = value; } value.AddLast(trailMarker); } } catch (Exception ex) { ManualLogSource log = Plugin.Log; if (log != null) { bool flag = default(bool); BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(25, 1, ref flag); if (flag) { ((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("OnMarkerConfirmed error: "); ((BepInExLogInterpolatedStringHandler)val2).AppendFormatted(ex); } log.LogError(val2); } } } private void OnMarkerRemovedRemote(string markerId) { if (_byId.TryGetValue(markerId, out var value)) { _byId.Remove(markerId); if (_ownerMarkers.TryGetValue(value.OwnerId, out var value2)) { value2.Remove(value); } Object.Destroy((Object)(object)((Component)value).gameObject); } } private void OnFullSync(List markers) { foreach (MarkerData marker in markers) { OnMarkerConfirmed(marker); } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "TrailMarkers"; public const string PLUGIN_NAME = "TrailMarkers"; public const string PLUGIN_VERSION = "1.0.0"; } }