using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [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: AssemblyCompany("HappyCats")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DeathMinimap")] [assembly: AssemblyTitle("DeathMinimap")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.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 DeathMinimap { public enum MinimapSize { Small, Medium, Large } [BepInPlugin("HappyCats.DeathMinimap", "DeathMinimap", "2.0.0")] public class DeathMinimap : BaseUnityPlugin { private static float scaleSpeed = 5f; private static float scale = 0.5f; private static float targetScale = 1f; private static bool mapToggled = false; internal static DeathMinimap Instance { get; private set; } = null; internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } internal static ConfigEntry Size { get; private set; } = null; internal static RenderTexture? renderTexture { get; set; } = null; internal static Camera? camera { get; set; } = null; internal static bool spectating { get; set; } = false; internal static bool active { get; set; } = false; internal static bool activePrev { get; set; } = false; private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Size = ((BaseUnityPlugin)this).Config.Bind("General", "Minimap Size", MinimapSize.Small, "Size of the minimap display"); Patch(); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); } internal void Patch() { //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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { if (spectating) { if (Object.op_Implicit((Object)(object)Map.Instance) && (Object)(object)Map.Instance.ActiveParent != (Object)null && !Map.Instance.ActiveParent.activeSelf) { Map.Instance.ActiveParent.SetActive(true); } if (SemiFunc.NoTextInputsActive()) { if (InputManager.instance.InputToggleGet((InputKey)8)) { if (SemiFunc.InputDown((InputKey)8)) { mapToggled = !mapToggled; } } else { mapToggled = false; } active = SemiFunc.InputHold((InputKey)8) || mapToggled; } if (Object.op_Implicit((Object)(object)Map.Instance)) { Map.Instance.Active = active; } } targetScale = (active ? 1f : 0.5f); scale = Mathf.Lerp(scale, targetScale, Time.deltaTime * scaleSpeed); UpdateCameraTransform(); } private void UpdateCameraTransform() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_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_0054: Unknown result type (might be due to invalid IL or missing references) if (spectating && Object.op_Implicit((Object)(object)SpectateCamera.instance)) { Transform transform = ((Component)SpectateCamera.instance).transform; if (!Object.op_Implicit((Object)(object)DirtFinderMapPlayer.Instance.PlayerTransform)) { Logger.LogWarning((object)"DirtFinderMapPlayer transform null."); DirtFinderMapPlayer.Instance.PlayerTransform = new GameObject().transform; } DirtFinderMapPlayer.Instance.PlayerTransform.position = transform.position; Transform playerTransform = DirtFinderMapPlayer.Instance.PlayerTransform; Quaternion rotation = transform.rotation; float y = ((Quaternion)(ref rotation)).eulerAngles.y; rotation = transform.rotation; playerTransform.rotation = Quaternion.Euler(0f, y, ((Quaternion)(ref rotation)).eulerAngles.z); PlayerController.instance.playerAvatarScript.LastNavmeshPosition = SpectateCamera.instance.player.LastNavmeshPosition; } } private void OnGUI() { //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) if (!spectating) { return; } if (active != activePrev) { activePrev = active; Sound val = (activePrev ? PlayerAvatar.instance.mapToolController.SoundStart : PlayerAvatar.instance.mapToolController.SoundStop); if (Object.op_Implicit((Object)(object)SpectateCamera.instance)) { val.Play(((Component)SpectateCamera.instance).transform.position, 1f, 1f, 1f, 1f); } } if (!active) { targetScale = 0.5f; return; } CameraTopFade.Instance.Set(0.5f, 0.1f); (float width, float height) minimapSize = GetMinimapSize(); float item = minimapSize.width; float item2 = minimapSize.height; float num = ((float)Screen.width - item) / 2f; float num2 = ((float)Screen.height - item2) / 2f; Rect mapRect = default(Rect); ((Rect)(ref mapRect))..ctor(num, num2, item, item2); DrawMapTexture(mapRect); DrawMapFrame(mapRect); DrawMapLabel(mapRect); } private static void DrawMapTexture(Rect mapRect) { //IL_0001: 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_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) Color color = GUI.color; GUI.color = new Color(1f, 1f, 1f, scale * 0.9f + 0.1f); GUI.DrawTexture(mapRect, (Texture)(object)renderTexture, (ScaleMode)0, false); GUI.color = color; } private static void DrawMapFrame(Rect mapRect) { //IL_0001: 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_001b: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) Color color = GUI.color; GUI.color = new Color(0.8f, 0.8f, 0.8f, scale); float num = 2f; GUI.DrawTexture(new Rect(((Rect)(ref mapRect)).x, ((Rect)(ref mapRect)).y, ((Rect)(ref mapRect)).width, num), (Texture)(object)Texture2D.whiteTexture); GUI.DrawTexture(new Rect(((Rect)(ref mapRect)).x, ((Rect)(ref mapRect)).y + ((Rect)(ref mapRect)).height - num, ((Rect)(ref mapRect)).width, num), (Texture)(object)Texture2D.whiteTexture); GUI.DrawTexture(new Rect(((Rect)(ref mapRect)).x, ((Rect)(ref mapRect)).y, num, ((Rect)(ref mapRect)).height), (Texture)(object)Texture2D.whiteTexture); GUI.DrawTexture(new Rect(((Rect)(ref mapRect)).x + ((Rect)(ref mapRect)).width - num, ((Rect)(ref mapRect)).y, num, ((Rect)(ref mapRect)).height), (Texture)(object)Texture2D.whiteTexture); GUI.color = color; } private static void DrawMapLabel(Rect mapRect) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) GUIStyle val = new GUIStyle(GUI.skin.label) { alignment = (TextAnchor)4, fontSize = Mathf.RoundToInt(14f * scale) }; val.normal.textColor = new Color(1f, 1f, 1f, scale); GUIStyle val2 = val; Rect val3 = default(Rect); ((Rect)(ref val3))..ctor(((Rect)(ref mapRect)).x, ((Rect)(ref mapRect)).y - 25f, ((Rect)(ref mapRect)).width, 20f); GUI.Label(val3, "Death Minimap", val2); } internal static void SetSpectating(bool isSpectating) { spectating = isSpectating; if (!isSpectating) { active = false; activePrev = false; mapToggled = false; } } private static (float width, float height) GetMinimapSize() { MinimapSize value = Size.Value; if (1 == 0) { } (float, float) result = value switch { MinimapSize.Small => (RenderTextureMain.instance.textureWidthSmall, RenderTextureMain.instance.textureHeightSmall), MinimapSize.Medium => (RenderTextureMain.instance.textureWidthMedium, RenderTextureMain.instance.textureHeightMedium), MinimapSize.Large => (RenderTextureMain.instance.textureWidthLarge, RenderTextureMain.instance.textureHeightLarge), _ => (RenderTextureMain.instance.textureWidthSmall, RenderTextureMain.instance.textureHeightSmall), }; if (1 == 0) { } return result; } } [HarmonyPatch(typeof(DirtFinderMapPlayer))] internal static class DirtFinderMapPlayerPatch { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake_Postfix(DirtFinderMapPlayer __instance) { Camera componentInChildren = ((Component)__instance).GetComponentInChildren(); if (((Object)componentInChildren).name != "Dirt Finder Map Camera") { DeathMinimap.Logger.LogWarning((object)"Dirt Finder Map Camera not found."); } else if (!Object.op_Implicit((Object)(object)DeathMinimap.camera)) { DeathMinimap.camera = componentInChildren; } } } [HarmonyPatch(typeof(GameDirector))] internal static class GameDirectorPatch { [HarmonyPrefix] [HarmonyPatch("Revive")] private static void Revive_Prefix() { DeathMinimap.SetSpectating(isSpectating: false); } [HarmonyPrefix] [HarmonyPatch("gameStateStart")] private static void GameStateStart_Prefix() { if (DeathMinimap.spectating) { DeathMinimap.SetSpectating(isSpectating: false); } } } [HarmonyPatch(typeof(PlayerAvatar))] internal static class PlayerAvatarPatch { [CompilerGenerated] private sealed class d__1 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Camera camera; private RenderTexture 5__1; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__1(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { 5__1 = null; <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; 5__1 = camera.activeTexture; break; case 1: <>1__state = -1; 5__1 = camera.activeTexture; break; } if (!Object.op_Implicit((Object)(object)5__1)) { <>2__current = null; <>1__state = 1; return true; } DeathMinimap.renderTexture = 5__1; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [HarmonyPrefix] [HarmonyPatch("SetSpectate")] private static void SetSpectate_Prefix() { Map.Instance.ActiveParent.SetActive(true); if (Object.op_Implicit((Object)(object)DeathMinimap.camera)) { ((MonoBehaviour)Map.Instance).StartCoroutine(LoadRenderTexture(DeathMinimap.camera)); } } [IteratorStateMachine(typeof(d__1))] private static IEnumerator LoadRenderTexture(Camera camera) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__1(0) { camera = camera }; } } [HarmonyPatch(typeof(SpectateCamera))] internal static class SpectateCameraPatch { [HarmonyPrefix] [HarmonyPatch("StateNormal")] private static void StateNormal_Prefix() { if ((SemiFunc.RunIsLevel() || SemiFunc.RunIsShop()) && !DeathMinimap.spectating && Object.op_Implicit((Object)(object)SpectateCamera.instance.player)) { DeathMinimap.SetSpectating(isSpectating: true); } } } }