using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ScanRarity")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("ScanRarity")] [assembly: AssemblyTitle("ScanRarity")] [assembly: AssemblyVersion("1.0.0.0")] namespace ScanRarity; [HarmonyPatch(typeof(HUDManager), "UpdateScanNodes")] public class HUDManagerPatch { private static void Postfix(HUDManager __instance) { ScrapScanner.OnScanUpdate(__instance); if (Plugin.DisableVanillaScanDisplay.Value) { HideVanillaScrapLabels(__instance); } } private static void HideVanillaScrapLabels(HUDManager hud) { Dictionary value = Traverse.Create((object)hud).Field("scanNodes").GetValue>(); if (value != null && hud.scanElements != null) { for (int i = 0; i < hud.scanElements.Length; i++) { RectTransform val = hud.scanElements[i]; if (!((Object)(object)val == (Object)null) && value.TryGetValue(val, out var value2) && (Object)(object)value2 != (Object)null && value2.nodeType == 2 && ((Component)val).gameObject.activeSelf) { ((Component)val).gameObject.SetActive(false); } } } if ((Object)(object)hud.scanInfoAnimator != (Object)null) { hud.scanInfoAnimator.SetBool("display", false); } } } public static class Localization { public const string DefaultLanguage = "zh-CN"; public const string FallbackLanguage = "en"; public static string CurrentLanguage = "zh-CN"; public static string ValueFormat = "{itemName} {value}"; public static string DollarSign = "$"; public static readonly Dictionary ItemNames = new Dictionary(StringComparer.OrdinalIgnoreCase); private static readonly Regex FieldRegex = new Regex("\"([A-Za-z0-9_]+)\"\\s*:\\s*\"((?:\\\\.|[^\"\\\\])*)\"", RegexOptions.Compiled); private static readonly Regex ItemRegex = new Regex("\"key\"\\s*:\\s*\"((?:\\\\.|[^\"\\\\])*)\"\\s*,\\s*\"value\"\\s*:\\s*\"((?:\\\\.|[^\"\\\\])*)\"", RegexOptions.Compiled); public static void Load(string language) { CurrentLanguage = (string.IsNullOrEmpty(language) ? "zh-CN" : language); ItemNames.Clear(); ValueFormat = "{itemName} {value}"; DollarSign = "$"; if (!TryLoadFile(CurrentLanguage, out var json) && CurrentLanguage != "en") { Plugin.Log.LogWarning((object)("ScanRarity: language '" + CurrentLanguage + "' not found, falling back to 'en'")); TryLoadFile("en", out json); } if (json == null) { return; } try { string text = Parse(json); Plugin.Log.LogInfo((object)("ScanRarity: localization loaded '" + CurrentLanguage + "' (" + (text ?? "?") + ", " + ItemNames.Count + " item names)")); } catch (Exception ex) { Plugin.Log.LogWarning((object)("ScanRarity: localization load error for '" + CurrentLanguage + "': " + ex.Message)); } } private static string Parse(string json) { string result = null; foreach (Match item in FieldRegex.Matches(json)) { string value = item.Groups[1].Value; string text = Unescape(item.Groups[2].Value); switch (value) { case "language_name": result = text; break; case "value_format": if (!string.IsNullOrEmpty(text)) { ValueFormat = text; } break; case "dollar_sign": if (!string.IsNullOrEmpty(text)) { DollarSign = text; } break; } } int num = json.IndexOf("\"items\"", StringComparison.Ordinal); string input = ((num >= 0) ? json.Substring(num) : ""); foreach (Match item2 in ItemRegex.Matches(input)) { string text2 = Unescape(item2.Groups[1].Value); string value2 = Unescape(item2.Groups[2].Value); if (!string.IsNullOrEmpty(text2)) { ItemNames[text2] = value2; } } return result; } private static string Unescape(string s) { if (string.IsNullOrEmpty(s) || s.IndexOf('\\') < 0) { return s; } StringBuilder stringBuilder = new StringBuilder(s.Length); for (int i = 0; i < s.Length; i++) { char c = s[i]; if (c == '\\' && i + 1 < s.Length) { i++; char c2 = s[i]; switch (c2) { case 'n': stringBuilder.Append('\n'); break; case 'r': stringBuilder.Append('\r'); break; case 't': stringBuilder.Append('\t'); break; case 'u': { if (i + 4 < s.Length && int.TryParse(s.Substring(i + 1, 4), NumberStyles.HexNumber, null, out var result)) { stringBuilder.Append((char)result); i += 4; } else { stringBuilder.Append(c2); } break; } default: stringBuilder.Append(c2); break; } } else { stringBuilder.Append(c); } } return stringBuilder.ToString(); } public static string TranslateItemName(string englishName) { if (string.IsNullOrEmpty(englishName)) { return englishName; } if (ItemNames.TryGetValue(englishName, out var value) && !string.IsNullOrEmpty(value)) { return value; } return englishName; } private static bool TryLoadFile(string language, out string json) { json = null; try { string directoryName = Path.GetDirectoryName(typeof(Localization).Assembly.Location); if (string.IsNullOrEmpty(directoryName)) { return false; } string path = Path.Combine(directoryName, "languages", language + ".json"); if (!File.Exists(path)) { path = Path.Combine(directoryName, "languages", language, language + ".json"); } if (!File.Exists(path)) { return false; } json = File.ReadAllText(path); return true; } catch (Exception ex) { Plugin.Log.LogWarning((object)("ScanRarity: cannot read language file: " + ex.Message)); return false; } } } [BepInPlugin("ScanRarity", "ScanRarity", "0.0.1")] public class Plugin : BaseUnityPlugin { public static Plugin Instance; public static ManualLogSource Log; private Harmony _harmony; public static ConfigEntry Enabled; public static ConfigEntry BeaconDuration; public static ConfigEntry BeaconHeight; public static ConfigEntry ShowValueText; public static ConfigEntry ShowDollarSign; public static ConfigEntry Language; public static ConfigEntry TextFontSize; public static ConfigEntry TextVerticalOffset; public static ConfigEntry DisableVanillaScanDisplay; public static ConfigEntry RarityRedThreshold; public static ConfigEntry RarityGoldThreshold; public static ConfigEntry RarityPurpleThreshold; public static ConfigEntry RarityBlueThreshold; public static ConfigEntry RarityGreenThreshold; private void Awake() { //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Expected O, but got Unknown Instance = this; Log = ((BaseUnityPlugin)this).Logger; Enabled = ((BaseUnityPlugin)this).Config.Bind("General", "Enabled", true, "Master switch for ScanRarity."); BeaconDuration = ((BaseUnityPlugin)this).Config.Bind("General", "BeaconDuration", 8f, "Seconds the light pillar stays after an item is scanned."); BeaconHeight = ((BaseUnityPlugin)this).Config.Bind("General", "BeaconHeight", 3f, "Height of the light pillar."); ShowValueText = ((BaseUnityPlugin)this).Config.Bind("General", "ShowValueText", true, "Show the scrap value above the pillar."); ShowDollarSign = ((BaseUnityPlugin)this).Config.Bind("General", "ShowDollarSign", false, "Prefix the value text with a $ sign."); Language = ((BaseUnityPlugin)this).Config.Bind("General", "Language", "zh-CN", "Language to use. Looks for a file in /languages//.json (or /languages/.json). Built-in: en, zh-CN, ru. Add your own folder/file to customize."); TextFontSize = ((BaseUnityPlugin)this).Config.Bind("General", "TextFontSize", 72, "Font size of the value text."); TextVerticalOffset = ((BaseUnityPlugin)this).Config.Bind("General", "TextVerticalOffset", 0.4f, "Vertical offset of the value text above the particles (Y axis)."); DisableVanillaScanDisplay = ((BaseUnityPlugin)this).Config.Bind("General", "DisableVanillaScanDisplay", true, "Hide the vanilla scan HUD labels (item name + value) for scrap nodes; disable to restore vanilla scrap scan display."); RarityRedThreshold = ((BaseUnityPlugin)this).Config.Bind("Rarity", "RedThreshold", 300, "Value >= this threshold -> Red (highest rarity)."); RarityGoldThreshold = ((BaseUnityPlugin)this).Config.Bind("Rarity", "GoldThreshold", 200, "Value >= this threshold -> Gold."); RarityPurpleThreshold = ((BaseUnityPlugin)this).Config.Bind("Rarity", "PurpleThreshold", 130, "Value >= this threshold -> Purple."); RarityBlueThreshold = ((BaseUnityPlugin)this).Config.Bind("Rarity", "BlueThreshold", 80, "Value >= this threshold -> Blue."); RarityGreenThreshold = ((BaseUnityPlugin)this).Config.Bind("Rarity", "GreenThreshold", 40, "Value >= this threshold -> Green; below -> White."); _harmony = new Harmony("ScanRarity"); _harmony.PatchAll(); Localization.Load(Language.Value); Log.LogInfo((object)("ScanRarity 0.0.1 loaded (language: " + Localization.CurrentLanguage + ")")); } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } } public static class RarityColors { public static readonly Color White = new Color(0.85f, 0.85f, 0.85f); public static readonly Color Green = new Color(0.25f, 1f, 0.4f); public static readonly Color Blue = new Color(0.3f, 0.55f, 1f); public static readonly Color Purple = new Color(0.8f, 0.3f, 1f); public static readonly Color Gold = new Color(1f, 0.8f, 0.15f); public static readonly Color Red = new Color(1f, 0.2f, 0.2f); public static Color GetRarityColor(int value) { //IL_000d: 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_0033: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) if (value >= Plugin.RarityRedThreshold.Value) { return Red; } if (value >= Plugin.RarityGoldThreshold.Value) { return Gold; } if (value >= Plugin.RarityPurpleThreshold.Value) { return Purple; } if (value >= Plugin.RarityBlueThreshold.Value) { return Blue; } if (value >= Plugin.RarityGreenThreshold.Value) { return Green; } return White; } } public class ScrapBeacon : MonoBehaviour { private static readonly Dictionary _activeBeacons = new Dictionary(); private GrabbableObject _target; private int _value; private string _itemName; private float _remaining; private float _updateTimer; private bool _visible = true; private GameObject _pillar; private GameObject _pillarCore; private GameObject _ring; private GameObject _glow; private ParticleSystem _particles; private TextMesh _valueText; private Color _rarityColor; public static void GetOrCreate(GrabbableObject target, int value) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)target == (Object)null) { return; } if (_activeBeacons.TryGetValue(target, out var value2)) { if (!((Object)(object)value2 == (Object)null)) { value2.Refresh(value); return; } _activeBeacons.Remove(target); } ScrapBeacon scrapBeacon = new GameObject("ScanRarityBeacon").AddComponent(); scrapBeacon._target = target; scrapBeacon.Init(value); _activeBeacons[target] = scrapBeacon; } private void Init(int value) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) _value = value; _itemName = (((Object)(object)_target != (Object)null && (Object)(object)_target.itemProperties != (Object)null) ? _target.itemProperties.itemName : null); _remaining = Plugin.BeaconDuration.Value; _rarityColor = RarityColors.GetRarityColor(value); BuildParticles(); if (Plugin.ShowValueText.Value) { BuildText(); } } public void Refresh(int newValue) { //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) if (newValue != _value) { _value = newValue; _rarityColor = RarityColors.GetRarityColor(newValue); ApplyColor(); } _remaining = Plugin.BeaconDuration.Value; if (_remaining >= 1f) { ApplyAlpha(1f); } } private static Material CreateColoredMaterial(Color color) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_0067: Unknown result type (might be due to invalid IL or missing references) Shader val = Shader.Find("Sprites/Default"); if ((Object)(object)val == (Object)null) { val = Shader.Find("Unlit/Color"); } if ((Object)(object)val == (Object)null) { val = Shader.Find("Standard"); } if ((Object)(object)val == (Object)null) { val = Shader.Find("Diffuse"); } if ((Object)(object)val == (Object)null) { return null; } Material val2 = new Material(val); if (val2.HasProperty("_Color")) { val2.color = color; } return val2; } private void BuildPillar() { //IL_006a: 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_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_0144: 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_019a: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) float value = Plugin.BeaconHeight.Value; _pillar = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)_pillar).name = "PillarHalo"; Object.Destroy((Object)(object)_pillar.GetComponent()); _pillar.transform.SetParent(((Component)this).transform, false); _pillar.transform.localPosition = new Vector3(0f, value * 0.5f, 0f); _pillar.transform.localScale = new Vector3(0.16f, value * 0.5f, 0.16f); Material val = CreateColoredMaterial(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.16f)); if ((Object)(object)val != (Object)null) { ((Renderer)_pillar.GetComponent()).material = val; } _pillarCore = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)_pillarCore).name = "PillarCore"; Object.Destroy((Object)(object)_pillarCore.GetComponent()); _pillarCore.transform.SetParent(((Component)this).transform, false); _pillarCore.transform.localPosition = new Vector3(0f, value * 0.5f, 0f); _pillarCore.transform.localScale = new Vector3(0.055f, value * 0.5f, 0.055f); Material val2 = CreateColoredMaterial(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.85f)); if ((Object)(object)val2 != (Object)null) { ((Renderer)_pillarCore.GetComponent()).material = val2; } _ring = GameObject.CreatePrimitive((PrimitiveType)2); ((Object)_ring).name = "Ring"; Object.Destroy((Object)(object)_ring.GetComponent()); _ring.transform.SetParent(((Component)this).transform, false); _ring.transform.localPosition = new Vector3(0f, 0.04f, 0f); _ring.transform.localScale = new Vector3(0.6f, 0.05f, 0.6f); Material val3 = CreateColoredMaterial(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.55f)); if ((Object)(object)val3 != (Object)null) { ((Renderer)_ring.GetComponent()).material = val3; } } private void BuildGlow() { //IL_005d: 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_00b1: Unknown result type (might be due to invalid IL or missing references) _glow = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)_glow).name = "Glow"; Object.Destroy((Object)(object)_glow.GetComponent()); _glow.transform.SetParent(((Component)this).transform, false); _glow.transform.localPosition = new Vector3(0f, 0.15f, 0f); _glow.transform.localScale = new Vector3(0.55f, 0.55f, 0.55f); Material val = CreateColoredMaterial(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.32f)); if ((Object)(object)val != (Object)null) { ((Renderer)_glow.GetComponent()).material = val; } } private void BuildParticles() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010c: 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_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: 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_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: 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_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Expected O, but got Unknown //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Expected O, but got Unknown //IL_021c: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: 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_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0285: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02c0: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("RarityParticles"); val.transform.SetParent(((Component)this).transform, false); val.transform.localPosition = new Vector3(0f, 0.15f, 0f); _particles = val.AddComponent(); MainModule main = _particles.main; ((MainModule)(ref main)).loop = true; ((MainModule)(ref main)).duration = 5f; ((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(1.3f); ((MainModule)(ref main)).startSpeed = MinMaxCurve.op_Implicit(0f); ((MainModule)(ref main)).startSize = new MinMaxCurve(0.05f, 0.13f); ((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.9f)); ((MainModule)(ref main)).maxParticles = 100; ((MainModule)(ref main)).gravityModifier = MinMaxCurve.op_Implicit(0f); ((MainModule)(ref main)).simulationSpace = (ParticleSystemSimulationSpace)0; ((MainModule)(ref main)).playOnAwake = true; EmissionModule emission = _particles.emission; ((EmissionModule)(ref emission)).rateOverTime = MinMaxCurve.op_Implicit(35f); ShapeModule shape = _particles.shape; ((ShapeModule)(ref shape)).shapeType = (ParticleSystemShapeType)10; ((ShapeModule)(ref shape)).radius = 0.35f; ((ShapeModule)(ref shape)).arc = 360f; VelocityOverLifetimeModule velocityOverLifetime = _particles.velocityOverLifetime; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).enabled = true; ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).y = new MinMaxCurve(2.5f, 4.5f); ((VelocityOverLifetimeModule)(ref velocityOverLifetime)).space = (ParticleSystemSimulationSpace)0; SizeOverLifetimeModule sizeOverLifetime = _particles.sizeOverLifetime; ((SizeOverLifetimeModule)(ref sizeOverLifetime)).enabled = true; AnimationCurve val2 = new AnimationCurve((Keyframe[])(object)new Keyframe[3] { new Keyframe(0f, 0.2f), new Keyframe(0.5f, 1f), new Keyframe(1f, 0.1f) }); ((SizeOverLifetimeModule)(ref sizeOverLifetime)).size = new MinMaxCurve(1f, val2); ColorOverLifetimeModule colorOverLifetime = _particles.colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime)).enabled = true; Gradient val3 = new Gradient(); val3.SetKeys((GradientColorKey[])(object)new GradientColorKey[3] { new GradientColorKey(_rarityColor, 0f), new GradientColorKey(_rarityColor, 0.7f), new GradientColorKey(Color.white, 1f) }, (GradientAlphaKey[])(object)new GradientAlphaKey[3] { new GradientAlphaKey(0.9f, 0f), new GradientAlphaKey(0.9f, 0.6f), new GradientAlphaKey(0f, 1f) }); ((ColorOverLifetimeModule)(ref colorOverLifetime)).color = MinMaxGradient.op_Implicit(val3); ParticleSystemRenderer component = val.GetComponent(); Material val4 = CreateColoredMaterial(Color.white); if ((Object)(object)val4 != (Object)null) { ((Renderer)component).material = val4; } component.renderMode = (ParticleSystemRenderMode)0; } private void BuildText() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0042: 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) GameObject val = new GameObject("ValueText"); val.transform.SetParent(((Component)this).transform, false); val.transform.localPosition = new Vector3(0f, Plugin.BeaconHeight.Value + Plugin.TextVerticalOffset.Value, 0f); _valueText = val.AddComponent(); _valueText.text = FormatValue(); _valueText.fontSize = Plugin.TextFontSize.Value; _valueText.characterSize = 0.055f; _valueText.anchor = (TextAnchor)4; _valueText.alignment = (TextAlignment)1; _valueText.color = _rarityColor; Font builtinResource = Resources.GetBuiltinResource("LegacyRuntime.ttf"); if ((Object)(object)builtinResource == (Object)null) { builtinResource = Resources.GetBuiltinResource("Arial.ttf"); } _valueText.font = builtinResource; } private string FormatValue() { string newValue = (Plugin.ShowDollarSign.Value ? (Localization.DollarSign + _value) : _value.ToString()); string newValue2 = (string.IsNullOrEmpty(_itemName) ? "" : Localization.TranslateItemName(_itemName)); return Localization.ValueFormat.Replace("{itemName}", newValue2).Replace("{value}", newValue).Trim(); } private void ApplyColor() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: 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) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: 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_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_pillar != (Object)null) { Material material = ((Renderer)_pillar.GetComponent()).material; if ((Object)(object)material != (Object)null) { Color color = material.color; material.color = new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, color.a); } } if ((Object)(object)_pillarCore != (Object)null) { Material material2 = ((Renderer)_pillarCore.GetComponent()).material; if ((Object)(object)material2 != (Object)null) { Color color2 = material2.color; material2.color = new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, color2.a); } } if ((Object)(object)_ring != (Object)null) { Material material3 = ((Renderer)_ring.GetComponent()).material; if ((Object)(object)material3 != (Object)null) { Color color3 = material3.color; material3.color = new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, color3.a); } } if ((Object)(object)_glow != (Object)null) { Material material4 = ((Renderer)_glow.GetComponent()).material; if ((Object)(object)material4 != (Object)null) { material4.color = new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, material4.color.a); } } if ((Object)(object)_particles != (Object)null) { MainModule main = _particles.main; ((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(new Color(_rarityColor.r, _rarityColor.g, _rarityColor.b, 0.9f)); } if ((Object)(object)_valueText != (Object)null) { _valueText.text = FormatValue(); _valueText.color = _rarityColor; } } private void ApplyAlpha(float a) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0051: 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_0090: 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_00ac: 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_00eb: 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_0107: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_01cf: 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) if ((Object)(object)_pillar != (Object)null) { Material material = ((Renderer)_pillar.GetComponent()).material; if ((Object)(object)material != (Object)null) { material.color = new Color(material.color.r, material.color.g, material.color.b, 0.16f * a); } } if ((Object)(object)_pillarCore != (Object)null) { Material material2 = ((Renderer)_pillarCore.GetComponent()).material; if ((Object)(object)material2 != (Object)null) { material2.color = new Color(material2.color.r, material2.color.g, material2.color.b, 0.85f * a); } } if ((Object)(object)_ring != (Object)null) { Material material3 = ((Renderer)_ring.GetComponent()).material; if ((Object)(object)material3 != (Object)null) { material3.color = new Color(material3.color.r, material3.color.g, material3.color.b, 0.55f * a); } } if ((Object)(object)_glow != (Object)null) { Material material4 = ((Renderer)_glow.GetComponent()).material; if ((Object)(object)material4 != (Object)null) { material4.color = new Color(material4.color.r, material4.color.g, material4.color.b, 0.32f * a); } } if ((Object)(object)_valueText != (Object)null) { _valueText.color = new Color(_valueText.color.r, _valueText.color.g, _valueText.color.b, a); } if ((Object)(object)_particles != (Object)null) { EmissionModule emission = _particles.emission; ((EmissionModule)(ref emission)).enabled = a > 0.01f; } } private void SetVisible(bool visible) { if ((Object)(object)_pillar != (Object)null) { _pillar.SetActive(visible); } if ((Object)(object)_pillarCore != (Object)null) { _pillarCore.SetActive(visible); } if ((Object)(object)_ring != (Object)null) { _ring.SetActive(visible); } if ((Object)(object)_glow != (Object)null) { _glow.SetActive(visible); } if ((Object)(object)_particles != (Object)null) { ((Component)_particles).gameObject.SetActive(visible); } if ((Object)(object)_valueText != (Object)null) { ((Component)_valueText).gameObject.SetActive(visible); } } private void Update() { //IL_008a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_target == (Object)null) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } bool flag = _target.isHeld || _target.isPocketed || _target.isHeldByEnemy || (Object)(object)_target.playerHeldBy != (Object)null; if (flag != _visible) { _visible = !flag; SetVisible(_visible); } if (flag) { return; } ((Component)this).transform.position = ((Component)_target).transform.position; _remaining -= Time.deltaTime; if (_remaining <= 0f) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } if (_remaining < 1f) { ApplyAlpha(Mathf.Clamp01(_remaining)); } _updateTimer -= Time.deltaTime; if (_updateTimer <= 0f) { _updateTimer = 0.1f; FaceCamera(); } } private void FaceCamera() { if (!((Object)(object)_valueText == (Object)null)) { Camera main = Camera.main; if (!((Object)(object)main == (Object)null)) { Transform transform = ((Component)_valueText).transform; transform.LookAt(((Component)main).transform); transform.Rotate(0f, 180f, 0f); } } } private void OnDestroy() { if ((Object)(object)_target != (Object)null) { _activeBeacons.Remove(_target); } } } public static class ScrapScanner { private static float _scanCooldown; public static void OnScanUpdate(HUDManager hud) { if (!Plugin.Enabled.Value) { return; } _scanCooldown -= Time.deltaTime; if (_scanCooldown > 0f) { return; } _scanCooldown = 0.15f; if (Traverse.Create((object)hud).Field("playerPingingScan").GetValue() < 0f) { return; } List value = Traverse.Create((object)hud).Field("nodesOnScreen").GetValue>(); if (value == null || value.Count == 0) { return; } for (int i = 0; i < value.Count; i++) { ScanNodeProperties val = value[i]; if (!((Object)(object)val == (Object)null) && val.nodeType == 2) { GrabbableObject componentInParent = ((Component)val).GetComponentInParent(); if (!((Object)(object)componentInParent == (Object)null) && !((Object)(object)componentInParent.itemProperties == (Object)null) && componentInParent.itemProperties.isScrap) { int value2 = ((val.scrapValue > 0) ? val.scrapValue : componentInParent.scrapValue); ScrapBeacon.GetOrCreate(componentInParent, value2); } } } } }