using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using ChestContents.Commands;
using ChestContents.Effects;
using ChestContents.Managers;
using ChestContents.Models;
using ChestContents.Patches;
using ChestContents.UI;
using HarmonyLib;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ChestContents")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChestContents")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("17DB9714-F030-4255-B20B-4B37B53FA521")]
[assembly: AssemblyFileVersion("1.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.1.0.0")]
namespace ChestContents.UI
{
public class ConfigPanelManager : MonoBehaviour
{
private GameObject panel;
private InputField radiusInputField;
private Toggle verticalMarkerToggle;
private InputField markerHeightInputField;
private bool isOpen;
private GameObject previewPanel;
private Toggle previewToggle;
private bool previewEnabled;
private const int PlayerPreviewEffectId = -999;
private ActionableEffect previewEffect;
private Vector3? previewEffectOffset;
private GameObject playerVerticalIndicator;
private void Awake()
{
Debug.Log((object)"ConfigPanelManager Awake called");
previewEffect = new ActionableEffect("vfx_ExtensionConnection");
}
public void ShowPanel()
{
if ((Object)(object)panel == (Object)null)
{
CreatePanel();
}
panel.SetActive(true);
radiusInputField.text = ChestContentsPlugin.ChestSearchRadius.Value.ToString();
if ((Object)(object)verticalMarkerToggle != (Object)null)
{
verticalMarkerToggle.isOn = ChestContentsPlugin.EnableVerticalMarker.Value;
}
if ((Object)(object)markerHeightInputField != (Object)null)
{
markerHeightInputField.text = ChestContentsPlugin.VerticalMarkerHeight.Value.ToString();
}
ShowPreviewPanel();
}
public void HidePanel()
{
if ((Object)(object)panel != (Object)null)
{
panel.SetActive(false);
}
HidePreviewPanel();
previewEffect.ClearEffectForTarget(-999);
previewEffectOffset = null;
if ((Object)(object)playerVerticalIndicator != (Object)null)
{
Object.Destroy((Object)(object)playerVerticalIndicator);
playerVerticalIndicator = null;
}
}
public void ShowPreviewPanel()
{
if ((Object)(object)previewPanel == (Object)null)
{
CreatePreviewPanel();
}
previewPanel.SetActive(true);
if ((Object)(object)previewToggle != (Object)null)
{
previewToggle.isOn = previewEnabled;
}
}
public void HidePreviewPanel()
{
if ((Object)(object)previewPanel != (Object)null)
{
previewPanel.SetActive(false);
}
}
private void Update()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: 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_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Expected O, but got Unknown
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
if (previewEnabled && (Object)(object)Player.m_localPlayer != (Object)null && previewEffect != null)
{
float num = 1f;
Vector3 val = ((Component)Player.m_localPlayer).transform.position + new Vector3(0f, num, 0f);
if (previewEffectOffset.HasValue)
{
Vector3 val2 = val - previewEffectOffset.Value;
if (!(((Vector3)(ref val2)).sqrMagnitude > 0.01f))
{
goto IL_00a0;
}
}
previewEffect.ShowEffectForTarget(val, Quaternion.identity, -999);
previewEffectOffset = val;
goto IL_00a0;
}
if ((Object)(object)playerVerticalIndicator != (Object)null)
{
playerVerticalIndicator.SetActive(false);
}
return;
IL_00a0:
if (ChestContentsPlugin.EnableVerticalMarker.Value)
{
if ((Object)(object)playerVerticalIndicator == (Object)null)
{
playerVerticalIndicator = GameObject.CreatePrimitive((PrimitiveType)2);
((Object)playerVerticalIndicator).name = "PlayerVerticalIndicator";
Object.Destroy((Object)(object)playerVerticalIndicator.GetComponent<Collider>());
Material val3 = new Material(Shader.Find("Sprites/Default"));
val3.color = new Color(1f, 0.5f, 0f, 0.5f);
playerVerticalIndicator.GetComponent<Renderer>().material = val3;
}
float value = ChestContentsPlugin.VerticalMarkerHeight.Value;
playerVerticalIndicator.transform.position = ((Component)Player.m_localPlayer).transform.position + new Vector3(0f, value / 2f, 0f);
playerVerticalIndicator.transform.localScale = new Vector3(0.15f, value / 2f, 0.15f);
playerVerticalIndicator.transform.rotation = Quaternion.identity;
playerVerticalIndicator.SetActive(true);
}
else if ((Object)(object)playerVerticalIndicator != (Object)null)
{
playerVerticalIndicator.SetActive(false);
}
}
private void TogglePanel()
{
isOpen = !isOpen;
Debug.Log((object)$"Config panel set active: {isOpen}");
if (isOpen)
{
ShowPanel();
}
else
{
HidePanel();
}
}
private void CreatePanel()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Expected O, but got Unknown
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: 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_0120: Expected O, but got Unknown
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Expected O, but got Unknown
//IL_017f: 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_0194: Expected O, but got Unknown
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01db: Expected O, but got Unknown
//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0200: Expected O, but got Unknown
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Expected O, but got Unknown
//IL_0257: Unknown result type (might be due to invalid IL or missing references)
//IL_0266: Unknown result type (might be due to invalid IL or missing references)
//IL_026b: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Unknown result type (might be due to invalid IL or missing references)
//IL_0297: Unknown result type (might be due to invalid IL or missing references)
//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Expected O, but got Unknown
//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
//IL_03ca: Unknown result type (might be due to invalid IL or missing references)
//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0407: Unknown result type (might be due to invalid IL or missing references)
//IL_0445: Unknown result type (might be due to invalid IL or missing references)
//IL_0465: Unknown result type (might be due to invalid IL or missing references)
//IL_047a: Unknown result type (might be due to invalid IL or missing references)
//IL_048f: Unknown result type (might be due to invalid IL or missing references)
//IL_04a4: Unknown result type (might be due to invalid IL or missing references)
//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
//IL_04c7: Unknown result type (might be due to invalid IL or missing references)
//IL_04ce: Expected O, but got Unknown
//IL_0518: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Object.FindObjectOfType<EventSystem>() == (Object)null)
{
GameObject val2 = new GameObject("EventSystem");
val2.AddComponent<EventSystem>();
val2.AddComponent<StandaloneInputModule>();
Object.DontDestroyOnLoad((Object)val2);
}
panel = new GameObject("ChestContentsConfigPanel");
Canvas obj = panel.AddComponent<Canvas>();
obj.renderMode = (RenderMode)0;
obj.overrideSorting = true;
obj.sortingOrder = 1000;
panel.AddComponent<CanvasScaler>();
panel.AddComponent<GraphicRaycaster>();
GameObject val3 = new GameObject("BG");
val3.transform.SetParent(panel.transform, false);
((Graphic)val3.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.85f);
RectTransform component = val3.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(400f, 200f);
component.anchoredPosition = new Vector2(0f, 0f);
val3.transform.SetAsLastSibling();
VerticalLayoutGroup obj2 = val3.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)obj2).childAlignment = (TextAnchor)0;
((HorizontalOrVerticalLayoutGroup)obj2).spacing = 10f;
((LayoutGroup)obj2).padding = new RectOffset(15, 15, 15, 15);
((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandHeight = false;
GameObject val4 = new GameObject("ContentContainer");
val4.transform.SetParent(val3.transform, false);
HorizontalLayoutGroup obj3 = val4.AddComponent<HorizontalLayoutGroup>();
((LayoutGroup)obj3).childAlignment = (TextAnchor)0;
((HorizontalOrVerticalLayoutGroup)obj3).spacing = 10f;
((HorizontalOrVerticalLayoutGroup)obj3).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)obj3).childForceExpandHeight = false;
val4.GetComponent<RectTransform>().sizeDelta = new Vector2(370f, 100f);
GameObject val5 = new GameObject("LeftCol");
val5.transform.SetParent(val4.transform, false);
VerticalLayoutGroup obj4 = val5.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)obj4).childAlignment = (TextAnchor)0;
((HorizontalOrVerticalLayoutGroup)obj4).spacing = 18f;
((HorizontalOrVerticalLayoutGroup)obj4).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)obj4).childForceExpandHeight = false;
((LayoutGroup)obj4).padding = new RectOffset(0, 10, 0, 0);
val5.GetComponent<RectTransform>().sizeDelta = new Vector2(220f, 100f);
GameObject val6 = new GameObject("RightCol");
val6.transform.SetParent(val4.transform, false);
VerticalLayoutGroup obj5 = val6.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)obj5).childAlignment = (TextAnchor)2;
((HorizontalOrVerticalLayoutGroup)obj5).spacing = 18f;
((HorizontalOrVerticalLayoutGroup)obj5).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)obj5).childForceExpandHeight = false;
((LayoutGroup)obj5).padding = new RectOffset(10, 0, 0, 0);
val6.GetComponent<RectTransform>().sizeDelta = new Vector2(120f, 100f);
GameObject val7 = new GameObject("VerticalDivider");
val7.transform.SetParent(val4.transform, false);
((Graphic)val7.AddComponent<Image>()).color = new Color(1f, 1f, 1f, 0.3f);
RectTransform component2 = val7.GetComponent<RectTransform>();
component2.sizeDelta = new Vector2(2f, 1000f);
component2.anchorMin = new Vector2(0.5f, 0f);
component2.anchorMax = new Vector2(0.5f, 1f);
component2.anchoredPosition = Vector2.zero;
AddLabelToColumn(val5.transform, "Chest Search Radius (m):");
AddLabelToColumn(val5.transform, "Enable Vertical Marker");
AddLabelToColumn(val5.transform, "Vertical Marker Height:");
AddInputToColumn(val6.transform);
AddVerticalMarkerToggleToColumn(val6.transform);
AddMarkerHeightInputToColumn(val6.transform);
((UnityEvent<string>)(object)radiusInputField.onEndEdit).AddListener((UnityAction<string>)delegate(string val)
{
if (int.TryParse(val, out var result2))
{
ChestContentsPlugin.ChestSearchRadius.Value = result2;
if (previewEnabled)
{
ApplyLivePreview();
}
}
else
{
radiusInputField.text = ChestContentsPlugin.ChestSearchRadius.Value.ToString();
}
});
((UnityEvent<bool>)(object)verticalMarkerToggle.onValueChanged).AddListener((UnityAction<bool>)delegate(bool val)
{
ChestContentsPlugin.EnableVerticalMarker.Value = val;
});
((UnityEvent<string>)(object)markerHeightInputField.onEndEdit).AddListener((UnityAction<string>)delegate(string val)
{
if (float.TryParse(val, out var result))
{
ChestContentsPlugin.VerticalMarkerHeight.Value = result;
}
});
GameObject val8 = new GameObject("FlexibleSpacer");
val8.transform.SetParent(val3.transform, false);
val8.AddComponent<LayoutElement>().flexibleHeight = 1f;
GameObject val9 = new GameObject("Subtext");
val9.transform.SetParent(val3.transform, false);
Text obj6 = val9.AddComponent<Text>();
obj6.text = "Tip: Open your inventory/crafting window to change these options. (This will allow using the mouse)";
obj6.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj6.fontSize = 14;
((Graphic)obj6).color = new Color(1f, 1f, 1f, 0.7f);
obj6.alignment = (TextAnchor)4;
RectTransform component3 = val9.GetComponent<RectTransform>();
component3.sizeDelta = new Vector2(370f, 24f);
component3.anchorMin = new Vector2(0.5f, 0f);
component3.anchorMax = new Vector2(0.5f, 0f);
component3.pivot = new Vector2(0.5f, 0f);
component3.anchoredPosition = new Vector2(0f, 10f);
GameObject val10 = new GameObject("CloseContainer");
val10.transform.SetParent(val3.transform, false);
HorizontalLayoutGroup obj7 = val10.AddComponent<HorizontalLayoutGroup>();
((LayoutGroup)obj7).childAlignment = (TextAnchor)4;
((HorizontalOrVerticalLayoutGroup)obj7).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)obj7).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)obj7).spacing = 0f;
val10.GetComponent<RectTransform>().sizeDelta = new Vector2(400f, 40f);
CreateCloseButton(val10.transform);
}
private void CreatePreviewPanel()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: 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_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0172: Expected O, but got Unknown
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Expected O, but got Unknown
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
//IL_020f: Unknown result type (might be due to invalid IL or missing references)
//IL_0219: 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_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_025d: Unknown result type (might be due to invalid IL or missing references)
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
previewPanel = new GameObject("ChestContentsPreviewPanel");
Canvas obj = previewPanel.AddComponent<Canvas>();
obj.renderMode = (RenderMode)0;
obj.overrideSorting = true;
obj.sortingOrder = 1001;
previewPanel.AddComponent<CanvasScaler>();
previewPanel.AddComponent<GraphicRaycaster>();
GameObject val2 = new GameObject("BG");
val2.transform.SetParent(previewPanel.transform, false);
((Graphic)val2.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.85f);
RectTransform component = val2.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(300f, 100f);
component.anchoredPosition = new Vector2(0f, -220f);
VerticalLayoutGroup obj2 = val2.AddComponent<VerticalLayoutGroup>();
((LayoutGroup)obj2).childAlignment = (TextAnchor)1;
((HorizontalOrVerticalLayoutGroup)obj2).spacing = 10f;
((LayoutGroup)obj2).padding = new RectOffset(15, 15, 15, 15);
((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandWidth = true;
((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandHeight = false;
GameObject val3 = new GameObject("Label");
val3.transform.SetParent(val2.transform, false);
Text obj3 = val3.AddComponent<Text>();
obj3.text = "Preview Config Options";
obj3.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj3.fontSize = 18;
((Graphic)obj3).color = Color.white;
obj3.alignment = (TextAnchor)4;
val3.GetComponent<RectTransform>().sizeDelta = new Vector2(220f, 24f);
GameObject val4 = new GameObject("PreviewToggle");
val4.transform.SetParent(val2.transform, false);
previewToggle = val4.AddComponent<Toggle>();
val4.GetComponent<RectTransform>().sizeDelta = new Vector2(32f, 32f);
GameObject val5 = new GameObject("Background");
val5.transform.SetParent(val4.transform, false);
Image val6 = val5.AddComponent<Image>();
((Graphic)val6).color = Color.gray;
val5.GetComponent<RectTransform>().sizeDelta = new Vector2(20f, 20f);
GameObject val7 = new GameObject("Checkmark");
val7.transform.SetParent(val5.transform, false);
Image val8 = val7.AddComponent<Image>();
((Graphic)val8).color = Color.green;
RectTransform component2 = val7.GetComponent<RectTransform>();
component2.sizeDelta = new Vector2(16f, 16f);
component2.anchorMin = new Vector2(0.5f, 0.5f);
component2.anchorMax = new Vector2(0.5f, 0.5f);
component2.pivot = new Vector2(0.5f, 0.5f);
component2.anchoredPosition = Vector2.zero;
((Selectable)previewToggle).targetGraphic = (Graphic)(object)val6;
previewToggle.graphic = (Graphic)(object)val8;
previewToggle.isOn = previewEnabled;
((UnityEvent<bool>)(object)previewToggle.onValueChanged).AddListener((UnityAction<bool>)delegate(bool val)
{
previewEnabled = val;
if (previewEnabled)
{
ApplyLivePreview();
}
});
}
private void AddLabelToColumn(Transform parent, string textValue)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("Label");
val.transform.SetParent(parent, false);
Text obj = val.AddComponent<Text>();
obj.text = textValue;
obj.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj.fontSize = 18;
((Graphic)obj).color = Color.white;
obj.alignment = (TextAnchor)3;
val.GetComponent<RectTransform>().sizeDelta = new Vector2(220f, 24f);
}
private void AddInputToColumn(Transform parent)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: 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_0163: 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_0186: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_0203: Unknown result type (might be due to invalid IL or missing references)
//IL_0218: 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_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0256: Unknown result type (might be due to invalid IL or missing references)
GameObject val2 = new GameObject("RadiusInputField");
val2.transform.SetParent(parent, false);
Image val3 = val2.AddComponent<Image>();
((Graphic)val3).color = Color.white;
radiusInputField = val2.AddComponent<InputField>();
((Selectable)radiusInputField).targetGraphic = (Graphic)(object)val3;
RectTransform component = val2.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(0f, 32f);
component.anchorMin = new Vector2(0f, 0f);
component.anchorMax = new Vector2(1f, 1f);
component.pivot = new Vector2(1f, 0.5f);
component.anchoredPosition = Vector2.zero;
LayoutElement obj = val2.AddComponent<LayoutElement>();
obj.minWidth = 100f;
obj.flexibleWidth = 1f;
GameObject val4 = new GameObject("Text");
val4.transform.SetParent(val2.transform, false);
Text val5 = val4.AddComponent<Text>();
val5.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val5.fontSize = 18;
((Graphic)val5).color = Color.black;
val5.alignment = (TextAnchor)3;
RectTransform component2 = val4.GetComponent<RectTransform>();
((Transform)component2).SetAsLastSibling();
component2.anchorMin = new Vector2(0f, 0f);
component2.anchorMax = new Vector2(1f, 1f);
component2.offsetMin = new Vector2(4f, 0f);
component2.offsetMax = new Vector2(-4f, 0f);
component2.pivot = new Vector2(0.5f, 0.5f);
GameObject val6 = new GameObject("Placeholder");
val6.transform.SetParent(val2.transform, false);
Text val7 = val6.AddComponent<Text>();
val7.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val7.fontSize = 18;
((Graphic)val7).color = new Color(0.5f, 0.5f, 0.5f, 0.75f);
val7.text = "Radius (m)";
val7.alignment = (TextAnchor)3;
RectTransform component3 = val6.GetComponent<RectTransform>();
((Transform)component3).SetAsLastSibling();
component3.anchorMin = new Vector2(0f, 0f);
component3.anchorMax = new Vector2(1f, 1f);
component3.offsetMin = new Vector2(4f, 0f);
component3.offsetMax = new Vector2(-4f, 0f);
component3.pivot = new Vector2(0.5f, 0.5f);
radiusInputField.textComponent = val5;
radiusInputField.placeholder = (Graphic)(object)val7;
((UnityEvent<string>)(object)radiusInputField.onEndEdit).AddListener((UnityAction<string>)delegate(string val)
{
if (int.TryParse(val, out var result))
{
ChestContentsPlugin.ChestSearchRadius.Value = result;
if (previewEnabled)
{
ApplyLivePreview();
}
}
else
{
radiusInputField.text = ChestContentsPlugin.ChestSearchRadius.Value.ToString();
}
});
}
private void AddVerticalMarkerToggleToColumn(Transform parent)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
GameObject val2 = new GameObject("VerticalMarkerToggle");
val2.transform.SetParent(parent, false);
verticalMarkerToggle = val2.AddComponent<Toggle>();
val2.GetComponent<RectTransform>().sizeDelta = new Vector2(32f, 32f);
LayoutElement obj = val2.AddComponent<LayoutElement>();
obj.minHeight = 32f;
obj.minWidth = 32f;
obj.preferredHeight = 32f;
obj.preferredWidth = 32f;
GameObject val3 = new GameObject("Background");
val3.transform.SetParent(val2.transform, false);
Image val4 = val3.AddComponent<Image>();
((Graphic)val4).color = Color.gray;
val3.GetComponent<RectTransform>().sizeDelta = new Vector2(20f, 20f);
GameObject val5 = new GameObject("Checkmark");
val5.transform.SetParent(val3.transform, false);
Image val6 = val5.AddComponent<Image>();
((Graphic)val6).color = Color.green;
RectTransform component = val5.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(16f, 16f);
component.anchorMin = new Vector2(0.5f, 0.5f);
component.anchorMax = new Vector2(0.5f, 0.5f);
component.pivot = new Vector2(0.5f, 0.5f);
component.anchoredPosition = Vector2.zero;
((Selectable)verticalMarkerToggle).targetGraphic = (Graphic)(object)val4;
verticalMarkerToggle.graphic = (Graphic)(object)val6;
verticalMarkerToggle.isOn = ChestContentsPlugin.EnableVerticalMarker.Value;
((UnityEvent<bool>)(object)verticalMarkerToggle.onValueChanged).AddListener((UnityAction<bool>)delegate(bool val)
{
ChestContentsPlugin.EnableVerticalMarker.Value = val;
});
}
private void AddMarkerHeightInputToColumn(Transform parent)
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Expected O, but got Unknown
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: 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_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01e3: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
GameObject val2 = new GameObject("MarkerHeightInputField");
val2.transform.SetParent(parent, false);
Image val3 = val2.AddComponent<Image>();
((Graphic)val3).color = Color.white;
markerHeightInputField = val2.AddComponent<InputField>();
((Selectable)markerHeightInputField).targetGraphic = (Graphic)(object)val3;
val2.GetComponent<RectTransform>().sizeDelta = new Vector2(0f, 32f);
LayoutElement obj = val2.AddComponent<LayoutElement>();
obj.minWidth = 100f;
obj.flexibleWidth = 1f;
GameObject val4 = new GameObject("Text");
val4.transform.SetParent(val2.transform, false);
Text val5 = val4.AddComponent<Text>();
val5.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val5.fontSize = 18;
((Graphic)val5).color = Color.black;
val5.alignment = (TextAnchor)3;
RectTransform component = val4.GetComponent<RectTransform>();
((Transform)component).SetAsLastSibling();
component.anchorMin = new Vector2(0f, 0f);
component.anchorMax = new Vector2(1f, 1f);
component.offsetMin = new Vector2(4f, 0f);
component.offsetMax = new Vector2(-4f, 0f);
component.pivot = new Vector2(0.5f, 0.5f);
GameObject val6 = new GameObject("Placeholder");
val6.transform.SetParent(val2.transform, false);
Text val7 = val6.AddComponent<Text>();
val7.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val7.fontSize = 18;
((Graphic)val7).color = new Color(0.5f, 0.5f, 0.5f, 0.75f);
val7.text = "Height (m)";
val7.alignment = (TextAnchor)3;
RectTransform component2 = val6.GetComponent<RectTransform>();
((Transform)component2).SetAsLastSibling();
component2.anchorMin = new Vector2(0f, 0f);
component2.anchorMax = new Vector2(1f, 1f);
component2.offsetMin = new Vector2(4f, 0f);
component2.offsetMax = new Vector2(-4f, 0f);
component2.pivot = new Vector2(0.5f, 0.5f);
markerHeightInputField.textComponent = val5;
markerHeightInputField.placeholder = (Graphic)(object)val7;
((UnityEvent<string>)(object)markerHeightInputField.onEndEdit).AddListener((UnityAction<string>)delegate(string val)
{
if (float.TryParse(val, out var result))
{
ChestContentsPlugin.VerticalMarkerHeight.Value = result;
}
else
{
markerHeightInputField.text = ChestContentsPlugin.VerticalMarkerHeight.Value.ToString();
}
});
}
private void CreateCloseButton(Transform parent)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: 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_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Expected O, but got Unknown
Debug.Log((object)"Creating Close Button...");
try
{
GameObject val = new GameObject("CloseButton");
val.transform.SetParent(parent, false);
Image val2 = val.AddComponent<Image>();
((Graphic)val2).color = new Color(0.2f, 0.2f, 0.2f, 1f);
Button obj = val.AddComponent<Button>();
((Selectable)obj).targetGraphic = (Graphic)(object)val2;
RectTransform component = val.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(120f, 36f);
component.anchorMin = new Vector2(0.5f, 0.5f);
component.anchorMax = new Vector2(0.5f, 0.5f);
component.pivot = new Vector2(0.5f, 0.5f);
component.anchoredPosition = Vector2.zero;
GameObject val3 = new GameObject("Text");
val3.transform.SetParent(val.transform, false);
Text obj2 = val3.AddComponent<Text>();
obj2.text = "Close";
obj2.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj2.fontSize = 18;
((Graphic)obj2).color = Color.white;
obj2.alignment = (TextAnchor)4;
RectTransform component2 = val3.GetComponent<RectTransform>();
if ((Object)(object)component2 == (Object)null)
{
Debug.LogError((object)"closeTextRect is null!");
}
else
{
component2.sizeDelta = new Vector2(120f, 36f);
component2.anchoredPosition = Vector2.zero;
}
((UnityEvent)obj.onClick).AddListener((UnityAction)delegate
{
HidePanel();
});
}
catch (Exception arg)
{
Debug.LogError((object)$"Exception in CreateCloseButton: {arg}");
}
}
private void ApplyLivePreview()
{
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: 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_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Expected O, but got Unknown
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
previewEffect.ClearEffectForTarget(-999);
previewEffectOffset = null;
if ((Object)(object)playerVerticalIndicator != (Object)null)
{
Object.Destroy((Object)(object)playerVerticalIndicator);
playerVerticalIndicator = null;
}
if (!previewEnabled)
{
return;
}
if ((Object)(object)Player.m_localPlayer != (Object)null)
{
float value = ChestContentsPlugin.VerticalMarkerHeight.Value;
Vector3 position = ((Component)Player.m_localPlayer).transform.position;
if (ChestContentsPlugin.EnableVerticalMarker.Value)
{
playerVerticalIndicator = GameObject.CreatePrimitive((PrimitiveType)2);
((Object)playerVerticalIndicator).name = "PlayerVerticalIndicator";
Object.Destroy((Object)(object)playerVerticalIndicator.GetComponent<Collider>());
Material val = new Material(Shader.Find("Sprites/Default"));
val.color = new Color(1f, 0.5f, 0f, 0.5f);
playerVerticalIndicator.GetComponent<Renderer>().material = val;
playerVerticalIndicator.transform.position = position + new Vector3(0f, value / 2f, 0f);
playerVerticalIndicator.transform.localScale = new Vector3(0.15f, value / 2f, 0.15f);
playerVerticalIndicator.transform.rotation = Quaternion.identity;
playerVerticalIndicator.SetActive(true);
}
Vector3 val2 = position + new Vector3(0f, value, 0f);
previewEffect.ShowEffectForTarget(val2, Quaternion.identity, -999);
previewEffectOffset = val2;
}
Debug.Log((object)$"[ChestContents] Live preview applied: Radius={ChestContentsPlugin.ChestSearchRadius.Value}, VerticalMarker={ChestContentsPlugin.EnableVerticalMarker.Value}, MarkerHeight={ChestContentsPlugin.VerticalMarkerHeight.Value}");
}
}
public static class PopupManager
{
public static void ShowSearchResultsPopup(string itemName, Vector3 chestPos, int quantity = -1)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Expected O, but got Unknown
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: 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_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_020c: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: 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_0244: Unknown result type (might be due to invalid IL or missing references)
//IL_0249: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
//IL_0304: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)Player.m_localPlayer == (Object)null))
{
GameObject val = GameObject.Find("ChestContentsSearchPopup");
if ((Object)(object)val != (Object)null)
{
Object.Destroy((Object)(object)val);
}
float num = Vector3.Distance(((Component)Player.m_localPlayer).transform.position, chestPos);
string text = itemName;
if (text.StartsWith("$"))
{
text = text.Substring(1);
}
text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text.Replace("_", " "));
int num2 = Mathf.Clamp(Screen.height / 24, 18, 48);
GameObject val2 = new GameObject("ChestContentsSearchPopup");
Canvas obj = val2.AddComponent<Canvas>();
obj.renderMode = (RenderMode)0;
obj.sortingOrder = 1000;
GameObject val3 = new GameObject("Panel");
val3.transform.SetParent(val2.transform, false);
((Graphic)val3.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.7f);
RectTransform component = val3.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(420f, (float)(num2 * 2 + 32));
component.anchorMin = new Vector2(0f, 0.5f);
component.anchorMax = new Vector2(0f, 0.5f);
component.pivot = new Vector2(0f, 0.5f);
component.anchoredPosition = new Vector2(20f, 0f);
GameObject val4 = new GameObject("Text");
val4.transform.SetParent(val3.transform, false);
Text obj2 = val4.AddComponent<Text>();
obj2.text = text + ((quantity > 0) ? $" x{quantity}" : "");
obj2.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj2.fontSize = num2;
((Graphic)obj2).color = Color.white;
obj2.alignment = (TextAnchor)0;
RectTransform component2 = val4.GetComponent<RectTransform>();
component2.sizeDelta = new Vector2(400f, (float)(num2 + 8));
component2.anchorMin = new Vector2(0f, 1f);
component2.anchorMax = new Vector2(0f, 1f);
component2.pivot = new Vector2(0f, 1f);
component2.anchoredPosition = new Vector2(12f, -8f);
GameObject val5 = new GameObject("Distance");
val5.transform.SetParent(val3.transform, false);
Text obj3 = val5.AddComponent<Text>();
obj3.text = $"Distance: {num:F1} m";
obj3.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj3.fontSize = num2 - 4;
((Graphic)obj3).color = Color.yellow;
obj3.alignment = (TextAnchor)6;
RectTransform component3 = val5.GetComponent<RectTransform>();
component3.sizeDelta = new Vector2(400f, (float)(num2 + 8));
component3.anchorMin = new Vector2(0f, 0f);
component3.anchorMax = new Vector2(0f, 0f);
component3.pivot = new Vector2(0f, 0f);
component3.anchoredPosition = new Vector2(12f, 8f);
Object.Destroy((Object)(object)val2, 4f);
}
}
public static void ShowMetaPopup(string meta)
{
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Expected O, but got Unknown
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Expected O, but got Unknown
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_0196: Unknown result type (might be due to invalid IL or missing references)
//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_01f6: 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_022f: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: Unknown result type (might be due to invalid IL or missing references)
//IL_0259: Unknown result type (might be due to invalid IL or missing references)
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Expected O, but got Unknown
//IL_0367: Unknown result type (might be due to invalid IL or missing references)
//IL_0397: Unknown result type (might be due to invalid IL or missing references)
//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
//IL_03d6: Unknown result type (might be due to invalid IL or missing references)
//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)Player.m_localPlayer == (Object)null))
{
GameObject val = GameObject.Find("ChestContentsMetaPopup");
if ((Object)(object)val != (Object)null)
{
Object.Destroy((Object)(object)val);
}
int num = Mathf.Clamp(Screen.height / 36, 14, 32);
int num2 = ((meta == null) ? 1 : meta.Split(new char[1] { '\n' }).Length);
string[] obj = meta?.Split(new char[1] { '\n' }) ?? new string[1] { "" };
int num3 = 0;
string[] array = obj;
foreach (string text in array)
{
num3 = Mathf.Max(num3, text.Length);
}
float num4 = Mathf.Clamp(20f + (float)Mathf.Max(num3, 32) * ((float)num * 0.6f), 260f, 600f);
float num5 = num * num2 + 48 + num * 4 + 16;
GameObject val2 = new GameObject("ChestContentsMetaPopup");
Canvas obj2 = val2.AddComponent<Canvas>();
obj2.renderMode = (RenderMode)0;
obj2.sortingOrder = 1000;
GameObject val3 = new GameObject("Panel");
val3.transform.SetParent(val2.transform, false);
((Graphic)val3.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.7f);
RectTransform component = val3.GetComponent<RectTransform>();
component.sizeDelta = new Vector2(num4, num5);
component.anchorMin = new Vector2(0f, 0.5f);
component.anchorMax = new Vector2(0f, 0.5f);
component.pivot = new Vector2(0f, 0.5f);
component.anchoredPosition = new Vector2(20f, 0f);
GameObject val4 = new GameObject("Text");
val4.transform.SetParent(val3.transform, false);
Text obj3 = val4.AddComponent<Text>();
obj3.text = meta;
obj3.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
obj3.fontSize = num;
((Graphic)obj3).color = Color.white;
obj3.alignment = (TextAnchor)0;
RectTransform component2 = val4.GetComponent<RectTransform>();
component2.sizeDelta = new Vector2(num4 - 20f, (float)(num * num2 + 8));
component2.anchorMin = new Vector2(0f, 1f);
component2.anchorMax = new Vector2(0f, 1f);
component2.pivot = new Vector2(0f, 1f);
component2.anchoredPosition = new Vector2(12f, -8f);
GameObject val5 = new GameObject("ConfigTable");
val5.transform.SetParent(val3.transform, false);
Text val6 = val5.AddComponent<Text>();
string[] obj4 = new string[5] { "<b>Current Config</b>\nVertical Marker: <color=yellow>", null, null, null, null };
ConfigEntry<bool> enableVerticalMarker = ChestContentsPlugin.EnableVerticalMarker;
obj4[1] = ((enableVerticalMarker != null && enableVerticalMarker.Value) ? "Enabled" : "Disabled");
obj4[2] = "</color>\n";
obj4[3] = $"Marker Height: <color=yellow>{ChestContentsPlugin.VerticalMarkerHeight?.Value:F1}</color>\n";
obj4[4] = $"Search Radius: <color=yellow>{ChestContentsPlugin.ChestSearchRadius?.Value}</color>";
string text2 = string.Concat(obj4);
val6.text = text2;
val6.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
val6.fontSize = num - 2;
((Graphic)val6).color = Color.cyan;
val6.alignment = (TextAnchor)0;
val6.supportRichText = true;
RectTransform component3 = val5.GetComponent<RectTransform>();
component3.sizeDelta = new Vector2(num4 - 20f, (float)(num * 4 + 8));
component3.anchorMin = new Vector2(0f, 1f);
component3.anchorMax = new Vector2(0f, 1f);
component3.pivot = new Vector2(0f, 1f);
component3.anchoredPosition = new Vector2(12f, (float)(-8 - (num * num2 + 12)));
Object.Destroy((Object)(object)val2, 4f);
}
}
}
}
namespace ChestContents.Patches
{
[HarmonyPatch(typeof(Container), "Interact")]
public static class ContainerInteractPatch
{
public static void Postfix(Container __instance, Humanoid character, bool hold, bool alt, bool __result)
{
if (__result && ChestContentsPlugin.IndicatedList != null && ChestContentsPlugin.IndicatedList.ChestList.Count != 0)
{
ChestInfo chestInfo = ChestContentsPlugin.IndicatedList.ChestList[0];
if (((Object)__instance).GetInstanceID() == chestInfo.InstanceID)
{
ChestContentsPlugin.IndicatedList.Clear();
}
}
}
}
[HarmonyPatch]
public static class ContainerPatch
{
[HarmonyReversePatch(/*Could not decode attribute arguments.*/)]
[HarmonyPatch(typeof(Container), "CheckAccess")]
public static bool RunCheckAccess(Container container, long playerID)
{
throw new NotImplementedException("This is a reverse patch, please use the original method instead.");
}
}
}
namespace ChestContents.Models
{
public class ChestInfo
{
public Vector3 Position { get; }
public int InstanceID { get; }
public Quaternion Rotation { get; }
public List<ItemData> Contents { get; }
public DateTime LastUpdated { get; }
public int LastRevision { get; }
public ChestInfo(Container container)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
if (!((Behaviour)container).enabled)
{
throw new Exception("Container is not enabled");
}
Position = ((Component)container).transform.position;
Rotation = ((Component)container).transform.rotation;
InstanceID = ((Object)container).GetInstanceID();
Contents = container.GetInventory().GetAllItemsInGridOrder();
LastUpdated = DateTime.Now;
object value = Traverse.Create((object)container).Field("m_lastRevision").GetValue();
if (value is int num)
{
LastRevision = num;
}
else if (value is long num2)
{
LastRevision = (int)num2;
}
else if (value is uint num3)
{
LastRevision = (int)num3;
}
else if (value is short num4)
{
LastRevision = num4;
}
else if (value is byte b)
{
LastRevision = b;
}
else
{
LastRevision = 0;
}
}
public ChestInfo(Vector3 position, int instanceId, Quaternion rotation, List<ItemData> contents, DateTime lastUpdated, int lastRevision)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
Position = position;
InstanceID = instanceId;
Rotation = rotation;
Contents = contents;
LastUpdated = lastUpdated;
LastRevision = lastRevision;
}
}
public struct ItemLocationInfo
{
public string ItemName;
public int Stack;
public int ChestId;
public Vector3 Position;
}
}
namespace ChestContents.Managers
{
[BepInPlugin("sticky.chestcontents", "ChestContents", "1.1.0")]
public class ChestContentsPlugin : BaseUnityPlugin
{
private const string PluginGuid = "sticky.chestcontents";
private const string PluginName = "ChestContents";
private const string PluginVersion = "1.1.0";
private const float InventoryCheckInterval = 0.5f;
public static ManualLogSource Logger = Logger.CreateLogSource("ChestContents");
private static readonly List<Container> Chests = new List<Container>();
public static readonly Dictionary<int, ChestInfo> ChestInfoDict = new Dictionary<int, ChestInfo>();
public static readonly Dictionary<string, List<ItemLocationInfo>> ItemNameIndex = new Dictionary<string, List<ItemLocationInfo>>();
private static readonly Collider[] Colliders = (Collider[])(object)new Collider[10240];
public static int LastTotalChestCount;
private readonly Harmony _harmonyInstance = new Harmony("sticky.chestcontents");
private CustomStatusEffect _chestIndexEffect;
private float _lastCheckTime;
private int _lastChestCount = -1;
private int _lastInventoryHash;
public static ConfigEntry<bool> EnableChestHighlighting;
public static ConfigEntry<int> ChestSearchRadius;
public static ConfigEntry<string> HighlightColor;
public static ConfigEntry<bool> EnableVerticalMarker;
public static ConfigEntry<float> VerticalMarkerHeight;
public static ConfigPanelManager ConfigPanelManagerInstance;
private bool _configPanelInitialized;
private IChestScanner _chestScanner;
private IChestIndexer _chestIndexer;
public static IndicatedChestList IndicatedList { get; private set; }
private void Awake()
{
EnableChestHighlighting = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnableChestHighlighting", true, "Enable or disable chest highlighting.");
ChestSearchRadius = ((BaseUnityPlugin)this).Config.Bind<int>("General", "ChestSearchRadius", 30, "Radius (in meters) to search for chests.");
HighlightColor = ((BaseUnityPlugin)this).Config.Bind<string>("General", "HighlightColor", "yellow", "Color to use for highlighting chests.");
EnableVerticalMarker = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnableVerticalMarker", true, "Enable or disable the vertical marker.");
VerticalMarkerHeight = ((BaseUnityPlugin)this).Config.Bind<float>("General", "VerticalMarkerHeight", 8f, "Height of the vertical marker.");
_harmonyInstance.PatchAll(Assembly.GetExecutingAssembly());
AddStatusEffect();
CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new SearchChestsCommand(() => IndicatedList, () => ChestInfoDict, () => ItemNameIndex, () => LastTotalChestCount));
CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new SearchChestsCommand(() => IndicatedList, () => ChestInfoDict, () => ItemNameIndex, () => LastTotalChestCount, "cs"));
CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new SearchChestsCommand(() => IndicatedList, () => ChestInfoDict, () => ItemNameIndex, () => LastTotalChestCount, "sc"));
CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new ConfigPanelCommand());
CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new ConfigPanelCommand("cc"));
_chestScanner = new ChestScanner();
_chestIndexer = new ChestIndexer();
}
private void Update()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Expected O, but got Unknown
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
if (!_configPanelInitialized && (Object)(object)Player.m_localPlayer != (Object)null)
{
GameObject val = new GameObject("ConfigPanelManager");
ConfigPanelManagerInstance = val.AddComponent<ConfigPanelManager>();
Object.DontDestroyOnLoad((Object)val);
_configPanelInitialized = true;
}
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
return;
}
if (IndicatedList == null)
{
IndicatedList = new IndicatedChestList(() => EnableVerticalMarker != null && EnableVerticalMarker.Value, () => (VerticalMarkerHeight == null) ? 3f : VerticalMarkerHeight.Value);
}
if (Time.time - _lastCheckTime > 0.5f)
{
_lastCheckTime = Time.time;
int nearbyChestCount = _chestScanner.GetNearbyChestCount(((Component)Player.m_localPlayer).transform.position, 30f, Colliders, Player.m_localPlayer);
int nearbyInventoryHash = _chestScanner.GetNearbyInventoryHash(((Component)Player.m_localPlayer).transform.position, 30f, Colliders, Player.m_localPlayer);
int num = (LastTotalChestCount = _chestScanner.GetAllChestCount());
if (nearbyChestCount != _lastChestCount || nearbyInventoryHash != _lastInventoryHash || num != _lastChestCount)
{
PopulateContainers();
ParseChests();
_lastChestCount = nearbyChestCount;
_lastInventoryHash = nearbyInventoryHash;
}
}
IndicatedList.RunEffects();
SEMan sEMan = ((Character)Player.m_localPlayer).GetSEMan();
StatusEffect statusEffect = _chestIndexEffect.StatusEffect;
int count = ChestInfoDict.Count;
if (statusEffect is SeChestIndex)
{
statusEffect.m_tooltip = count.ToString();
}
if (!Object.op_Implicit((Object)(object)sEMan.GetStatusEffect(_chestIndexEffect.StatusEffect.NameHash())))
{
sEMan.AddStatusEffect(_chestIndexEffect.StatusEffect, true, 0, 0f);
}
}
private void PopulateContainers()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
Chests.Clear();
foreach (Container item in _chestScanner.ScanNearbyChests(((Component)Player.m_localPlayer).transform.position, 30f, Colliders, Player.m_localPlayer))
{
if (!((Object)(object)item == (Object)null) && item.GetInventory() != null)
{
int instanceID = ((Object)item).GetInstanceID();
if ((Object)(object)Chests.Find((Container x) => ((Object)x).GetInstanceID() == instanceID) == (Object)null)
{
Chests.Add(item);
}
}
}
}
private void ParseChests()
{
Chests.RemoveAll((Container chest) => (Object)(object)chest == (Object)null || (Object)(object)((Component)chest).transform == (Object)null || chest.GetInventory() == null);
List<Container> list = Chests.ToList();
_chestIndexer.IndexChests(list, ChestInfoDict, ItemNameIndex);
IndicatedList?.PurgeInvalid(new HashSet<int>(list.Select((Container c) => ((Object)c).GetInstanceID())));
}
public static bool CheckContainerAccess(Container container, Player player)
{
return ContainerPatch.RunCheckAccess(container, player.GetPlayerID());
}
private void AddStatusEffect()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Expected O, but got Unknown
SeChestIndex seChestIndex = ScriptableObject.CreateInstance<SeChestIndex>();
((StatusEffect)seChestIndex).GetIconText();
((Object)seChestIndex).name = "ChestIndexEffect";
((StatusEffect)seChestIndex).m_name = "Chest Contents";
((StatusEffect)seChestIndex).m_icon = AssetUtils.LoadSpriteFromFile("ChestContents/Assets/chest.png");
_chestIndexEffect = new CustomStatusEffect((StatusEffect)(object)seChestIndex, false);
ItemManager.Instance.AddStatusEffect(_chestIndexEffect);
}
}
public interface IChestScanner
{
List<Container> ScanNearbyChests(Vector3 position, float radius, Collider[] colliders, Player player);
int GetNearbyChestCount(Vector3 position, float radius, Collider[] colliders, Player player);
int GetNearbyInventoryHash(Vector3 position, float radius, Collider[] colliders, Player player);
int GetAllChestCount();
}
public class ChestScanner : IChestScanner
{
public List<Container> ScanNearbyChests(Vector3 position, float radius, Collider[] colliders, Player player)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
List<Container> list = new List<Container>();
int num = Physics.OverlapSphereNonAlloc(position, radius, colliders);
for (int i = 0; i < num; i++)
{
Collider val = colliders[i];
if (!((Object)(object)((Component)val).transform.parent == (Object)null))
{
Container componentInParent = ((Component)((Component)val).transform).gameObject.GetComponentInParent<Container>();
if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.GetInventory() != null && ChestContentsPlugin.CheckContainerAccess(componentInParent, player))
{
list.Add(componentInParent);
}
}
}
return list;
}
public int GetNearbyChestCount(Vector3 position, float radius, Collider[] colliders, Player player)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
int num = Physics.OverlapSphereNonAlloc(position, radius, colliders);
int num2 = 0;
for (int i = 0; i < num; i++)
{
if (!((Object)(object)((Component)colliders[i]).transform.parent == (Object)null))
{
Container componentInParent = ((Component)((Component)colliders[i]).transform).gameObject.GetComponentInParent<Container>();
if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.GetInventory() != null && ChestContentsPlugin.CheckContainerAccess(componentInParent, player))
{
num2++;
}
}
}
return num2;
}
public int GetNearbyInventoryHash(Vector3 position, float radius, Collider[] colliders, Player player)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
int num = Physics.OverlapSphereNonAlloc(position, radius, colliders);
int num2 = 17;
for (int i = 0; i < num; i++)
{
Collider val = colliders[i];
if ((Object)(object)((Component)val).transform.parent == (Object)null)
{
continue;
}
Container componentInParent = ((Component)((Component)val).transform).gameObject.GetComponentInParent<Container>();
if (!Object.op_Implicit((Object)(object)componentInParent) || componentInParent.GetInventory() == null || !ChestContentsPlugin.CheckContainerAccess(componentInParent, player))
{
continue;
}
foreach (ItemData item in componentInParent.GetInventory().GetAllItemsInGridOrder())
{
num2 = num2 * 31 + (item.m_shared.m_name?.GetHashCode() ?? 0);
num2 = num2 * 31 + item.m_stack;
}
}
return num2;
}
public int GetAllChestCount()
{
return Object.FindObjectsOfType<Container>().Length;
}
}
public interface IChestIndexer
{
void IndexChests(IEnumerable<Container> chests, Dictionary<int, ChestInfo> chestInfoDict, Dictionary<string, List<ItemLocationInfo>> itemNameIndex);
}
public class ChestIndexer : IChestIndexer
{
public void IndexChests(IEnumerable<Container> chests, Dictionary<int, ChestInfo> chestInfoDict, Dictionary<string, List<ItemLocationInfo>> itemNameIndex)
{
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
HashSet<int> validInstanceIds = new HashSet<int>(chests.Select((Container c) => ((Object)c).GetInstanceID()));
foreach (int item in chestInfoDict.Keys.Where((int id) => !validInstanceIds.Contains(id)).ToList())
{
chestInfoDict.Remove(item);
}
itemNameIndex.Clear();
foreach (Container item2 in chests.Where((Container chest) => (Object)(object)chest != (Object)null && (Object)(object)((Component)chest).transform != (Object)null && chest.GetInventory() != null))
{
int value = (int)Traverse.Create((object)item2).Field("m_lastRevision").GetValue<uint>();
int instanceID = ((Object)item2).GetInstanceID();
bool flag = false;
if (!chestInfoDict.ContainsKey(instanceID))
{
flag = true;
}
else if (chestInfoDict[instanceID].LastRevision != value)
{
flag = true;
}
if (flag)
{
ChestInfo chestInfo = new ChestInfo(item2);
chestInfoDict[chestInfo.InstanceID] = chestInfo;
}
ChestInfo chestInfo2 = chestInfoDict[instanceID];
foreach (ItemData content in chestInfo2.Contents)
{
string key = content.m_shared.m_name.ToLowerInvariant();
if (!itemNameIndex.TryGetValue(key, out var value2))
{
value2 = (itemNameIndex[key] = new List<ItemLocationInfo>());
}
value2.Add(new ItemLocationInfo
{
ItemName = content.m_shared.m_name,
Stack = content.m_stack,
ChestId = chestInfo2.InstanceID,
Position = chestInfo2.Position
});
}
}
}
}
public class IndicatedChestList
{
private readonly HashSet<int> _chestSet;
private readonly ActionableEffect _effect;
private readonly Dictionary<int, GameObject> _verticalIndicators = new Dictionary<int, GameObject>();
private GameObject _activeConnectionVfx;
private readonly Func<bool> _getShowVertical;
private readonly Func<float> _getMarkerHeight;
public List<ChestInfo> ChestList { get; }
public IndicatedChestList()
{
ChestList = new List<ChestInfo>();
_chestSet = new HashSet<int>();
_effect = new ActionableEffect("vfx_ExtensionConnection");
}
public IndicatedChestList(List<ChestInfo> chestList, ActionableEffect effect)
{
ChestList = chestList;
_chestSet = new HashSet<int>(chestList.Select((ChestInfo c) => c.InstanceID));
_effect = effect;
}
public IndicatedChestList(List<ChestInfo> chestList)
{
ChestList = chestList;
_chestSet = new HashSet<int>(chestList.Select((ChestInfo c) => c.InstanceID));
_effect = new ActionableEffect("vfx_ExtensionConnection");
}
public IndicatedChestList(Func<bool> getShowVertical, Func<float> getMarkerHeight)
{
ChestList = new List<ChestInfo>();
_chestSet = new HashSet<int>();
_effect = new ActionableEffect("vfx_ExtensionConnection");
_getShowVertical = getShowVertical;
_getMarkerHeight = getMarkerHeight;
}
public void Add(ChestInfo chest, bool unique = true)
{
if (unique)
{
if (_chestSet.Add(chest.InstanceID))
{
ChestList.Add(chest);
}
}
else
{
ChestList.Add(chest);
_chestSet.Add(chest.InstanceID);
}
}
public void Clear()
{
ChestList.Clear();
_chestSet.Clear();
_effect.PurgeInvalid(new HashSet<int>());
}
public void PurgeInvalid(HashSet<int> validInstanceIds)
{
ChestList.RemoveAll((ChestInfo ci) => !validInstanceIds.Contains(ci.InstanceID));
_chestSet.RemoveWhere((int id) => !validInstanceIds.Contains(id));
_effect.PurgeInvalid(validInstanceIds);
}
public void RunEffects()
{
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: 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_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: 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_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Expected O, but got Unknown
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01f0: 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_0360: Unknown result type (might be due to invalid IL or missing references)
//IL_0365: Unknown result type (might be due to invalid IL or missing references)
//IL_0373: Unknown result type (might be due to invalid IL or missing references)
//IL_0378: Unknown result type (might be due to invalid IL or missing references)
//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
//IL_03b8: Expected O, but got Unknown
//IL_03ce: Unknown result type (might be due to invalid IL or missing references)
//IL_03d8: Expected O, but got Unknown
//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
//IL_042e: Unknown result type (might be due to invalid IL or missing references)
//IL_0438: Unknown result type (might be due to invalid IL or missing references)
if (Game.IsPaused())
{
return;
}
float num = (float)DateTime.Now.TimeOfDay.TotalSeconds;
bool flag = _getShowVertical();
float num2 = _getMarkerHeight();
foreach (ChestInfo chest in ChestList)
{
float num3 = 0.5f;
float num4 = 2f;
Vector3 val = new Vector3(Mathf.Cos(num * num4), 0f, Mathf.Sin(num * num4)) * num3;
Vector3 position = chest.Position + val;
_effect.RunEffect(position, chest.Rotation, chest.InstanceID);
if (flag)
{
if (!_verticalIndicators.ContainsKey(chest.InstanceID) || (Object)(object)_verticalIndicators[chest.InstanceID] == (Object)null)
{
GameObject val2 = GameObject.CreatePrimitive((PrimitiveType)2);
((Object)val2).name = $"ChestVerticalIndicator_{chest.InstanceID}";
Object.Destroy((Object)(object)val2.GetComponent<Collider>());
val2.transform.localScale = new Vector3(0.15f, num2 / 2f, 0.15f);
Material val3 = new Material(Shader.Find("Sprites/Default"));
val3.color = new Color(1f, 0.5f, 0f, 0.5f);
val2.GetComponent<Renderer>().material = val3;
_verticalIndicators[chest.InstanceID] = val2;
}
GameObject obj = _verticalIndicators[chest.InstanceID];
float num5 = num2;
obj.transform.position = chest.Position + new Vector3(0f, num5 / 2f, 0f);
obj.transform.localScale = new Vector3(0.15f, num5 / 2f, 0.15f);
obj.transform.rotation = Quaternion.identity;
}
else if (_verticalIndicators.ContainsKey(chest.InstanceID) && (Object)(object)_verticalIndicators[chest.InstanceID] != (Object)null)
{
Object.Destroy((Object)(object)_verticalIndicators[chest.InstanceID]);
_verticalIndicators[chest.InstanceID] = null;
}
}
HashSet<int> validIds = new HashSet<int>(ChestList.Select((ChestInfo c) => c.InstanceID));
foreach (int item in _verticalIndicators.Keys.Where((int id) => !validIds.Contains(id)).ToList())
{
if ((Object)(object)_verticalIndicators[item] != (Object)null)
{
Object.Destroy((Object)(object)_verticalIndicators[item]);
}
_verticalIndicators.Remove(item);
}
if (ChestList.Count > 0 && (Object)(object)Player.m_localPlayer != (Object)null)
{
Vector3 position2 = ((Component)Player.m_localPlayer).transform.position;
Vector3 position3 = ChestList[0].Position;
position2.y += 1.5f;
position3.y += 1.5f;
if ((Object)(object)_activeConnectionVfx == (Object)null)
{
_activeConnectionVfx = new GameObject("ChestConnectionLine");
LineRenderer obj2 = _activeConnectionVfx.AddComponent<LineRenderer>();
((Renderer)obj2).material = new Material(Shader.Find("Sprites/Default"));
obj2.widthMultiplier = 0.1f;
obj2.positionCount = 2;
obj2.useWorldSpace = true;
obj2.startColor = Color.cyan;
obj2.endColor = Color.yellow;
}
if ((Object)(object)_activeConnectionVfx != (Object)null)
{
LineRenderer component = _activeConnectionVfx.GetComponent<LineRenderer>();
if ((Object)(object)component != (Object)null)
{
component.SetPosition(0, position2);
component.SetPosition(1, position3);
}
}
}
else if ((Object)(object)_activeConnectionVfx != (Object)null)
{
Object.Destroy((Object)(object)_activeConnectionVfx);
_activeConnectionVfx = null;
}
}
}
}
namespace ChestContents.Effects
{
public interface IEffectRunner
{
void RunEffect(Vector3 position, Quaternion rotation, int chestInstanceID);
void ShowEffectForTarget(Vector3 position, Quaternion rotation, int uniqueId);
void ClearEffectForTarget(int uniqueId);
void PurgeInvalid(HashSet<int> validInstanceIds);
}
public class ActionableEffect : IEffectRunner
{
private class EffectInstance
{
public GameObject Obj;
public Vector3 Offset;
}
private const int EffectsPerChest = 12;
private readonly Dictionary<int, List<EffectInstance>> _activeEffectInstances = new Dictionary<int, List<EffectInstance>>();
private readonly Dictionary<int, List<GameObject>> _activeEffects = new Dictionary<int, List<GameObject>>();
private readonly string _prefabName;
public ActionableEffect(string prefabName)
{
_prefabName = prefabName;
}
public void RunEffect(Vector3 position, Quaternion rotation, int chestInstanceID)
{
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
//IL_020f: Unknown result type (might be due to invalid IL or missing references)
position.y += 1.5f;
int num = 12;
float num2 = 0.8f;
Vector3[] array = (Vector3[])(object)new Vector3[num];
for (int i = 0; i < num; i++)
{
float num3 = (float)i * (float)Math.PI * 2f / (float)num;
array[i] = new Vector3(Mathf.Cos(num3), 0f, Mathf.Sin(num3)) * num2;
}
int num4 = Mathf.Min(12, array.Length);
if (_activeEffectInstances.TryGetValue(chestInstanceID, out var value) && value != null && value.Count == num4)
{
for (int j = 0; j < num4; j++)
{
EffectInstance effectInstance = value[j];
Vector3 val = array[j];
Quaternion rotation2 = Quaternion.LookRotation(((Vector3)(ref val)).normalized, Vector3.up);
effectInstance.Obj.transform.position = position + val;
effectInstance.Obj.transform.rotation = rotation2;
}
return;
}
if (value != null)
{
foreach (EffectInstance item in value)
{
if ((Object)(object)item.Obj != (Object)null)
{
Object.Destroy((Object)(object)item.Obj);
}
}
_activeEffectInstances.Remove(chestInstanceID);
}
GameObject val2 = null;
if ((Object)(object)ZNetScene.instance != (Object)null)
{
val2 = ZNetScene.instance.GetPrefab(_prefabName);
}
if ((Object)(object)val2 == (Object)null)
{
val2 = Cache.GetPrefab<GameObject>(_prefabName);
}
if ((Object)(object)val2 == (Object)null)
{
return;
}
List<EffectInstance> list = new List<EffectInstance>();
for (int k = 0; k < num4; k++)
{
Vector3 val3 = array[k];
Quaternion val4 = Quaternion.LookRotation(((Vector3)(ref val3)).normalized, Vector3.up);
GameObject val5 = Object.Instantiate<GameObject>(val2, position + val3, val4);
ParticleSystem componentInChildren = val5.GetComponentInChildren<ParticleSystem>();
if ((Object)(object)componentInChildren != (Object)null)
{
ParticleSystemRenderer component = ((Component)componentInChildren).GetComponent<ParticleSystemRenderer>();
if ((Object)(object)component != (Object)null)
{
component.renderMode = (ParticleSystemRenderMode)0;
}
}
list.Add(new EffectInstance
{
Obj = val5,
Offset = val3
});
}
_activeEffectInstances[chestInstanceID] = list;
}
public void ShowEffectForTarget(Vector3 position, Quaternion rotation, int uniqueId)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
RunEffect(position, rotation, uniqueId);
}
public void ClearEffectForTarget(int uniqueId)
{
if (!_activeEffectInstances.TryGetValue(uniqueId, out var value))
{
return;
}
foreach (EffectInstance item in value)
{
if ((Object)(object)item.Obj != (Object)null)
{
Object.Destroy((Object)(object)item.Obj);
}
}
_activeEffectInstances.Remove(uniqueId);
}
public void PurgeInvalid(HashSet<int> validInstanceIds)
{
foreach (int item in _activeEffectInstances.Keys.Where((int id) => !validInstanceIds.Contains(id)).ToList())
{
foreach (EffectInstance item2 in _activeEffectInstances[item])
{
if ((Object)(object)item2.Obj != (Object)null)
{
Object.Destroy((Object)(object)item2.Obj);
}
}
_activeEffectInstances.Remove(item);
}
}
}
public class SeChestIndex : StatusEffect
{
public override string GetIconText()
{
int num = 0;
try
{
num = ChestContentsPlugin.ChestInfoDict.Count;
}
catch
{
}
if (num != 1)
{
return $"{num} chests";
}
return $"{num} chest";
}
}
}
namespace ChestContents.Commands
{
public class ConfigPanelCommand : ConsoleCommand
{
private readonly string _name;
public override string Name => _name;
public override string Help => "Open the ChestContents config panel";
public override bool IsNetwork => false;
public ConfigPanelCommand(string name = "chestconfig")
{
_name = name;
}
public override void Run(string[] args)
{
ChestContentsPlugin.Logger.LogWarning((object)"/chestconfig command run.");
if ((Object)(object)ChestContentsPlugin.ConfigPanelManagerInstance == (Object)null)
{
ChestContentsPlugin.Logger.LogWarning((object)"Config panel is not available yet. Try again in a few seconds after entering the world.");
}
else
{
ChestContentsPlugin.ConfigPanelManagerInstance.ShowPanel();
}
}
}
public class SearchChestsCommand : ConsoleCommand
{
private readonly string _name;
private readonly Func<IndicatedChestList> _getIndicatedList;
private readonly Func<Dictionary<int, ChestInfo>> _getChestInfoDict;
private readonly Func<Dictionary<string, List<ItemLocationInfo>>> _getItemNameIndex;
private readonly Func<int> _getLastTotalChestCount;
public override string Help => "Search Chests for an item";
public override string Name => _name;
public override bool IsNetwork => true;
public SearchChestsCommand(Func<IndicatedChestList> getIndicatedList, Func<Dictionary<int, ChestInfo>> getChestInfoDict, Func<Dictionary<string, List<ItemLocationInfo>>> getItemNameIndex, Func<int> getLastTotalChestCount, string name = "searchchests")
{
_name = name;
_getIndicatedList = getIndicatedList;
_getChestInfoDict = getChestInfoDict;
_getItemNameIndex = getItemNameIndex;
_getLastTotalChestCount = getLastTotalChestCount;
}
public override void Run(string[] args)
{
//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
//IL_02da: Unknown result type (might be due to invalid IL or missing references)
//IL_0320: Unknown result type (might be due to invalid IL or missing references)
//IL_0330: Unknown result type (might be due to invalid IL or missing references)
//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0303: Unknown result type (might be due to invalid IL or missing references)
IndicatedChestList indicatedChestList = _getIndicatedList();
Dictionary<int, ChestInfo> dictionary = _getChestInfoDict();
Dictionary<string, List<ItemLocationInfo>> dictionary2 = _getItemNameIndex();
int num = _getLastTotalChestCount();
if (args.Length == 0)
{
indicatedChestList?.Clear();
int count = dictionary.Count;
int count2 = dictionary2.Count;
int num2 = dictionary2.Values.SelectMany((List<ItemLocationInfo> x) => x).Sum((ItemLocationInfo x) => x.Stack);
int num3 = num;
PopupManager.ShowMetaPopup($"Chests indexed: {count}\nAll chests: {num3}\nUnique item types: {count2}\nTotal items: {num2}");
return;
}
string text = args[0].ToLowerInvariant();
List<ItemLocationInfo> list = new List<ItemLocationInfo>();
foreach (KeyValuePair<string, List<ItemLocationInfo>> item in dictionary2)
{
if (item.Key.Contains(text))
{
list.AddRange(item.Value);
}
}
if (list.Count == 0)
{
ChestContentsPlugin.Logger.LogInfo((object)("No items found matching '" + text + "'."));
return;
}
ItemLocationInfo topEntry = list.OrderByDescending((ItemLocationInfo x) => x.Stack).First();
ChestContentsPlugin.Logger.LogInfo((object)$"Found '{topEntry.ItemName}' x{topEntry.Stack} in chest {topEntry.ChestId} at {topEntry.Position}");
string text2 = topEntry.ItemName;
ChestInfo value = null;
dictionary.TryGetValue(topEntry.ChestId, out value);
if (value != null && value.Contents != null)
{
ItemData val = ((IEnumerable<ItemData>)value.Contents).FirstOrDefault((Func<ItemData, bool>)((ItemData i) => i.m_shared.m_name == topEntry.ItemName));
if (val != null && !string.IsNullOrEmpty(val.m_shared.m_name))
{
string text3 = LocalizationManager.Instance.TryTranslate(val.m_shared.m_name);
text2 = (string.IsNullOrEmpty(text3) ? val.m_shared.m_name : text3);
}
}
else if (text2.StartsWith("$"))
{
string text4 = LocalizationManager.Instance.TryTranslate(text2);
text2 = (string.IsNullOrEmpty(text4) ? text2.TrimStart(new char[1] { '$' }) : text4);
}
PopupManager.ShowSearchResultsPopup(text2, topEntry.Position, topEntry.Stack);
if (indicatedChestList != null)
{
indicatedChestList.Clear();
if (value != null && value.Position != Vector3.zero)
{
indicatedChestList.Add(value);
}
else
{
indicatedChestList.Add(new ChestInfo(topEntry.Position, topEntry.ChestId, Quaternion.identity, new List<ItemData>(), DateTime.Now, 0));
}
}
}
}
}