Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Pintervention v1.3.0
Pintervention.dll
Decompiled a year ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ComfyLib; using HarmonyLib; using Microsoft.CodeAnalysis; using Splatform; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Pintervention")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Pintervention")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("334130a7-42b2-4177-a221-cedf40d6899d")] [assembly: AssemblyFileVersion("1.3.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.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.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Pintervention { public static class PluginConfig { public static ConfigEntry<bool> IsModEnabled { get; private set; } public static ConfigEntry<bool> ReadPinsOnInteract { get; private set; } public static ConfigEntry<bool> ReadRevealedMapOnInteract { get; private set; } public static ConfigEntry<bool> WritePinsOnInteract { get; private set; } public static ConfigEntry<bool> WriteRevealedMapOnInteract { get; private set; } public static ConfigEntry<KeyboardShortcut> DisplayFilterPanel { get; private set; } public static ConfigEntry<Vector2> PlayerPinFilterSizeDelta { get; private set; } public static ConfigEntry<Vector2> PlayerPinFilterPosition { get; private set; } public static void BindConfig(ConfigFile config) { //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) IsModEnabled = config.BindInOrder("_Global", "isModEnabled", defaultValue: true, "Globally enable or disable this mod."); ReadPinsOnInteract = config.BindInOrder("CartographyTable", "readPinsOnInteract", defaultValue: true, "Allows not taking pins when reading from cartography table."); ReadRevealedMapOnInteract = config.BindInOrder("CartographyTable", "readRevealedMapOnInteract", defaultValue: true, "Allows not taking shared map data when reading from cartography table."); WritePinsOnInteract = config.BindInOrder("CartographyTable", "writePinsOnInteract", defaultValue: true, "Allows not writing pins when writing to cartography table."); WriteRevealedMapOnInteract = config.BindInOrder("CartographyTable", "writeRevealedMapOnInteract", defaultValue: true, "Allows not writing shared map data when writing to cartography table."); DisplayFilterPanel = config.BindInOrder<KeyboardShortcut>("Hotkeys", "displayFilterPanelShortcut", new KeyboardShortcut((KeyCode)102, (KeyCode[])(object)new KeyCode[1] { (KeyCode)306 }), "Keyboard shortcut for the displaying filter panel with minimap open."); PlayerPinFilterSizeDelta = config.BindInOrder<Vector2>("PlayerPinFilter.Panel", "playerListPanelSizeDelta", new Vector2(400f, 400f), "The value for the PlayerPinFilter.Panel sizeDelta (width/height in pixels)."); PlayerPinFilterPosition = config.BindInOrder<Vector2>("PlayerPinFilter.Panel", "pinFilterPanelPanelPosition", new Vector2(-25f, 0f), "The value for the PlayerPinFilter.Panel position (relative to pivot/anchors)."); } } public static class PinDataExtensions { public static PinData SetType(this PinData pin, PinType pinType) { //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) pin.m_type = pinType; return pin; } public static PinData SetName(this PinData pin, string name) { pin.m_name = name; return pin; } public static PinData SetPosition(this PinData pin, Vector3 position) { //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) pin.m_pos = position; return pin; } public static PinData SetSave(this PinData pin, bool save) { pin.m_save = save; return pin; } public static PinData SetChecked(this PinData pin, bool isChecked) { pin.m_checked = isChecked; return pin; } public static PinData SetOwnerID(this PinData pin, long ownerID) { pin.m_ownerID = ownerID; return pin; } public static PinData SetAuthor(this PinData pin, string author) { //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) pin.m_author = new PlatformUserID(author); return pin; } public static PinData SetIcon(this PinData pin, Sprite icon) { pin.m_icon = icon; return pin; } } public static class FileUtils { public static string GetPath() { return Path.Combine(Utils.GetSaveDataPath((FileSource)1), "characters", "pinNames"); } public static string GetFilename() { return Path.Combine(GetPath(), StringExtensionMethods.GetStableHashCode($"{ZNet.instance.GetWorldUID()}") + ".csv"); } public static string GetFilteredFilename() { return Path.Combine(GetPath(), StringExtensionMethods.GetStableHashCode($"{ZNet.instance.GetWorldUID()}") + "_filtered.csv"); } public static int HashPid(long pid) { return StringExtensionMethods.GetStableHashCode($"{pid}"); } } public static class NameManager { private static readonly string _mapPinsName = "World & Player Pins"; private static int _unknownPlayerCount = 0; public static Dictionary<long, string> PlayerNamesById { get; private set; } = new Dictionary<long, string>(); public static void LoadPlayerNames() { ReadNamesFromFile(); } private static void AddLocalPlayerName() { if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && !PlayerNamesById.ContainsKey(Player.m_localPlayer.GetPlayerID())) { PlayerNamesById.Add(Player.m_localPlayer.GetPlayerID(), Player.m_localPlayer.GetPlayerName()); } } public static string GetPlayerNameById(long pid) { if (pid == 0L) { return _mapPinsName; } if (pid == Player.m_localPlayer.GetPlayerID()) { return Player.m_localPlayer.GetPlayerName(); } if (PlayerNamesById.ContainsKey(pid)) { return PlayerNamesById[pid]; } return AssignNextUnknownPlayer(pid); } private static string AssignNextUnknownPlayer(long pid) { _unknownPlayerCount++; string text = $"Unknown Player {_unknownPlayerCount}"; if (!PlayerNamesById.ContainsKey(pid)) { PlayerNamesById.Add(pid, text); } return text; } public static void AddPlayerName(long pid, string name) { if (!PlayerNamesById.ContainsKey(pid) || PlayerNamesById[pid].Contains("Unknown")) { if (PlayerNamesById.ContainsKey(pid)) { PlayerNamesById[pid] = name; } else { PlayerNamesById.Add(pid, name); } } } public static string PidNameMapToRow(int hashedPid, string name) { return string.Join(",", hashedPid.ToString(), name); } public static void WriteNamesToFile() { if (!Object.op_Implicit((Object)(object)ZNet.instance)) { return; } Dictionary<long, string> namesToWrite = GetNamesToWrite(); if (namesToWrite.Count == 0) { return; } if (!Directory.Exists(FileUtils.GetPath())) { Directory.CreateDirectory(FileUtils.GetPath()); } using StreamWriter streamWriter = File.CreateText(FileUtils.GetFilename()); streamWriter.AutoFlush = true; foreach (KeyValuePair<long, string> item in namesToWrite) { if (item.Key != Player.m_localPlayer.GetPlayerID() && !item.Value.StartsWith("Unknown")) { streamWriter.WriteLine(PidNameMapToRow(FileUtils.HashPid(item.Key), item.Value)); } } } public static Dictionary<long, string> GetNamesToWrite() { Dictionary<long, string> dictionary = new Dictionary<long, string>(); foreach (KeyValuePair<long, string> item in PlayerNamesById) { if (item.Key != Player.m_localPlayer.GetPlayerID() && !item.Value.StartsWith("Unknown")) { dictionary.Add(item.Key, item.Value); } } return dictionary; } public static void ReadNamesFromFile() { if (!Object.op_Implicit((Object)(object)ZNet.instance) || ZNet.instance.GetWorldUID().Equals(0L)) { Pintervention.LogWarning("Could not read saved player names from file as ZNet instance is null."); return; } if (!File.Exists(FileUtils.GetFilename())) { Pintervention.LogInfo("No saved names to load from " + FileUtils.GetFilename() + "."); return; } Pintervention.LogInfo("Loading saved player names from " + FileUtils.GetFilename()); Dictionary<int, string> dictionary = new Dictionary<int, string>(); using (StreamReader streamReader = new StreamReader(FileUtils.GetFilename())) { while (!streamReader.EndOfStream) { string[] array = streamReader.ReadLine().Split(new char[1] { ',' }); int key = int.Parse(array[0]); string value = array[1]; dictionary.Add(key, value); } } foreach (long foreignPinOwner in PinOwnerManager.ForeignPinOwners) { if (dictionary.ContainsKey(FileUtils.HashPid(foreignPinOwner)) && !PlayerNamesById.ContainsKey(foreignPinOwner)) { PlayerNamesById.Add(foreignPinOwner, dictionary[FileUtils.HashPid(foreignPinOwner)]); } } } } public static class PinOwnerManager { private static readonly HashSet<PinData> _localPlayerPins = new HashSet<PinData>(); public static List<long> ForeignPinOwners { get; private set; } = new List<long>(); public static List<long> FilteredPinOwners { get; private set; } = new List<long>(); public static bool Initialize() { if (!Object.op_Implicit((Object)(object)Minimap.instance) || !Object.op_Implicit((Object)(object)Player.m_localPlayer) || IsInitialized()) { return false; } UpdatePinOwners(); NameManager.LoadPlayerNames(); LoadFilteredPinOwners(); return true; } public static void UpdatePinOwners() { FindPinOwners(); AddAllLocalPlayerPins(); } public static void AddAllLocalPlayerPins() { if (!Object.op_Implicit((Object)(object)Minimap.instance) || !Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } foreach (PinData pin in Minimap.instance.m_pins) { if (pin.m_ownerID == 0L && !IsWorldPin(pin)) { AddLocalPlayerPin(pin); } } } public static void FindPinOwners() { if (Object.op_Implicit((Object)(object)Minimap.instance)) { ForeignPinOwners = Minimap.instance.m_pins.Select((PinData x) => x.m_ownerID).Distinct().ToList(); ForeignPinOwners.Add(Player.m_localPlayer.GetPlayerID()); ForeignPinOwners.Sort(); } } public static bool IsWorldPin(PinData pin) { if (!Object.op_Implicit((Object)(object)Minimap.instance)) { return true; } if (Minimap.instance.m_locationPins.Values.Contains(pin) || Minimap.instance.m_playerPins.Contains(pin) || Minimap.instance.m_shoutPins.Contains(pin) || Minimap.instance.m_randEventPin == pin) { return true; } return false; } public static void Clear() { if (ForeignPinOwners.Any()) { ForeignPinOwners.Clear(); ForeignPinOwners = new List<long>(); } if (FilteredPinOwners.Any()) { FilteredPinOwners.Clear(); FilteredPinOwners = new List<long>(); } } public static long GetForeignPinOwnerAtIndex(int index) { return ForeignPinOwners[index]; } public static Dictionary<long, ZDO> GetZDOsByPlayerId(List<long> playerIds) { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) Dictionary<ZDOID, ZDO> objectsByID = ZDOMan.s_instance.m_objectsByID; HashSet<long> hashSet = new HashSet<long>(); foreach (long playerId in playerIds) { hashSet.Add(playerId); } HashSet<long> hashSet2 = hashSet; Dictionary<long, ZDO> dictionary = new Dictionary<long, ZDO>(); long num = default(long); foreach (ZNetPeer peer in ZNet.m_instance.m_peers) { if (!(peer.m_characterID == ZDOID.None) && objectsByID.TryGetValue(peer.m_characterID, out var value) && ZDOExtraData.GetLong(value.m_uid, ZDOVars.s_playerID, ref num) && hashSet2.Contains(num)) { dictionary.Add(num, value); hashSet2.Remove(num); if (hashSet2.Count <= 0) { break; } } } return dictionary; } public static void RemoveForeignPinOwner(long pid) { if (ForeignPinOwners.Contains(pid)) { ForeignPinOwners.Remove(pid); } } public static void FilterPins() { if (!IsInitialized()) { Initialize(); } if (!FilteredPinOwners.Any()) { return; } foreach (long filteredPinOwner in FilteredPinOwners) { foreach (PinData item in GetPinsByPid(filteredPinOwner)) { Minimap.instance.DestroyPinMarker(item); } } } public static void SortPinOwnersByName() { ForeignPinOwners = ForeignPinOwners.OrderBy((long x) => NameManager.GetPlayerNameById(x)).ToList(); } public static List<PinData> GetPinsByPid(long pid) { if (pid == 0L) { AddAllLocalPlayerPins(); return Minimap.instance.m_pins.Where((PinData x) => x.m_ownerID == pid && !_localPlayerPins.Contains(x)).ToList(); } if (pid == Player.m_localPlayer.GetPlayerID()) { return _localPlayerPins.ToList(); } return Minimap.instance.m_pins.Where((PinData x) => x.m_ownerID == pid).ToList(); } public static bool IsFiltered(long pid) { if (!FilteredPinOwners.Contains(pid)) { return false; } return true; } public static void ToggleFilter(long pid) { if (FilteredPinOwners.Contains(pid)) { FilteredPinOwners.Remove(pid); } else { FilteredPinOwners.Add(pid); } } public static bool IsInitialized() { if (!ForeignPinOwners.Any()) { return false; } return true; } public static void AddLocalPlayerPin(PinData pin) { if (!_localPlayerPins.Contains(pin)) { _localPlayerPins.Add(pin); } } public static void RemoveLocalPlayerPin(PinData pin) { _localPlayerPins.Remove(pin); } public static string PidToRow(int hashedPid) { return string.Join(",", hashedPid.ToString()); } public static void WriteFilteredPlayersToFile() { if (!FilteredPinOwners.Any()) { return; } if (!Directory.Exists(FileUtils.GetPath())) { Directory.CreateDirectory(FileUtils.GetPath()); } using StreamWriter streamWriter = File.CreateText(FileUtils.GetFilteredFilename()); streamWriter.AutoFlush = true; foreach (long filteredPinOwner in FilteredPinOwners) { streamWriter.WriteLine(PidToRow(FileUtils.HashPid(filteredPinOwner))); } } public static void LoadFilteredPinOwners() { ReadFilteredPinOwnersFromFile(); } public static void ReadFilteredPinOwnersFromFile() { if (!Object.op_Implicit((Object)(object)ZNet.instance) || ZNet.instance.GetWorldUID().Equals(0L)) { Pintervention.LogWarning("Could not read saved filtered pin owners from file as ZNet instance is null."); return; } if (!File.Exists(FileUtils.GetFilteredFilename())) { Pintervention.LogInfo("No saved filtered pin owners to load from " + FileUtils.GetFilteredFilename() + "."); return; } Pintervention.LogInfo("Loading saved filter state from " + FileUtils.GetFilteredFilename()); List<long> list = new List<long>(); using (StreamReader streamReader = new StreamReader(FileUtils.GetFilteredFilename())) { while (!streamReader.EndOfStream) { int num = int.Parse(streamReader.ReadLine().Split(new char[1] { ',' })[0]); list.Add(num); } } foreach (long foreignPinOwner in ForeignPinOwners) { if (list.Contains(FileUtils.HashPid(foreignPinOwner)) && !FilteredPinOwners.Contains(foreignPinOwner)) { FilteredPinOwners.Add(foreignPinOwner); } } } } public static class PlayerFilterPanelManager { private static PlayerPinFilterPanel _filterPanel; public static void ToggleFilterPanel() { //IL_004d: 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_0075: 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) //IL_0093: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_filterPanel?.Panel)) { _filterPanel = new PlayerPinFilterPanel(Minimap.m_instance.m_largeRoot.transform); _filterPanel.Panel.RectTransform().SetAnchorMin(new Vector2(0f, 0.5f)).SetAnchorMax(new Vector2(0f, 0.5f)) .SetPivot(new Vector2(0f, 0.5f)) .SetPosition(PluginConfig.PlayerPinFilterPosition.Value) .SetSizeDelta(PluginConfig.PlayerPinFilterSizeDelta.Value); PluginConfig.PlayerPinFilterPosition.OnSettingChanged(delegate(Vector2 position) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) _filterPanel?.Panel.Ref<GameObject>()?.RectTransform().SetPosition(position); }); PluginConfig.PlayerPinFilterSizeDelta.OnSettingChanged(delegate(Vector2 sizeDelta) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_filterPanel?.Panel)) { _filterPanel.Panel.RectTransform().SetSizeDelta(sizeDelta); } }); _filterPanel.PanelDragger.OnPanelEndDrag += delegate(object _, Vector3 position) { //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) PluginConfig.PlayerPinFilterPosition.Value = Vector2.op_Implicit(position); }; _filterPanel.PanelResizer.OnPanelEndResize += delegate(object _, Vector2 sizeDelta) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) PluginConfig.PlayerPinFilterSizeDelta.Value = sizeDelta; }; _filterPanel.Panel.SetActive(false); } bool num = !_filterPanel.Panel.activeSelf; _filterPanel.Panel.SetActive(!_filterPanel.Panel.activeSelf); if (num) { _filterPanel.UpdatePanel(); } } public static void UpdatePanel() { if (Object.op_Implicit((Object)(object)_filterPanel?.Panel)) { _filterPanel.UpdatePanel(); } } public static void UpdatePinCounts() { if (Object.op_Implicit((Object)(object)_filterPanel?.Panel)) { _filterPanel.UpdatePinCounts(); } } } public static class SharedMapDataManager { public static void ReadMapData(ZDO zdo) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown byte[] byteArray = zdo.GetByteArray(ZDOVars.s_data, (byte[])null); if (byteArray == null) { Pintervention.LogWarning("No data found in zdo data field."); return; } if (!PluginConfig.ReadRevealedMapOnInteract.Value && !PluginConfig.ReadPinsOnInteract.Value) { Pintervention.MessageLocalPlayer("All cartography table data disabled on read."); return; } ZPackage val = new ZPackage(Utils.Decompress(byteArray)); int version = val.ReadInt(); if (PluginConfig.ReadPinsOnInteract.Value) { WritePinsToMap(val, version); Pintervention.MessageLocalPlayer("Added pins from cartography table to map."); } else if (PluginConfig.ReadRevealedMapOnInteract.Value) { WriteExploredAreaToMap(val, version); Pintervention.MessageLocalPlayer("Added revealed area from cartography table to map."); } } public static void WritePinsToMap(ZPackage zPackage, int version) { if (Minimap.instance.ReadExploredArray(zPackage, version) == null) { Pintervention.LogWarning("Failed to read explored map from ZPackage."); return; } List<PinData> list = ReadImportedPins(zPackage, version); if (!list.Any()) { Pintervention.MessageLocalPlayer("No new pins found to copy to player map."); } else { Minimap.instance.m_pins.AddRange(list); } } public static List<PinData> ReadImportedPins(ZPackage zPackage, int version) { List<PinData> list = new List<PinData>(); if (version < 2) { return list; } int num = zPackage.ReadInt(); for (int i = 0; i < num; i++) { PinData val = ReadPin(zPackage, version); if (val != null) { list.Add(val); } } return list; } private static PinData ReadPin(ZPackage zPackage, int version) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown long ownerID = zPackage.ReadLong(); string name = zPackage.ReadString(); Vector3 val = zPackage.ReadVector3(); PinType val2 = (PinType)zPackage.ReadInt(); bool isChecked = zPackage.ReadBool(); string author = ((version >= 3) ? zPackage.ReadString() : string.Empty); if (Minimap.instance.HavePinInRange(val, 1f)) { return null; } PinData val3 = PinDataExtensions.SetOwnerID(new PinData(), ownerID).SetName(name).SetPosition(val) .SetType(val2) .SetChecked(isChecked) .SetAuthor(author) .SetIcon(Minimap.instance.GetSprite(val2)); if (!string.IsNullOrEmpty(val3.m_name)) { val3.m_NamePinData = new PinNameData(val3); } return val3; } public static bool WriteExploredAreaToMap(ZPackage zPackage, int version) { Minimap instance = Minimap.m_instance; List<bool> list = instance.ReadExploredArray(zPackage, version); if (list == null) { return false; } bool flag = false; bool[] explored = instance.m_explored; bool[] exploredOthers = instance.m_exploredOthers; int textureSize = instance.m_textureSize; for (int i = 0; i < textureSize; i++) { for (int j = 0; j < textureSize; j++) { int num = i * textureSize + j; if (list[num] && (exploredOthers[num] || explored[num]) != list[num] && instance.ExploreOthers(j, i)) { flag = true; } } } if (!flag) { return false; } instance.m_fogTexture.Apply(); return true; } } public sealed class LabelCell { public GameObject Cell { get; private set; } public Image Background { get; private set; } public TMP_Text Label { get; private set; } public LabelCell(Transform parentTransform) { Cell = CreateChildCell(parentTransform); Background = Cell.Image(); Label = CreateChildLabel(Cell.transform); } private GameObject CreateChildCell(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: 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) //IL_00ac: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Expected O, but got Unknown GameObject val = new GameObject("Cell", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<HorizontalLayoutGroup>().SetChildControl(true, true).SetChildForceExpand(false, false) .SetPadding(4, 4, 4, 4) .SetSpacing(4f) .SetChildAlignment((TextAnchor)4); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateRoundedCornerSprite(64, 64, 8, (FilterMode)1)) .SetColor(new Color(0.2f, 0.2f, 0.2f, 0.5f)); val.AddComponent<ContentSizeFitter>().SetHorizontalFit((FitMode)0).SetVerticalFit((FitMode)2); val.AddComponent<LayoutElement>().SetPreferred(150f, null).SetFlexible(1f); return val; } private TMP_Text CreateChildLabel(Transform parentTransform) { TextMeshProUGUI obj = UIBuilder.CreateTMPLabel(parentTransform); ((TMP_Text)(object)obj).SetName<TMP_Text>("Label"); ((TMP_Text)obj).alignment = (TextAlignmentOptions)513; ((TMP_Text)obj).text = "Label"; ((Component)obj).gameObject.AddComponent<LayoutElement>().SetFlexible(1f); return (TMP_Text)(object)obj; } } public sealed class ValueCell { private static readonly Lazy<ColorBlock> InputFieldColorBlock = new Lazy<ColorBlock>((Func<ColorBlock>)delegate { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_0059: 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_008f: 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) ColorBlock result = default(ColorBlock); ((ColorBlock)(ref result)).normalColor = new Color(1f, 1f, 1f, 0.9f); ((ColorBlock)(ref result)).highlightedColor = new Color(0.565f, 0.792f, 0.976f); ((ColorBlock)(ref result)).disabledColor = new Color(0.2f, 0.2f, 0.2f, 0.8f); ((ColorBlock)(ref result)).pressedColor = new Color(0.647f, 0.839f, 0.655f); ((ColorBlock)(ref result)).selectedColor = new Color(1f, 0.878f, 0.51f); ((ColorBlock)(ref result)).colorMultiplier = 1f; ((ColorBlock)(ref result)).fadeDuration = 0.25f; return result; }); public GameObject Cell { get; private set; } public Image Background { get; private set; } public TMP_InputField InputField { get; private set; } public ValueCell(Transform parentTransform) { Cell = CreateChildCell(parentTransform); Background = Cell.Image(); InputField = CreateChildInputField(Cell.transform); ((Selectable)(object)InputField).SetTargetGraphic((Graphic)(object)Background); } private GameObject CreateChildCell(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: 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_0061: 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_0070: Expected O, but got Unknown GameObject val = new GameObject("Cell", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateRoundedCornerSprite(64, 64, 8, (FilterMode)1)) .SetColor(new Color(0.5f, 0.5f, 0.5f, 0.5f)); val.AddComponent<RectMask2D>(); val.AddComponent<LayoutElement>(); return val; } private TMP_InputField CreateChildInputField(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_002d: 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_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("InputField", new Type[1] { typeof(RectTransform) }); val.SetParent(parentTransform); val.RectTransform().SetAnchorMin(Vector2.zero).SetAnchorMax(Vector2.one) .SetSizeDelta(Vector2.zero) .SetPosition(Vector2.zero); TMP_Text val2 = (TMP_Text)(object)UIBuilder.CreateTMPLabel(val.transform); val2.SetName<TMP_Text>("InputField.Text"); val2.richText = false; val2.alignment = (TextAlignmentOptions)513; val2.text = "InputField.Text"; TMP_InputField obj = ((Component)parentTransform).gameObject.AddComponent<TMP_InputField>(); obj.textComponent = val2; obj.textViewport = val.GetComponent<RectTransform>(); ((Selectable)obj).transition = (Transition)1; ((Selectable)obj).colors = InputFieldColorBlock.Value; obj.onFocusSelectAll = false; ((Selectable)(object)obj).SetNavigationMode((Mode)0); return obj; } } public sealed class PanelDragger : MonoBehaviour, IBeginDragHandler, IEventSystemHandler, IDragHandler, IEndDragHandler { private Vector2 _lastMousePosition; public RectTransform TargetRectTransform; public event EventHandler<Vector3> OnPanelEndDrag; public void OnBeginDrag(PointerEventData eventData) { //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) _lastMousePosition = eventData.position; } public void OnDrag(PointerEventData eventData) { //IL_0001: 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_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: 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_002b: 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_003d: 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_004c: Unknown result type (might be due to invalid IL or missing references) Vector2 val = eventData.position - _lastMousePosition; if (Object.op_Implicit((Object)(object)TargetRectTransform)) { RectTransform targetRectTransform = TargetRectTransform; ((Transform)targetRectTransform).position = ((Transform)targetRectTransform).position + new Vector3(val.x, val.y, ((Transform)TargetRectTransform).position.z); } _lastMousePosition = eventData.position; } public void OnEndDrag(PointerEventData eventData) { //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.op_Implicit((Object)(object)TargetRectTransform)) { this.OnPanelEndDrag?.Invoke(this, Vector2.op_Implicit(TargetRectTransform.anchoredPosition)); } } } public sealed class PanelResizer : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler { [CompilerGenerated] private sealed class <LerpCanvasGroupAlpha>d__10 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; private object <>2__current; public PanelResizer <>4__this; public float lerpDuration; public float targetAlpha; private float <timeElapsed>5__2; private float <sourceAlpha>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LerpCanvasGroupAlpha>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { int num = <>1__state; PanelResizer panelResizer = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <timeElapsed>5__2 = 0f; <sourceAlpha>5__3 = panelResizer._canvasGroup.alpha; break; case 1: <>1__state = -1; break; } if (<timeElapsed>5__2 < lerpDuration) { float num2 = <timeElapsed>5__2 / lerpDuration; num2 = num2 * num2 * (3f - 2f * num2); panelResizer._canvasGroup.SetAlpha(Mathf.Lerp(<sourceAlpha>5__3, targetAlpha, num2)); <timeElapsed>5__2 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } panelResizer._canvasGroup.SetAlpha(targetAlpha); 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(); } } private CanvasGroup _canvasGroup; private float _targetAlpha; private Vector2 _lastMousePosition; private Coroutine _lerpAlphaCoroutine; public RectTransform TargetRectTransform; public event EventHandler<Vector2> OnPanelEndResize; private void Awake() { _canvasGroup = ((Component)this).GetComponent<CanvasGroup>(); } private void SetCanvasGroupAlpha(float alpha) { if (_lerpAlphaCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_lerpAlphaCoroutine); _lerpAlphaCoroutine = null; } if (_canvasGroup.alpha != alpha) { _lerpAlphaCoroutine = ((MonoBehaviour)this).StartCoroutine(LerpCanvasGroupAlpha(alpha, 0.25f)); } } [IteratorStateMachine(typeof(<LerpCanvasGroupAlpha>d__10))] private IEnumerator LerpCanvasGroupAlpha(float targetAlpha, float lerpDuration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LerpCanvasGroupAlpha>d__10(0) { <>4__this = this, targetAlpha = targetAlpha, lerpDuration = lerpDuration }; } public void OnPointerEnter(PointerEventData eventData) { _targetAlpha = 1f; SetCanvasGroupAlpha(_targetAlpha); } public void OnPointerExit(PointerEventData eventData) { _targetAlpha = 0f; if (!eventData.dragging) { SetCanvasGroupAlpha(_targetAlpha); } } public void OnBeginDrag(PointerEventData eventData) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) SetCanvasGroupAlpha(1f); _lastMousePosition = eventData.position; } public void OnDrag(PointerEventData eventData) { //IL_0001: 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_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: 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_008a: 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_0035: 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_0052: 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_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_006e: Unknown result type (might be due to invalid IL or missing references) Vector2 val = _lastMousePosition - eventData.position; if (Object.op_Implicit((Object)(object)TargetRectTransform)) { RectTransform targetRectTransform = TargetRectTransform; targetRectTransform.anchoredPosition += new Vector2(0f, -0.5f * val.y); RectTransform targetRectTransform2 = TargetRectTransform; targetRectTransform2.sizeDelta += new Vector2(-1f * val.x, val.y); } SetCanvasGroupAlpha(1f); _lastMousePosition = eventData.position; } public void OnEndDrag(PointerEventData eventData) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) SetCanvasGroupAlpha(_targetAlpha); this.OnPanelEndResize?.Invoke(this, TargetRectTransform.sizeDelta); } } public sealed class ParentSizeFitter : MonoBehaviour { private RectTransform _parentRectTransform; private RectTransform _rectTransform; private void Awake() { _parentRectTransform = ((Component)((Component)this).transform.parent).GetComponent<RectTransform>(); _rectTransform = ((Component)this).GetComponent<RectTransform>(); } private void OnRectTransformDimensionsChange() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)_parentRectTransform)) { _parentRectTransform = ((Component)((Component)this).transform.parent).GetComponent<RectTransform>(); } if (!Object.op_Implicit((Object)(object)_rectTransform)) { _rectTransform = ((Component)this).GetComponent<RectTransform>(); } if (Object.op_Implicit((Object)(object)_rectTransform) && Object.op_Implicit((Object)(object)_parentRectTransform)) { _rectTransform.SetSizeWithCurrentAnchors((Axis)0, _parentRectTransform.sizeDelta.x); } } } public sealed class PointerState : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { public bool IsPointerHovered { get; private set; } public void OnPointerEnter(PointerEventData eventData) { IsPointerHovered = true; } public void OnPointerExit(PointerEventData eventData) { IsPointerHovered = false; } } public static class UIBuilder { private static readonly Lazy<TextGenerator> CachedTextGenerator = new Lazy<TextGenerator>(); private static readonly Dictionary<string, Sprite> _spriteCache = new Dictionary<string, Sprite>(); private static readonly Color32 ColorWhite = Color32.op_Implicit(Color.white); private static readonly Color32 ColorClear = Color32.op_Implicit(Color.clear); public static TextMeshProUGUI CreateTMPLabel(Transform parentTransform) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) TextMeshProUGUI obj = Object.Instantiate<TextMeshProUGUI>(UnifiedPopup.instance.bodyText, parentTransform, false); ((Object)obj).name = "Label"; ((TMP_Text)obj).text = string.Empty; ((TMP_Text)obj).fontSize = 16f; ((Graphic)obj).color = Color.white; ((TMP_Text)obj).richText = true; ((TMP_Text)obj).enableAutoSizing = false; return obj; } public static GameObject CreateRowSpacer(Transform parentTransform) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown GameObject val = new GameObject(((Object)parentTransform).name + ".Spacer", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<LayoutElement>().SetPreferred(20f, null); return val; } public static float GetPreferredWidth(this Text text) { return GetPreferredWidth(text, text.text); } public static float GetPreferredWidth(Text text, string content) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //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) TextGenerator value = CachedTextGenerator.Value; Rect rect = ((Graphic)text).rectTransform.rect; return value.GetPreferredWidth(content, text.GetGenerationSettings(((Rect)(ref rect)).size)); } public static Sprite CreateRoundedCornerSprite(int width, int height, int radius, FilterMode filterMode = 1) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0041: 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_00b2: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0117: 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) string text = $"RoundedCorner-{width}w-{height}h-{radius}r"; if (_spriteCache.TryGetValue(text, out var value)) { return value; } Texture2D val = Texture2DExtensions.SetName(new Texture2D(width, height), text).SetWrapMode((TextureWrapMode)1).SetFilterMode(filterMode); Color32[] array = (Color32[])(object)new Color32[width * height]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { array[i * width + j] = (IsCornerPixel(j, i, width, height, radius) ? ColorClear : ColorWhite); } } val.SetPixels32(array); val.Apply(); int k; for (k = 0; k < width && !(Color32.op_Implicit(array[k]) == Color.white); k++) { } int l; for (l = 0; l < height && !(Color32.op_Implicit(array[l * width]) == Color.white); l++) { } value = Sprite.Create(val, new Rect(0f, 0f, (float)width, (float)height), new Vector2(0.5f, 0.5f), 100f, 0u, (SpriteMeshType)0, new Vector4((float)k, (float)l, (float)k, (float)l)).SetName(text); _spriteCache[text] = value; return value; } private static bool IsCornerPixel(int x, int y, int w, int h, int rad) { if (rad == 0) { return false; } int num = Math.Min(x, w - x); int num2 = Math.Min(y, h - y); if (num == 0 && num2 == 0) { return true; } if (num > rad || num2 > rad) { return false; } num = rad - num; num2 = rad - num2; return Math.Round(Math.Sqrt(num * num + num2 * num2)) > (double)rad; } public static Sprite CreateSuperellipse(int width, int height, float exponent) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_00da: 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_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) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012b: 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_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) string text = $"Superellipse-{width}w-{height}h-{exponent}e"; if (_spriteCache.TryGetValue(text, out var value)) { return value; } Texture2D val = Texture2DExtensions.SetName(new Texture2D(width, height), text).SetWrapMode((TextureWrapMode)1).SetFilterMode((FilterMode)2); Color32[] array = (Color32[])(object)new Color32[width * height]; int num = width / 2; int num2 = height / 2; float num3 = 1f * ((float)width / 2f); float num4 = 1f * ((float)height / 2f); for (int i = 0; i < num; i++) { for (int j = 0; j < num2; j++) { Color32 val2 = Color32.op_Implicit((Mathf.Pow(Mathf.Abs((float)i / num3), exponent) + Mathf.Pow(Mathf.Abs((float)j / num4), exponent) > 1f) ? Color.clear : Color.white); int x2 = i + num; int x3 = -i + num - 1; int y2 = -j + num2 - 1; int y3 = j + num2; array[XYToIndex(x2, y3)] = val2; array[XYToIndex(x2, y2)] = val2; array[XYToIndex(x3, y2)] = val2; array[XYToIndex(x3, y3)] = val2; } } val.SetPixels32(array); val.Apply(); int k; for (k = 0; k < width && !(Color32.op_Implicit(array[k]) == Color.white); k++) { } int l; for (l = 0; l < height && !(Color32.op_Implicit(array[l * width]) == Color.white); l++) { } value = Sprite.Create(val, new Rect(0f, 0f, (float)width, (float)height), new Vector2(0.5f, 0.5f), 100f, 0u, (SpriteMeshType)0, new Vector4((float)k, (float)l, (float)k, (float)l)).SetName(text); _spriteCache[text] = value; return value; int XYToIndex(int x, int y) { return x + y * width; } } } public static class CanvasGroupExtensions { public static CanvasGroup SetAlpha(this CanvasGroup canvasGroup, float alpha) { canvasGroup.alpha = alpha; return canvasGroup; } public static CanvasGroup SetBlocksRaycasts(this CanvasGroup canvasGroup, bool blocksRaycasts) { canvasGroup.blocksRaycasts = blocksRaycasts; return canvasGroup; } } public static class ColorExtensions { public static Color SetAlpha(this Color color, float alpha) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) color.a = alpha; return color; } } public static class ContentSizeFitterExtensions { public static ContentSizeFitter SetHorizontalFit(this ContentSizeFitter fitter, FitMode fitMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) fitter.horizontalFit = fitMode; return fitter; } public static ContentSizeFitter SetVerticalFit(this ContentSizeFitter fitter, FitMode fitMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) fitter.verticalFit = fitMode; return fitter; } } public static class GameObjectExtensions { public static GameObject SetName(this GameObject gameObject, string name) { ((Object)gameObject).name = name; return gameObject; } public static T SetName<T>(this T component, string name) where T : Component { ((Object)((Component)component).gameObject).name = name; return component; } public static GameObject SetParent(this GameObject gameObject, Transform transform, bool worldPositionStays = false) { gameObject.transform.SetParent(transform, worldPositionStays); return gameObject; } public static IEnumerable<GameObject> Children(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return Array.Empty<GameObject>(); } return from Transform t in (IEnumerable)gameObject.transform select ((Component)t).gameObject; } public static Button Button(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return null; } return gameObject.GetComponent<Button>(); } public static Image Image(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return null; } return gameObject.GetComponent<Image>(); } public static LayoutElement LayoutElement(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return null; } return gameObject.GetComponent<LayoutElement>(); } public static RectTransform RectTransform(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return null; } return gameObject.GetComponent<RectTransform>(); } public static Text Text(this GameObject gameObject) { if (!Object.op_Implicit((Object)(object)gameObject)) { return null; } return gameObject.GetComponent<Text>(); } } public static class GridLayoutGroupExtensions { public static GridLayoutGroup SetCellSize(this GridLayoutGroup layoutGroup, Vector2 cellSize) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) layoutGroup.cellSize = cellSize; return layoutGroup; } public static GridLayoutGroup SetConstraint(this GridLayoutGroup layoutGroup, Constraint constraint) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) layoutGroup.constraint = constraint; return layoutGroup; } public static GridLayoutGroup SetConstraintCount(this GridLayoutGroup layoutGroup, int constraintCount) { layoutGroup.constraintCount = constraintCount; return layoutGroup; } public static GridLayoutGroup SetStartAxis(this GridLayoutGroup layoutGroup, Axis startAxis) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) layoutGroup.startAxis = startAxis; return layoutGroup; } public static GridLayoutGroup SetStartCorner(this GridLayoutGroup layoutGroup, Corner startCorner) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) layoutGroup.startCorner = startCorner; return layoutGroup; } public static GridLayoutGroup SetPadding(this GridLayoutGroup layoutGroup, int? left = null, int? right = null, int? top = null, int? bottom = null) { if (!left.HasValue && !right.HasValue && !top.HasValue && !bottom.HasValue) { throw new ArgumentException("Value for left, right, top or bottom must be provided."); } if (left.HasValue) { ((LayoutGroup)layoutGroup).padding.left = left.Value; } if (right.HasValue) { ((LayoutGroup)layoutGroup).padding.right = right.Value; } if (top.HasValue) { ((LayoutGroup)layoutGroup).padding.top = top.Value; } if (bottom.HasValue) { ((LayoutGroup)layoutGroup).padding.bottom = bottom.Value; } return layoutGroup; } public static GridLayoutGroup SetSpacing(this GridLayoutGroup layoutGroup, Vector2 spacing) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) layoutGroup.spacing = spacing; return layoutGroup; } } public static class HorizontalLayoutGroupExtensions { public static HorizontalLayoutGroup SetChildControl(this HorizontalLayoutGroup layoutGroup, bool? width = null, bool? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlHeight = height.Value; } return layoutGroup; } public static HorizontalLayoutGroup SetChildForceExpand(this HorizontalLayoutGroup layoutGroup, bool? width = null, bool? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandHeight = height.Value; } return layoutGroup; } public static HorizontalLayoutGroup SetChildAlignment(this HorizontalLayoutGroup layoutGroup, TextAnchor alignment) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((LayoutGroup)layoutGroup).childAlignment = alignment; return layoutGroup; } public static HorizontalLayoutGroup SetPadding(this HorizontalLayoutGroup layoutGroup, int? left = null, int? right = null, int? top = null, int? bottom = null) { if (!left.HasValue && !right.HasValue && !top.HasValue && !bottom.HasValue) { throw new ArgumentException("Value for left, right, top or bottom must be provided."); } if (left.HasValue) { ((LayoutGroup)layoutGroup).padding.left = left.Value; } if (right.HasValue) { ((LayoutGroup)layoutGroup).padding.right = right.Value; } if (top.HasValue) { ((LayoutGroup)layoutGroup).padding.top = top.Value; } if (bottom.HasValue) { ((LayoutGroup)layoutGroup).padding.bottom = bottom.Value; } return layoutGroup; } public static HorizontalLayoutGroup SetSpacing(this HorizontalLayoutGroup layoutGroup, float spacing) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).spacing = spacing; return layoutGroup; } } public static class ImageExtensions { public static Image SetColor(this Image image, Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Graphic)image).color = color; return image; } public static Image SetFillAmount(this Image image, float amount) { image.fillAmount = amount; return image; } public static Image SetFillCenter(this Image image, bool fillCenter) { image.fillCenter = fillCenter; return image; } public static Image SetFillMethod(this Image image, FillMethod fillMethod) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) image.fillMethod = fillMethod; return image; } public static Image SetFillOrigin(this Image image, OriginHorizontal origin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected I4, but got Unknown image.fillOrigin = (int)origin; return image; } public static Image SetFillOrigin(this Image image, OriginVertical origin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected I4, but got Unknown image.fillOrigin = (int)origin; return image; } public static Image SetMaskable(this Image image, bool maskable) { ((MaskableGraphic)image).maskable = maskable; return image; } public static Image SetPreserveAspect(this Image image, bool preserveAspect) { image.preserveAspect = preserveAspect; return image; } public static Image SetRaycastTarget(this Image image, bool raycastTarget) { ((Graphic)image).raycastTarget = raycastTarget; return image; } public static Image SetSprite(this Image image, Sprite sprite) { image.sprite = sprite; return image; } public static Image SetType(this Image image, Type type) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) image.type = type; return image; } } public static class InputFieldExtensions { public static InputField SetTextComponent(this InputField inputField, Text textComponent) { inputField.textComponent = textComponent; return inputField; } } public static class LayoutElementExtensions { public static LayoutElement SetPreferred(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.preferredWidth = width.Value; } if (height.HasValue) { layoutElement.preferredHeight = height.Value; } return layoutElement; } public static LayoutElement SetPreferred(this LayoutElement layoutElement, Vector2 sizeDelta) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) layoutElement.preferredWidth = sizeDelta.x; layoutElement.preferredHeight = sizeDelta.y; return layoutElement; } public static LayoutElement SetFlexible(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.flexibleWidth = width.Value; } if (height.HasValue) { layoutElement.flexibleHeight = height.Value; } return layoutElement; } public static LayoutElement SetMinimum(this LayoutElement layoutElement, float? width = null, float? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { layoutElement.minWidth = width.Value; } if (height.HasValue) { layoutElement.minHeight = height.Value; } return layoutElement; } public static LayoutElement SetIgnoreLayout(this LayoutElement layoutElement, bool ignoreLayout) { layoutElement.ignoreLayout = ignoreLayout; return layoutElement; } } public static class MaskExtensions { public static Mask SetShowMaskGraphic(this Mask mask, bool showMaskGraphic) { mask.showMaskGraphic = showMaskGraphic; return mask; } } public static class OutlineExtensions { public static Outline SetEffectColor(this Outline outline, Color effectColor) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Shadow)outline).effectColor = effectColor; return outline; } public static Outline SetEffectDistance(this Outline outline, Vector2 effectDistance) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Shadow)outline).effectDistance = effectDistance; return outline; } public static Outline SetUseGraphicAlpha(this Outline outline, bool useGraphicAlpha) { ((Shadow)outline).useGraphicAlpha = useGraphicAlpha; return outline; } } public static class RectTransformExtensions { public static RectTransform SetAnchorMin(this RectTransform rectTransform, Vector2 anchorMin) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchorMin = anchorMin; return rectTransform; } public static RectTransform SetAnchorMax(this RectTransform rectTransform, Vector2 anchorMax) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchorMax = anchorMax; return rectTransform; } public static RectTransform SetPivot(this RectTransform rectTransform, Vector2 pivot) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.pivot = pivot; return rectTransform; } public static RectTransform SetPosition(this RectTransform rectTransform, Vector2 position) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.anchoredPosition = position; return rectTransform; } public static RectTransform SetSizeDelta(this RectTransform rectTransform, Vector2 sizeDelta) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) rectTransform.sizeDelta = sizeDelta; return rectTransform; } } public static class SelectableExtensions { public static Selectable SetColors(this Selectable selectable, ColorBlock colors) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) selectable.colors = colors; return selectable; } public static Selectable SetImage(this Selectable selectable, Image image) { selectable.image = image; return selectable; } public static Selectable SetInteractable(this Selectable selectable, bool interactable) { selectable.interactable = interactable; return selectable; } public static Selectable SetTargetGraphic(this Selectable selectable, Graphic graphic) { selectable.targetGraphic = graphic; return selectable; } public static Selectable SetTransition(this Selectable selectable, Transition transition) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) selectable.transition = transition; return selectable; } public static Selectable SetNavigationMode(this Selectable selectable, Mode mode) { //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_0009: 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) Navigation navigation = selectable.navigation; ((Navigation)(ref navigation)).mode = mode; selectable.navigation = navigation; return selectable; } } public static class ShadowExtensions { public static Shadow SetEffectColor(this Shadow shadow, Color effectColor) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) shadow.effectColor = effectColor; return shadow; } public static Shadow SetEffectDistance(this Shadow shadow, Vector2 effectDistance) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) shadow.effectDistance = effectDistance; return shadow; } } public static class ScrollRectExtensions { public static ScrollRect SetScrollSensitivity(this ScrollRect scrollRect, float sensitivity) { scrollRect.scrollSensitivity = sensitivity; return scrollRect; } public static ScrollRect SetVerticalScrollPosition(this ScrollRect scrollRect, float position) { scrollRect.verticalNormalizedPosition = position; return scrollRect; } public static ScrollRect SetViewport(this ScrollRect scrollRect, RectTransform viewport) { scrollRect.viewport = viewport; return scrollRect; } public static ScrollRect SetContent(this ScrollRect scrollRect, RectTransform content) { scrollRect.content = content; return scrollRect; } public static ScrollRect SetHorizontal(this ScrollRect scrollRect, bool horizontal) { scrollRect.horizontal = horizontal; return scrollRect; } public static ScrollRect SetVertical(this ScrollRect scrollRect, bool vertical) { scrollRect.vertical = vertical; return scrollRect; } } public static class SpriteExtensions { public static Sprite SetName(this Sprite sprite, string name) { ((Object)sprite).name = name; return sprite; } } public static class TextExtensions { public static Text SetAlignment(this Text text, TextAnchor alignment) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) text.alignment = alignment; return text; } public static Text SetColor(this Text text, Color color) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Graphic)text).color = color; return text; } public static Text SetFont(this Text text, Font font) { text.font = font; return text; } public static Text SetFontStyle(this Text text, FontStyle fontStyle) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) text.fontStyle = fontStyle; return text; } public static Text SetFontSize(this Text text, int fontSize) { text.fontSize = fontSize; return text; } public static Text SetResizeTextForBestFit(this Text text, bool resizeTextForBestFit) { text.resizeTextForBestFit = resizeTextForBestFit; return text; } public static Text SetSupportRichText(this Text text, bool supportRichText) { text.supportRichText = supportRichText; return text; } public static Text SetText(this Text text, string value) { text.text = value; return text; } } public static class TMPTextExtensions { public static TMP_Text SetText(this TMP_Text text, string value) { text.text = value; return text; } } public static class Texture2DExtensions { public static Texture2D SetName(this Texture2D texture, string name) { ((Object)texture).name = name; return texture; } public static Texture2D SetWrapMode(this Texture2D texture, TextureWrapMode wrapMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Texture)texture).wrapMode = wrapMode; return texture; } public static Texture2D SetFilterMode(this Texture2D texture, FilterMode filterMode) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((Texture)texture).filterMode = filterMode; return texture; } } public static class VerticalLayoutGroupExtensions { public static VerticalLayoutGroup SetChildControl(this VerticalLayoutGroup layoutGroup, bool? width = null, bool? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childControlHeight = height.Value; } return layoutGroup; } public static VerticalLayoutGroup SetChildForceExpand(this VerticalLayoutGroup layoutGroup, bool? width = null, bool? height = null) { if (!width.HasValue && !height.HasValue) { throw new ArgumentException("Value for width or height must be provided."); } if (width.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandWidth = width.Value; } if (height.HasValue) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).childForceExpandHeight = height.Value; } return layoutGroup; } public static VerticalLayoutGroup SetChildAlignment(this VerticalLayoutGroup layoutGroup, TextAnchor alignment) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) ((LayoutGroup)layoutGroup).childAlignment = alignment; return layoutGroup; } public static VerticalLayoutGroup SetPadding(this VerticalLayoutGroup layoutGroup, int? left = null, int? right = null, int? top = null, int? bottom = null) { if (!left.HasValue && !right.HasValue && !top.HasValue && !bottom.HasValue) { throw new ArgumentException("Value for left, right, top or bottom must be provided."); } if (left.HasValue) { ((LayoutGroup)layoutGroup).padding.left = left.Value; } if (right.HasValue) { ((LayoutGroup)layoutGroup).padding.right = right.Value; } if (top.HasValue) { ((LayoutGroup)layoutGroup).padding.top = top.Value; } if (bottom.HasValue) { ((LayoutGroup)layoutGroup).padding.bottom = bottom.Value; } return layoutGroup; } public static VerticalLayoutGroup SetSpacing(this VerticalLayoutGroup layoutGroup, float spacing) { ((HorizontalOrVerticalLayoutGroup)layoutGroup).spacing = spacing; return layoutGroup; } } public static class ButtonExtensions { public static Button SetOnClickListener(this Button button, UnityAction action) { ((UnityEvent)button.onClick).AddListener(action); return button; } } public static class UIResources { private static readonly Dictionary<string, Sprite> SpriteCache = new Dictionary<string, Sprite>(); public static string ValheimNorseFont = "Valheim-Norse"; public static string ValheimAveriaSansLibre = "Valheim-AveriaSansLibre"; public static Dictionary<string, TMP_FontAsset> FontAssetCache { get; private set; } = new Dictionary<string, TMP_FontAsset>(); public static TMP_FontAsset ValheimNorseFontAsset => ((TMP_Text)Minimap.m_instance.m_pinNamePrefab.GetComponentInChildren<TextMeshProUGUI>()).font; public static TMP_FontAsset ValheimAveriaSansLibreFontAsset => ((TMP_Text)UnifiedPopup.instance.bodyText).font; public static Sprite GetSprite(string spriteName) { if (!SpriteCache.TryGetValue(spriteName, out var value)) { value = ((IEnumerable<Sprite>)Resources.FindObjectsOfTypeAll<Sprite>()).FirstOrDefault((Func<Sprite, bool>)((Sprite sprite) => ((Object)sprite).name == spriteName)); SpriteCache[spriteName] = value; } return value; } public static TMP_FontAsset GetFontAssetByName(string fontAssetName) { if (FontAssetCache.TryGetValue(fontAssetName, out var value)) { return value; } if (fontAssetName == ValheimNorseFont) { value = ValheimNorseFontAsset; FontAssetCache[fontAssetName] = value; return value; } if (fontAssetName == ValheimAveriaSansLibre) { value = ValheimAveriaSansLibreFontAsset; FontAssetCache[fontAssetName] = value; return value; } TMP_FontAsset[] array = Resources.FindObjectsOfTypeAll<TMP_FontAsset>(); foreach (TMP_FontAsset val in array) { FontAssetCache[((Object)val).name] = val; } return FontAssetCache[fontAssetName]; } } public sealed class PlayerListRow { private long _pid; private static readonly Lazy<ColorBlock> ButtonColorBlock = new Lazy<ColorBlock>((Func<ColorBlock>)delegate { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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_0082: 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_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) ColorBlock result = default(ColorBlock); ((ColorBlock)(ref result)).normalColor = new Color(0f, 0f, 0f, 0.01f); ((ColorBlock)(ref result)).highlightedColor = Color32.op_Implicit(new Color32((byte)50, (byte)161, (byte)217, (byte)128)); ((ColorBlock)(ref result)).disabledColor = new Color(0f, 0f, 0f, 0.1f); ((ColorBlock)(ref result)).pressedColor = Color32.op_Implicit(new Color32((byte)50, (byte)161, (byte)217, (byte)192)); ((ColorBlock)(ref result)).selectedColor = Color32.op_Implicit(new Color32((byte)50, (byte)161, (byte)217, (byte)248)); ((ColorBlock)(ref result)).colorMultiplier = 1f; ((ColorBlock)(ref result)).fadeDuration = 0f; return result; }); public GameObject Row { get; private set; } public Image PinIcon { get; private set; } public TMP_Text PinName { get; private set; } public TMP_Text PinCount { get; private set; } public TMP_Text FilterStatus { get; private set; } public PlayerListRow(Transform parentTransform) { //IL_0083: Unknown result type (might be due to invalid IL or missing references) Row = CreateChildRow(parentTransform); PinIcon = CreateChildPinIcon(Row.transform).Image(); PinName = CreateChildPinName(Row.transform); UIBuilder.CreateRowSpacer(Row.transform); PinCount = CreatePinCountValue(Row.transform); ((Graphic)PinCount).color = new Color(0.565f, 0.792f, 0.976f); FilterStatus = CreatePinCountValue(Row.transform); FilterStatus.fontSize = 14f; } public PlayerListRow SetRowContent(long pid) { _pid = pid; PinIcon.SetSprite(Minimap.m_instance.GetSprite((PinType)10)); UpdateName(); UpdateCount(); UpdateFilterStatus(); return this; } public void UpdateName() { PinName.SetText(NameManager.GetPlayerNameById(_pid)); } public void UpdateCount() { PinCount.SetText($"{PinOwnerManager.GetPinsByPid(_pid).Count}"); } public void UpdateFilterStatus() { if (PinOwnerManager.IsFiltered(_pid)) { FilterStatus.SetText("<color=red>X</color>"); } else { FilterStatus.SetText("<color=green><b>✓</b></color>"); } } private GameObject CreateChildRow(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("PinList.Row", new Type[1] { typeof(RectTransform) }); val.SetParent(parentTransform); val.AddComponent<HorizontalLayoutGroup>().SetChildControl(true, true).SetChildForceExpand(false, false) .SetChildAlignment((TextAnchor)4) .SetPadding(5, 10, 5, 5) .SetSpacing(5f); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateRoundedCornerSprite(400, 400, 5, (FilterMode)1)); ((Selectable)(object)val.AddComponent<Button>().SetOnClickListener(new UnityAction(ToggleFilter))).SetNavigationMode((Mode)0).SetTargetGraphic((Graphic)(object)val.Image()).SetColors(ButtonColorBlock.Value); val.AddComponent<ContentSizeFitter>().SetHorizontalFit((FitMode)0).SetVerticalFit((FitMode)2); val.AddComponent<ParentSizeFitter>(); return val; } public void ToggleFilter() { PinOwnerManager.ToggleFilter(_pid); UpdateFilterStatus(); } private GameObject CreateChildPinIcon(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown GameObject val = new GameObject("Pin.Icon", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<LayoutElement>().SetPreferred(20f, 20f); val.AddComponent<Image>().SetType((Type)0); return val; } private TMP_Text CreateChildPinName(Transform parentTransform) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) TMP_Text val = (TMP_Text)(object)UIBuilder.CreateTMPLabel(parentTransform); val.SetName<TMP_Text>("Pin.Name"); val.alignment = (TextAlignmentOptions)513; val.text = "Blankname1234567891011121314"; ((Component)val).gameObject.AddComponent<LayoutElement>().SetPreferred(val.GetPreferredValues().x, null); return val; } private TMP_Text CreatePinCountValue(Transform parentTransform) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) TMP_Text val = (TMP_Text)(object)UIBuilder.CreateTMPLabel(parentTransform); val.SetName<TMP_Text>("Pin.Count.Value"); val.alignment = (TextAlignmentOptions)516; val.text = "-12X✓"; ((Component)val).gameObject.AddComponent<LayoutElement>().SetPreferred(val.GetPreferredValues().x, val.GetPreferredValues().y); return val; } } public sealed class PlayerPinFilterPanel { private readonly PointerState _pointerState; private readonly List<PlayerListRow> _rowCache = new List<PlayerListRow>(); private int _visibleRows; private float _rowPreferredHeight; private LayoutElement _bufferBlock; public GameObject Panel { get; private set; } public ValueCell PinNameFilter { get; private set; } public GameObject Viewport { get; private set; } public GameObject Content { get; private set; } public ScrollRect ScrollRect { get; private set; } public LabelCell PinStats { get; private set; } public PanelDragger PanelDragger { get; private set; } public PanelResizer PanelResizer { get; private set; } public PlayerPinFilterPanel(Transform parentTransform) { //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) Panel = CreateChildPanel(parentTransform); PanelDragger = CreateChildPanelDragger(Panel).AddComponent<PanelDragger>(); PanelDragger.TargetRectTransform = Panel.RectTransform(); PanelResizer = CreateChildPanelResizer(Panel).AddComponent<PanelResizer>(); PanelResizer.TargetRectTransform = Panel.RectTransform(); PinNameFilter = new ValueCell(Panel.transform); LayoutElement layoutElement = PinNameFilter.Cell.LayoutElement().SetFlexible(1f); float? height = 30f; layoutElement.SetPreferred(null, height); Viewport = CreateChildViewport(Panel.transform); Content = CreateChildContent(Viewport.transform); ScrollRect = CreateChildScrollRect(Panel, Viewport, Content); PinStats = new LabelCell(Panel.transform); PinStats.Cell.GetComponent<HorizontalLayoutGroup>().SetPadding(8, 8, 5, 5); PinStats.Cell.Image().SetColor(new Color(0.5f, 0.5f, 0.5f, 0.1f)); PinStats.Cell.AddComponent<Outline>().SetEffectDistance(new Vector2(2f, -2f)); _pointerState = Panel.AddComponent<PointerState>(); UpdatePanel(); } public bool HasFocus() { if (Object.op_Implicit((Object)(object)Panel) && Panel.activeInHierarchy) { return _pointerState.IsPointerHovered; } return false; } public void UpdatePinCounts() { if ((Object)(object)Panel == (Object)null) { return; } foreach (PlayerListRow item in _rowCache) { item.UpdateCount(); } } public void UpdatePanel() { RefreshPinListRows(); PinStats.Label.SetText($"{PinOwnerManager.ForeignPinOwners.Count} players with pins."); } private void BuildPinListRows() { } private void RefreshPinListRows() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) ((UnityEventBase)ScrollRect.onValueChanged).RemoveAllListeners(); Content.RectTransform().SetPosition(Vector2.zero); ScrollRect.SetVerticalScrollPosition(1f); _rowCache.Clear(); foreach (GameObject item in Content.Children()) { Object.Destroy((Object)(object)item); } GameObject val = new GameObject("ppl.Block", new Type[1] { typeof(RectTransform) }); val.SetParent(Content.transform); _bufferBlock = val.AddComponent<LayoutElement>(); LayoutElement bufferBlock = _bufferBlock; float? height = 0f; bufferBlock.SetPreferred(null, height); PlayerListRow playerListRow = new PlayerListRow(Content.transform); LayoutRebuilder.ForceRebuildLayoutImmediate(Panel.RectTransform()); _rowPreferredHeight = LayoutUtility.GetPreferredHeight(playerListRow.Row.RectTransform()); _visibleRows = Mathf.CeilToInt(Viewport.RectTransform().sizeDelta.y / _rowPreferredHeight); Object.Destroy((Object)(object)playerListRow.Row); Content.RectTransform().SetSizeDelta(new Vector2(Viewport.RectTransform().sizeDelta.x, _rowPreferredHeight * (float)PinOwnerManager.ForeignPinOwners.Count)); PinOwnerManager.SortPinOwnersByName(); for (int i = 0; i < PinOwnerManager.ForeignPinOwners.Count; i++) { playerListRow = new PlayerListRow(Content.transform); playerListRow.SetRowContent(PinOwnerManager.GetForeignPinOwnerAtIndex(i)); _rowCache.Add(playerListRow); } ScrollRect.SetVerticalScrollPosition(1f); } private GameObject CreateChildPanel(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: 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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown GameObject val = new GameObject("PlayerPinList.Panel", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<VerticalLayoutGroup>().SetChildControl(true, true).SetChildForceExpand(false, false) .SetPadding(8, 8, 8, 8) .SetSpacing(8f); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateSuperellipse(400, 400, 15f)) .SetColor(new Color(0f, 0f, 0f, 0.9f)); return val; } private GameObject CreateChildViewport(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown GameObject val = new GameObject("PlayerPinList.Viewport", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); val.AddComponent<RectMask2D>(); val.AddComponent<LayoutElement>().SetFlexible(1f, 1f); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateRoundedCornerSprite(128, 128, 8, (FilterMode)1)) .SetColor(new Color(0.5f, 0.5f, 0.5f, 0.1f)); val.AddComponent<Outline>().SetEffectDistance(new Vector2(2f, -2f)); return val; } private GameObject CreateChildContent(Transform parentTransform) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_002c: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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) //IL_0096: Expected O, but got Unknown GameObject val = new GameObject("PlayerPinList.Content", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, parentTransform); GameObjectExtensions.RectTransform(val).SetAnchorMin(Vector2.up).SetAnchorMax(Vector2.up) .SetPivot(Vector2.up); val.AddComponent<VerticalLayoutGroup>().SetChildControl(true, true).SetChildForceExpand(false, false) .SetSpacing(0f); val.AddComponent<Image>().SetColor(Color.clear).SetRaycastTarget(raycastTarget: true); return val; } private ScrollRect CreateChildScrollRect(GameObject panel, GameObject viewport, GameObject content) { return panel.AddComponent<ScrollRect>().SetViewport(viewport.RectTransform()).SetContent(content.RectTransform()) .SetHorizontal(horizontal: false) .SetVertical(vertical: true) .SetScrollSensitivity(30f); } private GameObject CreateChildPanelDragger(GameObject panel) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_003e: 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_005c: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown GameObject val = new GameObject("ppl.Dragger", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, panel.transform); val.AddComponent<LayoutElement>().SetIgnoreLayout(ignoreLayout: true); GameObjectExtensions.RectTransform(val).SetAnchorMin(Vector2.zero).SetAnchorMax(Vector2.one) .SetPivot(new Vector2(0.5f, 0.5f)) .SetSizeDelta(Vector2.zero); val.AddComponent<Image>().SetColor(Color.clear); return val; } private GameObject CreateChildPanelResizer(GameObject panel) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_003e: 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_0052: 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_007a: 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_00bc: 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) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0127: 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_0145: 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_017b: Expected O, but got Unknown GameObject val = new GameObject("ppl.Resizer", new Type[1] { typeof(RectTransform) }); GameObjectExtensions.SetParent(val, panel.transform); val.AddComponent<LayoutElement>().SetIgnoreLayout(ignoreLayout: true); GameObjectExtensions.RectTransform(val).SetAnchorMin(Vector2.right).SetAnchorMax(Vector2.right) .SetPivot(Vector2.right) .SetSizeDelta(new Vector2(40f, 40f)) .SetPosition(new Vector2(15f, -15f)); val.AddComponent<Image>().SetType((Type)1).SetSprite(UIBuilder.CreateRoundedCornerSprite(128, 128, 12, (FilterMode)1)) .SetColor(new Color(0.565f, 0.792f, 0.976f, 0.849f)); val.AddComponent<Shadow>().SetEffectDistance(new Vector2(2f, -2f)); val.AddComponent<CanvasGroup>().SetAlpha(0f); TextMeshProUGUI obj = UIBuilder.CreateTMPLabel(val.transform); ((TMP_Text)(object)obj).SetName<TMP_Text>("Resizer.Icon"); ((Component)obj).gameObject.AddComponent<LayoutElement>().SetIgnoreLayout(ignoreLayout: true); ((Component)obj).gameObject.RectTransform().SetAnchorMin(Vector2.zero).SetAnchorMax(Vector2.one) .SetPivot(new Vector2(0.5f, 0.5f)) .SetSizeDelta(Vector2.zero); ((TMP_Text)obj).alignment = (TextAlignmentOptions)514; ((TMP_Text)obj).fontSize = 24f; ((TMP_Text)obj).text = "⇆⇅"; return val; } } [HarmonyPatch(typeof(MapTable))] internal static class MapTablePatch { private static readonly string _nameHashBase = "pintervention.pid_name"; private static readonly char _seperator = '_'; [HarmonyPrefix] [HarmonyPatch("OnRead", new Type[] { typeof(Switch), typeof(Humanoid), typeof(ItemData), typeof(bool) })] private static bool OnReadPostfix(MapTable __instance, ItemData item, ref bool __result) { if (!PluginConfig.IsModEnabled.Value || !Object.op_Implicit((Object)(object)__instance) || !Object.op_Implicit((Object)(object)__instance.m_nview) || !__instance.m_nview.IsValid() || item != null) { return true; } LoadPlayerNames(__instance.m_nview.GetZDO()); if (PluginConfig.ReadRevealedMapOnInteract.Value && PluginConfig.ReadPinsOnInteract.Value) { return true; } SharedMapDataManager.ReadMapData(__instance.m_nview.GetZDO()); __result = false; return false; } [HarmonyPostfix] [HarmonyPatch("OnRead", new Type[] { typeof(Switch), typeof(Humanoid), typeof(ItemData), typeof(bool) })] private static void OnReadPostfix(MapTable __instance, ItemData item) { if (PluginConfig.ReadPinsOnInteract.Value) { PinOwnerManager.FindPinOwners(); NameManager.WriteNamesToFile(); } } [HarmonyPrefix] [HarmonyPatch("OnWrite")] private static void OnWritePrefix(MapTable __instance) { if (PluginConfig.IsModEnabled.Value && Object.op_Implicit((Object)(object)__instance) && Object.op_Implicit((Object)(object)__instance.m_nview) && __instance.m_nview.IsValid() && Object.op_Implicit((Object)(object)Player.m_localPlayer) && ClaimOwnership(__instance) && __instance.m_nview.IsOwner()) { AddNamesToTable(__instance); SendTableZdoUpdate(__instance); } } [HarmonyPostfix] [HarmonyPatch("GetReadHoverText")] private static void GetReadHoverTextPostfix(MapTable __instance, ref string __result) { __result = Localization.instance.Localize(__instance.m_name + "\n[<color=yellow><b>$KEY_Use</b></color>]") + " Interact\n[" + GetBoolUnicodeCharacter(PluginConfig.ReadPinsOnInteract.Value) + "] Read pins\n[" + GetBoolUnicodeCharacter(PluginConfig.ReadRevealedMapOnInteract.Value) + "] Read revealed map"; } private static string GetBoolUnicodeCharacter(bool enabled) { if (enabled) { return "<color=green><b>✓</b></color>"; } return "<color=red><b>X</b></color>"; } private static void SendTableZdoUpdate(MapTable __instance) { //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_005f: Unknown result type (might be due to invalid IL or missing references) ZDOID uid = __instance.m_nview.GetZDO().m_uid; foreach (ZNetPeer item in ZNet.instance.m_peers.Where((ZNetPeer x) => Player.s_players.Select((Player x) => ((Character)x).m_nview.GetZDO().m_uid).Contains(x.m_characterID)).ToList()) { ZDOMan.instance.ForceSendZDO(item.m_uid, uid); } } private static bool ClaimOwnership(MapTable table) { if (!Object.op_Implicit((Object)(object)table) || !Object.op_Implicit((Object)(object)table.m_nview) || !table.m_nview.IsValid()) { return false; } Pintervention.LogInfo("Claimed table ownership to write name data."); table.m_nview.ClaimOwnership(); return true; } private static void LoadPlayerNames(ZDO zdo) { string text = "not empty"; int num = 0; while (text != string.Empty) { text = zdo.GetString(GetNumberedHashCode(num), string.Empty); if (!(text == string.Empty)) { num++; KeyValuePair<long, string> keyValuePair = ParsePidNamePair(text); if (keyValuePair.Equals(default(KeyValuePair<long, string>))) { Pintervention.LogWarning($"Unable to parse name at index {num} with value {text}."); } else { NameManager.AddPlayerName(keyValuePair.Key, keyValuePair.Value); } } } } private static KeyValuePair<long, string> ParsePidNamePair(string storedValue) { string[] array = storedValue.Split(new char[1] { _seperator }); if (array.Length != 2 || !long.TryParse(array[0], out var result)) { return default(KeyValuePair<long, string>); } return new KeyValuePair<long, string>(result, array[1]); } private static bool IsNameOnTable(MapTable table, long pid, string name) { ZDO zDO = table.m_nview.GetZDO(); string storedValue = GetStoredValue(pid, name); int num = 0; string text = "not empty"; while (text != string.Empty) { text = zDO.GetString(GetNumberedHashCode(num), string.Empty); if (text == storedValue) { return true; } num++; } Pintervention.LogInfo("Name " + Player.m_localPlayer.GetPlayerName() + " not found on map table."); return false; } private static void AddNamesToTable(MapTable table) { Dictionary<long, string> playerNamesById = NameManager.PlayerNamesById; if (!playerNamesById.ContainsKey(Player.m_localPlayer.GetPlayerID())) { playerNamesById.Add(Player.m_localPlayer.GetPlayerID(), Player.m_localPlayer.GetPlayerName()); } foreach (KeyValuePair<long, string> item in NameManager.PlayerNamesById) { if (!IsNameOnTable(table, item.Key, item.Value) && !item.Value.StartsWith("Unknown")) { table.m_nview.GetZDO().Set(GetNextEmptyHashCode(table.m_nview.GetZDO()), GetStoredValue(item.Key, item.Value)); } } } private static string GetStoredValue(long pid, string name) { return $"{pid}{_seperator}{name}"; } private static int GetNextEmptyHashCode(ZDO zdo) { int num = 0; string text = "not empty"; while (text != string.Empty) { text = zdo.GetString(GetNumberedHashCode(num), string.Empty); if (!(text == string.Empty)) { num++; } } return GetNumberedHashCode(num); } private static int GetNumberedHashCode(int i) { return StringExtensionMethods.GetStableHashCode($"{_nameHashBase}{i}"); } } [HarmonyPatch(typeof(Minimap))] internal static class MinimapPatch { private static int _pinCount = 999999; [HarmonyPostfix] [HarmonyPatch("Update")] private static void UpdatePostfix(Minimap __instance) { //IL_002d: 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) if (PluginConfig.IsModEnabled.Value && Minimap.IsOpen() && Object.op_Implicit((Object)(object)__instance) && Object.op_Implicit((Object)(object)__instance.m_largeRoot)) { KeyboardShortcut value = PluginConfig.DisplayFilterPanel.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { PinOwnerManager.Initialize(); PlayerFilterPanelManager.ToggleFilterPanel(); } } } [HarmonyPostfix] [HarmonyPatch("UpdatePins")] private static void UpdatePinsPostfix(Minimap __instance) { if (PluginConfig.IsModEnabled.Value && Minimap.IsOpen() && Object.op_Implicit((Object)(object)__instance) && Object.op_Implicit((Object)(object)__instance.m_largeRoot)) { PinOwnerManager.FilterPins(); PlayerFilterPanelManager.UpdatePinCounts(); } } [HarmonyPostfix] [HarmonyPatch("UpdatePlayerPins")] private static void UpdatePlayerPinsPostfix(Minimap __instance) { if (PluginConfig.IsModEnabled.Value && Object.op_Implicit((Object)(object)__instance)) { Object.op_Implicit((Object)(object)Player.m_localPlayer); } if (_pinCount > __instance.m_pins.Count) { _pinCount = __instance.m_pins.Count; PinOwnerManager.AddAllLocalPlayerPins(); PlayerFilterPanelManager.UpdatePanel(); } } [HarmonyPostfix] [HarmonyPatch("RemovePin", new Type[] { typeof(PinData) })] private static void RemovePinPostfix(Minimap __instance, PinData pin) { long ownerID = pin.m_ownerID; PinOwnerManager.RemoveLocalPlayerPin(pin); if (PinOwnerManager.GetPinsByPid(ownerID).Count == 0) { PinOwnerManager.RemoveForeignPinOwner(ownerID); } PlayerFilterPanelManager.UpdatePanel(); } [HarmonyPostfix] [HarmonyPatch("ResetSharedMapData")] private static void ResetSharedMapData(Minimap __instance) { PinOwnerManager.ForeignPinOwners.RemoveAll((long x) => PinOwnerManager.GetPinsByPid(x).Count == 0); PlayerFilterPanelManager.UpdatePanel(); } } [HarmonyPatch(typeof(ZNet))] internal static class ZNetPatch { [HarmonyPrefix] [HarmonyPatch("OnDestroy")] private static void OnDestroyPrefix() { if (PluginConfig.IsModEnabled.Value) { PinOwnerManager.WriteFilteredPlayersToFile(); PinOwnerManager.Clear(); } } } [BepInPlugin("bruce.valheim.comfymods.pintervention", "Pintervention", "1.3.0")] public sealed class Pintervention : BaseUnityPlugin { public const string PluginGuid = "bruce.valheim.comfymods.pintervention"; public const string PluginName = "Pintervention"; public const string PluginVersion = "1.3.0"; private static ManualLogSource _logger; private void Awake() { _logger = ((BaseUnityPlugin)this).Logger; PluginConfig.BindConfig(((BaseUnityPlugin)this).Config); Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "bruce.valheim.comfymods.pintervention"); } public static void MessageLocalPlayer(string message) { if (Object.op_Implicit((Object)(object)Player.m_localPlayer)) { ((Character)Player.m_localPlayer).Message((MessageType)2, message, 0, (Sprite)null); } } public static void LogInfo<T>(T obj) { _logger.LogInfo((object)$"[{DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)}