using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("ScannerFix")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("ScannerFix")]
[assembly: AssemblyCopyright("Copyright QERT2002© 2024")]
[assembly: ComVisible(false)]
[assembly: AssemblyFileVersion("1.2")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace ScannerFix;
[HarmonyPatch]
internal class HudManagerPatcher
{
public static TextMeshProUGUI totalCountTextComp;
public static Image globalScanInfoImage;
public static GameObject MyUICircleObject;
public static TextMeshProUGUI MyUICircleObject_Text;
public static bool SuccessTranspillerPatch;
public static Vector3 scrapCenter;
public static int AllActiveScrapOnDisplay;
public static bool PrevImageState;
public static MethodInfo m_MyExtraMethod = typeof(HudManagerPatcher).GetMethod("DisplayTotalCount", BindingFlags.Static | BindingFlags.Public);
[HarmonyPostfix]
[HarmonyPatch(typeof(HUDManager), "Awake")]
public static void OV_HUDManager_Awake(HUDManager __instance)
{
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_021e: 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_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Expected O, but got Unknown
//IL_049d: Unknown result type (might be due to invalid IL or missing references)
//IL_05de: Unknown result type (might be due to invalid IL or missing references)
//IL_05ff: Unknown result type (might be due to invalid IL or missing references)
//IL_065d: Unknown result type (might be due to invalid IL or missing references)
//IL_067e: Unknown result type (might be due to invalid IL or missing references)
//IL_06dc: Unknown result type (might be due to invalid IL or missing references)
//IL_06fd: Unknown result type (might be due to invalid IL or missing references)
//IL_075b: Unknown result type (might be due to invalid IL or missing references)
//IL_077c: Unknown result type (might be due to invalid IL or missing references)
//IL_07da: Unknown result type (might be due to invalid IL or missing references)
//IL_07fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0859: Unknown result type (might be due to invalid IL or missing references)
//IL_087a: Unknown result type (might be due to invalid IL or missing references)
//IL_09dc: Unknown result type (might be due to invalid IL or missing references)
//IL_09e3: Expected O, but got Unknown
//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
//IL_02be: Expected O, but got Unknown
int value = SkannerFixConfig.MaxScrapToDisplay.Value;
bool value2 = SkannerFixConfig.EnabledFpsBoostUI.Value;
typeof(HUDManager).GetField("scanNodesHit", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(HUDManager.Instance, new RaycastHit[value]);
GameObject val = GameObject.Find("Systems/UI/Canvas/ObjectScanner");
GameObject val2 = GameObject.Find("Systems/UI/Canvas/ObjectScanner/ScanObject");
int num = 13;
int num2 = value - num;
if ((Object)(object)val != (Object)null && (Object)(object)val2 != (Object)null)
{
GameObject val3 = GameObject.Find("Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image");
GameObject val4 = GameObject.Find("Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image/TotalText");
if ((Object)(object)val3 != (Object)null && (Object)(object)val4 != (Object)null)
{
GameObject val5 = GameObject.Find("Systems/UI/Canvas/ObjectScanner/GlobalScanInfo/AnimContainer/Image/TotalNum");
if ((Object)(object)val5 != (Object)null)
{
TextMeshProUGUI component = val5.GetComponent<TextMeshProUGUI>();
((TMP_Text)component).enableAutoSizing = true;
((TMP_Text)component).fontSizeMax = 21f;
}
globalScanInfoImage = val3.GetComponent<Image>();
GameObject val6 = Object.Instantiate<GameObject>(val4);
((Object)val6).name = "TotalCount_qert_ScannerFix";
val6.transform.SetParent(val3.transform, false);
Vector3 localPosition = val4.transform.localPosition;
localPosition.y = -29f;
val6.transform.localPosition = localPosition;
totalCountTextComp = val6.GetComponent<TextMeshProUGUI>();
val6.SetActive(true);
((Behaviour)totalCountTextComp).enabled = false;
}
for (int i = 0; i < num2; i++)
{
GameObject val7 = Object.Instantiate<GameObject>(val2);
((Object)val7).name = $"ScanObject ({num})";
num++;
val7.SetActive(false);
val7.transform.SetParent(val.transform, false);
}
if (value2 && (Object)(object)MyUICircleObject == (Object)null)
{
MyUICircleObject = Object.Instantiate<GameObject>(val2);
((Object)MyUICircleObject).name = "BigScanObject";
MyUICircleObject.SetActive(false);
scrapCenter = Vector3.zero;
Object.Destroy((Object)(object)((Component)MyUICircleObject.transform.Find("Text/SubTextBox")).gameObject);
Object.Destroy((Object)(object)((Component)MyUICircleObject.transform.Find("Text/SubText")).gameObject);
foreach (Transform item in MyUICircleObject.transform)
{
Transform val8 = item;
if (!(((Object)val8).name == "Text"))
{
continue;
}
foreach (Transform item2 in val8)
{
Transform val9 = item2;
if (((Object)val9).name == "HeaderText")
{
val9.SetParent(val8.Find("HeaderTextBox"));
}
}
}
Transform val10 = MyUICircleObject.transform.Find("Text/HeaderTextBox");
GameObject val11 = Object.Instantiate<GameObject>(((Component)val10).gameObject);
Object.Destroy((Object)(object)val11.GetComponent<Image>());
Object.Destroy((Object)(object)val11.GetComponent<Outline>());
((Object)val11).name = "HeaderTextBox_Panel";
Object.Destroy((Object)(object)((Component)val11.transform.GetChild(0)).gameObject);
val11.transform.SetParent(MyUICircleObject.transform.Find("Text"));
val10.SetParent(val11.transform);
Transform val12 = MyUICircleObject.transform.Find("Text/HeaderTextBox_Panel/HeaderTextBox");
val11.AddComponent<HorizontalLayoutGroup>();
HorizontalLayoutGroup component2 = val11.GetComponent<HorizontalLayoutGroup>();
((HorizontalOrVerticalLayoutGroup)component2).childControlHeight = true;
((HorizontalOrVerticalLayoutGroup)component2).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)component2).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)component2).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)component2).childScaleHeight = false;
((HorizontalOrVerticalLayoutGroup)component2).childScaleWidth = false;
val11.AddComponent<ContentSizeFitter>();
ContentSizeFitter component3 = val11.GetComponent<ContentSizeFitter>();
component3.horizontalFit = (FitMode)0;
component3.verticalFit = (FitMode)2;
val11.AddComponent<LayoutElement>();
LayoutElement component4 = val11.GetComponent<LayoutElement>();
component4.preferredHeight = 240f;
component4.flexibleHeight = 0f;
component4.flexibleWidth = 0f;
component4.layoutPriority = 1;
RectTransform component5 = val11.GetComponent<RectTransform>();
component5.sizeDelta = new Vector2(1000f, 640f);
((Component)val12).gameObject.AddComponent<HorizontalLayoutGroup>();
HorizontalLayoutGroup component6 = ((Component)val12).gameObject.GetComponent<HorizontalLayoutGroup>();
((LayoutGroup)component6).padding.left = 5;
((LayoutGroup)component6).padding.right = 5;
((LayoutGroup)component6).padding.top = 5;
((LayoutGroup)component6).padding.bottom = 5;
((HorizontalOrVerticalLayoutGroup)component6).spacing = 20f;
((HorizontalOrVerticalLayoutGroup)component6).childControlHeight = true;
((HorizontalOrVerticalLayoutGroup)component6).childControlWidth = true;
((HorizontalOrVerticalLayoutGroup)component6).childForceExpandHeight = false;
((HorizontalOrVerticalLayoutGroup)component6).childForceExpandWidth = false;
((HorizontalOrVerticalLayoutGroup)component6).childScaleHeight = false;
((HorizontalOrVerticalLayoutGroup)component6).childScaleWidth = false;
MyUICircleObject.transform.SetParent(val.transform, false);
Transform val13 = MyUICircleObject.transform.Find("Text/HeaderTextBox_Panel/HeaderTextBox/HeaderText");
((TMP_Text)((Component)val13).GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)((Component)val13).GetComponent<TextMeshProUGUI>()).fontSize = 10f;
GameObject val14 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val14.transform.SetParent(val12);
val14.transform.localScale = new Vector3(1f, 1f, 1f);
val14.transform.localPosition = new Vector3(0f, 0f, 0f);
GameObject val15 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val15.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)val15.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val15.transform.SetParent(val12);
val15.transform.localScale = new Vector3(1f, 1f, 1f);
val15.transform.localPosition = new Vector3(0f, 0f, 0f);
GameObject val16 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val16.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)val16.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val16.transform.SetParent(val12);
val16.transform.localScale = new Vector3(1f, 1f, 1f);
val16.transform.localPosition = new Vector3(0f, 0f, 0f);
GameObject val17 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val17.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)val17.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val17.transform.SetParent(val12);
val17.transform.localScale = new Vector3(1f, 1f, 1f);
val17.transform.localPosition = new Vector3(0f, 0f, 0f);
GameObject val18 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val18.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)6;
((TMP_Text)val18.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val18.transform.SetParent(val12);
val18.transform.localScale = new Vector3(1f, 1f, 1f);
val18.transform.localPosition = new Vector3(0f, 0f, 0f);
GameObject val19 = Object.Instantiate<GameObject>(((Component)val13).gameObject);
((TMP_Text)val19.GetComponent<TextMeshProUGUI>()).overflowMode = (TextOverflowModes)1;
((TMP_Text)val19.GetComponent<TextMeshProUGUI>()).fontSize = 10f;
val19.transform.SetParent(val12);
val19.transform.localScale = new Vector3(1f, 1f, 1f);
val19.transform.localPosition = new Vector3(0f, 0f, 0f);
((TMP_Text)((Component)val13).GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val14.GetComponent<TextMeshProUGUI>();
((TMP_Text)val14.GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val15.GetComponent<TextMeshProUGUI>();
((TMP_Text)val15.GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val16.GetComponent<TextMeshProUGUI>();
((TMP_Text)val16.GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val17.GetComponent<TextMeshProUGUI>();
((TMP_Text)val17.GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val18.GetComponent<TextMeshProUGUI>();
((TMP_Text)val18.GetComponent<TextMeshProUGUI>()).linkedTextComponent = (TMP_Text)(object)val19.GetComponent<TextMeshProUGUI>();
MyUICircleObject_Text = ((Component)MyUICircleObject.transform.Find("Text/HeaderTextBox_Panel/HeaderTextBox/HeaderText")).GetComponent<TextMeshProUGUI>();
}
HUDManager.Instance.scanElements = (RectTransform[])(object)new RectTransform[value];
for (int j = 0; j < value; j++)
{
if (j == 0)
{
HUDManager.Instance.scanElements[j] = GameObject.Find("Systems/UI/Canvas/ObjectScanner/ScanObject").GetComponent<RectTransform>();
}
else
{
HUDManager.Instance.scanElements[j] = GameObject.Find($"Systems/UI/Canvas/ObjectScanner/ScanObject ({j})").GetComponent<RectTransform>();
}
}
if (value2)
{
RectTransform[] scanElements = HUDManager.Instance.scanElements;
foreach (RectTransform val20 in scanElements)
{
foreach (Transform item3 in ((Component)val20).gameObject.transform)
{
Transform val21 = item3;
((Component)val21).gameObject.SetActive(false);
}
}
AllActiveScrapOnDisplay = 0;
}
}
Debug.Log((object)$"[QERT_SkannerFix] Now the scanner will show you a maximum of [{value}] units of scrap!");
}
[HarmonyPostfix]
[HarmonyPatch(typeof(HUDManager), "AssignNewNodes")]
public static void OV_HUDManager_AssignNewNodes(HUDManager __instance)
{
if ((Object)(object)__instance != (Object)null && !SuccessTranspillerPatch)
{
object value = typeof(HUDManager).GetField("scannedScrapNum", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
if (value != null)
{
((TMP_Text)totalCountTextComp).text = $"Count:{(int)value}";
}
}
}
public static Vector3 calculateCentroid(Vector3[] arrayVectors)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(0f, 0f, 0f);
int num = arrayVectors.Length;
foreach (Vector3 val2 in arrayVectors)
{
val += val2;
}
val /= (float)num;
return val;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void AddScrapToDisplay(GameObject scrapUIObject, ScanNodeProperties value)
{
//IL_00ec: 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_011e: Unknown result type (might be due to invalid IL or missing references)
AllActiveScrapOnDisplay++;
List<ScanNodeProperties> list = (List<ScanNodeProperties>)typeof(HUDManager).GetField("nodesOnScreen", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(HUDManager.Instance);
if (list.Count < SkannerFixConfig.ScrapAmountFor_FpsBoostStart.Value)
{
((Component)scrapUIObject.transform.GetChild(0)).gameObject.SetActive(true);
((Component)scrapUIObject.transform.GetChild(1)).gameObject.SetActive(true);
}
else
{
if (!MyUICircleObject.activeSelf)
{
MyUICircleObject.SetActive(true);
MyUICircleObject.GetComponent<Animator>().SetInteger("colorNumber", 2);
List<Vector3> list2 = new List<Vector3>();
foreach (ScanNodeProperties item in list)
{
if (item.nodeType == 2)
{
list2.Add(((Component)item).transform.position);
}
}
scrapCenter = calculateCentroid(list2.ToArray());
}
if (value.nodeType == 2)
{
TextMeshProUGUI myUICircleObject_Text = MyUICircleObject_Text;
((TMP_Text)myUICircleObject_Text).text = ((TMP_Text)myUICircleObject_Text).text + $"{value.headerText} -${value.scrapValue} \n";
}
}
scrapUIObject.SetActive(true);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void RemoveScrapFromDisplay(GameObject scrapUIObject)
{
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
if (AllActiveScrapOnDisplay != 0)
{
AllActiveScrapOnDisplay--;
}
scrapUIObject.SetActive(false);
((Component)scrapUIObject.transform.GetChild(0)).gameObject.SetActive(false);
((Component)scrapUIObject.transform.GetChild(1)).gameObject.SetActive(false);
if (AllActiveScrapOnDisplay < SkannerFixConfig.ScrapAmountFor_FpsBoostStart.Value && MyUICircleObject.activeSelf)
{
MyUICircleObject.SetActive(false);
scrapCenter = Vector3.zero;
((TMP_Text)MyUICircleObject_Text).text = "";
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(HUDManager), "NodeIsNotVisible")]
public static bool OV_NodeIsNotVisible(HUDManager __instance, ScanNodeProperties node, int elementIndex)
{
if (!SkannerFixConfig.EnabledFpsBoostUI.Value)
{
return true;
}
if ((Object)(object)HUDManager.Instance != (Object)null)
{
List<ScanNodeProperties> list = (List<ScanNodeProperties>)typeof(HUDManager).GetField("nodesOnScreen", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(HUDManager.Instance);
if (!list.Contains(node))
{
RemoveScrapFromDisplay(((Component)__instance.scanElements[elementIndex]).gameObject);
}
}
return true;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(HUDManager), "UpdateScanNodes")]
public static bool OV_UpdateScanNodes(HUDManager __instance, PlayerControllerB playerScript)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0368: Unknown result type (might be due to invalid IL or missing references)
//IL_036d: Unknown result type (might be due to invalid IL or missing references)
//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
//IL_03d2: Unknown result type (might be due to invalid IL or missing references)
//IL_03d7: Unknown result type (might be due to invalid IL or missing references)
//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
//IL_03ed: Unknown result type (might be due to invalid IL or missing references)
//IL_03f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0384: Unknown result type (might be due to invalid IL or missing references)
//IL_0389: Unknown result type (might be due to invalid IL or missing references)
//IL_038e: Unknown result type (might be due to invalid IL or missing references)
//IL_039a: Unknown result type (might be due to invalid IL or missing references)
//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
if (!SkannerFixConfig.EnabledFpsBoostUI.Value)
{
return true;
}
Vector3 zero = Vector3.zero;
if ((float)typeof(HUDManager).GetField("updateScanInterval", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance) <= 0f)
{
typeof(HUDManager).GetField("updateScanInterval", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, 0.25f);
typeof(HUDManager).GetMethod("AssignNewNodes", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[1] { playerScript });
}
float num = (float)typeof(HUDManager).GetField("updateScanInterval", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
num -= Time.deltaTime;
typeof(HUDManager).GetField("updateScanInterval", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, num);
bool flag = false;
for (int i = 0; i < __instance.scanElements.Length; i++)
{
Dictionary<RectTransform, ScanNodeProperties> dictionary = (Dictionary<RectTransform, ScanNodeProperties>)typeof(HUDManager).GetField("scanNodes", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
if (dictionary.Count > 0 && dictionary.TryGetValue(__instance.scanElements[i], out var value) && (Object)(object)value != (Object)null)
{
try
{
if ((bool)typeof(HUDManager).GetMethod("NodeIsNotVisible", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[2] { value, i }))
{
continue;
}
if (!((Component)__instance.scanElements[i]).gameObject.activeSelf)
{
AddScrapToDisplay(((Component)__instance.scanElements[i]).gameObject, value);
((Component)__instance.scanElements[i]).GetComponent<Animator>().SetInteger("colorNumber", value.nodeType);
if (value.creatureScanID != -1)
{
typeof(HUDManager).GetMethod("AttemptScanNewCreature", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(__instance, new object[1] { value.creatureScanID });
}
}
goto IL_02b0;
}
catch (Exception arg)
{
Debug.LogError((object)$"Error in updatescanNodes A: {arg}");
goto IL_02b0;
}
}
if (((Component)__instance.scanElements[i]).gameObject.activeSelf)
{
RemoveScrapFromDisplay(((Component)__instance.scanElements[i]).gameObject);
}
dictionary.Remove(__instance.scanElements[i]);
typeof(HUDManager).GetField("scanNodes", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, dictionary);
continue;
IL_02b0:
try
{
typeof(HUDManager).GetField("scanElementText", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, ((Component)__instance.scanElements[i]).gameObject.GetComponentsInChildren<TextMeshProUGUI>());
TextMeshProUGUI[] array = (TextMeshProUGUI[])typeof(HUDManager).GetField("scanElementText", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
if (array.Length > 1)
{
((TMP_Text)array[0]).text = value.headerText;
((TMP_Text)array[1]).text = value.subText;
typeof(HUDManager).GetField("scanElementText", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, array);
}
if (value.nodeType == 2)
{
flag = true;
}
if (scrapCenter != Vector3.zero)
{
Vector3 val = playerScript.gameplayCamera.WorldToScreenPoint(scrapCenter);
MyUICircleObject.GetComponent<RectTransform>().anchoredPosition = new Vector2(val.x - 439.48f, val.y - 244.8f);
}
zero = playerScript.gameplayCamera.WorldToScreenPoint(((Component)value).transform.position);
__instance.scanElements[i].anchoredPosition = new Vector2(zero.x - 439.48f, zero.y - 244.8f);
}
catch (Exception arg2)
{
Debug.LogError((object)$"Error in updatescannodes B: {arg2}");
}
}
try
{
if (!flag)
{
__instance.totalScrapScanned = 0;
typeof(HUDManager).GetField("totalScrapScannedDisplayNum", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, 0);
typeof(HUDManager).GetField("addToDisplayTotalInterval", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, 0.35f);
}
int num2 = (int)typeof(HUDManager).GetField("scannedScrapNum", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(__instance);
__instance.scanInfoAnimator.SetBool("display", num2 >= 2 && flag);
}
catch (Exception arg3)
{
Debug.LogError((object)$"Error in updatescannodes C: {arg3}");
}
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(HUDManager), "DisableAllScanElements")]
public static bool OV_DisableAllScanElements(HUDManager __instance)
{
//IL_006f: 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)
if (!SkannerFixConfig.EnabledFpsBoostUI.Value)
{
return true;
}
if ((Object)(object)__instance != (Object)null)
{
for (int i = 0; i < __instance.scanElements.Length; i++)
{
RemoveScrapFromDisplay(((Component)__instance.scanElements[i]).gameObject);
}
if ((Object)(object)MyUICircleObject != (Object)null)
{
MyUICircleObject.SetActive(false);
scrapCenter = Vector3.zero;
((TMP_Text)MyUICircleObject_Text).text = "";
}
}
return true;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(HUDManager), "Update")]
public static void OV_HUDManager_Update(HUDManager __instance)
{
if (!((Object)(object)__instance != (Object)null) || !((Object)(object)globalScanInfoImage != (Object)null))
{
return;
}
if (((Behaviour)globalScanInfoImage).enabled)
{
if (PrevImageState != ((Behaviour)globalScanInfoImage).enabled)
{
SetTotalCountTextEnabled(enabled: true);
PrevImageState = ((Behaviour)globalScanInfoImage).enabled;
}
}
else if (PrevImageState != ((Behaviour)globalScanInfoImage).enabled)
{
SetTotalCountTextEnabled(enabled: false);
PrevImageState = ((Behaviour)globalScanInfoImage).enabled;
}
}
public static void SetTotalCountTextEnabled(bool enabled)
{
((Behaviour)totalCountTextComp).enabled = enabled;
}
public static void DisplayTotalCount()
{
if ((Object)(object)HUDManager.Instance != (Object)null)
{
object value = typeof(HUDManager).GetField("scannedScrapNum", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(HUDManager.Instance);
if (value != null)
{
((TMP_Text)totalCountTextComp).text = $"Count:{(int)value}";
}
}
}
[HarmonyTranspiler]
[HarmonyPatch(typeof(HUDManager), "Update")]
public static IEnumerable<CodeInstruction> OV_HUDManager_Update_Transpiller(IEnumerable<CodeInstruction> instructions)
{
bool found = false;
foreach (CodeInstruction instruction in instructions)
{
if (((object)instruction).ToString() == "ldfld UnityEngine.AudioClip HUDManager::addToScrapTotalSFX")
{
yield return new CodeInstruction(OpCodes.Call, (object)m_MyExtraMethod);
found = true;
}
if (((object)instruction).ToString() == "ldc.r4 10000")
{
yield return new CodeInstruction(OpCodes.Ldc_R4, (object)100000f);
}
else
{
yield return instruction;
}
}
if (object.Equals(false, found))
{
Debug.Log((object)"[QERT_ScannerFix]Error: cannot find il instructions to patch HUDManager:Update, want to insert method after scrap scanned(UIAudio.PlayOneShot(addToScrapTotalSFX);)");
SuccessTranspillerPatch = false;
}
else
{
SuccessTranspillerPatch = true;
}
}
}
public static class BoundsExtension
{
public static Bounds GrowBounds(this Bounds a, Bounds b)
{
//IL_0003: 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_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: 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_003c: 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_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = Vector3.Max(((Bounds)(ref a)).max, ((Bounds)(ref b)).max);
Vector3 val2 = Vector3.Min(((Bounds)(ref a)).min, ((Bounds)(ref b)).min);
((Bounds)(ref a))..ctor((val + val2) * 0.5f, val - val2);
return a;
}
}
[BepInPlugin("com.github.qert2002.ScannerFix", "ScannerFix", "1.2")]
internal class ScannerFix : BaseUnityPlugin
{
public const string GUID = "com.github.qert2002.ScannerFix";
public const string NAME = "ScannerFix";
public const string VERSION = "1.2";
internal static SkannerFixConfig Config;
internal static ManualLogSource Log;
private void Awake()
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
Log = ((BaseUnityPlugin)this).Logger;
Config = new SkannerFixConfig(((BaseUnityPlugin)this).Config);
Config.RegisterOptions();
new Harmony("com.github.qert2002.ScannerFix").PatchAll(Assembly.GetExecutingAssembly());
}
private void Start()
{
SetLobbyCompatibility();
}
private void SetLobbyCompatibility()
{
if (!Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility"))
{
return;
}
MethodInfo methodInfo = AccessTools.Method("LobbyCompatibility.Features.PluginHelper:RegisterPlugin", (Type[])null, (Type[])null);
if ((object)methodInfo == null)
{
Log.LogWarning((object)"Found LobbyCompatibility mod but failed to find plugin register API method!");
return;
}
Log.LogDebug((object)"Registering compatibility with LobbyCompatibility.");
try
{
methodInfo.Invoke(null, new object[4]
{
"com.github.qert2002.ScannerFix",
new Version("1.2"),
0,
0
});
}
catch (Exception arg)
{
Log.LogError((object)$"Failed to register plugin compatibility with LobbyCompatibility.\n{arg}");
return;
}
Log.LogDebug((object)"Successfully registered with LobbyCompatibility.");
}
}
internal class SkannerFixConfig
{
private readonly ConfigFile _configFile;
public static ConfigEntry<int> MaxScrapToDisplay;
public static ConfigEntry<bool> EnabledFpsBoostUI;
public static ConfigEntry<int> ScrapAmountFor_FpsBoostStart;
public SkannerFixConfig(ConfigFile configFile)
{
_configFile = configFile;
}
public void RegisterOptions()
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
MaxScrapToDisplay = _configFile.Bind<int>("General", "MaxScrapToDisplay", 255, new ConfigDescription("How much scrap will the scanner show?(Min 13 - Max 255)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(13, 255), Array.Empty<object>()));
EnabledFpsBoostUI = _configFile.Bind<bool>("General", "EnabledFpsBoostUI", true, new ConfigDescription("If enabled change many circles to one big(Boost your FPS)", (AcceptableValueBase)(object)new AcceptableValueRange<bool>(false, true), Array.Empty<object>()));
ScrapAmountFor_FpsBoostStart = _configFile.Bind<int>("General", "ScrapAmountFor_FpsBoostStart", 45, new ConfigDescription("How much scrap will need to activate FPS Boost (REQUIRE EnabledFpsBoostUI True)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(14, 255), Array.Empty<object>()));
}
}