using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using RoR2; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.UI; using WhatchaGotThere.Helpers; using WhatchaGotThere.Patches; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("WarperSan")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Shows what equipment an ally is currently holding.")] [assembly: AssemblyFileVersion("1.0.4.0")] [assembly: AssemblyInformationalVersion("1.0.4+7ad935099797e1506a109149b4d9532be0efa3c0")] [assembly: AssemblyProduct("WhatchaGotThere")] [assembly: AssemblyTitle("WhatchaGotThere")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/WarperSan/WhatchaGotThere/")] [assembly: AssemblyVersion("1.0.0.0")] [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 WhatchaGotThere { [RequireComponent(typeof(AllyCardController))] internal class AllyCardData : MonoBehaviour { private static readonly Dictionary CachedInstances = new Dictionary(); public AllyCardController? Controller { get; private set; } public EquipmentIcon? EquipmentIcon { get; private set; } public EquipmentIndex EquipmentIndex { get; private set; } private void Awake() { Controller = ((Component)this).gameObject.GetComponent(); EquipmentIcon = ((Component)this).gameObject.GetComponentInChildren(); EquipmentIndex = (EquipmentIndex)(-1); CachedInstances.Add(Controller, this); } public static bool TryGet(AllyCardController instance, out AllyCardData data) { return CachedInstances.TryGetValue(instance, out data); } public void UpdateCache() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Controller != (Object)null) { EquipmentIndex = Controller.sourceMaster.inventory.currentEquipmentState.equipmentIndex; } else { EquipmentIndex = (EquipmentIndex)(-1); } } private void OnDestroy() { if ((Object)(object)Controller != (Object)null) { CachedInstances.Remove(Controller); } } } public static class AllyCardEquipmentIconBuilder { public static void CreateIcon(Transform transform) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_009c: 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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: 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_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown //IL_0177: 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_018f: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Expected O, but got Unknown //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Expected O, but got Unknown //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0283: 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_029b: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("WhatchaGotThere EquipmentSlot", new Type[4] { typeof(RectTransform), typeof(LayoutElement), typeof(Image), typeof(TooltipProvider) }); val.transform.SetParent(transform, false); val.AddComponent(); val.AddComponent(); Transform obj = transform.Find("Portrait"); int num = ((obj != null) ? obj.GetSiblingIndex() : (-1)); if (num != -1) { val.transform.SetSiblingIndex(num + 1); } RectTransform component = val.GetComponent(); component.sizeDelta = new Vector2(48f, 48f); LayoutElement component2 = val.GetComponent(); Rect rect = component.rect; component2.preferredWidth = ((Rect)(ref rect)).width; rect = component.rect; component2.preferredHeight = ((Rect)(ref rect)).height; Image component3 = val.GetComponent(); ((Graphic)component3).color = Color.clear; ((Graphic)component3).raycastTarget = false; HGButton component4 = val.GetComponent(); ((Selectable)component4).image = component3; ((MPButton)component4).selectOnPointerEnter = false; UIInputPassthrough val2 = val.AddComponent(); val2.OnlyAllowMovement = false; EquipmentIcon val3 = val.AddComponent(); val3.tooltipProvider = val.GetComponent(); GameObject val4 = new GameObject("DisplayRoot", new Type[1] { typeof(RectTransform) }); val4.transform.SetParent(val.transform, false); val3.displayRoot = val4; RectTransform component5 = val4.GetComponent(); component5.anchorMin = Vector2.zero; component5.anchorMax = Vector2.one; component5.offsetMin = Vector2.zero; component5.offsetMax = Vector2.zero; GameObject val5 = new GameObject("IconPanel", new Type[2] { typeof(RectTransform), typeof(RawImage) }); val5.transform.SetParent(val4.transform, false); val3.iconImage = val5.GetComponent(); RectTransform component6 = val5.GetComponent(); component6.anchorMin = Vector2.zero; component6.anchorMax = Vector2.one; component6.offsetMin = Vector2.zero; component6.offsetMax = Vector2.zero; GameObject val6 = new GameObject("Cooldown Text", new Type[2] { typeof(RectTransform), typeof(HGTextMeshProUGUI) }); val6.transform.SetParent(val4.transform, false); RectTransform component7 = val6.GetComponent(); component7.anchorMin = Vector2.zero; component7.anchorMax = Vector2.one; component7.offsetMin = Vector2.zero; component7.offsetMax = Vector2.zero; HGTextMeshProUGUI component8 = val6.GetComponent(); ((TMP_Text)component8).alignment = (TextAlignmentOptions)514; val3.cooldownText = (TextMeshProUGUI)(object)component8; } } [BepInPlugin("dev.warpersan.whatchagotthere", "WhatchaGotThere", "1.0.4")] internal class Plugin : BaseUnityPlugin { private void Awake() { Configuration.Load(((BaseUnityPlugin)this).Config); Patch.ApplyAll(); Log.Info("dev.warpersan.whatchagotthere v1.0.4 has loaded!"); } private void OnDestroy() { Patch.RevertAll(); Log.Info("dev.warpersan.whatchagotthere v1.0.4 has unloaded!"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "dev.warpersan.whatchagotthere"; public const string PLUGIN_NAME = "WhatchaGotThere"; public const string PLUGIN_VERSION = "1.0.4"; } } namespace WhatchaGotThere.Patches { [HarmonyPatch(typeof(AllyCardController))] internal static class AllyCardController_Patches { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void Awake_Postfix(AllyCardController __instance) { AllyCardEquipmentIconBuilder.CreateIcon((Transform)(object)__instance.rectTransform); ((Component)__instance).gameObject.AddComponent(); } [HarmonyPatch("ShouldWeUpdate")] [HarmonyPostfix] private static void ShouldWeUpdate_Postfix(AllyCardController __instance, ref bool __result) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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) if (!__result && AllyCardData.TryGet(__instance, out AllyCardData data)) { EquipmentIndex currentEquipmentIndex = __instance.sourceMaster.inventory.currentEquipmentIndex; if (currentEquipmentIndex != data.EquipmentIndex) { __result = true; } } } [HarmonyPatch("UpdateInfo")] [HarmonyPostfix] private static void UpdateInfo_Postfix(AllyCardController __instance) { if (!AllyCardData.TryGet(__instance, out AllyCardData data)) { return; } EquipmentIcon equipmentIcon = data.EquipmentIcon; if (!((Object)(object)equipmentIcon == (Object)null)) { data.UpdateCache(); if (Object.op_Implicit((Object)(object)__instance.sourceMaster)) { bool active = ShouldDisplayUI(__instance.sourceMaster); equipmentIcon.targetInventory = __instance.sourceMaster.inventory; ((Component)equipmentIcon).gameObject.SetActive(active); } } } private static bool ShouldDisplayUI(CharacterMaster master) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Invalid comparison between Unknown and I4 //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_006b: Invalid comparison between Unknown and I4 if ((int)master.inventory.currentEquipmentState.equipmentIndex == -1) { return false; } if (Configuration.Instance == null) { return true; } Configuration.TargetType value = Configuration.Instance.AllowedTargets.Value; if (value == Configuration.TargetType.None) { return false; } if (!master.hasBody) { return false; } BodyIndex bodyIndex = master.GetBody().bodyIndex; if ((int)SurvivorCatalog.GetSurvivorIndexFromBodyIndex(bodyIndex) != -1) { return value.HasFlag(Configuration.TargetType.Survivors); } if ((int)DroneCatalog.GetDroneIndexFromBodyIndex(bodyIndex) != -1) { return value.HasFlag(Configuration.TargetType.Drones); } if ((Object)(object)master.minionOwnership.ownerMaster != (Object)null) { return value.HasFlag(Configuration.TargetType.Allies); } return true; } } [HarmonyPatch(typeof(AllyCardManager))] internal static class AllyCardManager_Patches { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void Awake_Postfix(AllyCardManager __instance) { Canvas componentInParent = ((Component)((Component)__instance).transform).GetComponentInParent(); if (!((Object)(object)componentInParent == (Object)null) && !((Object)(object)((Component)componentInParent).gameObject.GetComponent() != (Object)null)) { ((Component)componentInParent).gameObject.AddComponent(); } } } } namespace WhatchaGotThere.Helpers { internal class Configuration { [Flags] public enum TargetType : byte { None = 0, Survivors = 1, Drones = 2, Allies = 4, All = 7 } private const string SECTION = "Mod"; public readonly ConfigEntry AllowedTargets; public static Configuration? Instance; private Configuration(ConfigFile cfg) { //IL_0012: 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_002d: Expected O, but got Unknown //IL_002d: Expected O, but got Unknown AllowedTargets = cfg.Bind(new ConfigDefinition("Mod", "AllowedTargets"), TargetType.All, new ConfigDescription("Determines who can display their equipment.", (AcceptableValueBase)null, Array.Empty())); } public static void Load(ConfigFile cfg) { Instance = new Configuration(cfg); } } internal static class Log { private static ManualLogSource? _logger; private static void LogSelf(string message, LogLevel level) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (_logger == null) { _logger = Logger.CreateLogSource("WhatchaGotThere"); } ManualLogSource? logger = _logger; if (logger != null) { logger.Log(level, (object)message); } } public static void Debug(string message) { LogSelf(message, (LogLevel)32); } public static void Info(string message) { LogSelf(message, (LogLevel)8); } public static void Warning(string message) { LogSelf(message, (LogLevel)4); } public static void Error(string message) { LogSelf(message, (LogLevel)2); } } internal static class Patch { private static Harmony? _harmony; public static void ApplyAll() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown if (_harmony != null) { Log.Debug("Unpatching the existing harmony instance."); RevertAll(); } _harmony = new Harmony("dev.warpersan.whatchagotthere"); _harmony.PatchAll(typeof(AllyCardController_Patches)); _harmony.PatchAll(typeof(AllyCardManager_Patches)); Log.Debug("All patches applied."); } public static void RevertAll() { if (_harmony != null) { _harmony.UnpatchSelf(); _harmony = null; Log.Debug("All patches reverted."); } } } }