Decompiled source of Locater v1.3.1

Locater.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.UI;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Locater")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Locater")]
[assembly: AssemblyTitle("Locater")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Locater;

[BepInPlugin("com.Hyru.Locater", "Locater", "1.3.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Locater : BaseUnityPlugin
{
	private ConfigEntry<bool> showNewtAltar;

	private ConfigEntry<bool> showCombatShrine;

	private ConfigEntry<bool> showMountainShrine;

	private ConfigEntry<bool> showBloodShrine;

	private ConfigEntry<bool> showChanceShrine;

	private ConfigEntry<bool> showOrderShrine;

	private ConfigEntry<bool> showShapingShrine;

	private ConfigEntry<bool> showHalcyoniteShrine;

	private ConfigEntry<bool> showVoidCradle;

	private ConfigEntry<bool> showTeleporter;

	private ConfigEntry<bool> showScrapper;

	private ConfigEntry<bool> show3DPrinter;

	private ConfigEntry<bool> showCategoryChests;

	internal ConfigEntry<float> markerYOffset;

	private ConfigEntry<float> markerScale;

	private ConfigEntry<Color> newtAltarColor;

	private ConfigEntry<Color> combatShrineColor;

	private ConfigEntry<Color> mountainShrineColor;

	private ConfigEntry<Color> bloodShrineColor;

	private ConfigEntry<Color> chanceShrineColor;

	private ConfigEntry<Color> orderShrineColor;

	private ConfigEntry<Color> shapingShrineColor;

	private ConfigEntry<Color> halcyoniteShrineColor;

	private ConfigEntry<Color> voidCradleColor;

	private ConfigEntry<Color> teleporterColor;

	private ConfigEntry<Color> scrapperColor;

	private ConfigEntry<Color> threeDPrinterColor;

	private ConfigEntry<Color> whiteChestColor;

	private ConfigEntry<Color> greenChestColor;

	private ConfigEntry<Color> redChestColor;

	private ConfigEntry<Color> categoryChestColor;

	private ConfigEntry<Color> tripleShopColor;

	private ConfigEntry<Color> stealthChestColor;

	private ConfigEntry<Color> equipmentBarrelColor;

	private ConfigEntry<Color> lunarChestColor;

	private ConfigEntry<Color> lockboxColor;

	private ConfigEntry<Color> casinoChestColor;

	internal Dictionary<GameObject, GameObject> shrineIndicators = new Dictionary<GameObject, GameObject>();

	public bool markersHidden;

	private Harmony _harmony;

	private void Awake()
	{
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Expected O, but got Unknown
		((BaseUnityPlugin)this).Logger.LogInfo((object)"Locater loaded!");
		InitializeConfig();
		SetupRiskOfOptions();
		Stage.onStageStartGlobal += OnStageStart;
		RoR2Application.onUpdate += OnUpdate;
		_harmony = new Harmony("com.Hyru.Locater");
		_harmony.PatchAll();
	}

	private void InitializeConfig()
	{
		//IL_020d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0237: Unknown result type (might be due to invalid IL or missing references)
		//IL_0261: Unknown result type (might be due to invalid IL or missing references)
		//IL_028b: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
		//IL_02df: Unknown result type (might be due to invalid IL or missing references)
		//IL_0309: Unknown result type (might be due to invalid IL or missing references)
		//IL_0333: Unknown result type (might be due to invalid IL or missing references)
		//IL_035d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0387: 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_03db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0405: Unknown result type (might be due to invalid IL or missing references)
		//IL_042f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0459: Unknown result type (might be due to invalid IL or missing references)
		//IL_0483: Unknown result type (might be due to invalid IL or missing references)
		//IL_04ad: Unknown result type (might be due to invalid IL or missing references)
		//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
		//IL_0501: Unknown result type (might be due to invalid IL or missing references)
		//IL_052b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0555: Unknown result type (might be due to invalid IL or missing references)
		//IL_057f: Unknown result type (might be due to invalid IL or missing references)
		showNewtAltar = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Newt Altar", true, "Whether to show indicators for Newt Altars");
		showCombatShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of Combat", true, "Whether to show indicators for Shrines of Combat");
		showMountainShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of the Mountain", true, "Whether to show indicators for Shrines of the Mountain");
		showBloodShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of Blood", true, "Whether to show indicators for Shrines of Blood");
		showChanceShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of Chance", true, "Whether to show indicators for Shrines of Chance");
		showOrderShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of Order", true, "Whether to show indicators for Shrines of Order");
		showShapingShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Shrine of Shaping", true, "Whether to show indicators for Shrines of Shaping");
		showHalcyoniteShrine = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Halcyonite Shrine", true, "Whether to show indicators for Halcyonite Shrines");
		showVoidCradle = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Void Cradles", true, "Whether to show indicators for Void Cradles");
		showTeleporter = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Teleporters", true, "Whether to show indicators for Teleporters");
		showCategoryChests = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Chests", true, "Whether to show indicators for Chests");
		showScrapper = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show Scrappers", true, "Whether to show indicators for Scrappers");
		show3DPrinter = ((BaseUnityPlugin)this).Config.Bind<bool>("Interactables", "Show 3D Printers", true, "Whether to show indicators for 3D Printers");
		markerYOffset = ((BaseUnityPlugin)this).Config.Bind<float>("Positioning", "Marker Y Offset", 0f, "Y-axis offset for markers (-100 to 100). Default: 0)");
		markerScale = ((BaseUnityPlugin)this).Config.Bind<float>("Positioning", "Marker Scale", -3f, "Scale for markers (-10 to 10). Default: -3");
		newtAltarColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Newt Altar Color", HexToColor("7A92C7"), "Color for Newt Altar marker. Default: #7A92C7");
		combatShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Combat Shrine Color", HexToColor("F980EE"), "Color for Combat Shrine marker. Default: #F980EE");
		mountainShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Mountain Shrine Color", HexToColor("47DBF7"), "Color for Mountain Shrine marker. Default: #47DBF7");
		bloodShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Blood Shrine Color", HexToColor("FF7274"), "Color for Blood Shrine marker. Default: #FF7274");
		chanceShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Chance Shrine Color", HexToColor("E0E69B"), "Color for Chance Shrine marker. Default: #E0E69B");
		orderShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Order Shrine Color", HexToColor("EACCE8"), "Color for Order Shrine marker. Default: #EACCE8");
		shapingShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Shaping Shrine Color", HexToColor("C8C7B2"), "Color for Shaping Shrine marker. Default: #C8C7B2");
		halcyoniteShrineColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Halcyonite Shrine Color", HexToColor("44C668"), "Color for Halcyonite Shrine marker. Default: #44C668");
		voidCradleColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Void Cradle Color", HexToColor("E709D2"), "Color for Void Cradle marker. Default: #E709D2");
		teleporterColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Teleporter Color", HexToColor("FDFF00"), "Color for Teleporter marker. Default: #FDFF00");
		whiteChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "White Chest Color", HexToColor("FFFFFF"), "Color for White Chest marker. Default: #FFFFFF");
		greenChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Green Chest Color", HexToColor("00FF00"), "Color for Green Chest marker. Default: #00FF00");
		redChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Red Chest Color", HexToColor("FF0000"), "Color for Red Chest marker. Default: #FF0000");
		categoryChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Category Chest Color", HexToColor("A020F0"), "Color for Category Chest marker. Default: #A020F0");
		tripleShopColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Triple Shop Color", HexToColor("FFFFFF"), "Color for Triple Shop marker. Default: #FFFFFF");
		stealthChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Stealth Chest Color", HexToColor("960006"), "Color for Stealth Chest marker. Default: #960006");
		equipmentBarrelColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Equipment Barrel Color", HexToColor("FFA500"), "Color for Equipment Barrel marker. Default: #FFA500");
		lockboxColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Lockbox Color", HexToColor("FEF90A"), "Color for Key Lockbox marker. Default: #FEF90A");
		casinoChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Casino Chest Color", HexToColor("FFFFFF"), "Color for Casino Chest marker. Default: #FFFFFF");
		lunarChestColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Lunar Pod Color", HexToColor("0000FF"), "Color for Lunar Pod marker. Default: #0000FF");
		scrapperColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "Scrapper Color", HexToColor("009900"), "Color for Scrapper marker. Default: #009900");
		threeDPrinterColor = ((BaseUnityPlugin)this).Config.Bind<Color>("Colors", "3D Printer Color", HexToColor("964B00"), "Color for 3D Printer marker. Default: #964B00");
		showNewtAltar.SettingChanged += OnConfigChanged;
		showCombatShrine.SettingChanged += OnConfigChanged;
		showMountainShrine.SettingChanged += OnConfigChanged;
		showBloodShrine.SettingChanged += OnConfigChanged;
		showChanceShrine.SettingChanged += OnConfigChanged;
		showOrderShrine.SettingChanged += OnConfigChanged;
		showShapingShrine.SettingChanged += OnConfigChanged;
		showHalcyoniteShrine.SettingChanged += OnConfigChanged;
		showVoidCradle.SettingChanged += OnConfigChanged;
		showTeleporter.SettingChanged += OnConfigChanged;
		showScrapper.SettingChanged += OnConfigChanged;
		showCategoryChests.SettingChanged += OnConfigChanged;
		show3DPrinter.SettingChanged += OnConfigChanged;
		markerYOffset.SettingChanged += OnPositioningChanged;
		markerScale.SettingChanged += OnPositioningChanged;
		newtAltarColor.SettingChanged += OnColorChanged;
		combatShrineColor.SettingChanged += OnColorChanged;
		mountainShrineColor.SettingChanged += OnColorChanged;
		bloodShrineColor.SettingChanged += OnColorChanged;
		chanceShrineColor.SettingChanged += OnColorChanged;
		orderShrineColor.SettingChanged += OnColorChanged;
		shapingShrineColor.SettingChanged += OnColorChanged;
		halcyoniteShrineColor.SettingChanged += OnColorChanged;
		voidCradleColor.SettingChanged += OnColorChanged;
		teleporterColor.SettingChanged += OnColorChanged;
		whiteChestColor.SettingChanged += OnColorChanged;
		greenChestColor.SettingChanged += OnColorChanged;
		redChestColor.SettingChanged += OnColorChanged;
		categoryChestColor.SettingChanged += OnColorChanged;
		tripleShopColor.SettingChanged += OnColorChanged;
		stealthChestColor.SettingChanged += OnColorChanged;
		equipmentBarrelColor.SettingChanged += OnColorChanged;
		lockboxColor.SettingChanged += OnColorChanged;
		casinoChestColor.SettingChanged += OnColorChanged;
		lunarChestColor.SettingChanged += OnColorChanged;
		scrapperColor.SettingChanged += OnColorChanged;
		threeDPrinterColor.SettingChanged += OnColorChanged;
	}

	private void SetupRiskOfOptions()
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Expected O, but got Unknown
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Expected O, but got Unknown
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0066: Expected O, but got Unknown
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0076: Expected O, but got Unknown
		//IL_007c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0086: Expected O, but got Unknown
		//IL_008c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0096: Expected O, but got Unknown
		//IL_009c: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a6: Expected O, but got Unknown
		//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: Expected O, but got Unknown
		//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c6: Expected O, but got Unknown
		//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d6: Expected O, but got Unknown
		//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e6: Expected O, but got Unknown
		//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f6: Expected O, but got Unknown
		//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0106: Expected O, but got Unknown
		//IL_010c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0111: 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_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_0137: Expected O, but got Unknown
		//IL_0132: Unknown result type (might be due to invalid IL or missing references)
		//IL_013c: Expected O, but got Unknown
		//IL_0142: Unknown result type (might be due to invalid IL or missing references)
		//IL_0147: 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_015d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016d: Expected O, but got Unknown
		//IL_0168: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: Expected O, but got Unknown
		//IL_0178: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Expected O, but got Unknown
		//IL_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_0192: Expected O, but got Unknown
		//IL_0198: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Expected O, but got Unknown
		//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b2: Expected O, but got Unknown
		//IL_01b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c2: Expected O, but got Unknown
		//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d2: Expected O, but got Unknown
		//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e2: Expected O, but got Unknown
		//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f2: Expected O, but got Unknown
		//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0202: Expected O, but got Unknown
		//IL_0208: Unknown result type (might be due to invalid IL or missing references)
		//IL_0212: Expected O, but got Unknown
		//IL_0218: Unknown result type (might be due to invalid IL or missing references)
		//IL_0222: Expected O, but got Unknown
		//IL_0228: Unknown result type (might be due to invalid IL or missing references)
		//IL_0232: Expected O, but got Unknown
		//IL_0238: Unknown result type (might be due to invalid IL or missing references)
		//IL_0242: Expected O, but got Unknown
		//IL_0248: Unknown result type (might be due to invalid IL or missing references)
		//IL_0252: Expected O, but got Unknown
		//IL_0258: Unknown result type (might be due to invalid IL or missing references)
		//IL_0262: Expected O, but got Unknown
		//IL_0268: Unknown result type (might be due to invalid IL or missing references)
		//IL_0272: Expected O, but got Unknown
		//IL_0278: Unknown result type (might be due to invalid IL or missing references)
		//IL_0282: Expected O, but got Unknown
		//IL_0288: Unknown result type (might be due to invalid IL or missing references)
		//IL_0292: Expected O, but got Unknown
		//IL_0298: Unknown result type (might be due to invalid IL or missing references)
		//IL_02a2: Expected O, but got Unknown
		//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b2: Expected O, but got Unknown
		//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02c2: Expected O, but got Unknown
		//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d2: Expected O, but got Unknown
		ModSettingsManager.SetModDescription("Locater adds globally visible indicators to most interactables in the game. Use these options to customize those indicators.");
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "iconmm.png");
		Sprite val = LoadCustomSprite(filePath);
		if ((Object)(object)val != (Object)null)
		{
			ModSettingsManager.SetModIcon(val);
		}
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showNewtAltar));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showCombatShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showMountainShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showBloodShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showChanceShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showOrderShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showShapingShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showHalcyoniteShrine));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showVoidCradle));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showTeleporter));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showCategoryChests));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(showScrapper));
		ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(show3DPrinter));
		ModSettingsManager.AddOption((BaseOption)new StepSliderOption(markerYOffset, new StepSliderConfig
		{
			min = -100f,
			max = 100f,
			increment = 1f
		}));
		ModSettingsManager.AddOption((BaseOption)new StepSliderOption(markerScale, new StepSliderConfig
		{
			min = -10f,
			max = 10f,
			increment = 0.1f
		}));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(newtAltarColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(combatShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(mountainShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(bloodShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(chanceShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(orderShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(shapingShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(halcyoniteShrineColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(voidCradleColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(teleporterColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(whiteChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(greenChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(redChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(categoryChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(tripleShopColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(stealthChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(equipmentBarrelColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(lockboxColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(casinoChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(lunarChestColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(scrapperColor));
		ModSettingsManager.AddOption((BaseOption)new ColorOption(threeDPrinterColor));
	}

	private void OnUpdate()
	{
		if ((Input.GetKey((KeyCode)306) || Input.GetKey((KeyCode)305)) && Input.GetKeyDown((KeyCode)104))
		{
			markersHidden = !markersHidden;
			ToggleAllMarkers(markersHidden);
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Markers " + (markersHidden ? "hidden" : "shown")));
		}
	}

	private void ToggleAllMarkers(bool hidden)
	{
		markersHidden = hidden;
		foreach (GameObject value in shrineIndicators.Values)
		{
			if ((Object)(object)value != (Object)null)
			{
				value.SetActive(!hidden);
			}
		}
		((BaseUnityPlugin)this).Logger.LogInfo((object)("Markers " + (hidden ? "hidden" : "shown")));
	}

	private void OnStageStart(Stage stage)
	{
		//IL_00f9: 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)
		//IL_012a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0140: Unknown result type (might be due to invalid IL or missing references)
		//IL_0145: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ee: 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)
		//IL_021f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: Unknown result type (might be due to invalid IL or missing references)
		//IL_023a: Unknown result type (might be due to invalid IL or missing references)
		//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_031e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0323: Unknown result type (might be due to invalid IL or missing references)
		//IL_0339: Unknown result type (might be due to invalid IL or missing references)
		//IL_033e: Unknown result type (might be due to invalid IL or missing references)
		//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0426: Unknown result type (might be due to invalid IL or missing references)
		//IL_042b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0441: Unknown result type (might be due to invalid IL or missing references)
		//IL_0446: Unknown result type (might be due to invalid IL or missing references)
		//IL_0600: Unknown result type (might be due to invalid IL or missing references)
		//IL_062c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0631: Unknown result type (might be due to invalid IL or missing references)
		//IL_0647: Unknown result type (might be due to invalid IL or missing references)
		//IL_064c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_051e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0523: Unknown result type (might be due to invalid IL or missing references)
		//IL_0539: Unknown result type (might be due to invalid IL or missing references)
		//IL_053e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0708: Unknown result type (might be due to invalid IL or missing references)
		//IL_0734: Unknown result type (might be due to invalid IL or missing references)
		//IL_0739: Unknown result type (might be due to invalid IL or missing references)
		//IL_074f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0754: Unknown result type (might be due to invalid IL or missing references)
		//IL_0810: Unknown result type (might be due to invalid IL or missing references)
		//IL_083c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0841: Unknown result type (might be due to invalid IL or missing references)
		//IL_0857: Unknown result type (might be due to invalid IL or missing references)
		//IL_085c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f3f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f6b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f70: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f86: Unknown result type (might be due to invalid IL or missing references)
		//IL_0f8b: Unknown result type (might be due to invalid IL or missing references)
		//IL_1039: Unknown result type (might be due to invalid IL or missing references)
		//IL_1065: Unknown result type (might be due to invalid IL or missing references)
		//IL_106a: Unknown result type (might be due to invalid IL or missing references)
		//IL_1080: Unknown result type (might be due to invalid IL or missing references)
		//IL_1085: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bf0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bf5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c0b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c10: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c2c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c31: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c47: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c4c: Unknown result type (might be due to invalid IL or missing references)
		//IL_1148: Unknown result type (might be due to invalid IL or missing references)
		//IL_1174: Unknown result type (might be due to invalid IL or missing references)
		//IL_1179: Unknown result type (might be due to invalid IL or missing references)
		//IL_118f: Unknown result type (might be due to invalid IL or missing references)
		//IL_1194: Unknown result type (might be due to invalid IL or missing references)
		//IL_0df9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e25: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e2a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e40: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e45: Unknown result type (might be due to invalid IL or missing references)
		//IL_1276: Unknown result type (might be due to invalid IL or missing references)
		//IL_12a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_12a7: Unknown result type (might be due to invalid IL or missing references)
		//IL_12bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_12c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b0c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b38: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b3d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b53: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b58: Unknown result type (might be due to invalid IL or missing references)
		//IL_1392: Unknown result type (might be due to invalid IL or missing references)
		//IL_13be: Unknown result type (might be due to invalid IL or missing references)
		//IL_13c3: Unknown result type (might be due to invalid IL or missing references)
		//IL_13d9: Unknown result type (might be due to invalid IL or missing references)
		//IL_13de: Unknown result type (might be due to invalid IL or missing references)
		SceneDef sceneDef = stage.sceneDef;
		string text = ((sceneDef != null) ? sceneDef.cachedName : null) ?? "Unknown";
		((BaseUnityPlugin)this).Logger.LogInfo((object)("Stage started: " + text));
		if (text.ToLower().Contains("bazaar"))
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"Bazaar stage detected, skipping Newt altar indicator.");
			return;
		}
		RoR2Application.onNextUpdate += delegate
		{
			((MonoBehaviour)this).StartCoroutine(DelayedInteractableScan());
		};
		shrineIndicators.Clear();
		List<PurchaseInteraction> instancesList = InstanceTracker.GetInstancesList<PurchaseInteraction>();
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found {instancesList.Count} interactables with PurchaseInteraction in scene");
		if (showNewtAltar.Value)
		{
			int num = 0;
			PortalStatueBehavior[] array = Object.FindObjectsOfType<PortalStatueBehavior>();
			int num2 = 0;
			if (num2 < array.Length)
			{
				GameObject gameObject = ((Component)array[num2]).gameObject;
				num++;
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Newt altar #{num}: {((Object)gameObject).name} at {gameObject.transform.position} (ID: {((Object)gameObject).GetInstanceID()})");
				CreateAltarIndicator(gameObject.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject);
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Newt altars found: {num}");
		}
		if (showCombatShrine.Value)
		{
			int num3 = 0;
			foreach (PurchaseInteraction item in instancesList)
			{
				GameObject gameObject2 = ((Component)item).gameObject;
				if ((Object)(object)gameObject2.GetComponent<ShrineCombatBehavior>() != (Object)null)
				{
					num3++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Combat Shrine #{num3}: {((Object)gameObject2).name} at {gameObject2.transform.position} (ID: {((Object)gameObject2).GetInstanceID()})");
					CreateCombatShrineIndicator(gameObject2.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject2);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Combat Shrines found: {num3}");
		}
		if (showMountainShrine.Value)
		{
			int num4 = 0;
			foreach (PurchaseInteraction item2 in instancesList)
			{
				GameObject gameObject3 = ((Component)item2).gameObject;
				if ((Object)(object)gameObject3.GetComponent<ShrineBossBehavior>() != (Object)null)
				{
					num4++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Mountain Shrine #{num4}: {((Object)gameObject3).name} at {gameObject3.transform.position} (ID: {((Object)gameObject3).GetInstanceID()})");
					CreateMountainShrineIndicator(gameObject3.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject3);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Mountain Shrines found: {num4}");
		}
		if (showBloodShrine.Value)
		{
			int num5 = 0;
			foreach (PurchaseInteraction item3 in instancesList)
			{
				GameObject gameObject4 = ((Component)item3).gameObject;
				if (((Object)gameObject4).name.Contains("ShrineBlood"))
				{
					num5++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Blood Shrine #{num5}: {((Object)gameObject4).name} at {gameObject4.transform.position} (ID: {((Object)gameObject4).GetInstanceID()})");
					CreateBloodShrineIndicator(gameObject4.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject4);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Blood Shrines found: {num5}");
		}
		if (showChanceShrine.Value)
		{
			int num6 = 0;
			foreach (PurchaseInteraction item4 in instancesList)
			{
				GameObject gameObject5 = ((Component)item4).gameObject;
				if (((Object)gameObject5).name.StartsWith("ShrineChance") && (Object)(object)gameObject5.GetComponent<ShrineChanceBehavior>() != (Object)null)
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Shrine of Chance: {((Object)gameObject5).name} at {gameObject5.transform.position} (ID: {((Object)gameObject5).GetInstanceID()})");
					CreateChanceShrineIndicator(gameObject5.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject5);
					num6++;
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Chance Shrines found: {num6}");
		}
		if (showOrderShrine.Value)
		{
			int num7 = 0;
			foreach (PurchaseInteraction item5 in instancesList)
			{
				GameObject gameObject6 = ((Component)item5).gameObject;
				if (((Object)gameObject6).name.Contains("ShrineRestack"))
				{
					num7++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Order Shrine #{num7}: {((Object)gameObject6).name} at {gameObject6.transform.position} (ID: {((Object)gameObject6).GetInstanceID()})");
					CreateOrderShrineIndicator(gameObject6.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject6);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Order Shrines found: {num7}");
		}
		if (showShapingShrine.Value)
		{
			int num8 = 0;
			foreach (PurchaseInteraction item6 in instancesList)
			{
				GameObject gameObject7 = ((Component)item6).gameObject;
				if (((Object)gameObject7).name.Contains("ShrineColossusAccess"))
				{
					num8++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Shaping Shrine #{num8}: {((Object)gameObject7).name} at {gameObject7.transform.position} (ID: {((Object)gameObject7).GetInstanceID()})");
					CreateShapingShrineIndicator(gameObject7.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject7);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Shaping Shrines found: {num8}");
		}
		if (showHalcyoniteShrine.Value)
		{
			int num9 = 0;
			foreach (PurchaseInteraction item7 in instancesList)
			{
				GameObject gameObject8 = ((Component)item7).gameObject;
				if (((Object)gameObject8).name.Contains("ShrineHalcyonite"))
				{
					num9++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Halcyonite Shrine #{num9}: {((Object)gameObject8).name} at {gameObject8.transform.position} (ID: {((Object)gameObject8).GetInstanceID()})");
					CreateHalcyoniteShrineIndicator(gameObject8.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject8);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Halcyonite Shrines found: {num9}");
		}
		if (showCategoryChests.Value)
		{
			int num10 = 0;
			foreach (PurchaseInteraction item8 in instancesList)
			{
				GameObject gameObject9 = ((Component)item8).gameObject;
				((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Checking object: " + ((Object)gameObject9).name + " for chest detection"));
				bool flag = false;
				string text2 = "Unknown";
				bool flag2 = ((Object)gameObject9).name.Contains("VoidChest") || ((Object)gameObject9).name.Contains("VoidCradle") || (Object)(object)gameObject9.GetComponent("OptionChestBehavior") != (Object)null;
				if (((Object)gameObject9).name.Contains("Chest1") && !((Object)gameObject9).name.Contains("StealthedVariant"))
				{
					flag = true;
					text2 = "Chest1";
				}
				else if (((Object)gameObject9).name.Contains("Chest2") && !((Object)gameObject9).name.Contains("Category"))
				{
					flag = true;
					text2 = "Chest2";
				}
				else if (((Object)gameObject9).name.Contains("GoldChest"))
				{
					flag = true;
					text2 = "GoldChest";
				}
				else if (((Object)gameObject9).name.StartsWith("CategoryChest"))
				{
					flag = true;
					text2 = "CategoryChest";
				}
				else if (((Object)gameObject9).name.Contains("LunarChest"))
				{
					flag = true;
					text2 = "LunarChest";
				}
				else if (((Object)gameObject9).name.Contains("EquipmentBarrel"))
				{
					flag = true;
					text2 = "EquipmentBarrel";
				}
				else if (((Object)gameObject9).name.Contains("Chest1StealthedVariant"))
				{
					flag = true;
					text2 = "StealthChest";
				}
				else if (((Object)gameObject9).name.StartsWith("CasinoChest"))
				{
					flag = true;
					text2 = "CasinoChest";
				}
				if (flag && !flag2 && ((Object)(object)gameObject9.GetComponent<ChestBehavior>() != (Object)null || (Object)(object)gameObject9.GetComponent<MultiShopController>() != (Object)null || (Object)(object)gameObject9.GetComponent("RoR2.RouletteChestController") != (Object)null))
				{
					if (shrineIndicators.ContainsKey(gameObject9))
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("Skipping duplicate indicator for chest " + ((Object)gameObject9).name + " - already exists"));
						continue;
					}
					num10++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found {text2} Chest #{num10}: {((Object)gameObject9).name} at {gameObject9.transform.position} (ID: {((Object)gameObject9).GetInstanceID()})");
					CreateChestIndicator(gameObject9.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject9, text2);
				}
				else if (flag)
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Found " + text2 + " Chest object but no ChestBehavior: " + ((Object)gameObject9).name));
				}
			}
			MultiShopController[] array2 = Object.FindObjectsOfType<MultiShopController>();
			for (int num2 = 0; num2 < array2.Length; num2++)
			{
				GameObject gameObject10 = ((Component)array2[num2]).gameObject;
				if (!shrineIndicators.ContainsKey(gameObject10))
				{
					num10++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: Creating TripleShop marker at {gameObject10.transform.position + Vector3.up * (markerYOffset.Value + 9f)}");
					CreateChestIndicator(gameObject10.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject10, "TripleShop");
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Chests found: {num10}");
		}
		if (showVoidCradle.Value)
		{
			int num11 = 0;
			foreach (PurchaseInteraction item9 in instancesList)
			{
				GameObject gameObject11 = ((Component)item9).gameObject;
				((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Checking object: " + ((Object)gameObject11).name + " for void cradle detection"));
				bool flag3 = ((Object)gameObject11).name.Contains("Chest1") || ((Object)gameObject11).name.Contains("Chest2") || ((Object)gameObject11).name.Contains("Chest1StealthedVariant") || ((Object)gameObject11).name.StartsWith("CategoryChest") || ((Object)gameObject11).name.Contains("EquipmentBarrel") || ((Object)gameObject11).name.Contains("LunarChest") || ((Object)gameObject11).name.Contains("GoldChest") || ((Object)gameObject11).name.Contains("Lockbox");
				if ((Object)(object)gameObject11.GetComponent<ChestBehavior>() != (Object)null && !flag3)
				{
					if (shrineIndicators.ContainsKey(gameObject11))
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("Skipping duplicate indicator for void cradle " + ((Object)gameObject11).name + " - already exists"));
						continue;
					}
					num11++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Void Cradle #{num11}: {((Object)gameObject11).name} at {gameObject11.transform.position} (ID: {((Object)gameObject11).GetInstanceID()})");
					CreateVoidCradleIndicator(gameObject11.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject11);
				}
				else if ((Object)(object)gameObject11.GetComponent<ChestBehavior>() != (Object)null && flag3)
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Found Chest object but skipping in Void Cradle detection: " + ((Object)gameObject11).name));
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Void Cradles found: {num11}");
		}
		if (showTeleporter.Value)
		{
			int num12 = 0;
			GameObject[] array3 = Object.FindObjectsOfType<GameObject>();
			foreach (GameObject val in array3)
			{
				if (((Object)val).name.Contains("Teleporter1") || ((Object)val).name.Contains("Teleporter2"))
				{
					num12++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Teleporter #{num12}: {((Object)val).name} at {val.transform.position} (ID: {((Object)val).GetInstanceID()})");
					CreateTeleporterIndicator(val.transform.position + Vector3.up * (markerYOffset.Value + 9f), val);
					break;
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Teleporters found: {num12}");
		}
		if (showScrapper.Value)
		{
			int num13 = 0;
			GameObject[] array3 = Object.FindObjectsOfType<GameObject>();
			foreach (GameObject val2 in array3)
			{
				if (((Object)val2).name.Contains("mdlScrapper"))
				{
					num13++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Scrapper #{num13}: {((Object)val2).name} at {val2.transform.position} (ID: {((Object)val2).GetInstanceID()})");
					CreateScrapperIndicator(val2.transform.position + Vector3.up * (markerYOffset.Value + 9f), val2);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Scrappers found: {num13}");
		}
		if (show3DPrinter.Value)
		{
			int num14 = 0;
			foreach (PurchaseInteraction item10 in instancesList)
			{
				GameObject gameObject12 = ((Component)item10).gameObject;
				if ((Object)(object)gameObject12.GetComponent<ShopTerminalBehavior>() != (Object)null && ((Object)gameObject12).name.StartsWith("Duplicator"))
				{
					num14++;
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found 3D Printer #{num14}: {((Object)gameObject12).name} at {gameObject12.transform.position} (ID: {((Object)gameObject12).GetInstanceID()})");
					Create3DPrinterIndicator(gameObject12.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject12);
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total 3D Printers found: {num14}");
		}
		int num15 = 0;
		foreach (PurchaseInteraction item11 in instancesList)
		{
			GameObject gameObject13 = ((Component)item11).gameObject;
			if (((Object)gameObject13).name.Contains("Lockbox") && !((Object)gameObject13).name.Contains("LockboxVoid") && (Object)(object)gameObject13.GetComponent<ChestBehavior>() != (Object)null && !shrineIndicators.ContainsKey(gameObject13))
			{
				num15++;
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found Key Lockbox #{num15}: {((Object)gameObject13).name} at {gameObject13.transform.position} (ID: {((Object)gameObject13).GetInstanceID()})");
				CreateLockboxIndicator(gameObject13.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject13);
			}
		}
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total Key Lockboxes found: {num15}");
		int num16 = 0;
		foreach (PurchaseInteraction item12 in instancesList)
		{
			GameObject gameObject14 = ((Component)item12).gameObject;
			if (((Object)gameObject14).name.Contains("LockboxVoid") && (Object)(object)gameObject14.GetComponent("OptionChestBehavior") != (Object)null && !shrineIndicators.ContainsKey(gameObject14))
			{
				num16++;
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"Found LockboxVoid #{num16}: {((Object)gameObject14).name} at {gameObject14.transform.position} (ID: {((Object)gameObject14).GetInstanceID()})");
				CreateLockboxIndicator(gameObject14.transform.position + Vector3.up * (markerYOffset.Value + 9f), gameObject14);
			}
		}
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total LockboxVoids found: {num16}");
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Total markers created: {shrineIndicators.Count}");
	}

	private void CreateAltarIndicator(Vector3 position, GameObject shrine)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: 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_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: Unknown result type (might be due to invalid IL or missing references)
		//IL_0166: Unknown result type (might be due to invalid IL or missing references)
		//IL_016b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0177: 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_0188: Unknown result type (might be due to invalid IL or missing references)
		//IL_018d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0199: Unknown result type (might be due to invalid IL or missing references)
		//IL_019e: Unknown result type (might be due to invalid IL or missing references)
		if (shrineIndicators.ContainsKey(shrine))
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Skipping duplicate indicator for shrine " + ((Object)shrine).name + " - already exists"));
			return;
		}
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Creating Newt Altar indicator at position {position} for shrine {((Object)shrine).name}");
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = newtAltarColor.Value;
		component2.spriteFlashColor = newtAltarColor.Value;
		component2.spriteChargedColor = newtAltarColor.Value;
		component2.spriteChargingColor = newtAltarColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "coin.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Stored indicator for shrine {((Object)shrine).name} with ID {((Object)shrine).GetInstanceID()}");
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private Sprite LoadCustomSprite(string filePath)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Expected O, but got Unknown
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		if (!File.Exists(filePath))
		{
			((BaseUnityPlugin)this).Logger.LogError((object)("PNG file not found: " + filePath));
			return null;
		}
		byte[] array = File.ReadAllBytes(filePath);
		Texture2D val = new Texture2D(2, 2, (TextureFormat)5, false);
		if (ImageConversion.LoadImage(val, array))
		{
			((Texture)val).filterMode = (FilterMode)1;
			((Texture)val).wrapMode = (TextureWrapMode)1;
			return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f), 100f);
		}
		((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load PNG into texture");
		return null;
	}

	private void SetupShrineActivationListener(GameObject shrine, GameObject indicator)
	{
		((MonoBehaviour)this).StartCoroutine(CheckShrineActivation(shrine, indicator));
	}

	private IEnumerator CheckShrineActivation(GameObject shrine, GameObject indicator)
	{
		PurchaseInteraction purchase = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<PurchaseInteraction>() : null);
		ShrineBossBehavior bossBehavior = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<ShrineBossBehavior>() : null);
		ShrineCombatBehavior combatBehavior = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<ShrineCombatBehavior>() : null);
		ChestBehavior chestBehavior = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<ChestBehavior>() : null);
		ShrineChanceBehavior chanceBehavior = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<ShrineChanceBehavior>() : null);
		ShrineBloodBehavior bloodBehavior = (((Object)(object)shrine != (Object)null) ? shrine.GetComponent<ShrineBloodBehavior>() : null);
		while ((Object)(object)shrine != (Object)null && (Object)(object)indicator != (Object)null)
		{
			if ((Object)(object)purchase != (Object)null && !purchase.available && (Object)(object)chanceBehavior == (Object)null && (Object)(object)bloodBehavior == (Object)null)
			{
				RemoveIndicator(shrine, indicator);
				break;
			}
			if ((Object)(object)bossBehavior != (Object)null)
			{
				FieldInfo field = ((object)bossBehavior).GetType().GetField("purchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				FieldInfo field2 = ((object)bossBehavior).GetType().GetField("maxPurchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field != null && field2 != null)
				{
					int num = (int)field.GetValue(bossBehavior);
					int num2 = (int)field2.GetValue(bossBehavior);
					if (num >= num2)
					{
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
			}
			if ((Object)(object)combatBehavior != (Object)null)
			{
				FieldInfo field3 = ((object)combatBehavior).GetType().GetField("purchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				FieldInfo field4 = ((object)combatBehavior).GetType().GetField("maxPurchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field3 != null && field4 != null)
				{
					int num3 = (int)field3.GetValue(combatBehavior);
					int num4 = (int)field4.GetValue(combatBehavior);
					if (num3 >= num4)
					{
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
			}
			if ((Object)(object)chestBehavior != (Object)null)
			{
				FieldInfo field5 = ((object)chestBehavior).GetType().GetField("isChestOpened", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field5 != null && (bool)field5.GetValue(chestBehavior))
				{
					RemoveIndicator(shrine, indicator);
					break;
				}
			}
			if ((Object)(object)shrine != (Object)null && ((Object)shrine).name.StartsWith("TripleShop"))
			{
				MultiShopController component = shrine.GetComponent<MultiShopController>();
				if ((Object)(object)component != (Object)null)
				{
					FieldInfo field6 = ((object)component).GetType().GetField("available", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
					if (field6 != null && !(bool)field6.GetValue(component))
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: MultiShopController unavailable for " + ((Object)shrine).name + ", removing marker."));
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
			}
			if ((Object)(object)bloodBehavior != (Object)null)
			{
				FieldInfo field7 = ((object)bloodBehavior).GetType().GetField("purchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				FieldInfo field8 = ((object)bloodBehavior).GetType().GetField("maxPurchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field7 != null && field8 != null)
				{
					int num5 = (int)field7.GetValue(bloodBehavior);
					int num6 = (int)field8.GetValue(bloodBehavior);
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: Blood Shrine purchaseCount={num5}, maxPurchaseCount={num6}");
					if (num5 >= num6)
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: Blood Shrine exhausted (purchaseCount {num5} >= max {num6}), removing marker.");
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)"DEBUG: Could not find purchaseCount or maxPurchaseCount field via reflection for Blood Shrine!");
				}
			}
			if ((Object)(object)chanceBehavior != (Object)null)
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: Entered ShrineChanceBehavior check for {((Object)shrine).name} (ID: {((Object)shrine).GetInstanceID()})");
				FieldInfo field9 = ((object)chanceBehavior).GetType().GetField("successfulPurchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				FieldInfo field10 = ((object)chanceBehavior).GetType().GetField("maxPurchaseCount", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
				if (field9 != null && field10 != null)
				{
					int num7 = (int)field9.GetValue(chanceBehavior);
					int num8 = (int)field10.GetValue(chanceBehavior);
					((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: ShrineChanceBehavior successfulPurchaseCount={num7}, maxPurchaseCount={num8}");
					if (num7 >= num8)
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)$"DEBUG: Shrine of Chance exhausted (success {num7} >= max {num8}), removing marker.");
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)"DEBUG: Could not find successfulPurchaseCount or maxPurchaseCount field via reflection!");
				}
			}
			if ((Object)(object)shrine != (Object)null && ((Object)shrine).name.StartsWith("FreeChestMultiShop"))
			{
				MultiShopController component2 = shrine.GetComponent<MultiShopController>();
				if ((Object)(object)component2 != (Object)null)
				{
					FieldInfo field11 = ((object)component2).GetType().GetField("available", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
					if (field11 != null && !(bool)field11.GetValue(component2))
					{
						RemoveIndicator(shrine, indicator);
						break;
					}
				}
			}
			if ((Object)(object)shrine == (Object)null || !shrine.activeInHierarchy)
			{
				RemoveIndicator(shrine, indicator);
				break;
			}
			yield return (object)new WaitForSeconds(0.5f);
		}
	}

	private void RemoveIndicator(GameObject shrine, GameObject indicator)
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: RemoveIndicator called for " + ((shrine != null) ? ((Object)shrine).name : null) + " (indicator: " + ((indicator != null) ? ((Object)indicator).name : null) + ")"));
		if ((Object)(object)indicator != (Object)null)
		{
			Object.Destroy((Object)(object)indicator);
		}
		if ((Object)(object)shrine != (Object)null && shrineIndicators.ContainsKey(shrine))
		{
			shrineIndicators.Remove(shrine);
		}
	}

	private void CreateCombatShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = combatShrineColor.Value;
		component2.spriteFlashColor = combatShrineColor.Value;
		component2.spriteChargedColor = combatShrineColor.Value;
		component2.spriteChargingColor = combatShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "combat.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateMountainShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = mountainShrineColor.Value;
		component2.spriteFlashColor = mountainShrineColor.Value;
		component2.spriteChargedColor = mountainShrineColor.Value;
		component2.spriteChargingColor = mountainShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "mountain.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateBloodShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = bloodShrineColor.Value;
		component2.spriteFlashColor = bloodShrineColor.Value;
		component2.spriteChargedColor = bloodShrineColor.Value;
		component2.spriteChargingColor = bloodShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "blood.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateChanceShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = chanceShrineColor.Value;
		component2.spriteFlashColor = chanceShrineColor.Value;
		component2.spriteChargedColor = chanceShrineColor.Value;
		component2.spriteChargingColor = chanceShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "chance.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateOrderShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = orderShrineColor.Value;
		component2.spriteFlashColor = orderShrineColor.Value;
		component2.spriteChargedColor = orderShrineColor.Value;
		component2.spriteChargingColor = orderShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "order.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateShapingShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = shapingShrineColor.Value;
		component2.spriteFlashColor = shapingShrineColor.Value;
		component2.spriteChargedColor = shapingShrineColor.Value;
		component2.spriteChargingColor = shapingShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "shaping.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateHalcyoniteShrineIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = halcyoniteShrineColor.Value;
		component2.spriteFlashColor = halcyoniteShrineColor.Value;
		component2.spriteChargedColor = halcyoniteShrineColor.Value;
		component2.spriteChargingColor = halcyoniteShrineColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "halcyon.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateVoidCradleIndicator(Vector3 position, GameObject shrine)
	{
		//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)
		//IL_0028: 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_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_018e: 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_019f: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a4: 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_01b5: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "voidchest.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		component2.spriteBaseColor = voidCradleColor.Value;
		component2.spriteFlashColor = voidCradleColor.Value;
		component2.spriteChargedColor = voidCradleColor.Value;
		component2.spriteChargingColor = voidCradleColor.Value;
		shrineIndicators[shrine] = ((Component)component).gameObject;
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateTeleporterIndicator(Vector3 position, GameObject shrine)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: 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_0078: Unknown result type (might be due to invalid IL or missing references)
		//IL_0094: 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_01d2: 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_01ef: Unknown result type (might be due to invalid IL or missing references)
		//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0200: Unknown result type (might be due to invalid IL or missing references)
		//IL_0205: Unknown result type (might be due to invalid IL or missing references)
		if (shrineIndicators.ContainsKey(shrine))
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Skipping duplicate indicator for shrine " + ((Object)shrine).name + " - already exists"));
			return;
		}
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Creating Teleporter indicator at position {position} for shrine {((Object)shrine).name}");
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "tp.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		component2.spriteBaseColor = teleporterColor.Value;
		component2.spriteFlashColor = teleporterColor.Value;
		component2.spriteChargedColor = teleporterColor.Value;
		component2.spriteChargingColor = teleporterColor.Value;
		shrineIndicators[shrine] = ((Component)component).gameObject;
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Stored indicator for shrine {((Object)shrine).name} with ID {((Object)shrine).GetInstanceID()}");
		SetupShrineActivationListener(shrine, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void CreateScrapperIndicator(Vector3 position, GameObject scrapper)
	{
		//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)
		//IL_0028: 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_0116: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0138: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0149: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		component2.spriteBaseColor = scrapperColor.Value;
		component2.spriteFlashColor = scrapperColor.Value;
		component2.spriteChargedColor = scrapperColor.Value;
		component2.spriteChargingColor = scrapperColor.Value;
		string filePath = Path.Combine(Paths.PluginPath, "Hyru-Locater", "scrapper.png");
		Sprite val3 = LoadCustomSprite(filePath);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
				}
			}
		}
		shrineIndicators[scrapper] = ((Component)component).gameObject;
		SetupShrineActivationListener(scrapper, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	internal void CreateChestIndicator(Vector3 position, GameObject chest, string chestType)
	{
		//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)
		//IL_0028: 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_0115: Unknown result type (might be due to invalid IL or missing references)
		//IL_011a: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Unknown result type (might be due to invalid IL or missing references)
		//IL_014e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0153: Unknown result type (might be due to invalid IL or missing references)
		//IL_0223: Unknown result type (might be due to invalid IL or missing references)
		//IL_0225: Unknown result type (might be due to invalid IL or missing references)
		//IL_022b: Unknown result type (might be due to invalid IL or missing references)
		//IL_022d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0233: Unknown result type (might be due to invalid IL or missing references)
		//IL_0235: 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_023d: Unknown result type (might be due to invalid IL or missing references)
		//IL_016d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0172: 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_0191: 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_01c7: Unknown result type (might be due to invalid IL or missing references)
		//IL_01cc: 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_01ff: Unknown result type (might be due to invalid IL or missing references)
		//IL_0204: Unknown result type (might be due to invalid IL or missing references)
		//IL_021b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0220: Unknown result type (might be due to invalid IL or missing references)
		PositionIndicator component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/PositionIndicators/TeleporterChargingPositionIndicator"), position, Quaternion.identity).GetComponent<PositionIndicator>();
		ChargeIndicatorController component2 = ((Component)component).GetComponent<ChargeIndicatorController>();
		((Component)component).transform.localScale = Vector3.one * (0.375f + markerScale.Value * 0.0375f);
		Canvas component3 = ((Component)component).GetComponent<Canvas>();
		if ((Object)(object)component3 != (Object)null)
		{
			component3.renderMode = (RenderMode)2;
			component3.worldCamera = Camera.main;
		}
		FieldInfo field = ((object)component2).GetType().GetField("backgroundSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field != null)
		{
			object? value = field.GetValue(component2);
			SpriteRenderer val = (SpriteRenderer)((value is SpriteRenderer) ? value : null);
			if ((Object)(object)val != (Object)null)
			{
				((Renderer)val).enabled = false;
			}
		}
		FieldInfo field2 = ((object)component2).GetType().GetField("pulseSprite", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
		if (field2 != null)
		{
			object? value2 = field2.GetValue(component2);
			SpriteRenderer val2 = (SpriteRenderer)((value2 is SpriteRenderer) ? value2 : null);
			if ((Object)(object)val2 != (Object)null)
			{
				((Renderer)val2).enabled = false;
			}
		}
		if ((Object)(object)component2.chargingText != (Object)null)
		{
			((Component)component2.chargingText.transform).gameObject.SetActive(false);
		}
		Color value3 = categoryChestColor.Value;
		switch (chestType)
		{
		case "Chest1":
			value3 = whiteChestColor.Value;
			break;
		case "Chest2":
			value3 = greenChestColor.Value;
			break;
		case "GoldChest":
			value3 = redChestColor.Value;
			break;
		case "CategoryChest":
			value3 = categoryChestColor.Value;
			break;
		case "StealthChest":
			value3 = stealthChestColor.Value;
			break;
		case "EquipmentBarrel":
			value3 = equipmentBarrelColor.Value;
			break;
		case "LunarChest":
			value3 = lunarChestColor.Value;
			break;
		case "TripleShop":
			value3 = tripleShopColor.Value;
			break;
		case "CasinoChest":
			value3 = casinoChestColor.Value;
			break;
		}
		component2.spriteBaseColor = value3;
		component2.spriteFlashColor = value3;
		component2.spriteChargedColor = value3;
		component2.spriteChargingColor = value3;
		string text = Path.Combine(Paths.PluginPath, "Hyru-Locater", (chestType == "TripleShop") ? "triplechest.png" : ((chestType == "CasinoChest") ? "casino.png" : "chest.png"));
		((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Loading sprite for " + chestType + " from " + text));
		Sprite val3 = LoadCustomSprite(text);
		if ((Object)(object)val3 != (Object)null && component2.iconSprites != null)
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Successfully loaded sprite for " + chestType));
			SpriteRenderer[] iconSprites = component2.iconSprites;
			foreach (SpriteRenderer val4 in iconSprites)
			{
				if ((Object)(object)val4 != (Object)null)
				{
					val4.sprite = val3;
					((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Applied sprite to SpriteRenderer " + ((Object)((Component)val4).gameObject).name));
				}
			}
		}
		else
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)("DEBUG: Failed to load or apply sprite for " + chestType));
		}
		shrineIndicators[chest] = ((Component)component).gameObject;
		SetupShrineActivationListener(chest, ((Component)component).gameObject);
		((Component)component).gameObject.SetActive(true);
		((Component)component).gameObject.AddComponent<KeepUpright>();
		RemoveEdgeComponents(((Component)component).gameObject);
	}

	private void OnConfigChanged(object sender, EventArgs e)
	{
		RefreshAllMarkers();
	}

	private void OnPositioningChanged(object sender, EventArgs e)
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)$"Positioning changed - Y Offset: {markerYOffset.Value}, Scale: {markerScale.Value}");
		RefreshAllMarkers();
	}

	private void RefreshAllMarkers()
	{
		foreach (GameObject value in shrineIndicators.Values)
		{
			if ((Object)(object)value != (Object)null)
			{
				Object.Destroy((Object)(object)value);
			}
		}
		shrineIndicators.Clear();
		Stage instance = Stage.instance;
		if ((Object)(object)instance != (Object)null)
		{
			OnStageStart(instance);
		}
	}

	private void UpdateMarkerPositionsAndScale()
	{
		((BaseUnityPlugin)this).Logger.LogInfo((object)"UpdateMarkerPositionsAndScale called - redirecting to RefreshAllMarkers");
		RefreshAllMarkers();
	}

	private void RemoveEdgeComponents(GameObject indicator)
	{
		Transform val = indicator.transform.Find("OutsideFrameArrow");
		if ((Object)(object)val != (Object)null)
		{
			Object.Destroy((Object)(object)((Compo