Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of InteractableESP v1.1.0
plugins/InteractableESP/InteractableESP.dll
Decompiled 6 months agousing System; using System.Collections; 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.Logging; using HG; using Microsoft.CodeAnalysis; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("InteractableESP")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+7c853e419e1525f01374bb8cf6454dd171e0fabf")] [assembly: AssemblyProduct("InteractableESP")] [assembly: AssemblyTitle("InteractableESP")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ExamplePlugin { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } } namespace InteractableESP { public class ConfigGUI : MonoBehaviour { private bool showWindow; private bool waitingForHighlightKey; private bool waitingForGUIKey; private bool showColorPicker; private bool colorPickerHexChangedByUser; private Rect windowRect = new Rect(100f, 100f, 420f, 600f); private Rect colorPickerRect = new Rect(400f, 200f, 260f, 340f); private string colorPickerKey; private string colorPickerHex = ""; private Color colorPickerValue; private static Texture2D _previewTex; private void Update() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(ESP.Instance.GUIToggleKey)) { showWindow = !showWindow; } } private void OnGUI() { //IL_0010: 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_002b: 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_0047: 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_006d: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) if (showWindow) { windowRect = GUI.Window(123456, windowRect, new WindowFunction(DrawWindow), "Interactable ESP Settings"); if (showColorPicker && colorPickerKey != null) { colorPickerRect = GUI.Window(654321, colorPickerRect, new WindowFunction(DrawColorPickerWindow), "Pick Color: " + colorPickerKey); } } } private void DrawWindow(int id) { //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_0407: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); GUILayout.Label("<b>General</b>", GetHeaderStyle(), Array.Empty<GUILayoutOption>()); DrawToggleButton("Draw Labels", () => ESP.Instance.DrawLabels, delegate(bool v) { ESP.Instance.DrawLabels = v; }); DrawToggleButton("Draw Bounding Box", () => ESP.Instance.DrawBoundingBox, delegate(bool v) { ESP.Instance.DrawBoundingBox = v; }); DrawToggleButton("Use Advanced Label", () => ESP.Instance.UseAdvancedLabel, delegate(bool v) { ESP.Instance.UseAdvancedLabel = v; }); DrawToggleButton("High Contrast Text", () => ESP.Instance.HighContrastText, delegate(bool v) { ESP.Instance.HighContrastText = v; }); DrawToggleButton("Highlight Interactables", () => ESP.Instance.HighlightInteractablesEnabled, delegate(bool v) { ESP.Instance.HighlightInteractablesEnabled = v; if (!v) { Highlight[] array = Object.FindObjectsOfType<Highlight>(); for (int i = 0; i < array.Length; i++) { array[i].isOn = false; } } else { ESP.Instance.HighlightAllInteractables(); } }); GUILayout.Space(10f); GUILayout.Label("Label Font Size: " + ESP.Instance.LabelFontSize, Array.Empty<GUILayoutOption>()); int num = (int)GUILayout.HorizontalSlider((float)ESP.Instance.LabelFontSize, 8f, 48f, Array.Empty<GUILayoutOption>()); if (num != ESP.Instance.LabelFontSize) { ESP.Instance.LabelFontSize = num; } GUILayout.Space(10f); GUILayout.Label("<b>Key Bindings</b>", GetHeaderStyle(), Array.Empty<GUILayoutOption>()); DrawKeyBinding("Toggle Highlight Key", () => ESP.Instance.HighlightToggleKey, delegate(KeyCode k) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) ESP.Instance.HighlightToggleKey = k; }, ref waitingForHighlightKey); DrawKeyBinding("Toggle GUI Key", () => ESP.Instance.GUIToggleKey, delegate(KeyCode k) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) ESP.Instance.GUIToggleKey = k; }, ref waitingForGUIKey); GUILayout.Space(10f); GUILayout.Label("<b>Colors</b>", GetHeaderStyle(), Array.Empty<GUILayoutOption>()); Dictionary<string, ConfigEntry<Color>> colorConfigs = ESP.Instance.GetColorConfigs(); Dictionary<string, ConfigEntry<bool>> colorEnabledConfigs = ESP.Instance.GetColorEnabledConfigs(); foreach (KeyValuePair<string, ConfigEntry<Color>> item in colorConfigs) { GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label(item.Key, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(100f) }); bool value = colorEnabledConfigs[item.Key].Value; string text = (value ? "Enabled" : "Disabled"); bool flag = GUILayout.Toggle(value, text, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) }); if (flag != value) { colorEnabledConfigs[item.Key].Value = flag; if (!flag) { ESP.Instance.RemoveHighlightsAndLabelsForColorGroup(item.Key); } else { ESP.Instance.HighlightAllInteractables(); } } Color color = GUI.color; GUI.color = item.Value.Value; if (GUILayout.Button("", (GUILayoutOption[])(object)new GUILayoutOption[2] { GUILayout.Width(32f), GUILayout.Height(18f) })) { showColorPicker = true; colorPickerKey = item.Key; colorPickerValue = item.Value.Value; colorPickerHex = ColorToHex(colorPickerValue); colorPickerHexChangedByUser = false; } GUI.color = color; GUILayout.EndHorizontal(); } GUILayout.Space(10f); KeyCode gUIToggleKey = ESP.Instance.GUIToggleKey; GUILayout.Label("Press " + ((object)(KeyCode)(ref gUIToggleKey)).ToString() + " to close this window.", Array.Empty<GUILayoutOption>()); GUILayout.EndVertical(); GUI.DragWindow(); } private void DrawColorPickerWindow(int id) { //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Invalid comparison between Unknown and I4 //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Invalid comparison between Unknown and I4 //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Expected O, but got Unknown //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); DrawColorSlider("Red", ref colorPickerValue.r); DrawColorSlider("Green", ref colorPickerValue.g); DrawColorSlider("Blue", ref colorPickerValue.b); DrawColorSlider("Alpha", ref colorPickerValue.a); GUILayout.Space(10f); GUILayout.Label("Hex (RRGGBBAA):", Array.Empty<GUILayoutOption>()); GUI.SetNextControlName("HexInputField"); string text = GUILayout.TextField(colorPickerHex, 8, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(100f) }); bool num = text != colorPickerHex; colorPickerHex = text.ToUpper(); if (num) { colorPickerHexChangedByUser = true; if (TryParseHexColor(colorPickerHex, out var color)) { colorPickerValue = color; } } else if ((int)Event.current.type == 7 && !colorPickerHexChangedByUser) { colorPickerHex = ColorToHex(colorPickerValue); } if ((int)Event.current.type == 4 && (int)Event.current.keyCode == 13) { colorPickerHexChangedByUser = false; GUI.FocusControl((string)null); } if ((int)Event.current.type == 0 && GUI.GetNameOfFocusedControl() != "HexInputField") { colorPickerHexChangedByUser = false; } GUILayout.Space(5f); GUILayout.Label("Preview:", Array.Empty<GUILayoutOption>()); Rect rect = GUILayoutUtility.GetRect(60f, 24f); if ((Object)(object)_previewTex == (Object)null) { _previewTex = new Texture2D(1, 1); _previewTex.SetPixel(0, 0, Color.white); _previewTex.Apply(); } Color color2 = GUI.color; GUI.color = colorPickerValue; GUI.DrawTexture(rect, (Texture)(object)_previewTex); GUI.color = color2; GUILayout.Space(10f); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); if (GUILayout.Button("Apply", Array.Empty<GUILayoutOption>())) { Dictionary<string, ConfigEntry<Color>> colorConfigs = ESP.Instance.GetColorConfigs(); if (colorConfigs.ContainsKey(colorPickerKey)) { colorConfigs[colorPickerKey].Value = colorPickerValue; } ESP.Instance.RefreshTokenColorMap(); ESP.Instance.HighlightAllInteractables(); showColorPicker = false; colorPickerKey = null; colorPickerHexChangedByUser = false; } if (GUILayout.Button("Cancel", Array.Empty<GUILayoutOption>())) { showColorPicker = false; colorPickerKey = null; colorPickerHexChangedByUser = false; } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.DragWindow(); } private void DrawToggleButton(string label, Func<bool> getter, Action<bool> setter) { if (GUILayout.Button(label + ": " + (getter() ? "ON" : "OFF"), Array.Empty<GUILayoutOption>())) { setter(!getter()); } } private void DrawKeyBinding(string label, Func<KeyCode> getter, Action<KeyCode> setter, ref bool waiting) { //IL_0011: 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_009e: Unknown result type (might be due to invalid IL or missing references) GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label($"{label}: {getter()}", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(220f) }); if (!waiting) { if (GUILayout.Button("Change", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(80f) })) { waiting = true; } } else { GUILayout.Label("Press any key...", (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(120f) }); if (Event.current.isKey && (int)Event.current.type == 4) { setter(Event.current.keyCode); waiting = false; Event.current.Use(); } } GUILayout.EndHorizontal(); } private void DrawColorSlider(string label, ref float value) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) GUILayout.Label(label, Array.Empty<GUILayoutOption>()); float num = value; value = GUILayout.HorizontalSlider(value, 0f, 1f, Array.Empty<GUILayoutOption>()); if (!colorPickerHexChangedByUser && value != num) { colorPickerHex = ColorToHex(colorPickerValue); } } private string ColorToHex(Color c) { //IL_000d: 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_0037: 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) return $"{(int)(c.r * 255f):X2}{(int)(c.g * 255f):X2}{(int)(c.b * 255f):X2}{(int)(c.a * 255f):X2}"; } private bool TryParseHexColor(string hex, out Color color) { //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) color = Color.white; if (hex.Length == 8) { return ColorUtility.TryParseHtmlString("#" + hex, ref color); } return false; } private GUIStyle GetHeaderStyle() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: 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_001e: Expected O, but got Unknown return new GUIStyle(GUI.skin.label) { richText = true, fontStyle = (FontStyle)1 }; } } public static class InteractableDisplayNames { public static readonly Dictionary<string, string> Map = new Dictionary<string, string> { { "CHEST1_NAME", "Chest" }, { "CHEST2_NAME", "Large Chest" }, { "LOCKBOX_NAME", "Lockbox" }, { "CASINOCHEST_NAME", "Adaptive Chest" }, { "GOLDCHEST_NAME", "Legendary Chest" }, { "CHEST1_STEALTHED_NAME", "Cloaked Chest" }, { "LUNAR_CHEST_NAME", "Lunar Pod" }, { "BARREL_NAME", "Barrel" }, { "EQUIPMENTBARREL_NAME", "Equipment Barrel" }, { "CATEGORYCHEST_HEALING_NAME", "Chest - Healing" }, { "CATEGORYCHEST_DAMAGE_NAME", "Chest - Damage" }, { "CATEGORYCHEST_UTILITY_NAME", "Chest - Utility" }, { "CATEGORYCHEST2_HEALING_NAME", "Large Chest - Healing" }, { "CATEGORYCHEST2_DAMAGE_NAME", "Large Chest - Damage" }, { "CATEGORYCHEST2_UTILITY_NAME", "Large Chest - Utility" }, { "TRIPLE_SHOP", "Shop" }, { "DUPLICATOR_NAME", "3D Printer" }, { "DUPLICATOR_WILD_NAME", "3D Printer - Overgrown" }, { "DUPLICATOR_MILITARY_NAME", "3D Printer - Military" }, { "BAZAAR_CAULDRON_NAME", "Bazaar Cauldron" }, { "SCRAPPER_NAME", "Scrapper" }, { "RADIOTOWER_NAME", "Radio Tower" }, { "TURRET1_INTERACTABLE_NAME", "Gunner Turret" }, { "DRONE_GUNNER_INTERACTABLE_NAME", "Drone - Gunner" }, { "DRONE_HEALING_INTERACTABLE_NAME", "Drone - Healing" }, { "EMERGENCYDRONE_INTERACTABLE_NAME", "Drone - Emergency" }, { "DRONE_MISSILE_INTERACTABLE_NAME", "Drone - Missile" }, { "EQUIPMENTDRONE_INTERACTABLE_NAME", "Drone - Equipment" }, { "FLAMEDRONE_INTERACTABLE_NAME", "Drone - Incinerator" }, { "DRONE_MEGA_INTERACTABLE_NAME", "TC-280" }, { "NEWT_STATUE_NAME", "Newt Statue" }, { "SECRET_BUTTON", "Secret Button" }, { "SHRINE_BLOOD_NAME", "Shrine of Blood" }, { "SHRINE_CHANCE_NAME", "Shrine of Chance" }, { "SHRINE_CLEANSE_NAME", "Cleansing Pool" }, { "SHRINE_COMBAT_NAME", "Shrine of Combat" }, { "SHRINE_GOLDSHORES_NAME", "Altar of Gold" }, { "SHRINE_BOSS_NAME", "Shrine of the Mountain" }, { "SHRINE_RESTACK_NAME", "Shrine of Order" }, { "SHRINE_HEALING_NAME", "Shrine of the Woods" }, { "SHRINE_REBIRTH_NAME", "Shrine of Rebirth" }, { "TELEPORTER_NAME", "Teleporter" }, { "MOON_BATTERY_MASS_NAME", "Pillar of Mass" }, { "MOON_BATTERY_DESIGN_NAME", "Pillar of Design" }, { "MOON_BATTERY_SOUL_NAME", "Pillar of Soul" }, { "MOON_BATTERY_BLOOD_NAME", "Pillar of Blood" }, { "LUNAR_TERMINAL_NAME", "Lunar Bud" }, { "LUNAR_REROLL_NAME", "Reroll Slab" }, { "BAZAAR_SEER_NAME", "Lunar Seer" }, { "VOID_CHEST_NAME", "Void Cradle" }, { "VOID_TRIPLE_NAME", "Void Potential" }, { "VOIDLOCKBOX_NAME", "Encrusted Lockbox" }, { "DEEPVOIDBATTERY_NAME", "Deep Void Signal" }, { "NULL_WARD_NAME", "Cell Vent" }, { "SHRINE_HALCYONITE_NAME", "Halcyon Shrine" }, { "SHRINE_COLOSSUS_NAME", "Shrine of Shaping" }, { "GOLDTOTEM_NAME", "Halcyon Beacon" }, { "FAN_NAME", "Fan" } }; } public class HighlightCleaner : MonoBehaviour { public GameObject target; private float shrineUnavailableSince = -1f; private const float ShrineUnavailableDelay = 3f; private void Update() { if (!Object.op_Implicit((Object)(object)target)) { Object.Destroy((Object)(object)this); return; } PurchaseInteraction component = target.GetComponent<PurchaseInteraction>(); if ((Object)(object)component != (Object)null && (component.displayNameToken.Contains("DUPLICATOR") || component.displayNameToken.Contains("BAZAAR_CAULDRON"))) { return; } ShrineBehavior component2 = target.GetComponent<ShrineBehavior>(); MultiShopController component3 = target.GetComponent<MultiShopController>(); if ((Object)(object)component2 != (Object)null) { if ((Object)(object)component != (Object)null && !component.available) { if (shrineUnavailableSince < 0f) { shrineUnavailableSince = Time.unscaledTime; } if (Time.unscaledTime - shrineUnavailableSince > 3f) { Cleanup(); } } else { shrineUnavailableSince = -1f; } return; } if ((Object)(object)component3 != (Object)null && !component3.available) { Cleanup(); return; } if (!Object.op_Implicit((Object)(object)component) || component.available) { ChestBehavior component4 = target.GetComponent<ChestBehavior>(); if (component4 == null || !component4.isChestOpened) { BarrelInteraction component5 = target.GetComponent<BarrelInteraction>(); if (component5 == null || !component5.opened) { ShopTerminalBehavior component6 = target.GetComponent<ShopTerminalBehavior>(); if (component6 == null || !component6.hasBeenPurchased) { return; } } } } Cleanup(); } private void Cleanup() { Highlight val = default(Highlight); if (target.TryGetComponent<Highlight>(ref val)) { val.isOn = false; Object.Destroy((Object)(object)val); } Transform val2 = target.transform.Find("ESPMarker"); if ((Object)(object)val2 != (Object)null) { Object.Destroy((Object)(object)((Component)val2).gameObject); } Object.Destroy((Object)(object)this); } } public class InteractableLabel : MonoBehaviour { public string Label; public Color Color; public Vector2 BoundingBoxSize = new Vector2(60f, 30f); private Camera _camera; private static Texture2D _lineTexture; public GameObject Interactable { get; set; } public ManualLogSource Logger { get; set; } public ConfigEntry<bool> DrawLabelsConfig { get; set; } public ConfigEntry<bool> DrawBoundingBoxConfig { get; set; } public ConfigEntry<bool> UseAdvancedLabelConfig { get; set; } public ConfigEntry<bool> HighContrastConfig { get; set; } public ConfigEntry<int> LabelFontSizeConfig { get; set; } private void Awake() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) _camera = Camera.main; if ((Object)(object)_lineTexture == (Object)null) { _lineTexture = new Texture2D(1, 1); _lineTexture.SetPixel(0, 0, Color.white); _lineTexture.Apply(); } } private void OnGUI() { //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) //IL_004d: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0078: 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_00d8: 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) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017b: 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_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_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Expected O, but got Unknown //IL_019a: Expected O, but got Unknown //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Expected O, but got Unknown //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Expected O, but got Unknown //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_camera)) { _camera = Camera.main; } if (!Object.op_Implicit((Object)(object)_camera) || !((Behaviour)this).enabled || !((Component)this).gameObject.activeInHierarchy) { return; } Vector3 position = ((Component)this).transform.position; Vector3 val = _camera.WorldToScreenPoint(position); if (val.z <= 0f) { return; } val.y = (float)Screen.height - val.y; Rect rect = default(Rect); ((Rect)(ref rect))..ctor(val.x - BoundingBoxSize.x / 2f, val.y - BoundingBoxSize.y / 2f, BoundingBoxSize.x, BoundingBoxSize.y); ConfigEntry<bool> drawBoundingBoxConfig = DrawBoundingBoxConfig; if (drawBoundingBoxConfig != null && drawBoundingBoxConfig.Value) { DrawRectOutline(rect, Color, 2); } if (DrawLabelsConfig == null || DrawLabelsConfig.Value) { string advancedInfo = GetAdvancedInfo(); float num = Vector3.Distance(((Component)_camera).transform.position, position); string text = $"<color=#{ColorUtility.ToHtmlStringRGB(Color)}>{Label}</color>\n<color=#FFFFFF>{Mathf.RoundToInt(num)}m</color>{advancedInfo}"; GUIStyle val2 = new GUIStyle { fontSize = (LabelFontSizeConfig?.Value ?? 14), alignment = (TextAnchor)1, richText = true, normal = new GUIStyleState { textColor = Color.white } }; Vector2 val3 = val2.CalcSize(new GUIContent(text)); Rect val4 = default(Rect); ((Rect)(ref val4))..ctor(((Rect)(ref rect)).center.x - val3.x / 2f, ((Rect)(ref rect)).yMin - val3.y, val3.x, val3.y); ConfigEntry<bool> highContrastConfig = HighContrastConfig; if (highContrastConfig != null && highContrastConfig.Value) { GUIStyle val5 = new GUIStyle(val2); val5.normal.textColor = Color.black; GUI.Label(new Rect(((Rect)(ref val4)).x - 1f, ((Rect)(ref val4)).y, ((Rect)(ref val4)).width, ((Rect)(ref val4)).height), text, val5); GUI.Label(new Rect(((Rect)(ref val4)).x + 1f, ((Rect)(ref val4)).y, ((Rect)(ref val4)).width, ((Rect)(ref val4)).height), text, val5); GUI.Label(new Rect(((Rect)(ref val4)).x, ((Rect)(ref val4)).y - 1f, ((Rect)(ref val4)).width, ((Rect)(ref val4)).height), text, val5); GUI.Label(new Rect(((Rect)(ref val4)).x, ((Rect)(ref val4)).y + 1f, ((Rect)(ref val4)).width, ((Rect)(ref val4)).height), text, val5); } GUI.Label(val4, text, val2); } } private string GetAdvancedInfo() { //IL_014f: 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_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) if (UseAdvancedLabelConfig == null || !UseAdvancedLabelConfig.Value || (Object)(object)Interactable == (Object)null) { return ""; } string text = ""; PurchaseInteraction component = Interactable.GetComponent<PurchaseInteraction>(); if ((Object)(object)component != (Object)null && !component.displayNameToken.Contains("DUPLICATOR") && !component.displayNameToken.Contains("SHRINE") && !component.displayNameToken.Contains("BAZAAR_CAULDRON") && !component.displayNameToken.Contains("MOON_BATTERY") && !component.displayNameToken.Contains("EQUIPMENTDRONE") && !component.displayNameToken.Contains("NULL_WARD")) { text += $" <color=#FFFFFF>- ${component.cost}</color>"; } if ((Object)(object)component != (Object)null && (component.displayNameToken.Contains("DUPLICATOR") || component.displayNameToken.Contains("BAZAAR_CAULDRON"))) { text += FormatPickup(Interactable.GetComponent<ShopTerminalBehavior>()?.pickupIndex, "\n\n"); } ChestBehavior component2 = Interactable.GetComponent<ChestBehavior>(); if ((Object)(object)component2 != (Object)null) { text += FormatPickup(component2.dropPickup, "\n\n"); } MultiShopController component3 = Interactable.GetComponent<MultiShopController>(); if ((Object)(object)component3 != (Object)null) { text += $" <color=#FFFFFF>- ${component3.cost}</color>\n"; Enumerator<GameObject> enumerator = component3.terminalGameObjects.GetEnumerator(); try { while (enumerator.MoveNext()) { text += FormatPickup(enumerator.Current.GetComponent<ShopTerminalBehavior>()?.pickupIndex); } } finally { ((IDisposable)enumerator).Dispose(); } } return text; } private string FormatPickup(PickupIndex? pickupIndex, string prefix = "\n") { //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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0034: 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_004f: Invalid comparison between Unknown and I4 //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Invalid comparison between Unknown and I4 //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) if (pickupIndex.HasValue) { PickupIndex? val = pickupIndex; PickupIndex none = PickupIndex.none; if (!val.HasValue || !(val.GetValueOrDefault() == none)) { PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex.Value); if (pickupDef == null) { return ""; } if ((int)pickupDef.itemIndex != -1) { ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex); if ((Object)(object)itemDef != (Object)null) { string text = ColorUtility.ToHtmlStringRGB(GetTierColor(itemDef.tier)); string @string = Language.GetString(itemDef.nameToken); return prefix + "<color=#" + text + ">" + @string + "</color>"; } } else if ((int)pickupDef.equipmentIndex != -1) { EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex); if ((Object)(object)equipmentDef != (Object)null) { string text2 = ColorUtility.ToHtmlStringRGB((Color)(equipmentDef.isLunar ? Color.cyan : new Color(1f, 0.5f, 0f))); string string2 = Language.GetString(equipmentDef.nameToken); return prefix + "<color=#" + text2 + ">" + string2 + "</color>"; } } return ""; } } return ""; } private void DrawRectOutline(Rect rect, Color color, int thickness) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: 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_004b: 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_009a: Unknown result type (might be due to invalid IL or missing references) Color color2 = GUI.color; GUI.color = color; GUI.DrawTexture(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMin, ((Rect)(ref rect)).width, (float)thickness), (Texture)(object)_lineTexture); GUI.DrawTexture(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMax - (float)thickness, ((Rect)(ref rect)).width, (float)thickness), (Texture)(object)_lineTexture); GUI.DrawTexture(new Rect(((Rect)(ref rect)).xMin, ((Rect)(ref rect)).yMin, (float)thickness, ((Rect)(ref rect)).height), (Texture)(object)_lineTexture); GUI.DrawTexture(new Rect(((Rect)(ref rect)).xMax - (float)thickness, ((Rect)(ref rect)).yMin, (float)thickness, ((Rect)(ref rect)).height), (Texture)(object)_lineTexture); GUI.color = color2; } private static Color GetTierColor(ItemTier tier) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Expected I4, but got Unknown //IL_002e: 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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: 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_007c: 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_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_00a1: Unknown result type (might be due to invalid IL or missing references) return (Color)((int)tier switch { 0 => Color.white, 1 => Color.green, 2 => Color.red, 4 => Color.yellow, 3 => Color.cyan, 6 => new Color(0.988f, 0.725f, 0.925f), 7 => new Color(0.776f, 0.47f, 0.705f), 8 => new Color(0.584f, 0.043f, 0.458f), _ => Color.white, }); } } public static class Utils { public static string GetTokenForGameObject(GameObject go) { PurchaseInteraction component = go.GetComponent<PurchaseInteraction>(); if ((Object)(object)component != (Object)null) { return component.displayNameToken; } if ((Object)(object)go.GetComponent<BarrelInteraction>() != (Object)null) { return "BARREL_NAME"; } if ((Object)(object)go.GetComponent<ScrapperController>() != (Object)null) { return "SCRAPPER_NAME"; } if ((Object)(object)go.GetComponent<MultiShopController>() != (Object)null) { return "TRIPLE_SHOP"; } if ((Object)(object)go.GetComponent<PressurePlateController>() != (Object)null) { return "SECRET_BUTTON"; } if ((Object)(object)go.GetComponent<TeleporterInteraction>() != (Object)null) { return "TELEPORTER_NAME"; } return null; } } public static class PluginInfo { public const string PluginAuthor = "Floramene"; public const string PluginName = "InteractableESP"; public const string PluginVersion = "1.1.0"; public const string PluginGUID = "Floramene.InteractableESP"; } [BepInPlugin("Floramene.InteractableESP", "InteractableESP", "1.1.0")] public class ESP : BaseUnityPlugin { [CompilerGenerated] private sealed class <GetAllInteractables>d__59 : IEnumerable<GameObject>, IEnumerable, IEnumerator<GameObject>, IEnumerator, IDisposable { private int <>1__state; private GameObject <>2__current; private int <>l__initialThreadId; private PurchaseInteraction[] <>7__wrap1; private int <>7__wrap2; private BarrelInteraction[] <>7__wrap3; private ScrapperController[] <>7__wrap4; private MultiShopController[] <>7__wrap5; private PressurePlateController[] <>7__wrap6; private TeleporterInteraction[] <>7__wrap7; private GenericPickupController[] <>7__wrap8; private GeodeController[] <>7__wrap9; GameObject IEnumerator<GameObject>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <GetAllInteractables>d__59(int <>1__state) { this.<>1__state = <>1__state; <>l__initialThreadId = Environment.CurrentManagedThreadId; } [DebuggerHidden] void IDisposable.Dispose() { <>7__wrap1 = null; <>7__wrap3 = null; <>7__wrap4 = null; <>7__wrap5 = null; <>7__wrap6 = null; <>7__wrap7 = null; <>7__wrap8 = null; <>7__wrap9 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>7__wrap1 = Object.FindObjectsOfType<PurchaseInteraction>(); <>7__wrap2 = 0; goto IL_0086; case 1: <>1__state = -1; <>7__wrap2++; goto IL_0086; case 2: <>1__state = -1; <>7__wrap2++; goto IL_00e9; case 3: <>1__state = -1; <>7__wrap2++; goto IL_014c; case 4: <>1__state = -1; <>7__wrap2++; goto IL_01b1; case 5: <>1__state = -1; <>7__wrap2++; goto IL_0216; case 6: <>1__state = -1; <>7__wrap2++; goto IL_027b; case 7: <>1__state = -1; <>7__wrap2++; goto IL_02e0; case 8: { <>1__state = -1; <>7__wrap2++; break; } IL_0086: if (<>7__wrap2 < <>7__wrap1.Length) { PurchaseInteraction val = <>7__wrap1[<>7__wrap2]; <>2__current = ((Component)val).gameObject; <>1__state = 1; return true; } <>7__wrap1 = null; <>7__wrap3 = Object.FindObjectsOfType<BarrelInteraction>(); <>7__wrap2 = 0; goto IL_00e9; IL_0216: if (<>7__wrap2 < <>7__wrap6.Length) { PressurePlateController val2 = <>7__wrap6[<>7__wrap2]; <>2__current = ((Component)val2).gameObject; <>1__state = 5; return true; } <>7__wrap6 = null; <>7__wrap7 = Object.FindObjectsOfType<TeleporterInteraction>(); <>7__wrap2 = 0; goto IL_027b; IL_00e9: if (<>7__wrap2 < <>7__wrap3.Length) { BarrelInteraction val3 = <>7__wrap3[<>7__wrap2]; <>2__current = ((Component)val3).gameObject; <>1__state = 2; return true; } <>7__wrap3 = null; <>7__wrap4 = Object.FindObjectsOfType<ScrapperController>(); <>7__wrap2 = 0; goto IL_014c; IL_027b: if (<>7__wrap2 < <>7__wrap7.Length) { TeleporterInteraction val4 = <>7__wrap7[<>7__wrap2]; <>2__current = ((Component)val4).gameObject; <>1__state = 6; return true; } <>7__wrap7 = null; <>7__wrap8 = Object.FindObjectsOfType<GenericPickupController>(); <>7__wrap2 = 0; goto IL_02e0; IL_014c: if (<>7__wrap2 < <>7__wrap4.Length) { ScrapperController val5 = <>7__wrap4[<>7__wrap2]; <>2__current = ((Component)val5).gameObject; <>1__state = 3; return true; } <>7__wrap4 = null; <>7__wrap5 = Object.FindObjectsOfType<MultiShopController>(); <>7__wrap2 = 0; goto IL_01b1; IL_02e0: if (<>7__wrap2 < <>7__wrap8.Length) { GenericPickupController val6 = <>7__wrap8[<>7__wrap2]; <>2__current = ((Component)val6).gameObject; <>1__state = 7; return true; } <>7__wrap8 = null; <>7__wrap9 = Object.FindObjectsOfType<GeodeController>(); <>7__wrap2 = 0; break; IL_01b1: if (<>7__wrap2 < <>7__wrap5.Length) { MultiShopController val7 = <>7__wrap5[<>7__wrap2]; <>2__current = ((Component)val7).gameObject; <>1__state = 4; return true; } <>7__wrap5 = null; <>7__wrap6 = Object.FindObjectsOfType<PressurePlateController>(); <>7__wrap2 = 0; goto IL_0216; } if (<>7__wrap2 < <>7__wrap9.Length) { GeodeController val8 = <>7__wrap9[<>7__wrap2]; <>2__current = ((Component)val8).gameObject; <>1__state = 8; return true; } <>7__wrap9 = null; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } [DebuggerHidden] IEnumerator<GameObject> IEnumerable<GameObject>.GetEnumerator() { if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId) { <>1__state = 0; return this; } return new <GetAllInteractables>d__59(0); } [DebuggerHidden] IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable<GameObject>)this).GetEnumerator(); } } private static ManualLogSource _log; private readonly Dictionary<string, ConfigEntry<Color>> _colorConfigs = new Dictionary<string, ConfigEntry<Color>>(); private readonly Dictionary<string, ConfigEntry<bool>> _colorEnabledConfigs = new Dictionary<string, ConfigEntry<bool>>(); private Dictionary<string, Color> _tokenColorMap; private ConfigEntry<KeyCode> _highlightToggleKey; private ConfigEntry<KeyCode> _guiToggleKey; private ConfigEntry<bool> _drawLabels; private ConfigEntry<bool> _drawBoundingBox; private ConfigEntry<bool> _useAdvancedLabel; private ConfigEntry<bool> _highlightInteractables; private ConfigEntry<bool> _highContrastText; private ConfigEntry<int> _labelFontSize; private bool _highlightEnabled = true; public static ESP Instance { get; private set; } public bool DrawLabels { get { return _drawLabels.Value; } set { _drawLabels.Value = value; } } public bool DrawBoundingBox { get { return _drawBoundingBox.Value; } set { _drawBoundingBox.Value = value; } } public bool UseAdvancedLabel { get { return _useAdvancedLabel.Value; } set { _useAdvancedLabel.Value = value; } } public bool HighlightInteractablesEnabled { get { return _highlightInteractables.Value; } set { _highlightInteractables.Value = value; } } public bool HighContrastText { get { return _highContrastText.Value; } set { _highContrastText.Value = value; } } public int LabelFontSize { get { return _labelFontSize.Value; } set { _labelFontSize.Value = value; } } public KeyCode GUIToggleKey { get { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return _guiToggleKey.Value; } set { //IL_0006: Unknown result type (might be due to invalid IL or missing references) _guiToggleKey.Value = value; } } public KeyCode HighlightToggleKey { get { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return _highlightToggleKey.Value; } set { //IL_0006: Unknown result type (might be due to invalid IL or missing references) _highlightToggleKey.Value = value; } } private void Awake() { Instance = this; _log = ((BaseUnityPlugin)this).Logger; _log.LogInfo((object)"Interactable ESP plugin loaded."); InitializeConfig(); Stage.onStageStartGlobal += delegate { ScheduleHighlight(); }; ((Component)this).gameObject.AddComponent<ConfigGUI>(); } private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(_highlightToggleKey.Value)) { _highlightEnabled = !_highlightEnabled; _log.LogInfo((object)("Interactable ESP toggled " + (_highlightEnabled ? "ON" : "OFF"))); ToggleAllHighlights(_highlightEnabled); } } private void ToggleAllHighlights(bool enable) { if (!enable) { Highlight[] array = Object.FindObjectsOfType<Highlight>(); for (int i = 0; i < array.Length; i++) { array[i].isOn = false; } InteractableLabel[] array2 = Object.FindObjectsOfType<InteractableLabel>(); for (int i = 0; i < array2.Length; i++) { Object.Destroy((Object)(object)array2[i]); } } else { HighlightAllInteractables(); } } private void ScheduleHighlight() { ((MonoBehaviour)this).CancelInvoke("HighlightAllInteractables"); ((MonoBehaviour)this).Invoke("HighlightAllInteractables", 2f); } private void InitializeConfig() { //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Expected O, but got Unknown _highlightToggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ToggleHighlightKey", (KeyCode)284, "Key to toggle interactable highlights / labels on/off"); _guiToggleKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("General", "ToggleGUIKey", (KeyCode)285, "Key to open/close the ESP settings GUI"); _highlightInteractables = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HighlightInteractables", true, "Whether to highlight interactable items"); _drawLabels = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DrawLabels", false, "Whether to draw labels on interactables"); _drawBoundingBox = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DrawBoundingBox", false, "Whether to draw a bounding box around interactables"); _useAdvancedLabel = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "UseAdvancedLabel", false, "Whether to show advanced label info (cost, item, etc.)"); _highContrastText = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HighContrastText", false, "Whether to use high contrast text for labels"); _labelFontSize = ((BaseUnityPlugin)this).Config.Bind<int>("General", "LabelFontSize", 14, new ConfigDescription("Font size for the label text", (AcceptableValueBase)(object)new AcceptableValueRange<int>(8, 48), Array.Empty<object>())); _drawLabels.SettingChanged += delegate { UpdateAllLabelsAndBoxes(); }; _drawBoundingBox.SettingChanged += delegate { UpdateAllLabelsAndBoxes(); }; AddColorConfig("Default", "FFFFFFFF", "Default highlight color"); AddColorConfig("Chest", "FFEA04FF", "Chest highlight color"); AddColorConfig("Barrel", "FF5804FF", "Barrel highlight color"); AddColorConfig("Shop", "19FF04FF", "Shop terminal highlight color"); AddColorConfig("Printer", "FF04D9FF", "3D printer highlight color"); AddColorConfig("Lunar", "01FFFFFF", "Lunar Chest / Newt Statue highlight color"); AddColorConfig("Drone", "FF0400FF", "Drone / Turret highlight color"); AddColorConfig("Teleporter", "8E38FFFF", "Teleporter highlight color"); RefreshTokenColorMap(); } private void AddColorConfig(string key, string hex, string desc) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) _colorConfigs[key] = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", key + "Color", HexToColor(hex), desc); _colorEnabledConfigs[key] = ((BaseUnityPlugin)this).Config.Bind<bool>("Colors", key + "Enabled", true, "Enable ESP for " + key + " interactables"); } private static Color HexToColor(string hex) { //IL_001a: 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) Color result = default(Color); if (!ColorUtility.TryParseHtmlString("#" + hex, ref result)) { return Color.white; } return result; } public Dictionary<string, ConfigEntry<Color>> GetColorConfigs() { return _colorConfigs; } public Dictionary<string, ConfigEntry<bool>> GetColorEnabledConfigs() { return _colorEnabledConfigs; } public void HighlightAllInteractables() { if (_highlightEnabled) { HighlightInteractables<PurchaseInteraction>((Func<PurchaseInteraction, string>)((PurchaseInteraction i) => i.displayNameToken)); HighlightInteractables<BarrelInteraction>((Func<BarrelInteraction, string>)((BarrelInteraction _) => "BARREL_NAME")); HighlightInteractables<ScrapperController>((Func<ScrapperController, string>)((ScrapperController _) => "SCRAPPER_NAME")); HighlightInteractables<MultiShopController>((Func<MultiShopController, string>)((MultiShopController _) => "TRIPLE_SHOP")); HighlightInteractables<PressurePlateController>((Func<PressurePlateController, string>)((PressurePlateController _) => "SECRET_BUTTON")); HighlightInteractables<TeleporterInteraction>((Func<TeleporterInteraction, string>)((TeleporterInteraction _) => "TELEPORTER_NAME")); HighlightInteractables<GenericPickupController>((Func<GenericPickupController, string>)((GenericPickupController i) => i.GetDisplayName())); HighlightInteractables<GeodeController>((Func<GeodeController, string>)((GeodeController i) => i.GetDisplayName())); } } private void HighlightInteractables<T>(Func<T, string> tokenSelector) where T : Component { T[] array = Object.FindObjectsOfType<T>(); foreach (T val in array) { HighlightInteractable(((Component)val).gameObject, tokenSelector(val)); } } private void HighlightInteractable(GameObject interactable, string token) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: 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_0127: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)interactable)) { return; } string colorGroupForToken = GetColorGroupForToken(token); if (colorGroupForToken != null && !_colorEnabledConfigs[colorGroupForToken].Value) { return; } Color value; Color val = (_tokenColorMap.TryGetValue(token, out value) ? value : _colorConfigs["Default"].Value); if (HighlightInteractablesEnabled) { Highlight val2 = interactable.GetComponent<Highlight>() ?? interactable.AddComponent<Highlight>(); ((Behaviour)val2).enabled = (val2.isOn = true); if (!Object.op_Implicit((Object)(object)val2.targetRenderer)) { val2.targetRenderer = GetRendererForInteractable(interactable, token); if (!Object.op_Implicit((Object)(object)val2.targetRenderer)) { _log.LogWarning((object)("No renderer for " + ((Object)interactable).name)); return; } } val2.strength = 1f; val2.highlightColor = (HighlightColor)3; val2.CustomColor = val; } (interactable.GetComponent<HighlightCleaner>() ?? interactable.AddComponent<HighlightCleaner>()).target = interactable; if (!(token == "MULTISHOP_TERMINAL_NAME")) { bool needLabel = _drawLabels.Value || _drawBoundingBox.Value; UpdateLabelForInteractable(interactable, token, needLabel, val); } } public void UpdateAllLabelsAndBoxes() { //IL_0054: 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) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) foreach (GameObject allInteractable in GetAllInteractables()) { string tokenForGameObject = Utils.GetTokenForGameObject(allInteractable); if (!(tokenForGameObject == "`")) { Color value; Color color = ((_tokenColorMap != null && tokenForGameObject != null && _tokenColorMap.TryGetValue(tokenForGameObject, out value)) ? value : _colorConfigs["Default"].Value); bool needLabel = _drawLabels.Value || _drawBoundingBox.Value; UpdateLabelForInteractable(allInteractable, tokenForGameObject, needLabel, color); } } } private void UpdateLabelForInteractable(GameObject interactable, string token, bool needLabel, Color color) { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) if (token == "MULTISHOP_TERMINAL_NAME") { return; } Transform val = interactable.transform.Find("ESPMarker") ?? CreateMarker(interactable.transform); InteractableLabel interactableLabel = ((Component)val).GetComponent<InteractableLabel>(); if (needLabel) { if ((Object)(object)interactableLabel == (Object)null) { interactableLabel = ((Component)val).gameObject.AddComponent<InteractableLabel>(); } string value; string label = (InteractableDisplayNames.Map.TryGetValue(token, out value) ? value : token); interactableLabel.Label = label; interactableLabel.Color = color; interactableLabel.BoundingBoxSize = new Vector2(40f, 40f); interactableLabel.Interactable = interactable; interactableLabel.Logger = _log; interactableLabel.DrawLabelsConfig = _drawLabels; interactableLabel.DrawBoundingBoxConfig = _drawBoundingBox; interactableLabel.UseAdvancedLabelConfig = _useAdvancedLabel; interactableLabel.HighContrastConfig = _highContrastText; interactableLabel.LabelFontSizeConfig = _labelFontSize; } else if ((Object)(object)interactableLabel != (Object)null) { Object.Destroy((Object)(object)interactableLabel); } } private static Renderer GetRendererForInteractable(GameObject interactable, string token) { if (token == "BARREL_NAME") { ModelLocator component = interactable.GetComponent<ModelLocator>(); Transform val = ((component != null) ? component.modelTransform : null); if (!Object.op_Implicit((Object)(object)val)) { return null; } return ((Component)val).GetComponentInChildren<Renderer>(true); } return interactable.GetComponentInChildren<Renderer>(); } private static Transform CreateMarker(Transform parent) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("ESPMarker"); val.transform.SetParent(parent, false); val.transform.localPosition = Vector3.up * 1f; return val.transform; } private string GetColorGroupForToken(string token) { //IL_0026: 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) foreach (KeyValuePair<string, ConfigEntry<Color>> colorConfig in _colorConfigs) { if (_tokenColorMap.TryGetValue(token, out var value) && value == colorConfig.Value.Value) { return colorConfig.Key; } } return null; } public void RefreshTokenColorMap() { //IL_001c: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_03dc: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_049c: Unknown result type (might be due to invalid IL or missing references) //IL_04bc: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04fc: Unknown result type (might be due to invalid IL or missing references) //IL_051c: Unknown result type (might be due to invalid IL or missing references) _tokenColorMap = new Dictionary<string, Color> { { "CHEST1_NAME", _colorConfigs["Chest"].Value }, { "CHEST2_NAME", _colorConfigs["Chest"].Value }, { "LOCKBOX_NAME", _colorConfigs["Chest"].Value }, { "CASINOCHEST_NAME", _colorConfigs["Chest"].Value }, { "GOLDCHEST_NAME", _colorConfigs["Chest"].Value }, { "CHEST1_STEALTHED_NAME", _colorConfigs["Chest"].Value }, { "LUNAR_CHEST_NAME", _colorConfigs["Lunar"].Value }, { "BARREL_NAME", _colorConfigs["Barrel"].Value }, { "EQUIPMENTBARREL_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST_HEALING_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST_DAMAGE_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST_UTILITY_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST2_HEALING_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST2_DAMAGE_NAME", _colorConfigs["Chest"].Value }, { "CATEGORYCHEST2_UTILITY_NAME", _colorConfigs["Chest"].Value }, { "MULTISHOP_TERMINAL_NAME", _colorConfigs["Shop"].Value }, { "TRIPLE_SHOP", _colorConfigs["Shop"].Value }, { "DUPLICATOR_NAME", _colorConfigs["Printer"].Value }, { "DUPLICATOR_WILD_NAME", _colorConfigs["Printer"].Value }, { "DUPLICATOR_MILITARY_NAME", _colorConfigs["Printer"].Value }, { "BAZAAR_CAULDRON_NAME", _colorConfigs["Printer"].Value }, { "SCRAPPER_NAME", _colorConfigs["Printer"].Value }, { "RADIOTOWER_NAME", _colorConfigs["Drone"].Value }, { "TURRET1_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "DRONE_GUNNER_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "DRONE_HEALING_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "EMERGENCYDRONE_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "DRONE_MISSILE_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "EQUIPMENTDRONE_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "FLAMEDRONE_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "DRONE_MEGA_INTERACTABLE_NAME", _colorConfigs["Drone"].Value }, { "NEWT_STATUE_NAME", _colorConfigs["Lunar"].Value }, { "SECRET_BUTTON", _colorConfigs["Lunar"].Value }, { "MOON_BATTERY_MASS_NAME", _colorConfigs["Lunar"].Value }, { "MOON_BATTERY_DESIGN_NAME", _colorConfigs["Lunar"].Value }, { "MOON_BATTERY_SOUL_NAME", _colorConfigs["Lunar"].Value }, { "MOON_BATTERY_BLOOD_NAME", _colorConfigs["Lunar"].Value }, { "LUNAR_TERMINAL_NAME", _colorConfigs["Lunar"].Value }, { "LUNAR_REROLL_NAME", _colorConfigs["Lunar"].Value }, { "BAZAAR_SEER_NAME", _colorConfigs["Lunar"].Value }, { "TELEPORTER_NAME", _colorConfigs["Teleporter"].Value } }; } [IteratorStateMachine(typeof(<GetAllInteractables>d__59))] private IEnumerable<GameObject> GetAllInteractables() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <GetAllInteractables>d__59(-2); } public void RemoveHighlightsAndLabelsForColorGroup(string colorGroup) { Highlight[] array = Object.FindObjectsOfType<Highlight>(); foreach (Highlight val in array) { string tokenForGameObject = Utils.GetTokenForGameObject(((Component)val).gameObject); if (tokenForGameObject != null && GetColorGroupForToken(tokenForGameObject) == colorGroup) { val.isOn = false; Object.Destroy((Object)(object)val); } } InteractableLabel[] array2 = Object.FindObjectsOfType<InteractableLabel>(); foreach (InteractableLabel interactableLabel in array2) { GameObject interactable = interactableLabel.Interactable; if (!((Object)(object)interactable == (Object)null)) { string tokenForGameObject2 = Utils.GetTokenForGameObject(interactable); if (tokenForGameObject2 != null && GetColorGroupForToken(tokenForGameObject2) == colorGroup) { Object.Destroy((Object)(object)interactableLabel); } } } } } }