using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using Cosmetics_Box_Scanner.Models; using Cosmetics_Box_Scanner.Patches; using Cosmetics_Box_Scanner.Systems; using Cosmetics_Box_Scanner.UI; using HarmonyLib; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("Cosmetics_Box_Scanner")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.7.0")] [assembly: AssemblyInformationalVersion("1.0.7")] [assembly: AssemblyProduct("Cosmetics_Box_Scanner")] [assembly: AssemblyTitle("Cosmetics_Box_Scanner")] [assembly: AssemblyVersion("1.0.7.0")] namespace Cosmetics_Box_Scanner { [BepInPlugin("cosmetic.scanner", "Cosmetic Scanner", "1.0.3")] public class Plugin : BaseUnityPlugin { internal static Plugin Instance; internal static ManualLogSource Log; public static bool ShowGUI; private Harmony harmony; public ScannerUI scannerUI; private void Awake() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; harmony = new Harmony("cosmetic.scanner"); harmony.PatchAll(); Log.LogInfo((object)"Cosmetic Scanner Loaded"); } public void ToggleGUI() { if (scannerUI == null) { scannerUI = new ScannerUI(); scannerUI.Create(); Log.LogInfo((object)"UI CREATED"); } ShowGUI = !ShowGUI; scannerUI.SetVisible(ShowGUI); PlayerUpdatePatch.ResetTimer(); if (ShowGUI) { CosmeticScannerSystem.Scan(); scannerUI.Refresh(CosmeticScannerSystem.Stats, visible: true); scannerUI.ShowStatus("Cosmetic Overlay Enabled"); } else { scannerUI.Refresh(CosmeticScannerSystem.Stats, visible: false); scannerUI.ShowStatus("Cosmetic Overlay Disabled"); } } } } namespace Cosmetics_Box_Scanner.UI { internal class RarityRowFactory { public static GameObject CreateRarityRow(Transform parent, string spriteName, out TextMeshProUGUI textComponent, int index, int rowSpacing = 65) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0028: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_0099: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0102: 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_0130: 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_0147: Expected O, but got Unknown //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(spriteName); val.transform.SetParent(parent, false); RectTransform val2 = val.AddComponent(); val2.anchorMin = new Vector2(0f, 1f); val2.anchorMax = new Vector2(1f, 1f); val2.pivot = new Vector2(0.5f, 1f); val2.anchoredPosition = new Vector2(0f, (float)(-15 - index * rowSpacing)); val2.sizeDelta = new Vector2(0f, 36f); GameObject val3 = new GameObject("Icon"); val3.transform.SetParent(val.transform, false); Image val4 = val3.AddComponent(); val4.sprite = AssetLoader.Load(spriteName); RectTransform component = ((Component)val4).GetComponent(); 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(15f, 0f); component.sizeDelta = new Vector2(55f, 55f); GameObject val5 = new GameObject("Count"); val5.transform.SetParent(val.transform, false); textComponent = val5.AddComponent(); ((TMP_Text)textComponent).fontSize = 24f; ((Graphic)textComponent).color = Color.white; ((TMP_Text)textComponent).enableWordWrapping = false; RectTransform component2 = ((Component)textComponent).GetComponent(); component2.anchorMin = new Vector2(0f, 0f); component2.anchorMax = new Vector2(1f, 1f); component2.offsetMin = new Vector2(85f, 0f); component2.offsetMax = Vector2.zero; return val; } } public class ScannerUI { private GameObject canvasObject; private GameObject panelObject; private GameObject commonRow; private GameObject uncommonRow; private GameObject rareRow; private GameObject ultraRow; private TextMeshProUGUI commonText; private TextMeshProUGUI uncommonText; private TextMeshProUGUI rareText; private TextMeshProUGUI ultraText; private TextMeshProUGUI statusText; private float statusTimer; public void Create() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_00ba: 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_00f2: 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_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01da: Expected O, but got Unknown //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)canvasObject != (Object)null)) { canvasObject = new GameObject("CosmeticScannerCanvas"); Object.DontDestroyOnLoad((Object)(object)canvasObject); Canvas val = canvasObject.AddComponent(); val.renderMode = (RenderMode)0; val.sortingOrder = 9999; canvasObject.AddComponent(); canvasObject.AddComponent(); panelObject = new GameObject("Panel"); panelObject.transform.SetParent(canvasObject.transform, false); Image val2 = panelObject.AddComponent(); ((Graphic)val2).color = new Color(0f, 0f, 0f, 0.45f); RectTransform component = panelObject.GetComponent(); component.anchorMin = new Vector2(1f, 0f); component.anchorMax = new Vector2(1f, 0f); component.pivot = new Vector2(1f, 0f); component.anchoredPosition = new Vector2(-20f, 20f); component.sizeDelta = new Vector2(240f, 320f); commonRow = RarityRowFactory.CreateRarityRow(panelObject.transform, "transparent_bg_common.png", out commonText, 0); uncommonRow = RarityRowFactory.CreateRarityRow(panelObject.transform, "transparent_bg_uncommon.png", out uncommonText, 1); rareRow = RarityRowFactory.CreateRarityRow(panelObject.transform, "transparent_bg_rare.png", out rareText, 2); ultraRow = RarityRowFactory.CreateRarityRow(panelObject.transform, "transparent_bg_ultrarare.png", out ultraText, 3); GameObject val3 = new GameObject("StatusText"); val3.transform.SetParent(canvasObject.transform, false); statusText = val3.AddComponent(); ((TMP_Text)statusText).fontSize = 28f; ((Graphic)statusText).color = Color.white; ((TMP_Text)statusText).alignment = (TextAlignmentOptions)514; RectTransform component2 = ((Component)statusText).GetComponent(); component2.anchorMin = new Vector2(0.5f, 0.1f); component2.anchorMax = new Vector2(0.5f, 0.1f); component2.pivot = new Vector2(0.5f, 0.5f); component2.sizeDelta = new Vector2(600f, 80f); ((Component)statusText).gameObject.SetActive(false); canvasObject.SetActive(true); panelObject.SetActive(false); } } public void Refresh(CosmeticStats stats, bool visible) { if (!((Object)(object)commonText == (Object)null)) { commonRow.SetActive(stats.Common > 0); uncommonRow.SetActive(stats.Uncommon > 0); rareRow.SetActive(stats.Rare > 0); ultraRow.SetActive(stats.UltraRare > 0); ((TMP_Text)commonText).text = stats.Common.ToString(); ((TMP_Text)uncommonText).text = stats.Uncommon.ToString(); ((TMP_Text)rareText).text = stats.Rare.ToString(); ((TMP_Text)ultraText).text = stats.UltraRare.ToString(); bool flag = stats.Common > 0 || stats.Uncommon > 0 || stats.Rare > 0 || stats.UltraRare > 0; if ((Object)(object)panelObject != (Object)null) { panelObject.SetActive(visible && flag); } } } public void ShowStatus(string message) { if (!((Object)(object)statusText == (Object)null)) { ((TMP_Text)statusText).text = message; ((Component)statusText).gameObject.SetActive(true); statusTimer = 2f; } } public void Tick() { if (statusTimer > 0f) { statusTimer -= Time.deltaTime; if (statusTimer <= 0f) { ((Component)statusText).gameObject.SetActive(false); } } } public void SetVisible(bool visible) { if ((Object)(object)panelObject != (Object)null) { panelObject.SetActive(visible); } if (!visible && (Object)(object)statusText != (Object)null) { ((Component)statusText).gameObject.SetActive(false); } } } } namespace Cosmetics_Box_Scanner.Systems { public static class AssetLoader { public static Sprite Load(string fileName) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_007d: 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) string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)Plugin.Instance).Info.Location), fileName); if (!File.Exists(text)) { Plugin.Log.LogError((object)("SPRITE NOT FOUND: " + text)); return null; } byte[] array = File.ReadAllBytes(text); Texture2D val = new Texture2D(2, 2); ImageConversion.LoadImage(val, array); ((Texture)val).filterMode = (FilterMode)0; return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f)); } } public static class CosmeticScannerSystem { public static CosmeticStats Stats = new CosmeticStats(); public static void Scan() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected I4, but got Unknown CosmeticWorldObject[] array = Object.FindObjectsOfType(); Stats.Common = 0; Stats.Uncommon = 0; Stats.Rare = 0; Stats.UltraRare = 0; CosmeticWorldObject[] array2 = array; foreach (CosmeticWorldObject val in array2) { Rarity rarity = val.rarity; Rarity val2 = rarity; switch ((int)val2) { case 0: Stats.Common++; break; case 1: Stats.Uncommon++; break; case 2: Stats.Rare++; break; case 3: Stats.UltraRare++; break; } } } } } namespace Cosmetics_Box_Scanner.Patches { [HarmonyPatch(typeof(PlayerAvatar))] [HarmonyPatch("Update")] public class PlayerUpdatePatch { private static float scanTimer; private static bool debugMode; public static void ResetTimer() { scanTimer = 0f; } private static void Postfix() { Plugin.Instance.scannerUI?.Tick(); if (Input.GetKeyDown((KeyCode)287)) { Plugin.Instance.ToggleGUI(); } if ((Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303)) && Input.GetKeyDown((KeyCode)288)) { debugMode = !debugMode; if (debugMode) { Plugin.Instance.scannerUI.Refresh(CosmeticStats.CreateDebugStats(), visible: true); } else { CosmeticScannerSystem.Scan(); Plugin.Instance.scannerUI.Refresh(CosmeticScannerSystem.Stats, Plugin.ShowGUI); } } if (Plugin.ShowGUI && !debugMode) { scanTimer += Time.deltaTime; if (scanTimer >= 2f) { scanTimer = 0f; CosmeticScannerSystem.Scan(); Plugin.Instance.scannerUI.Refresh(CosmeticScannerSystem.Stats, visible: true); } } } } } namespace Cosmetics_Box_Scanner.Models { public class CosmeticStats { public int Common; public int Uncommon; public int Rare; public int UltraRare; public static CosmeticStats CreateDebugStats() { return new CosmeticStats { Common = 3, Uncommon = 2, Rare = 3, UltraRare = 1 }; } } }