using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using KeybindLib.Classes; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using REPOLib.Modules; 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(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("PingIt")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("This mod adds the ability to ping valuables and enemies.")] [assembly: AssemblyFileVersion("0.1.2.0")] [assembly: AssemblyInformationalVersion("0.1.2")] [assembly: AssemblyProduct("PingIt")] [assembly: AssemblyTitle("PingIt")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace PingIt { [BepInPlugin("eberk30.pingit", "Ping It!", "0.6.10")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class PingIt : BaseUnityPlugin { internal class MapMarker : MonoBehaviour { private static Camera? _mapCamera; private static float _offMapRadius = 22.5f; private static readonly Color OnMapColor = new Color(1f, 1f, 1f, 1f); private static readonly Color OffMapColor = new Color(1f, 0.9f, 0.2f, 1f); private MapCustom _mc = null; private MapCustomEntity? _entity; private SpriteRenderer? _sr; private Sprite? _dotSprite; private float _life; internal void Init(MapCustom mc, float lifetime) { _mc = mc; _life = lifetime; _dotSprite = mc.sprite; } private void LateUpdate() { //IL_0136: 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_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0383: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Unknown result type (might be due to invalid IL or missing references) _life -= Time.deltaTime; if (_life <= 0f) { if ((Object)(object)_entity != (Object)null) { Object.Destroy((Object)(object)((Component)_entity).gameObject); } ((Behaviour)this).enabled = false; return; } if ((Object)(object)_sr == (Object)null) { _entity = _mc.mapCustomEntity; if ((Object)(object)_entity == (Object)null) { return; } _sr = ((Component)_entity).GetComponentInChildren(true); if ((Object)(object)_sr == (Object)null) { return; } } float num = Mathf.Lerp(0.15f, 1f, 0.5f + 0.5f * Mathf.Sin(Time.time * MathF.PI * 2f)); Transform val = Map.Instance?.playerTransformSource; if ((Object)(object)val == (Object)null) { _sr.color = new Color(OnMapColor.r, OnMapColor.g, OnMapColor.b, num); return; } Map instance = Map.Instance; if ((Object)(object)_mapCamera == (Object)null && (Object)(object)_entity != (Object)null) { _offMapRadius = 22.5f; int layer = ((Component)_entity).gameObject.layer; Camera[] array = Object.FindObjectsOfType(); foreach (Camera val2 in array) { if (val2.orthographic && (val2.cullingMask & (1 << layer)) != 0 && !((Object)(object)val2 == (Object)(object)Camera.main)) { _mapCamera = val2; _offMapRadius = val2.orthographicSize / Mathf.Max(0.001f, instance.Scale); DebugLog($"map camera resolved: {((Object)val2).name} orthoSize={val2.orthographicSize} mapScale={instance.Scale} -> offMapRadius={_offMapRadius:F1} world units"); break; } } } Vector3 position = ((Component)this).transform.position; float num2 = position.x - val.position.x; float num3 = position.z - val.position.z; float num4 = Mathf.Sqrt(num2 * num2 + num3 * num3); if (num4 > _offMapRadius) { float num5 = _offMapRadius / num4; Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(val.position.x + num2 * num5, position.y, val.position.z + num3 * num5); ((Component)_entity).transform.position = val3 * instance.Scale + instance.OverLayerParent.position; if ((Object)(object)_sr.sprite != (Object)(object)GetPingArrowSprite()) { _sr.sprite = GetPingArrowSprite(); } float num6 = (0f - Mathf.Atan2(num2, num3)) * 57.29578f; ((Component)_entity).transform.localRotation = Quaternion.Euler(0f, 0f, num6); _sr.color = new Color(OffMapColor.r, OffMapColor.g, OffMapColor.b, num); } else { if ((Object)(object)_dotSprite != (Object)null && (Object)(object)_sr.sprite != (Object)(object)_dotSprite) { _sr.sprite = _dotSprite; } ((Component)_entity).transform.localRotation = Quaternion.identity; _sr.color = new Color(OnMapColor.r, OnMapColor.g, OnMapColor.b, num); } } } internal enum PingWire { Valuable, Enemy, Item, Location, Cosmetic, Cart } internal struct LookResult { public PingTarget Type; public PhysGrabObject? PhysGrab; public EnemyRigidbody? EnemyRb; public Vector3 Position; } private static FieldInfo? _genesisField; private static bool _genesisMODchecked; private static readonly Dictionary _pingGraphics = new Dictionary(); private static ExtractionPoint[]? _epCache; private static Sprite? _pingMapSprite; private static Sprite? _pingMapArrow; private static readonly HashSet _skipRoomVolume = new HashSet { "Cleanup Crew", "Clown", "Trudge" }; public const string PLUGIN_GUID = "eberk30.pingit"; public const string PLUGIN_NAME = "Ping It!"; public const string PLUGIN_VERSION = "0.6.10"; internal static ManualLogSource Logger = null; private Harmony _harmony = null; public static ConfigEntry cfgRange = null; public static ConfigEntry cfgCooldown = null; public static ConfigEntry cfgDuration = null; public static ConfigEntry cfgTextSize = null; public static ConfigEntry cfgDebugLogging = null; internal static Keybind PingKeybind = null; internal static readonly Dictionary prefabs = new Dictionary(); internal static Mesh? _cubeMesh; internal static Camera? _mainCam; internal static PlayerUpgrade? _pingAnywhereUpgrade; internal static PlayerUpgrade? _pingInfoUpgrade; internal static PlayerAvatar? _localPlayer; private static bool _sharedUpgradesMODchecked; private static bool _sharedUpgradesMOD; private const string PHOTON_FLAG = "PingIt"; internal static NetworkedEvent PingEvent = null; internal static readonly List _deathHeads = new List(); private static bool _photonFlagSet; private static float _lastPing = -999f; private static readonly RaycastHit[] _pierceHits = (RaycastHit[])(object)new RaycastHit[32]; private static readonly Comparer _byDistance = Comparer.Create((RaycastHit a, RaycastHit b) => ((RaycastHit)(ref a)).distance.CompareTo(((RaycastHit)(ref b)).distance)); private static readonly Dictionary> _locationDots = new Dictionary>(); private const int MaxLocationDots = 3; private static readonly int _pierceMask = -5 & ~LayerMask.GetMask(new string[2] { "RoomVolume", "Player" }); private static CosmeticWorldObject[]? _cosmeticCache; internal static void Spawn(PhysGrabObject? physGrab, PingTarget type, string? locationPrefix = null) { //IL_0090: 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_05ca: Unknown result type (might be due to invalid IL or missing references) //IL_06f6: Unknown result type (might be due to invalid IL or missing references) //IL_06fb: 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_0700: Invalid comparison between Unknown and I4 //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_0751: Unknown result type (might be due to invalid IL or missing references) //IL_0753: Unknown result type (might be due to invalid IL or missing references) //IL_0588: Unknown result type (might be due to invalid IL or missing references) PhysGrabObject physGrab2 = physGrab; string locationPrefix2 = locationPrefix; if ((Object)(object)physGrab2 == (Object)null || (Object)(object)ValuableDiscover.instance == (Object)null) { return; } if (type == PingTarget.Enemy) { AttachBoundsProxy(physGrab2); } prefabs.TryGetValue(type, out GameObject value); if (value == null) { value = prefabs[PingTarget.Valuable]; } if ((Object)(object)value != (Object)null) { if (type == PingTarget.Enemy) { physGrab2.centerPoint = Vector3.zero; } if (_pingGraphics.TryGetValue(physGrab2, out ValuableDiscoverGraphic value2) && (Object)(object)value2 != (Object)null) { Object.Destroy((Object)(object)((Component)value2).gameObject); } _pingGraphics.Remove(physGrab2); GameObject val = Object.Instantiate(value, ((Component)ValuableDiscover.instance).transform); val.SetActive(true); ValuableDiscoverGraphic component = val.GetComponent(); if ((Object)(object)component == (Object)null) { Logger.LogWarning((object)$"prefab for {type} is missing ValuableDiscoverGraphic, bailing"); Object.Destroy((Object)(object)val); return; } GameObject graphicPrefab = ValuableDiscover.instance.graphicPrefab; ValuableDiscoverGraphic val2 = ((graphicPrefab != null) ? graphicPrefab.GetComponent() : null); if ((Object)(object)val2 != (Object)null) { component.sound = val2.sound; } component.target = physGrab2; component.waitTime = cfgDuration.Value; component.waitTimer = cfgDuration.Value; _pingGraphics[physGrab2] = component; } else { ValuableDiscover.instance.New(physGrab2, (State)0, (ValuableDiscoverCustom)null); ValuableDiscoverGraphic[] componentsInChildren = ((Component)ValuableDiscover.instance).GetComponentsInChildren(); foreach (ValuableDiscoverGraphic val3 in componentsInChildren) { if (!((Object)(object)val3.target != (Object)(object)physGrab2)) { val3.waitTime = cfgDuration.Value; val3.waitTimer = cfgDuration.Value; break; } } } if ((Object)(object)HUDCanvas.instance == (Object)null || !LocalHasPingInfo()) { return; } PingLabel.ClearLabels(physGrab2); string text = null; Color? color = null; switch (type) { case PingTarget.Valuable: { ValuableObject component5 = ((Component)physGrab2).GetComponent(); MonoBehaviour genesisBehaviour = GetGenesisBehaviour(physGrab2); PlayerDeathHead component6 = ((Component)physGrab2).GetComponent(); if ((Object)(object)component6 != (Object)null) { text = GetDeathHeadName(component6) + "\nDEAD"; } else if ((Object)(object)component5 != (Object)null && component5.dollarValueSet) { string text4 = (((Object)(object)genesisBehaviour != (Object)null) ? "Genesis" : ((object)(Type)(ref component5.volumeType)).ToString()); string text5 = "$" + SemiFunc.DollarGetString((int)component5.dollarValueCurrent); text = text4 + "\n" + text5; } if ((Object)(object)genesisBehaviour != (Object)null) { int petsLeft = GetPetsLeft(genesisBehaviour); text = ((text != null) ? (text + "\n") : "") + petsLeft + " pet" + ((petsLeft == 1) ? "" : "s") + " left"; } if ((Object)(object)component6 == (Object)null && (Object)(object)component5 != (Object)null && component5.dollarValueSet) { float dollarValueOriginal = component5.dollarValueOriginal; if (dollarValueOriginal > 0f) { color = ConditionColor(component5.dollarValueCurrent / dollarValueOriginal); } } break; } case PingTarget.Item: { ItemAttributes component3 = ((Component)physGrab2).GetComponent(); if (!((Object)(object)component3 != (Object)null)) { break; } string itemName = component3.itemName; if (!string.IsNullOrEmpty(itemName)) { text = itemName; ItemBattery component4 = ((Component)physGrab2).GetComponent(); if ((Object)(object)component4 != (Object)null && !component4.isUnchargable) { text = text + "\n" + Mathf.RoundToInt(component4.batteryLife) + "%"; color = ConditionColor(component4.batteryLife / 100f); } } break; } case PingTarget.Enemy: { EnemyParent componentInParent = ((Component)physGrab2).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && !string.IsNullOrEmpty(componentInParent.enemyName)) { text = componentInParent.enemyName; Enemy enemy = componentInParent.Enemy; EnemyHealth val5 = (((Object)(object)enemy != (Object)null) ? enemy.Health : null); if ((Object)(object)val5 != (Object)null && val5.health > 0) { text = text + "\n" + val5.healthCurrent + " / " + val5.health + " HP"; color = ConditionColor((float)val5.healthCurrent / (float)val5.health); } } break; } case PingTarget.Location: { ExtractionPoint extractionPt = FindNearestExtractionPoint(((Component)physGrab2).transform.position); bool isExtraction = (Object)(object)extractionPt != (Object)null; Func locText = delegate { //IL_0031: 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_0036: 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_0039: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)physGrab2).transform; Vector3 val6 = (((Object)(object)_mainCam != (Object)null) ? ((Component)_mainCam).transform.position : transform.position); float num6 = Vector3.Distance(val6, transform.position); string text10 = ((num6 < 10f) ? (num6.ToString("F1") + "m") : (Mathf.RoundToInt(num6) + "m")); string text11; if ((Object)(object)extractionPt != (Object)null) { int valueOrDefault = (RoundDirector.instance?.dollarHaulList?.Count).GetValueOrDefault(); text11 = "Extraction\n" + valueOrDefault + " item" + ((valueOrDefault == 1) ? "" : "s") + "\n" + text10; } else { text11 = (isExtraction ? ("Extraction\n" + text10) : text10); } return (locationPrefix2 != null) ? (locationPrefix2 + "\n" + text11) : text11; }; string cachedStr = ""; int cachedFrame = -1; Func getStr = delegate { if (Time.frameCount != cachedFrame) { cachedStr = locText(); cachedFrame = Time.frameCount; } return cachedStr; }; PingLabel pingLabel = PingLabel.Spawn(physGrab2, "", cfgDuration.Value, 180f, above: true); PingLabel pingLabel2 = PingLabel.Spawn(physGrab2, "", cfgDuration.Value, 180f); pingLabel._dynamicText = delegate { string text9 = getStr(); int num5 = text9.IndexOf('\n'); return (num5 > 0) ? text9.Substring(0, num5) : text9; }; pingLabel2._dynamicText = delegate { string text7 = getStr(); int num3 = text7.IndexOf('\n'); object result; if (num3 <= 0) { result = ""; } else { string text8 = text7; int num4 = num3 + 1; result = text8.Substring(num4, text8.Length - num4); } return (string)result; }; break; } case PingTarget.Cosmetic: { CosmeticWorldObject val4 = ((Component)physGrab2).GetComponent() ?? ((Component)physGrab2).GetComponentInChildren(); if ((Object)(object)val4 != (Object)null) { Rarity rarity = val4.rarity; string text3 = (((int)rarity == 3) ? "ULTRA RARE" : ((object)(Rarity)(ref rarity)).ToString().ToUpper()); text = text3 + "\n" + Mathf.RoundToInt(Mathf.Clamp01(val4.healthAmountTarget) * 100f) + "%"; color = RarityColor(rarity); } break; } case PingTarget.Cart: { PhysGrabCart component2 = ((Component)physGrab2).GetComponent(); if ((Object)(object)component2 != (Object)null) { int itemsInCartCount = component2.itemsInCartCount; int haulCurrent = component2.haulCurrent; string text2 = itemsInCartCount + " item" + ((itemsInCartCount == 1) ? "" : "s"); text = "C.A.R.T.\n" + ((itemsInCartCount > 0) ? (text2 + "\n$" + SemiFunc.DollarGetString(haulCurrent)) : "Empty"); } else { text = "C.A.R.T."; } break; } } if (text != null) { float lookAngle = ((type == PingTarget.Valuable) ? 5f : 10f); int num = text.IndexOf('\n'); if (num > 0) { PingLabel.Spawn(physGrab2, text.Substring(0, num), cfgDuration.Value, lookAngle, above: true, color); PhysGrabObject target = physGrab2; string text6 = text; int num2 = num + 1; PingLabel.Spawn(target, text6.Substring(num2, text6.Length - num2), cfgDuration.Value, lookAngle, above: false, color); } else { PingLabel.Spawn(physGrab2, text, cfgDuration.Value, lookAngle, above: true, color); } } } private static Color ConditionColor(float t) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if (t > 0.66f) { return new Color(0.2f, 0.85f, 0.2f); } if (t > 0.33f) { return new Color(0.9f, 0.55f, 0.1f); } return new Color(0.85f, 0.15f, 0.15f); } private static Color RarityColor(Rarity r) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected I4, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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_0059: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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) if (1 == 0) { } Color result = (Color)((int)r switch { 0 => new Color(0.4f, 1f, 0.4f), 1 => new Color(0.4f, 0.6f, 1f), 2 => new Color(1f, 0.45f, 0.75f), 3 => new Color(1f, 0.84f, 0.2f), _ => Color.white, }); if (1 == 0) { } return result; } private static ExtractionPoint? FindNearestExtractionPoint(Vector3 pos) { //IL_0063: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) if (_epCache == null || (_epCache.Length != 0 && (Object)(object)_epCache[0] == (Object)null)) { _epCache = Object.FindObjectsOfType(); } ExtractionPoint result = null; float num = 25f; ExtractionPoint[] epCache = _epCache; foreach (ExtractionPoint val in epCache) { if (!((Object)(object)val == (Object)null)) { Vector3 val2 = ((Component)val).transform.position - pos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = val; } } } return result; } internal static void PingAtPos(Vector3 worldPos, int actorNumber) { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) if (!_locationDots.TryGetValue(actorNumber, out List value)) { value = (_locationDots[actorNumber] = new List()); } value.RemoveAll((GameObject g) => (Object)(object)g == (Object)null); if (value.Count >= 3) { Object.Destroy((Object)(object)value[0]); value.RemoveAt(0); } string locationPrefix = null; Collider[] array = Physics.OverlapSphere(worldPos, 0.3f, -1, (QueryTriggerInteraction)1); foreach (Collider val in array) { PhysGrabHinge componentInParent = ((Component)val).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null && componentInParent.closed) { locationPrefix = "Door"; break; } } GameObject val2 = new GameObject("PingIt_LocationAnchor"); val2.transform.position = worldPos; val2.transform.localScale = Vector3.one * 0.3f; val2.AddComponent().mesh = GetCubeMesh(); ((Renderer)val2.AddComponent()).sharedMaterials = (Material[])(object)new Material[0]; val2.AddComponent(); ((Behaviour)val2.AddComponent()).enabled = false; Rigidbody val3 = val2.AddComponent(); val3.isKinematic = true; val3.constraints = (RigidbodyConstraints)126; PhysGrabObject val4 = val2.AddComponent(); val4.centerPoint = worldPos; ((Behaviour)val4).enabled = false; MapCustom val5 = val2.AddComponent(); val5.autoAdd = true; val5.color = Color.white; val5.sprite = GetPingMapSprite(); val2.AddComponent().Init(val5, cfgDuration.Value); Object.Destroy((Object)(object)val2, cfgDuration.Value + 5f); value.Add(val2); Spawn(val4, PingTarget.Location, locationPrefix); } private static Sprite GetPingMapSprite() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_pingMapSprite != (Object)null) { return _pingMapSprite; } Texture2D val = new Texture2D(32, 32, (TextureFormat)4, false) { filterMode = (FilterMode)1 }; float num = 15f; Color32[] array = (Color32[])(object)new Color32[1024]; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { float num2 = (float)j - 16f + 0.5f; float num3 = (float)i - 16f + 0.5f; float num4 = Mathf.Sqrt(num2 * num2 + num3 * num3); byte b = (byte)Mathf.Clamp(Mathf.RoundToInt((num - num4) * 255f), 0, 255); array[i * 32 + j] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, b); } } val.SetPixels32(array); val.Apply(); _pingMapSprite = Sprite.Create(val, new Rect(0f, 0f, 32f, 32f), new Vector2(0.5f, 0.5f), 320f); return _pingMapSprite; } private static Sprite GetPingArrowSprite() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_pingMapArrow != (Object)null) { return _pingMapArrow; } Texture2D val = new Texture2D(32, 32, (TextureFormat)4, false) { filterMode = (FilterMode)1 }; Color32[] array = (Color32[])(object)new Color32[1024]; for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { float num = Mathf.InverseLerp(2f, 30f, (float)i); if (num < 0f || num > 1f) { array[i * 32 + j] = default(Color32); continue; } float num2 = (1f - num) * 14.4f; float num3 = 15.5f; float num4 = Mathf.Abs((float)j - num3); byte b = (byte)((num4 <= num2) ? byte.MaxValue : 0); array[i * 32 + j] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, b); } } val.SetPixels32(array); val.Apply(); _pingMapArrow = Sprite.Create(val, new Rect(0f, 0f, 32f, 32f), new Vector2(0.5f, 0.5f), 220f); return _pingMapArrow; } private static void AttachBoundsProxy(PhysGrabObject physGrab) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown //IL_0109: 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_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: 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_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: 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) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0324: 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_0217: 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_0345: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ff: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: Unknown result type (might be due to invalid IL or missing references) //IL_02f7: Unknown result type (might be due to invalid IL or missing references) foreach (Transform item in ((Component)physGrab).transform) { Transform val = item; if (((Object)val).name == "PingIt_BoundsProxy") { Object.Destroy((Object)(object)((Component)val).gameObject); } } EnemyParent componentInParent = ((Component)physGrab).GetComponentInParent(); if ((Object)(object)componentInParent == (Object)null) { return; } if (!_skipRoomVolume.Contains(componentInParent.enemyName)) { RoomVolumeCheck componentInChildren = ((Component)componentInParent).GetComponentInChildren(true); if ((Object)(object)componentInChildren != (Object)null && componentInChildren.currentSize != Vector3.zero) { Vector3 worldCenter = ((Component)componentInChildren).transform.TransformPoint(componentInChildren.CheckPosition); Vector3 worldSize = Vector3.Scale(componentInChildren.currentSize, ((Component)componentInChildren).transform.lossyScale); BuildBoundsProxy(physGrab, worldCenter, worldSize); return; } } bool flag = false; Bounds val2 = default(Bounds); SkinnedMeshRenderer[] componentsInChildren = ((Component)componentInParent).GetComponentsInChildren(true); foreach (SkinnedMeshRenderer val3 in componentsInChildren) { Bounds bounds = ((Renderer)val3).bounds; if (!(((Bounds)(ref bounds)).size == Vector3.zero)) { if (!flag) { val2 = ((Renderer)val3).bounds; flag = true; } else { ((Bounds)(ref val2)).Encapsulate(((Renderer)val3).bounds); } } } if (flag && ((Bounds)(ref val2)).size != Vector3.zero) { BuildBoundsProxy(physGrab, ((Bounds)(ref val2)).center, ((Bounds)(ref val2)).size); return; } Vector3 position = ((Component)physGrab).transform.position; MeshRenderer[] componentsInChildren2 = ((Component)componentInParent).GetComponentsInChildren(); foreach (MeshRenderer val4 in componentsInChildren2) { if (!((Component)val4).transform.IsChildOf(((Component)physGrab).transform) && IsUsableBounds(((Renderer)val4).bounds, position)) { if (!flag) { val2 = ((Renderer)val4).bounds; flag = true; } else { ((Bounds)(ref val2)).Encapsulate(((Renderer)val4).bounds); } } } if (!flag) { MeshRenderer[] componentsInChildren3 = ((Component)componentInParent).GetComponentsInChildren(); foreach (MeshRenderer val5 in componentsInChildren3) { if (((Component)val5).transform.IsChildOf(((Component)physGrab).transform)) { continue; } Bounds bounds2 = ((Renderer)val5).bounds; if (((Bounds)(ref bounds2)).size == Vector3.zero) { continue; } float num = ((Bounds)(ref bounds2)).center.x - position.x; float num2 = ((Bounds)(ref bounds2)).center.z - position.z; if (!(num * num + num2 * num2 > 9f)) { if (!flag) { val2 = bounds2; flag = true; } else { ((Bounds)(ref val2)).Encapsulate(bounds2); } } } } if (flag && !(((Bounds)(ref val2)).size == Vector3.zero)) { float num3 = 3.5f; Vector3 size = ((Bounds)(ref val2)).size; if (size.x > num3 || size.y > num3 || size.z > num3) { ((Bounds)(ref val2))..ctor(((Bounds)(ref val2)).center, new Vector3(Mathf.Min(size.x, num3), Mathf.Min(size.y, num3), Mathf.Min(size.z, num3))); } BuildBoundsProxy(physGrab, ((Bounds)(ref val2)).center, ((Bounds)(ref val2)).size); } } private static bool IsUsableBounds(Bounds b, Vector3 pivot) { //IL_0003: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: 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_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_0123: 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) if (((Bounds)(ref b)).size == Vector3.zero) { return false; } float num = Mathf.Min(new float[3] { ((Bounds)(ref b)).size.x, ((Bounds)(ref b)).size.y, ((Bounds)(ref b)).size.z }); float num2 = Mathf.Max(new float[3] { ((Bounds)(ref b)).size.x, ((Bounds)(ref b)).size.y, ((Bounds)(ref b)).size.z }); if (num2 <= 0f || num2 >= 5f) { return false; } if (num / num2 < 0.2f) { return false; } if (((Bounds)(ref b)).center.y < pivot.y - 0.3f || ((Bounds)(ref b)).center.y > pivot.y + 4f) { return false; } float num3 = ((Bounds)(ref b)).center.x - pivot.x; float num4 = ((Bounds)(ref b)).center.z - pivot.z; return num3 * num3 + num4 * num4 <= 9f; } private static void BuildBoundsProxy(PhysGrabObject physGrab, Vector3 worldCenter, Vector3 worldSize) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0024: 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_0042: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_008b: 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_00a7: 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_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("PingIt_BoundsProxy"); val.transform.SetParent(((Component)physGrab).transform); val.transform.position = worldCenter; val.transform.rotation = Quaternion.identity; Vector3 lossyScale = ((Component)physGrab).transform.lossyScale; val.transform.localScale = new Vector3((lossyScale.x != 0f) ? (worldSize.x / lossyScale.x) : worldSize.x, (lossyScale.y != 0f) ? (worldSize.y / lossyScale.y) : worldSize.y, (lossyScale.z != 0f) ? (worldSize.z / lossyScale.z) : worldSize.z); val.AddComponent().mesh = GetCubeMesh(); ((Renderer)val.AddComponent()).sharedMaterials = (Material[])(object)new Material[0]; Object.Destroy((Object)(object)val, cfgDuration.Value + 5f); } internal static Mesh GetCubeMesh() { if ((Object)(object)_cubeMesh != (Object)null) { return _cubeMesh; } GameObject val = GameObject.CreatePrimitive((PrimitiveType)3); _cubeMesh = val.GetComponent().sharedMesh; Object.Destroy((Object)(object)val); return _cubeMesh; } private static MonoBehaviour? GetGenesisBehaviour(PhysGrabObject pg) { if (!_genesisMODchecked) { _genesisMODchecked = true; Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly assembly in assemblies) { Type type = assembly.GetType("GenesisHealBehaviour"); if (!(type == null)) { _genesisField = type.GetField("petsLeft", BindingFlags.Instance | BindingFlags.Public); break; } } } if (_genesisField == null) { return null; } Component component = ((Component)pg).GetComponent(_genesisField.DeclaringType); return (MonoBehaviour?)(object)((component is MonoBehaviour) ? component : null); } private static int GetPetsLeft(MonoBehaviour genesis) { return (_genesisField != null) ? ((int)(_genesisField.GetValue(genesis) ?? ((object)0))) : 0; } internal static void DebugLog(string msg) { if (cfgDebugLogging?.Value == "On") { Logger.LogDebug((object)msg); } } internal static bool ConsumePingPress() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) return SemiFunc.InputDown(PingKeybind.inputKey); } internal static string GetDeathHeadName(PlayerDeathHead dh) { return ((Object)(object)dh.playerAvatar != (Object)null) ? dh.playerAvatar.playerName : "Unknown"; } internal static Color WithAlpha(Color c, float a) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) return new Color(c.r, c.g, c.b, a); } internal static bool HasSharedUpgradesPlus() { if (!_sharedUpgradesMODchecked) { _sharedUpgradesMODchecked = true; _sharedUpgradesMOD = Chainloader.PluginInfos.ContainsKey("Vippy.SharedUpgradesPlus"); } return _sharedUpgradesMOD; } private static bool HostIsVanilla() { EnsurePhotonFlag(); if (!PhotonNetwork.InRoom) { return false; } if (PhotonNetwork.IsMasterClient) { return false; } Player masterClient = PhotonNetwork.MasterClient; return masterClient != null && !((Dictionary)(object)masterClient.CustomProperties).ContainsKey((object)"PingIt"); } private static int GetUpgradeLevel(string upgradeId, PlayerUpgrade? repoPU) { if (HostIsVanilla()) { return 1; } if (repoPU != null && (Object)(object)_localPlayer != (Object)null) { return repoPU.GetLevel(_localPlayer); } return -1; } internal static bool LocalHasPingInfo() { return GetUpgradeLevel("PingInfo", _pingInfoUpgrade) > 0; } private void Awake() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Expected O, but got Unknown //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01f1: Expected O, but got Unknown //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; PingKeybind = Keybinds.Bind("Ping", "/middleButton"); cfgRange = ((BaseUnityPlugin)this).Config.Bind("Ping", "Range", 20f, new ConfigDescription("How far out it tries to detect things to ping.", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 60f), Array.Empty())); cfgCooldown = ((BaseUnityPlugin)this).Config.Bind("Ping", "Cooldown", 0.5f, new ConfigDescription("How long between pings.", (AcceptableValueBase)(object)new AcceptableValueRange(0f, 5f), Array.Empty())); cfgDuration = ((BaseUnityPlugin)this).Config.Bind("Ping", "Highlight Duration", 15f, new ConfigDescription("How long the highlight sticks around.", (AcceptableValueBase)(object)new AcceptableValueRange(1f, 30f), Array.Empty())); cfgTextSize = ((BaseUnityPlugin)this).Config.Bind("Ping", "Value Text Size", 0.85f, new ConfigDescription("Size multiplier for the ping value text.", (AcceptableValueBase)(object)new AcceptableValueRange(0.5f, 3f), Array.Empty())); cfgDebugLogging = ((BaseUnityPlugin)this).Config.Bind("Ping", "Debug Logging", "Off", new ConfigDescription("Log extra info to the BepInEx console. Useful for diagnosing issues.", (AcceptableValueBase)(object)new AcceptableValueList(new string[2] { "Off", "On" }), Array.Empty())); LoadBundle(); try { _pingAnywhereUpgrade = Upgrades.RegisterUpgrade("PingAnywhere", (Item)null, (Action)null, (Action)null); } catch { } try { _pingInfoUpgrade = Upgrades.RegisterUpgrade("PingInfo", (Item)null, (Action)null, (Action)null); } catch { } PlayerAvatar[] array = Object.FindObjectsOfType(); foreach (PlayerAvatar val in array) { if (val.isLocal) { _localPlayer = val; break; } } PingEvent = new NetworkedEvent("PingIt_TriggerPing", (Action)RemotePing); _harmony = new Harmony("eberk30.pingit"); _harmony.PatchAll(); Logger.LogInfo((object)$"Ping nanobots initiated, {cfgRange.Value:F0}m range"); } private static void EnsurePhotonFlag() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown if (!_photonFlagSet && PhotonNetwork.IsConnected && PhotonNetwork.LocalPlayer != null) { _photonFlagSet = true; PhotonNetwork.LocalPlayer.SetCustomProperties(new Hashtable { [(object)"PingIt"] = "0.6.10" }, (Hashtable)null, (WebFlags)null); } } private void Update() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Invalid comparison between Unknown and I4 //IL_025b: 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_028d: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: 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) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: 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_039a: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_043e: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_045a: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) EnsurePhotonFlag(); if (!ConsumePingPress()) { return; } DebugLog("ping consumed by PingIt.Update"); if ((Object)(object)_localPlayer != (Object)null && _localPlayer.isDisabled) { SpectateCamera instance = SpectateCamera.instance; if ((Object)(object)instance == (Object)null || (int)instance.currentState != 2) { DebugLog("dead but not controlling death head (state=" + (((Object)(object)instance != (Object)null) ? ((object)(State)(ref instance.currentState)).ToString() : "no camera") + "), ping ignored"); return; } } float time = Time.time; if (time - _lastPing < cfgCooldown.Value) { DebugLog($"ping on cooldown ({cfgCooldown.Value - (time - _lastPing):F2}s left)"); return; } _lastPing = time; Camera val = Camera.main ?? Object.FindObjectOfType(); if ((Object)(object)val == (Object)null) { DebugLog("no camera, bailing"); return; } if ((Object)(object)_localPlayer == (Object)null) { PlayerAvatar[] array = Object.FindObjectsOfType(); foreach (PlayerAvatar val2 in array) { if (val2.isLocal) { _localPlayer = val2; break; } } } LookResult lookResult = Aim(val, cfgRange.Value); object obj; if (lookResult.Type != PingTarget.Enemy) { obj = null; } else { PhysGrabObject? physGrab = lookResult.PhysGrab; obj = ((physGrab == null) ? null : ((Component)physGrab).GetComponentInParent()?.enemyName); } string text = (string)obj; object arg = lookResult.Type; PhysGrabObject? physGrab2 = lookResult.PhysGrab; DebugLog(string.Format("look result: {0} physgrab={1}", arg, ((physGrab2 != null) ? ((Object)physGrab2).name : null) ?? "null") + ((text != null) ? (" enemyName=\"" + text + "\"") : "")); if (lookResult.Type == PingTarget.None || (Object)(object)lookResult.PhysGrab == (Object)null) { RaycastHit result; if (GetUpgradeLevel("PingAnywhere", _pingAnywhereUpgrade) <= 0) { DebugLog("no target and no PingAnywhere upgrade, bailing"); } else if (PiercingRaycast(((Component)val).transform.position, ((Component)val).transform.forward, cfgRange.Value, out result)) { DebugLog($"location ping at {((RaycastHit)(ref result)).point}"); PingAtPos(((RaycastHit)(ref result)).point, PhotonNetwork.LocalPlayer.ActorNumber); Vector3 point = ((RaycastHit)(ref result)).point; NetworkedEvent pingEvent = PingEvent; if (pingEvent != null) { pingEvent.RaiseEvent((object)new float[4] { point.x, point.y, point.z, 3f }, NetworkingEvents.RaiseOthers, SendOptions.SendReliable); } } else { DebugLog("piercing raycast found nothing"); } return; } DebugLog($"spawning highlight for {lookResult.Type} on {((Object)lookResult.PhysGrab).name}"); Spawn(lookResult.PhysGrab, lookResult.Type); float[] array2; if (lookResult.Type == PingTarget.Enemy && (Object)(object)lookResult.EnemyRb != (Object)null) { EnemyParent componentInParent = ((Component)lookResult.EnemyRb).GetComponentInParent(); PhotonView val3 = ((componentInParent != null) ? ((Component)componentInParent).GetComponent() : null); array2 = new float[5] { lookResult.Position.x, lookResult.Position.y, lookResult.Position.z, 1f, ((Object)(object)val3 != (Object)null) ? ((float)val3.ViewID) : 0f }; } else { PingTarget type = lookResult.Type; if (1 == 0) { } PingWire pingWire = type switch { PingTarget.Cart => PingWire.Cart, PingTarget.Item => PingWire.Item, PingTarget.Cosmetic => PingWire.Cosmetic, _ => PingWire.Valuable, }; if (1 == 0) { } PingWire pingWire2 = pingWire; array2 = new float[4] { lookResult.Position.x, lookResult.Position.y, lookResult.Position.z, (float)pingWire2 }; } NetworkedEvent pingEvent2 = PingEvent; if (pingEvent2 != null) { pingEvent2.RaiseEvent((object)array2, NetworkingEvents.RaiseOthers, SendOptions.SendReliable); } } private void LoadBundle() { string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); string text = Path.Combine(directoryName, "pingbundle"); if (!File.Exists(text)) { Logger.LogError((object)("bundle missing at " + text)); return; } AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val == (Object)null) { Logger.LogError((object)"AssetBundle.LoadFromFile came back null"); return; } prefabs[PingTarget.Valuable] = val.LoadAsset("ValuablePing"); prefabs[PingTarget.Item] = val.LoadAsset("ItemPing"); prefabs[PingTarget.Enemy] = val.LoadAsset("EnemyPing"); prefabs[PingTarget.Location] = val.LoadAsset("LocationPing"); prefabs[PingTarget.Cart] = val.LoadAsset("CartPing"); prefabs[PingTarget.Cosmetic] = val.LoadAsset("CosmeticPing"); val.Unload(false); Dictionary dictionary = prefabs; if (dictionary[PingTarget.Cart] == null) { GameObject val3 = (dictionary[PingTarget.Cart] = prefabs[PingTarget.Item]); } dictionary = prefabs; if (dictionary[PingTarget.Cosmetic] == null) { GameObject val3 = (dictionary[PingTarget.Cosmetic] = prefabs[PingTarget.Valuable]); } foreach (KeyValuePair prefab in prefabs) { if ((Object)(object)prefab.Value == (Object)null) { Logger.LogError((object)$"{prefab.Key}Ping not in bundle"); } } } internal static Vector3 GetCenter(PhysGrabObject pg) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //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_0022: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: 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) Vector3 centerPoint = pg.centerPoint; if (centerPoint.x != 0f || centerPoint.y != 0f || centerPoint.z != 0f) { return centerPoint; } return ((Component)pg).transform.position; } internal static PhysGrabObject? GetPhysGrab(Component c) { PhysGrabObject component = c.GetComponent(); if ((Object)(object)component != (Object)null) { return component; } component = c.GetComponentInChildren(); if ((Object)(object)component != (Object)null) { return component; } return c.GetComponentInParent(); } private static void RemotePing(EventData evt) { //IL_0044: 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_014d: 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_01a6: 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) if (!(evt.CustomData is float[] array) || array.Length < 4) { return; } Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(array[0], array[1], array[2]); PingWire pingWire = (PingWire)array[3]; switch (pingWire) { case PingWire.Location: PingAtPos(val, evt.Sender); break; case PingWire.Enemy: { EnemyRigidbody val6 = null; if (array.Length >= 5) { PhotonView val7 = PhotonView.Find((int)array[4]); EnemyParent val8 = ((val7 != null) ? ((Component)val7).GetComponent() : null); Enemy val9 = (((Object)(object)val8 != (Object)null) ? val8.Enemy : null); val6 = (((Object)(object)val9 != (Object)null) ? val9.Rigidbody : null); } if ((Object)(object)val6 == (Object)null) { val6 = FindClosestEnemyRigidbody(val, 225f); } if (!((Object)(object)val6 == (Object)null)) { PhysGrabObject val10 = ((Component)val6).GetComponent(); if ((Object)(object)val10 == (Object)null) { val10 = ((Component)val6).gameObject.AddComponent(); Object.Destroy((Object)(object)val10, cfgDuration.Value + 5f); } Spawn(val10, PingTarget.Enemy); } break; } default: if (pingWire != PingWire.Cart) { if (pingWire == PingWire.Cosmetic) { CosmeticWorldObject val2 = FindClosestCosmetic(val, 25f); if (!((Object)(object)val2 == (Object)null)) { PhysGrabObject physGrab = GetPhysGrab((Component)(object)val2); Spawn(physGrab, PingTarget.Cosmetic); } break; } ValuableObject val3 = FindClosestValuable(val, 25f); if ((Object)(object)val3 != (Object)null) { Spawn(val3.physGrabObject ?? GetPhysGrab((Component)(object)val3), PingTarget.Valuable); break; } PlayerDeathHead val4 = FindClosestDeathHead(val, 25f); if (!((Object)(object)val4 == (Object)null)) { PhysGrabObject physGrab2 = ((Component)val4).GetComponent() ?? AddDeathHeadProxy(val4); Spawn(physGrab2, PingTarget.Valuable); } break; } goto case PingWire.Item; case PingWire.Item: { ItemAttributes val5 = FindClosestItem(val, 25f); if (!((Object)(object)val5 == (Object)null)) { PhysGrabObject physGrab3 = val5.physGrabObject ?? GetPhysGrab((Component)(object)val5); PingTarget type = ((pingWire == PingWire.Cart) ? PingTarget.Cart : PingTarget.Item); Spawn(physGrab3, type); } break; } } } private static PhysGrabObject AddDeathHeadProxy(PlayerDeathHead dh) { PhysGrabObject val = ((Component)dh).gameObject.AddComponent(); Object.Destroy((Object)(object)val, cfgDuration.Value + 5f); return val; } internal static LookResult Aim(Camera cam, float range) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: 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) //IL_0054: 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) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: 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_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_0396: 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_020e: 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_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_010f: 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_027a: Unknown result type (might be due to invalid IL or missing references) //IL_027f: 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_0121: 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_013b: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0312: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_0165: 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_0555: Unknown result type (might be due to invalid IL or missing references) //IL_055a: Unknown result type (might be due to invalid IL or missing references) //IL_0568: Unknown result type (might be due to invalid IL or missing references) //IL_056d: Unknown result type (might be due to invalid IL or missing references) //IL_056e: Unknown result type (might be due to invalid IL or missing references) //IL_0573: Unknown result type (might be due to invalid IL or missing references) //IL_0575: Unknown result type (might be due to invalid IL or missing references) //IL_0576: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Unknown result type (might be due to invalid IL or missing references) //IL_058c: Unknown result type (might be due to invalid IL or missing references) //IL_058e: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_0491: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Unknown result type (might be due to invalid IL or missing references) //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_034f: 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_049f: 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_0375: Unknown result type (might be due to invalid IL or missing references) //IL_04f1: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_04f7: Unknown result type (might be due to invalid IL or missing references) //IL_04fc: Unknown result type (might be due to invalid IL or missing references) //IL_04fe: Unknown result type (might be due to invalid IL or missing references) //IL_04ff: Unknown result type (might be due to invalid IL or missing references) //IL_0501: Unknown result type (might be due to invalid IL or missing references) //IL_0506: Unknown result type (might be due to invalid IL or missing references) //IL_0519: Unknown result type (might be due to invalid IL or missing references) //IL_051b: Unknown result type (might be due to invalid IL or missing references) //IL_0688: Unknown result type (might be due to invalid IL or missing references) //IL_0684: Unknown result type (might be due to invalid IL or missing references) //IL_068a: Unknown result type (might be due to invalid IL or missing references) //IL_06ba: Unknown result type (might be due to invalid IL or missing references) //IL_06bf: Unknown result type (might be due to invalid IL or missing references) //IL_06c1: Unknown result type (might be due to invalid IL or missing references) //IL_06c3: Unknown result type (might be due to invalid IL or missing references) //IL_06c4: Unknown result type (might be due to invalid IL or missing references) //IL_06c9: Unknown result type (might be due to invalid IL or missing references) //IL_06d5: Unknown result type (might be due to invalid IL or missing references) //IL_06d6: Unknown result type (might be due to invalid IL or missing references) //IL_07af: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_06f4: Unknown result type (might be due to invalid IL or missing references) //IL_06f5: Unknown result type (might be due to invalid IL or missing references) //IL_06f7: Unknown result type (might be due to invalid IL or missing references) //IL_06fc: Unknown result type (might be due to invalid IL or missing references) //IL_0742: Unknown result type (might be due to invalid IL or missing references) //IL_0744: Unknown result type (might be due to invalid IL or missing references) //IL_080b: Unknown result type (might be due to invalid IL or missing references) //IL_080d: Unknown result type (might be due to invalid IL or missing references) //IL_08f0: Unknown result type (might be due to invalid IL or missing references) //IL_08f2: Unknown result type (might be due to invalid IL or missing references) //IL_0832: Unknown result type (might be due to invalid IL or missing references) //IL_0833: Unknown result type (might be due to invalid IL or missing references) //IL_0775: Unknown result type (might be due to invalid IL or missing references) //IL_0777: Unknown result type (might be due to invalid IL or missing references) //IL_08bf: Unknown result type (might be due to invalid IL or missing references) //IL_08c1: Unknown result type (might be due to invalid IL or missing references) //IL_0880: Unknown result type (might be due to invalid IL or missing references) //IL_0882: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)cam).transform.position; Vector3 forward = ((Component)cam).transform.forward; float num = range * range; PhysGrabObject val = null; PhysGrabObject val2 = null; PhysGrabObject val3 = null; PhysGrabObject val4 = null; PhysGrabObject val5 = null; EnemyRigidbody enemyRb = null; float num2 = 1f; float num3 = 1f; float num4 = float.MaxValue; float num5 = float.MaxValue; Vector3 val6 = default(Vector3); Vector3 val7 = default(Vector3); Vector3 position2 = default(Vector3); Vector3 val8 = default(Vector3); List list = ValuableDirector.instance?.valuableList; Vector3 val11; if (list != null) { foreach (ValuableObject item in list) { if ((Object)(object)item == (Object)null) { continue; } PhysGrabObject val9 = item.physGrabObject ?? GetPhysGrab((Component)(object)item); if ((Object)(object)val9 == (Object)null) { continue; } PhysGrabObjectImpactDetector component = ((Component)val9).GetComponent(); if ((Object)(object)component != (Object)null && component.inCart) { continue; } Vector3 center = GetCenter(val9); Vector3 val10 = center - position; if (!(((Vector3)(ref val10)).sqrMagnitude > num) && !(Vector3.Dot(forward, val10) < 0f)) { val11 = Vector3.Cross(forward, val10); float sqrMagnitude = ((Vector3)(ref val11)).sqrMagnitude; if (!(sqrMagnitude >= num2)) { num2 = sqrMagnitude; val = val9; val6 = center; } } } } foreach (PlayerDeathHead deathHead in _deathHeads) { if ((Object)(object)deathHead == (Object)null || (Object)(object)deathHead.playerAvatar == (Object)(object)_localPlayer) { continue; } Vector3 position3 = ((Component)deathHead).transform.position; Vector3 val12 = position3 - position; if (((Vector3)(ref val12)).sqrMagnitude > num || Vector3.Dot(forward, val12) < 0f) { continue; } val11 = Vector3.Cross(forward, val12); float sqrMagnitude2 = ((Vector3)(ref val11)).sqrMagnitude; if (!(sqrMagnitude2 >= num2)) { PhysGrabObject val13 = ((Component)deathHead).GetComponent(); if ((Object)(object)val13 == (Object)null) { val13 = ((Component)deathHead).gameObject.AddComponent(); Object.Destroy((Object)(object)val13, cfgDuration.Value + 5f); } num2 = sqrMagnitude2; val = val13; val6 = GetCenter(val13); } } List list2 = ItemManager.instance?.spawnedItems; if (list2 != null) { foreach (ItemAttributes item2 in list2) { if ((Object)(object)item2 == (Object)null) { continue; } PhysGrabObject val14 = item2.physGrabObject ?? GetPhysGrab((Component)(object)item2); if ((Object)(object)val14 == (Object)null) { continue; } Vector3 center2 = GetCenter(val14); Vector3 val15 = center2 - position; if (!(((Vector3)(ref val15)).sqrMagnitude > num) && !(Vector3.Dot(forward, val15) < 0f)) { val11 = Vector3.Cross(forward, val15); float sqrMagnitude3 = ((Vector3)(ref val11)).sqrMagnitude; if (!(sqrMagnitude3 >= num3)) { num3 = sqrMagnitude3; val2 = val14; val7 = center2; } } } } int num6 = Physics.RaycastNonAlloc(position, forward, _pierceHits, range, _pierceMask, (QueryTriggerInteraction)1); if (num6 > 0) { Array.Sort(_pierceHits, 0, num6, _byDistance); for (int i = 0; i < num6; i++) { Collider collider = ((RaycastHit)(ref _pierceHits[i])).collider; if (((Object)collider).name.IndexOf("navmesh", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } EnemyParent componentInParent = ((Component)collider).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { Enemy enemy = componentInParent.Enemy; EnemyRigidbody val16 = (((Object)(object)enemy != (Object)null) ? enemy.Rigidbody : null); if ((Object)(object)val16 != (Object)null) { Rigidbody rb = val16.rb; Vector3 val17 = (((Object)(object)rb != (Object)null && ((Component)val16).gameObject.activeSelf) ? rb.worldCenterOfMass : (val16.followTarget.position + Vector3.up * val16.yOffset)); PhysGrabObject val18 = ((Component)val16).GetComponent(); if ((Object)(object)val18 == (Object)null) { val18 = ((Component)val16).gameObject.AddComponent(); Object.Destroy((Object)(object)val18, cfgDuration.Value + 5f); } Vector3 val19 = ((RaycastHit)(ref _pierceHits[i])).point - position; val11 = Vector3.Cross(forward, val19); num4 = ((Vector3)(ref val11)).sqrMagnitude; val3 = val18; enemyRb = val16; position2 = val17; } break; } CosmeticWorldObject componentInParent2 = ((Component)collider).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null) { PhysGrabObject physGrab = GetPhysGrab((Component)(object)componentInParent2); if ((Object)(object)physGrab != (Object)null) { Vector3 center3 = GetCenter(physGrab); Vector3 val20 = ((RaycastHit)(ref _pierceHits[i])).point - position; val11 = Vector3.Cross(forward, val20); num5 = ((Vector3)(ref val11)).sqrMagnitude; val4 = physGrab; val8 = center3; } break; } PhysGrabObject componentInParent3 = ((Component)collider).GetComponentInParent(); if ((Object)(object)componentInParent3 != (Object)null) { if ((Object)(object)val5 == (Object)null) { val5 = componentInParent3; } continue; } break; } } LookResult result; if ((Object)(object)val == (Object)null && (Object)(object)val2 == (Object)null && (Object)(object)val3 == (Object)null && (Object)(object)val4 == (Object)null) { result = default(LookResult); result.Type = PingTarget.None; return result; } bool flag = (Object)(object)val2 != (Object)null && ((Object)(object)val == (Object)null || num3 <= num2); PingTarget pingTarget = ((!flag) ? PingTarget.Valuable : PingTarget.Item); if (pingTarget == PingTarget.Item && (Object)(object)val2 != (Object)null && (Object)(object)((Component)val2).GetComponent() != (Object)null) { pingTarget = PingTarget.Cart; } PhysGrabObject val21 = (flag ? val2 : val); Vector3 val22 = (flag ? val7 : val6); float num7 = (flag ? num3 : num2); if ((Object)(object)val5 != (Object)null && (Object)(object)val21 != (Object)(object)val5) { Vector3 center4 = GetCenter(val5); Vector3 val23 = center4 - position; if (((Vector3)(ref val23)).sqrMagnitude <= num && Vector3.Dot(forward, val23) >= 0f) { val11 = Vector3.Cross(forward, val23); float sqrMagnitude4 = ((Vector3)(ref val11)).sqrMagnitude; if (sqrMagnitude4 < num7 * 1.5f) { ValuableObject component2 = ((Component)val5).GetComponent(); ItemAttributes component3 = ((Component)val5).GetComponent(); if ((Object)(object)component2 != (Object)null) { pingTarget = PingTarget.Valuable; val21 = val5; val22 = center4; num7 = sqrMagnitude4; } else if ((Object)(object)component3 != (Object)null) { pingTarget = (((Object)(object)((Component)val5).GetComponent() != (Object)null) ? PingTarget.Cart : PingTarget.Item); val21 = val5; val22 = center4; num7 = sqrMagnitude4; } } } } if ((Object)(object)val4 != (Object)null && ((Object)(object)val21 == (Object)null || num5 < num7)) { pingTarget = PingTarget.Cosmetic; val21 = val4; val22 = val8; num7 = num5; } if ((Object)(object)val3 != (Object)null && pingTarget != PingTarget.Cart && ((Object)(object)val21 == (Object)null || num4 < num7)) { result = default(LookResult); result.Type = PingTarget.Enemy; result.PhysGrab = val3; result.EnemyRb = enemyRb; result.Position = position2; return result; } if ((Object)(object)val21 != (Object)null) { if (pingTarget != PingTarget.Cosmetic && !LOSClear(position, val22, ((Component)val21).transform)) { if ((Object)(object)val3 != (Object)null) { result = default(LookResult); result.Type = PingTarget.Enemy; result.PhysGrab = val3; result.EnemyRb = enemyRb; result.Position = position2; return result; } result = default(LookResult); result.Type = PingTarget.None; return result; } result = default(LookResult); result.Type = pingTarget; result.PhysGrab = val21; result.Position = val22; return result; } result = default(LookResult); result.Type = PingTarget.Enemy; result.PhysGrab = val3; result.EnemyRb = enemyRb; result.Position = position2; return result; } private static bool LOSClear(Vector3 from, Vector3 to, Transform? root) { //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) //IL_0003: 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_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: 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_0079: Unknown result type (might be due to invalid IL or missing references) Vector3 val = to - from; if (!PiercingRaycast(from, ((Vector3)(ref val)).normalized, ((Vector3)(ref val)).magnitude - 0.1f, out var result, out var passedHinge)) { return true; } Transform transform = ((Component)((RaycastHit)(ref result)).collider).transform; if ((Object)(object)root != (Object)null && (transform.IsChildOf(root) || root.IsChildOf(transform))) { return true; } Vector3 val2 = ((RaycastHit)(ref result)).point - to; if (((Vector3)(ref val2)).sqrMagnitude < 0.09f) { return true; } return passedHinge; } internal static bool PiercingRaycast(Vector3 origin, Vector3 dir, float range, out RaycastHit result) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) bool passedHinge; return PiercingRaycast(origin, dir, range, out result, out passedHinge); } internal static bool PiercingRaycast(Vector3 origin, Vector3 dir, float range, out RaycastHit result, out bool passedHinge) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0006: 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_014f: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0114: 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_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) passedHinge = false; int num = Physics.RaycastNonAlloc(origin, dir, _pierceHits, range, _pierceMask, (QueryTriggerInteraction)1); if (num == 0) { result = default(RaycastHit); return false; } Array.Sort(_pierceHits, 0, num, _byDistance); for (int i = 0; i < num; i++) { Collider collider = ((RaycastHit)(ref _pierceHits[i])).collider; if (((Object)collider).name.IndexOf("navmesh", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } PhysGrabObject componentInParent = ((Component)collider).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { PhysGrabHinge component = ((Component)componentInParent).GetComponent(); if ((Object)(object)component != (Object)null && component.closed) { result = _pierceHits[i]; return true; } if ((Object)(object)component != (Object)null) { passedHinge = true; } continue; } PhysGrabHinge componentInParent2 = ((Component)collider).GetComponentInParent(); if ((Object)(object)componentInParent2 != (Object)null) { if (componentInParent2.closed) { result = _pierceHits[i]; return true; } passedHinge = true; continue; } result = _pierceHits[i]; return true; } result = default(RaycastHit); return false; } private static ValuableObject? FindClosestValuable(Vector3 pos, float maxSqDist) { //IL_006f: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) List list = ValuableDirector.instance?.valuableList; if (list == null) { return null; } ValuableObject result = null; float num = maxSqDist; foreach (ValuableObject item in list) { if (!((Object)(object)item == (Object)null)) { PhysGrabObject physGrabObject = item.physGrabObject; Vector3 val = (((Object)(object)physGrabObject != (Object)null) ? GetCenter(physGrabObject) : ((Component)item).transform.position); Vector3 val2 = val - pos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = item; } } } return result; } private static PlayerDeathHead? FindClosestDeathHead(Vector3 pos, float maxSqDist) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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) PlayerDeathHead result = null; float num = maxSqDist; for (int i = 0; i < _deathHeads.Count; i++) { PlayerDeathHead val = _deathHeads[i]; if (!((Object)(object)val == (Object)null)) { Vector3 val2 = ((Component)val).transform.position - pos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = val; } } } return result; } private static ItemAttributes? FindClosestItem(Vector3 pos, float sqRange) { //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0061: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) List list = ItemManager.instance?.spawnedItems; if (list == null) { return null; } ItemAttributes result = null; float num = sqRange; for (int i = 0; i < list.Count; i++) { ItemAttributes val = list[i]; if (!((Object)(object)val == (Object)null)) { PhysGrabObject physGrabObject = val.physGrabObject; Vector3 val2 = (((Object)(object)physGrabObject != (Object)null) ? GetCenter(physGrabObject) : ((Component)val).transform.position) - pos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = val; } } } return result; } private static CosmeticWorldObject? FindClosestCosmetic(Vector3 pos, float maxSqDist) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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) if (_cosmeticCache == null || (_cosmeticCache.Length != 0 && (Object)(object)_cosmeticCache[0] == (Object)null)) { _cosmeticCache = Object.FindObjectsOfType(); } CosmeticWorldObject result = null; float num = maxSqDist; CosmeticWorldObject[] cosmeticCache = _cosmeticCache; foreach (CosmeticWorldObject val in cosmeticCache) { if (!((Object)(object)val == (Object)null)) { Vector3 val2 = ((Component)val).transform.position - pos; float sqrMagnitude = ((Vector3)(ref val2)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = val; } } } return result; } private static EnemyRigidbody? FindClosestEnemyRigidbody(Vector3 pos, float maxSqDist) { //IL_00b3: 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_00b9: 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) if ((Object)(object)EnemyDirector.instance == (Object)null) { return null; } List enemiesSpawned = EnemyDirector.instance.enemiesSpawned; if (enemiesSpawned.Count == 0) { return null; } EnemyRigidbody result = null; float num = maxSqDist; foreach (EnemyParent item in enemiesSpawned) { if ((Object)(object)item == (Object)null) { continue; } Enemy enemy = item.Enemy; if ((Object)(object)enemy == (Object)null) { continue; } EnemyRigidbody rigidbody = enemy.Rigidbody; if (!((Object)(object)rigidbody == (Object)null) && ((Component)rigidbody).gameObject.activeSelf) { Vector3 val = rigidbody.followTarget.position - pos; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = rigidbody; } } } return result; } } [HarmonyPatch(typeof(PlayerDeathHead))] internal static class DeathHeadTracker { [HarmonyPatch("Start")] [HarmonyPostfix] private static void OnStart(PlayerDeathHead __instance) { PingIt._deathHeads.Add(__instance); } [HarmonyPatch("OnDestroy")] [HarmonyPostfix] private static void OnDestroy(PlayerDeathHead __instance) { PingIt._deathHeads.Remove(__instance); } } [HarmonyPatch(typeof(ShopManager), "GetAllItemsFromStatsManager")] internal static class UpgradeCap { private static readonly string[] _ours = new string[2] { "PingAnywhere", "PingInfoUpgrade" }; [HarmonyPrefix] private static void Prefix() { if ((Object)(object)StatsManager.instance == (Object)null) { return; } int maxPurchaseAmount = (PingIt.HasSharedUpgradesPlus() ? 1 : (GameDirector.instance?.PlayerList?.Count).GetValueOrDefault(1)); string[] ours = _ours; foreach (string key in ours) { if (StatsManager.instance.itemDictionary.TryGetValue(key, out var value) && !((Object)(object)value == (Object)null)) { value.maxPurchase = true; value.maxPurchaseAmount = maxPurchaseAmount; } } } } [HarmonyPatch(typeof(StatsManager), "Start")] internal static class NameFix { [HarmonyPostfix] private static void Postfix(StatsManager __instance) { Add(__instance, "playerUpgradePingAnywhere", "Ping Anywhere"); Add(__instance, "playerUpgradePingInfo", "Ping Info"); } private static void Add(StatsManager sm, string key, string name) { //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_002b: Expected O, but got Unknown if (!sm.upgradesInfo.ContainsKey(key)) { sm.upgradesInfo[key] = new UpgradeInfo { displayName = name }; } } } internal class PingLabel : MonoBehaviour { private static readonly List _active = new List(); private PhysGrabObject? _target; private MeshRenderer[] _renderers = Array.Empty(); private TextMeshProUGUI _text = null; private RectTransform _rect = null; private float _timer; private float _fadeTime = 0.5f; private string _fullText = ""; private float _typeProgress = 0f; private Color _baseColor; private float _lookAngle; private bool _aboveBracket; internal Func? _dynamicText; internal static PingLabel Spawn(PhysGrabObject target, string label, float duration, float lookAngle = 10f, bool above = false, Color? color = null) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: 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_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) WorldSpaceUIValue instance = WorldSpaceUIValue.instance; GameObject val = new GameObject("PingIt_ValueLabel"); RectTransform rect = HUDCanvas.instance.rect; val.transform.SetParent((Transform)(object)rect, false); TextMeshProUGUI val2 = val.AddComponent(); Color colorValue = default(Color); if ((Object)(object)instance != (Object)null) { TextMeshProUGUI component = ((Component)instance).GetComponent(); if ((Object)(object)component != (Object)null) { ((TMP_Text)val2).font = ((TMP_Text)component).font; ((TMP_Text)val2).fontSharedMaterial = ((TMP_Text)component).fontSharedMaterial; ((TMP_Text)val2).fontSize = instance.textSizeValue; } colorValue = instance.colorValue; } else { ((TMP_Text)val2).fontSize = 36f; ((Color)(ref colorValue))..ctor(0.4f, 0.85f, 0.3f); } ((TMP_Text)val2).fontSize = ((TMP_Text)val2).fontSize * PingIt.cfgTextSize.Value; ((TMP_Text)val2).text = ""; ((TMP_Text)val2).alignment = (TextAlignmentOptions)514; ((Graphic)val2).raycastTarget = false; ((Graphic)val2).color = PingIt.WithAlpha(colorValue, 0f); for (int num = _active.Count - 1; num >= 0; num--) { if ((Object)(object)_active[num]._target == (Object)(object)target && _active[num]._aboveBracket == above) { Object.Destroy((Object)(object)((Component)_active[num]).gameObject); } } PingLabel pingLabel = val.AddComponent(); pingLabel._target = target; pingLabel._renderers = ((Component)target).GetComponentsInChildren(); pingLabel._text = val2; pingLabel._rect = val.GetComponent(); pingLabel._fullText = label; pingLabel._timer = duration; pingLabel._baseColor = color.GetValueOrDefault(colorValue); pingLabel._lookAngle = lookAngle; pingLabel._aboveBracket = above; _active.Add(pingLabel); return pingLabel; } internal static void ClearLabels(PhysGrabObject target) { for (int num = _active.Count - 1; num >= 0; num--) { if ((Object)(object)_active[num]._target == (Object)(object)target) { Object.Destroy((Object)(object)((Component)_active[num]).gameObject); } } } private void OnDestroy() { _active.Remove(this); } private Vector2 GetBelowBracketPosition() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_00b0: 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) //IL_00b6: 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_00bd: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) bool flag = false; Bounds val = default(Bounds); for (int i = 0; i < _renderers.Length; i++) { if (!((Object)(object)_renderers[i] == (Object)null)) { if (!flag) { val = ((Renderer)_renderers[i]).bounds; flag = true; } else { ((Bounds)(ref val)).Encapsulate(((Renderer)_renderers[i]).bounds); } } } Vector3 val2 = (Vector3)(flag ? new Vector3(((Bounds)(ref val)).center.x, ((Bounds)(ref val)).min.y, ((Bounds)(ref val)).center.z) : PingIt.GetCenter(_target)); Vector3 val3 = SemiFunc.UIWorldToCanvasPosition(val2); return new Vector2(val3.x, val3.y - 40f); } private Vector2 GetAboveBracketPosition() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_007f: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_00b0: 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) //IL_00b6: 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_00bd: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) bool flag = false; Bounds val = default(Bounds); for (int i = 0; i < _renderers.Length; i++) { if (!((Object)(object)_renderers[i] == (Object)null)) { if (!flag) { val = ((Renderer)_renderers[i]).bounds; flag = true; } else { ((Bounds)(ref val)).Encapsulate(((Renderer)_renderers[i]).bounds); } } } Vector3 val2 = (Vector3)(flag ? new Vector3(((Bounds)(ref val)).center.x, ((Bounds)(ref val)).max.y, ((Bounds)(ref val)).center.z) : PingIt.GetCenter(_target)); Vector3 val3 = SemiFunc.UIWorldToCanvasPosition(val2); return new Vector2(val3.x, val3.y + 40f); } private float AngleToCamera(Camera cam) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_target == (Object)null) { return float.MaxValue; } Vector3 forward = ((Component)cam).transform.forward; Vector3 val = PingIt.GetCenter(_target) - ((Component)cam).transform.position; return Vector3.Angle(forward, ((Vector3)(ref val)).normalized); } private void Update() { //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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_022c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)_target == (Object)null || (Object)(object)HUDCanvas.instance == (Object)null) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } _timer -= Time.deltaTime; if (_timer <= 0f - _fadeTime) { Object.Destroy((Object)(object)((Component)this).gameObject); return; } if ((Object)(object)PingIt._mainCam == (Object)null) { PingIt._mainCam = Camera.main; } _rect.anchoredPosition = (_aboveBracket ? GetAboveBracketPosition() : GetBelowBracketPosition()); bool flag = false; if ((Object)(object)PingIt._mainCam != (Object)null) { float num = AngleToCamera(PingIt._mainCam); if (num <= _lookAngle) { bool flag2 = true; foreach (PingLabel item in _active) { if ((Object)(object)item == (Object)(object)this || !(item.AngleToCamera(PingIt._mainCam) < num)) { continue; } flag2 = false; break; } flag = flag2; } } if (_dynamicText != null) { ((TMP_Text)_text).text = (flag ? _dynamicText() : ""); } else if (flag) { _typeProgress += Time.deltaTime * 50f; int length = Mathf.Min((int)_typeProgress, _fullText.Length); ((TMP_Text)_text).text = _fullText.Substring(0, length); } else { _typeProgress = 0f; ((TMP_Text)_text).text = ""; } float a = ((_timer < 0f) ? Mathf.Clamp01(1f + _timer / _fadeTime) : 1f); ((Graphic)_text).color = PingIt.WithAlpha(_baseColor, a); } } internal enum PingTarget { None, Valuable, Item, Cart, Enemy, Location, Cosmetic } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { internal IgnoresAccessChecksToAttribute(string assemblyName) { } } }