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 FehuParty v420.101.12
BepInEx/plugins/FehuParty/FehuParty.dll
Decompiled 4 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using FehuParty.Core; using FehuParty.Integrations; using FehuParty.Map; using FehuParty.Network; using FehuParty.Persistence; using FehuParty.Rewards; using FehuParty.UI; 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: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("0.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [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 FehuParty { public static class FehuPartyApi { public static event Action<Party>? OnPartyCreated; public static event Action<Party>? OnPartyDisbanded; public static event Action<Party, long>? OnPlayerJoinedParty; public static event Action<Party, long>? OnPlayerLeftParty; public static event Action<Party>? OnLeaderChanged; public static event Action<Party, long>? OnMemberKicked; public static event Action<Party, long>? OnMemberDisconnected; public static event Action<Party, long>? OnMemberReconnected; public static event Action<Party, long>? MemberKicked { add { OnMemberKicked += value; } remove { OnMemberKicked -= value; } } public static event Action<Party, long>? MemberDisconnected { add { OnMemberDisconnected += value; } remove { OnMemberDisconnected -= value; } } public static event Action<Party, long>? MemberReconnected { add { OnMemberReconnected += value; } remove { OnMemberReconnected -= value; } } public static event Action<Party>? PartyCreated { add { OnPartyCreated += value; } remove { OnPartyCreated -= value; } } public static event Action<Party>? PartyDisbanded { add { OnPartyDisbanded += value; } remove { OnPartyDisbanded -= value; } } public static event Action<Party, long>? MemberJoined { add { OnPlayerJoinedParty += value; } remove { OnPlayerJoinedParty -= value; } } public static event Action<Party, long>? MemberLeft { add { OnPlayerLeftParty += value; } remove { OnPlayerLeftParty -= value; } } public static event Action<Party>? LeaderChanged { add { OnLeaderChanged += value; } remove { OnLeaderChanged -= value; } } public static bool TryGetPartyId(long playerId, out string partyId) { partyId = GetPartyForPlayer(playerId)?.PartyId ?? ""; return partyId.Length != 0; } public static bool IsPlayerInParty(long playerId) { string partyId; return TryGetPartyId(playerId, out partyId); } public static Party? GetPartyLeader(string partyId) { Party party = GetParty(partyId); if (party != null) { return new Party { PartyId = party.PartyId, Name = party.Name, LeaderSteamId = party.LeaderSteamId }; } return null; } public static IReadOnlyList<PartyMember> GetPartyMembers(string partyId) { return GetMembers(partyId); } public static IReadOnlyList<PartyMember> GetOnlinePartyMembers(string partyId) { return (from m in GetMembers(partyId) where PartyManager.IsOnlinePublic(m.PlayerId) select m).ToArray(); } public static int GetPartyMemberCount(string partyId) { return GetMembers(partyId).Count; } public static IReadOnlyList<PartyMember> GetPartyMembersInRange(string partyId, Vector3 position, float radius) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) return GetMembers(partyId).Where(delegate(PartyMember m) { //IL_002e: 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) Player val = ((IEnumerable<Player>)Player.GetAllPlayers()).FirstOrDefault((Func<Player, bool>)((Player x) => x.GetPlayerID() == m.PlayerId)); return (Object)(object)val != (Object)null && Vector3.Distance(position, ((Component)val).transform.position) <= radius; }).ToArray(); } public static Party? GetPartyForPlayer(long steamId) { Party party; if (!((Object)(object)PartyManager.Instance == (Object)null)) { return Copy(PartyManager.Instance.TryGetParty(steamId, out party) ? party : null); } return null; } public static Party? GetParty(string partyId) { if (!((Object)(object)PartyManager.Instance == (Object)null)) { return Copy(PartyManager.Instance.Get(partyId)); } return null; } public static IReadOnlyList<PartyMember> GetMembers(string partyId) { return GetParty(partyId)?.Members.Values.Select(Copy).ToArray() ?? Array.Empty<PartyMember>(); } public static bool AreInSameParty(long a, long b) { return GetPartyForPlayer(a)?.PartyId == GetPartyForPlayer(b)?.PartyId; } public static bool IsPartyLeader(long steamId) { Party? partyForPlayer = GetPartyForPlayer(steamId); if (partyForPlayer == null) { return false; } return partyForPlayer.LeaderSteamId == steamId; } public static long GetLeader(string partyId) { return GetParty(partyId)?.LeaderSteamId ?? 0; } public static int ShareReward(long sourcePlayer, PartyRewardType type, float amount, Vector3 sourcePosition) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return PartyRewardService.Share(sourcePlayer, type, amount, sourcePosition); } internal static void RaiseCreated(Party p) { FehuPartyApi.OnPartyCreated?.Invoke(Copy(p)); } internal static void RaiseDisbanded(Party p) { FehuPartyApi.OnPartyDisbanded?.Invoke(Copy(p)); } internal static void RaiseJoined(Party p, long id) { FehuPartyApi.OnPlayerJoinedParty?.Invoke(Copy(p), id); } internal static void RaiseLeft(Party p, long id) { FehuPartyApi.OnPlayerLeftParty?.Invoke(Copy(p), id); } internal static void RaiseLeaderChanged(Party p) { FehuPartyApi.OnLeaderChanged?.Invoke(Copy(p)); } internal static void RaiseKicked(Party p, long id) { FehuPartyApi.OnMemberKicked?.Invoke(Copy(p), id); } internal static void RaiseDisconnected(Party p, long id) { FehuPartyApi.OnMemberDisconnected?.Invoke(Copy(p), id); } internal static void RaiseReconnected(Party p, long id) { FehuPartyApi.OnMemberReconnected?.Invoke(Copy(p), id); } private static Party? Copy(Party? p) { if (p == null) { return null; } Party party = new Party { PartyId = p.PartyId, Name = p.Name, LeaderSteamId = p.LeaderSteamId, CreatedUtc = p.CreatedUtc, Visibility = p.Visibility, Purpose = p.Purpose, Settings = new PartySettings { ShowPositions = p.Settings.ShowPositions, FriendlyFireProtected = p.Settings.FriendlyFireProtected }, Waypoint = p.Waypoint }; foreach (PartyMember value in p.Members.Values) { party.Members[value.PlayerId] = Copy(value); } return party; } private static PartyMember Copy(PartyMember m) { return new PartyMember { PlayerId = m.PlayerId, Name = m.Name, JoinedUtc = m.JoinedUtc, Assistant = m.Assistant }; } } [BepInPlugin("blackviking.fehuparty", "FehuParty", "420.101.11")] public sealed class Plugin : BaseUnityPlugin { public const string PluginGuid = "blackviking.fehuparty"; public const string PluginName = "FehuParty"; public const string PluginVersion = "420.101.11"; internal static Plugin Instance; internal static PartyConfig Settings; private void Awake() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) Instance = this; Settings = new PartyConfig(((BaseUnityPlugin)this).Config); ((Component)this).gameObject.AddComponent<PartyManager>(); ((Component)this).gameObject.AddComponent<PartyNetwork>(); ((Component)this).gameObject.AddComponent<PartyHud>(); ((Component)this).gameObject.AddComponent<PartyMapService>(); new Harmony("blackviking.fehuparty").PatchAll(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[FehuParty] 420.101.11 starting; complete server-authoritative Party Hall flow enabled."); } internal static void Info(string message) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)("[FehuParty] " + message)); } internal static void Debug(string message) { if (Settings.DebugLogging.Value) { ((BaseUnityPlugin)Instance).Logger.LogInfo((object)("[FehuParty] " + message)); } } } internal sealed class PartyConfig { internal readonly ConfigEntry<bool> Enabled; internal readonly ConfigEntry<bool> Persist; internal readonly ConfigEntry<bool> Browser; internal readonly ConfigEntry<bool> HudEnabled; internal readonly ConfigEntry<bool> ShowMap; internal readonly ConfigEntry<bool> ShowMiniMap; internal readonly ConfigEntry<bool> DebugLogging; internal readonly ConfigEntry<bool> CrossClan; internal readonly ConfigEntry<bool> EnemyClan; internal readonly ConfigEntry<int> MaxMembers; internal readonly ConfigEntry<int> OfflineRetention; internal readonly ConfigEntry<int> EmptyDisband; internal readonly ConfigEntry<int> UiLayoutVersion; internal readonly ConfigEntry<int> InviteTimeoutSeconds; internal readonly ConfigEntry<int> JoinRequestTimeoutSeconds; internal readonly ConfigEntry<float> PingCooldown; internal readonly ConfigEntry<float> HudScale; internal readonly ConfigEntry<float> HudPosX; internal readonly ConfigEntry<float> HudPosY; internal readonly ConfigEntry<float> LauncherPosX; internal readonly ConfigEntry<float> LauncherPosY; internal readonly ConfigEntry<float> HudNormalizedX; internal readonly ConfigEntry<float> HudNormalizedY; internal readonly ConfigEntry<float> PartyButtonNormalizedX; internal readonly ConfigEntry<float> PartyButtonNormalizedY; internal readonly ConfigEntry<bool> ShowDistance; internal readonly ConfigEntry<bool> ShowHp; internal readonly ConfigEntry<bool> ShowClanTag; internal readonly ConfigEntry<bool> ShowPins; internal readonly ConfigEntry<bool> ShowPings; internal readonly ConfigEntry<bool> PartyButtonAttachedToMinimap; internal readonly ConfigEntry<bool> PartyPanelDefaultBelowMinimap; internal readonly ConfigEntry<bool> HudPositionSaved; internal readonly ConfigEntry<bool> PartyButtonPositionSaved; internal readonly ConfigEntry<bool> MembersCanInvite; internal readonly ConfigEntry<string> PartyWindowHotkey; internal KeyCode ParsedPartyHotkey => ParseKey(PartyWindowHotkey?.Value); internal PartyConfig(ConfigFile c) { Enabled = c.Bind<bool>("General", "Enabled", true, (ConfigDescription)null); DebugLogging = c.Bind<bool>("General", "DebugLogging", false, (ConfigDescription)null); MaxMembers = c.Bind<int>("Party", "PartyMaxMembers", 0, (ConfigDescription)null); Persist = c.Bind<bool>("Party", "PersistPartyMembership", true, (ConfigDescription)null); OfflineRetention = c.Bind<int>("Party", "PartyOfflineRetentionMinutes", 60, (ConfigDescription)null); EmptyDisband = c.Bind<int>("Party", "DisbandEmptyPartyMinutes", 15, (ConfigDescription)null); MembersCanInvite = c.Bind<bool>("Party", "MembersCanInvite", false, "Allow regular party members to invite online players. The server always validates this permission."); InviteTimeoutSeconds = c.Bind<int>("Party", "InviteTimeoutSeconds", 30, "Seconds before a pending party invitation expires."); JoinRequestTimeoutSeconds = c.Bind<int>("Party", "JoinRequestTimeoutSeconds", 60, "Seconds before a pending request to join expires."); Browser = c.Bind<bool>("Browser", "EnablePartyBrowser", true, (ConfigDescription)null); ShowMap = c.Bind<bool>("Map", "ShowPartyMembersOnMap", true, (ConfigDescription)null); ShowMiniMap = c.Bind<bool>("Map", "ShowPartyMembersOnMinimap", true, (ConfigDescription)null); PingCooldown = c.Bind<float>("Map", "PartyPingCooldownSeconds", 3f, (ConfigDescription)null); CrossClan = c.Bind<bool>("FCW", "AllowCrossClanParty", true, (ConfigDescription)null); EnemyClan = c.Bind<bool>("FCW", "AllowEnemyClanParty", true, (ConfigDescription)null); HudEnabled = c.Bind<bool>("UI", "EnablePartyHUD", true, (ConfigDescription)null); HudScale = c.Bind<float>("UI", "HUDScale", 1f, (ConfigDescription)null); HudPosX = c.Bind<float>("UI", "HUDPosX", 30f, (ConfigDescription)null); HudPosY = c.Bind<float>("UI", "HUDPosY", -180f, (ConfigDescription)null); HudNormalizedX = c.Bind<float>("UI", "PartyHudNormalizedX", 0f, "Saved HUD center X as a screen fraction."); HudNormalizedY = c.Bind<float>("UI", "PartyHudNormalizedY", 0f, "Saved HUD center Y as a screen fraction."); HudPositionSaved = c.Bind<bool>("UI", "PartyHudPositionSaved", false, "Whether Party HUD has a player-saved position."); PartyButtonNormalizedX = c.Bind<float>("UI", "PartyButtonNormalizedX", 0f, "Saved PARTY button center X as a screen fraction."); PartyButtonNormalizedY = c.Bind<float>("UI", "PartyButtonNormalizedY", 0f, "Saved PARTY button center Y as a screen fraction."); PartyButtonPositionSaved = c.Bind<bool>("UI", "PartyButtonPositionSaved", false, "Whether the PARTY button has a player-saved position."); PartyButtonAttachedToMinimap = c.Bind<bool>("UI", "PartyButtonAttachedToMinimap", true, "Legacy compatibility value. Reset places the PARTY button above the minimap."); PartyPanelDefaultBelowMinimap = c.Bind<bool>("UI", "PartyPanelDefaultBelowMinimap", true, "Place the compact Party HUD below the minimap until moved."); LauncherPosX = c.Bind<float>("UI", "PartyLauncherPosX", -24f, "Legacy launcher X value."); LauncherPosY = c.Bind<float>("UI", "PartyLauncherPosY", -420f, "Legacy launcher Y value."); ShowDistance = c.Bind<bool>("UI", "ShowDistance", true, (ConfigDescription)null); ShowHp = c.Bind<bool>("UI", "ShowHP", true, (ConfigDescription)null); ShowClanTag = c.Bind<bool>("UI", "ShowClanTag", true, (ConfigDescription)null); ShowPins = c.Bind<bool>("UI", "ShowPartyMapPins", true, (ConfigDescription)null); ShowPings = c.Bind<bool>("UI", "ShowPartyPings", true, (ConfigDescription)null); PartyWindowHotkey = c.Bind<string>("UI", "PartyWindowHotkey", "F2", "Keyboard key used to open and close Party Hall. Invalid values safely fall back to F2."); UiLayoutVersion = c.Bind<int>("UI", "PartyUiLayoutVersion", 0, "Internal local UI layout migration marker."); if (UiLayoutVersion.Value < 26) { PartyButtonPositionSaved.Value = false; HudPositionSaved.Value = false; PartyButtonAttachedToMinimap.Value = true; UiLayoutVersion.Value = 26; } string text = PartyWindowHotkey.Value?.Trim() ?? string.Empty; if (!TryParseKey(text, out var _) || string.Equals(text, "R", StringComparison.OrdinalIgnoreCase) || string.Equals(text, "F6", StringComparison.OrdinalIgnoreCase)) { PartyWindowHotkey.Value = "F2"; } } internal static KeyCode ParseKey(string? value) { //IL_0011: 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) //IL_001e: Unknown result type (might be due to invalid IL or missing references) try { KeyCode parsed; return (KeyCode)((!TryParseKey(value, out parsed)) ? 283 : ((int)parsed)); } catch { } return (KeyCode)283; } private static bool TryParseKey(string? value, out KeyCode parsed) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected I4, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected I4, but got Unknown parsed = (KeyCode)283; string text = (value ?? string.Empty).Replace(" ", string.Empty).Trim().ToUpperInvariant(); if (!Enum.TryParse<KeyCode>(text, ignoreCase: true, out KeyCode result)) { return false; } if (text.Length == 1 && text[0] >= 'A' && text[0] <= 'Z') { parsed = (KeyCode)(int)result; return true; } if (text.Length >= 2 && text[0] == 'F' && int.TryParse(text.Substring(1), out var result2) && result2 >= 1 && result2 <= 12) { parsed = (KeyCode)(int)result; return true; } return false; } } } namespace FehuParty.UI { internal sealed class PartyHud : MonoBehaviour { private enum PartyPage { Hall, Browser, InvitePlayers, MemberActions } private static class PartyWindowState { internal static string BrowserPayload = string.Empty; } private sealed class CtrlDragGate : MonoBehaviour, IPointerDownHandler, IEventSystemHandler, IDragHandler, IPointerUpHandler, IPointerClickHandler { private float threshold; private Action? click; private Action<Vector2>? begin; private Action<Vector2>? drag; private Action? end; private bool armed; private bool moved; private bool suppressClick; private Vector2 pressPosition; internal void Configure(float movementThreshold, Action? clickAction, Action<Vector2> beginAction, Action<Vector2> dragAction, Action endAction) { threshold = movementThreshold; click = clickAction; begin = beginAction; drag = dragAction; end = endAction; } public void OnPointerDown(PointerEventData eventData) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) if ((int)eventData.button == 0 && ControlHeld()) { armed = true; moved = false; suppressClick = false; pressPosition = eventData.position; begin?.Invoke(eventData.position); } } public void OnDrag(PointerEventData eventData) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) if (armed && ControlHeld() && (moved || !(Vector2.Distance(pressPosition, eventData.position) < threshold))) { moved = true; drag?.Invoke(eventData.position); } } public void OnPointerUp(PointerEventData eventData) { //IL_0009: 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) if (armed && (int)eventData.button == 0) { if (moved) { drag?.Invoke(eventData.position); end?.Invoke(); suppressClick = true; } armed = false; } } public void OnPointerClick(PointerEventData eventData) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if ((int)eventData.button == 0) { if (suppressClick) { suppressClick = false; } else if (!ControlHeld()) { click?.Invoke(); } } } private static bool ControlHeld() { if (!Input.GetKey((KeyCode)306)) { return Input.GetKey((KeyCode)305); } return true; } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<TMP_Text, bool> <>9__69_0; public static Func<Image, bool> <>9__70_0; public static Func<Image, float> <>9__70_1; public static Func<PartySnapshot.MemberState, string> <>9__87_0; public static UnityAction <>9__97_0; public static UnityAction <>9__97_3; public static Action<PartyVisibility> <>9__97_1; public static UnityAction <>9__99_3; internal bool <CaptureNativeTemplates>b__69_0(TMP_Text candidate) { return (Object)(object)((Component)candidate).GetComponentInParent<Button>() == (Object)null; } internal bool <LargestImage>b__70_0(Image image) { if ((Object)(object)image.sprite != (Object)null) { return (Object)(object)((Component)image).GetComponentInParent<Button>() == (Object)null; } return false; } internal float <LargestImage>b__70_1(Image image) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) Rect rect = ((Graphic)image).rectTransform.rect; float width = ((Rect)(ref rect)).width; rect = ((Graphic)image).rectTransform.rect; return Mathf.Abs(width * ((Rect)(ref rect)).height); } internal string <RefreshHud>b__87_0(PartySnapshot.MemberState member) { return member.Id + ":" + member.Name + ":" + member.Hp + ":" + member.MaxHp + ":" + member.Distance + ":" + member.Online; } internal void <BuildActivePartyWindow>b__97_0() { PartyRpc.Client("FP_Leave"); } internal void <BuildActivePartyWindow>b__97_3() { PartyRpc.Client("FP_Disband"); } internal void <BuildActivePartyWindow>b__97_1(PartyVisibility mode) { PartyRpc.Client("FP_SetJoinMode", (int)mode); } internal void <BuildBrowserWindow>b__99_3() { PartyRpc.Client("FP_RequestBrowser"); } } private const float DragThreshold = 5f; private const float MinimapGap = 1f; private const float ScreenMargin = 6f; private const float DefaultHudNormalizedX = 1f; private const float DefaultHudNormalizedY = 0.16f; private static readonly Color PartyPanelTint = new Color(0.42f, 0.35f, 0.3f, 0.98f); private static PartySnapshot? snapshot; private static PartyHud? live; private static string pendingInviteName = string.Empty; private static string pendingInviterName = string.Empty; internal static string PendingInviteId = string.Empty; private GameObject? uiRoot; private RectTransform? uiRootRect; private GameObject? hud; private GameObject? window; private GameObject? invite; private GameObject? launcher; private GameObject? blocker; private TMP_InputField? nameInput; private TMP_InputField? browserSearchInput; private TMP_FontAsset? font; private Material? fontMaterial; private TMP_FontAsset? headingFont; private Material? headingFontMaterial; private Button? nativeButtonTemplate; private TMP_InputField? nativeInputTemplate; private Image? nativeWindowImage; private Image? nativeInnerImage; private Color bodyTextColor = Color.white; private Color headingTextColor = new Color(0.95f, 0.72f, 0.25f); private string lastHudContent = string.Empty; private bool initialized; private bool windowOpen; private bool launcherPlaced; private bool hudPlaced; private bool previousCursorVisible; private CursorLockMode previousCursorLock; private GameCamera? suspendedGameCamera; private bool previousGameCameraEnabled; private Vector2 launcherDragPointerStart; private Vector2 launcherDragScreenStart; private Vector2 hudDragPointerStart; private Vector2 hudDragScreenStart; private int lastScreenWidth; private int lastScreenHeight; private float nextBrowserRefresh; private PartyPage page; private PartyVisibility createJoinMode; private string draftPartyName = string.Empty; private string browserSearch = string.Empty; private int browserPageIndex; private int invitePageIndex; private long selectedMemberId; private List<BrowserPartyEntry> browserEntries = new List<BrowserPartyEntry>(); private List<OnlinePlayerEntry> onlinePlayers = new List<OnlinePlayerEntry>(); private List<JoinRequestEntry> joinRequestEntries = new List<JoinRequestEntry>(); internal static PartySnapshot? CurrentSnapshot => snapshot; internal static void SetSnapshot(PartySnapshot? value) { snapshot = value; if (value == null) { joinRequestEntriesStaticClear(); } else { PendingInviteId = string.Empty; if ((Object)(object)live?.invite != (Object)null) { live.invite.SetActive(false); } } if ((Object)(object)live != (Object)null && live.windowOpen) { if (value != null) { live.page = PartyPage.Hall; } live.BuildWindow(); } } internal static void SetBrowser(string value) { PartyWindowState.BrowserPayload = value; if (!((Object)(object)live == (Object)null)) { try { live.browserEntries = PartyDirectory.DecodeBrowser(value); } catch (Exception ex) { Plugin.Debug("Browser snapshot decode failed: " + ex.Message); live.browserEntries.Clear(); } Plugin.Info("[Browser] Snapshot received: " + live.browserEntries.Count + " parties"); if (live.windowOpen && live.page == PartyPage.Browser) { live.BuildWindow(); } } } internal static void SetOnlinePlayers(string value) { if (!((Object)(object)live == (Object)null)) { try { live.onlinePlayers = PartyDirectory.DecodeOnlinePlayers(value); } catch (Exception ex) { Plugin.Debug("Online player snapshot decode failed: " + ex.Message); live.onlinePlayers.Clear(); } Plugin.Info("[Invite] Online player list received: " + live.onlinePlayers.Count); if (live.windowOpen && live.page == PartyPage.InvitePlayers) { live.BuildWindow(); } } } internal static void SetJoinRequests(string value) { if (!((Object)(object)live == (Object)null)) { try { live.joinRequestEntries = PartyDirectory.DecodeJoinRequests(value); } catch (Exception ex) { Plugin.Debug("Join request snapshot decode failed: " + ex.Message); live.joinRequestEntries.Clear(); } if (live.windowOpen && live.page == PartyPage.Hall) { live.BuildWindow(); } } } internal static void ShowNotice(string message) { if ((Object)(object)MessageHud.instance != (Object)null) { MessageHud.instance.ShowMessage((MessageType)2, message, 0, (Sprite)null, false, true); } } internal static void ReceiveInvite(string partyId, string inviterName, string partyName) { PendingInviteId = partyId; pendingInviterName = inviterName; pendingInviteName = partyName; } internal static void ReceiveJoinRequest(string playerName, string partyName) { ShowNotice("[Join Request] " + playerName + " wants to join " + partyName + "."); } private static void joinRequestEntriesStaticClear() { if ((Object)(object)live != (Object)null) { live.joinRequestEntries.Clear(); } } private void Awake() { live = this; } private void Update() { //IL_008e: Unknown result type (might be due to invalid IL or missing references) if (initialized && ((Object)(object)uiRoot == (Object)null || (Object)(object)Hud.instance == (Object)null)) { ResetUiReferences(); } if (!initialized) { TryInitialize(); return; } EnsureInitialPlacement(); RecoverAfterResolutionChange(); MaintainModalInput(); if (windowOpen && page == PartyPage.Browser && Time.time >= nextBrowserRefresh) { nextBrowserRefresh = Time.time + 6f; PartyRpc.Client("FP_RequestBrowser"); } if (Input.GetKeyDown(Plugin.Settings.ParsedPartyHotkey) && !InputBlocked()) { SetWindow(!windowOpen); } if ((Object)(object)hud != (Object)null) { hud.SetActive(Plugin.Settings.HudEnabled.Value && snapshot != null && !windowOpen); } if (snapshot != null) { RefreshHud(); } if (!string.IsNullOrEmpty(PendingInviteId) && (Object)(object)invite != (Object)null && !invite.activeSelf) { ShowInvite(); } } private void TryInitialize() { //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: 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_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)Hud.instance == (Object)null) && !((Object)(object)Minimap.instance == (Object)null) && !((Object)(object)Minimap.instance.m_mapImageSmall == (Object)null) && !((Object)(object)InventoryGui.instance == (Object)null) && !((Object)(object)TextInput.instance == (Object)null) && !((Object)(object)EventSystem.current == (Object)null) && TryGetMinimapBounds(out var _)) { CaptureNativeTemplates(); if (!((Object)(object)font == (Object)null) && !((Object)(object)nativeButtonTemplate == (Object)null) && !((Object)(object)nativeInputTemplate == (Object)null) && !((Object)(object)nativeWindowImage == (Object)null)) { uiRoot = new GameObject("FehuParty Native UI", new Type[4] { typeof(RectTransform), typeof(Canvas), typeof(CanvasScaler), typeof(GraphicRaycaster) }); uiRoot.transform.SetParent(((Component)Hud.instance).transform, false); uiRootRect = uiRoot.GetComponent<RectTransform>(); Canvas component = uiRoot.GetComponent<Canvas>(); component.renderMode = (RenderMode)0; component.overrideSorting = true; component.sortingOrder = 10000; CanvasScaler component2 = uiRoot.GetComponent<CanvasScaler>(); component2.uiScaleMode = (ScaleMode)0; component2.scaleFactor = 1f; blocker = ((Component)MakeImage(uiRoot.transform, "PartyModalBlocker", Vector2.zero, Vector2.zero, new Color(0f, 0f, 0f, 0.01f), nativeInnerStyle: false)).gameObject; RectTransform obj = Rect(blocker); obj.anchorMin = Vector2.zero; obj.anchorMax = Vector2.one; obj.offsetMin = Vector2.zero; obj.offsetMax = Vector2.zero; ((Graphic)blocker.GetComponent<Image>()).raycastTarget = true; blocker.SetActive(false); launcher = ((Component)NativeButton(uiRoot.transform, "PARTY", Vector2.zero, new Vector2(87f, 27f))).gameObject; ((Object)launcher).name = "FehuParty PARTY Button"; launcher.AddComponent<CtrlDragGate>().Configure(5f, ToggleFromLauncher, BeginLauncherDrag, DragLauncher, EndLauncherDrag); hud = Panel("FehuParty Compact HUD", uiRoot.transform, new Vector2(286f, 82f), topLeft: false); hud.AddComponent<CtrlDragGate>().Configure(5f, null, BeginHudDrag, DragHud, EndHudDrag); window = Panel("FehuParty Hall", uiRoot.transform, new Vector2(820f, 540f), topLeft: false); window.SetActive(false); invite = Panel("FehuParty Invitation", uiRoot.transform, new Vector2(430f, 190f), topLeft: false); invite.SetActive(false); initialized = true; lastScreenWidth = Screen.width; lastScreenHeight = Screen.height; EnsureInitialPlacement(); Plugin.Info("[UI] Native templates resolved: window=" + HierarchyPath(((Component)nativeWindowImage).transform) + "; button=" + HierarchyPath(((Component)nativeButtonTemplate).transform) + "; input=" + HierarchyPath(((Component)nativeInputTemplate).transform) + "; minimap=Minimap.m_mapImageSmall."); } } } private void CaptureNativeTemplates() { //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) nativeButtonTemplate = InventoryGui.instance.m_takeAllButton ?? InventoryGui.instance.m_craftButton ?? InventoryGui.instance.m_dropButton; nativeInputTemplate = (TMP_InputField?)(object)TextInput.instance.m_inputField; Transform inventoryRoot = InventoryGui.instance.m_inventoryRoot; nativeWindowImage = LargestImage(((Object)(object)inventoryRoot == (Object)null) ? null : ((Component)inventoryRoot).gameObject); nativeInnerImage = LargestImage(TextInput.instance.m_panel) ?? nativeWindowImage; TMP_Text val = InventoryGui.instance.m_craftingStationName; if (val == null) { val = (((Object)(object)nativeButtonTemplate == (Object)null) ? null : ((Component)nativeButtonTemplate).GetComponentInChildren<TMP_Text>(true)); } TMP_Text val2 = InventoryGui.instance.m_recipeDecription; if (val2 == null) { val2 = InventoryGui.instance.m_weight; } if (val2 == null) { val2 = (((Object)(object)inventoryRoot == (Object)null) ? null : ((IEnumerable<TMP_Text>)((Component)inventoryRoot).GetComponentsInChildren<TMP_Text>(true)).FirstOrDefault((Func<TMP_Text, bool>)((TMP_Text candidate) => (Object)(object)((Component)candidate).GetComponentInParent<Button>() == (Object)null))); } headingFont = ((val != null) ? val.font : null); headingFontMaterial = ((val != null) ? val.fontSharedMaterial : null); headingTextColor = (Color)((val != null) ? ((Graphic)val).color : new Color(0.95f, 0.72f, 0.25f)); font = ((val2 != null) ? val2.font : null) ?? headingFont; fontMaterial = ((val2 != null) ? val2.fontSharedMaterial : null) ?? headingFontMaterial; bodyTextColor = ((val2 != null) ? ((Graphic)val2).color : Color.white); } private static Image? LargestImage(GameObject? root) { if ((Object)(object)root == (Object)null) { return null; } return (from image in root.GetComponentsInChildren<Image>(true) where (Object)(object)image.sprite != (Object)null && (Object)(object)((Component)image).GetComponentInParent<Button>() == (Object)null select image).OrderByDescending(delegate(Image image) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0019: 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) Rect rect = ((Graphic)image).rectTransform.rect; float width = ((Rect)(ref rect)).width; rect = ((Graphic)image).rectTransform.rect; return Mathf.Abs(width * ((Rect)(ref rect)).height); }).FirstOrDefault(); } private void EnsureInitialPlacement() { //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: 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_012c: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)launcher == (Object)null || (Object)(object)hud == (Object)null || !TryGetMinimapBounds(out var bounds)) { return; } if (!launcherPlaced) { RectTransform val = Rect(launcher); ? val2; if (!Plugin.Settings.PartyButtonPositionSaved.Value) { float xMin = ((Rect)(ref bounds)).xMin; Rect rect = val.rect; float num = xMin + ((Rect)(ref rect)).width * 0.5f; float num2 = ((Rect)(ref bounds)).yMax + 1f; rect = val.rect; val2 = new Vector2(num, num2 + ((Rect)(ref rect)).height * 0.5f); } else { val2 = SavedScreenPoint(Plugin.Settings.PartyButtonNormalizedX.Value, Plugin.Settings.PartyButtonNormalizedY.Value); } Vector2 screenPoint = (Vector2)val2; SetScreenCenter(val, screenPoint); ClampToScreen(val); launcherPlaced = true; } if (!hudPlaced) { RectTransform target = Rect(hud); Vector2 screenPoint2 = (Plugin.Settings.HudPositionSaved.Value ? SavedScreenPoint(Plugin.Settings.HudNormalizedX.Value, Plugin.Settings.HudNormalizedY.Value) : SavedScreenPoint(1f, 0.16f)); SetScreenCenter(target, screenPoint2); ClampToScreen(target); hudPlaced = true; } } private static Vector2 SavedScreenPoint(float normalizedX, float normalizedY) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) return new Vector2(Mathf.Clamp01(normalizedX) * (float)Screen.width, Mathf.Clamp01(normalizedY) * (float)Screen.height); } private static bool TryGetMinimapBounds(out Rect bounds) { //IL_0001: 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_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: 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_00b5: 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_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) bounds = default(Rect); Minimap instance = Minimap.instance; object obj; if (instance == null) { obj = null; } else { RawImage mapImageSmall = instance.m_mapImageSmall; obj = ((mapImageSmall != null) ? ((Graphic)mapImageSmall).rectTransform : null); } RectTransform val = (RectTransform)obj; if ((Object)(object)val == (Object)null || !((Component)val).gameObject.activeInHierarchy) { return false; } Vector3[] array = (Vector3[])(object)new Vector3[4]; val.GetWorldCorners(array); Canvas componentInParent = ((Component)val).GetComponentInParent<Canvas>(); Camera obj2 = (((Object)(object)componentInParent != (Object)null && (int)componentInParent.renderMode != 0) ? componentInParent.worldCamera : null); Vector2 val2 = RectTransformUtility.WorldToScreenPoint(obj2, array[0]); Vector2 val3 = RectTransformUtility.WorldToScreenPoint(obj2, array[2]); if (val3.x <= val2.x || val3.y <= val2.y) { return false; } bounds = Rect.MinMaxRect(val2.x, val2.y, val3.x, val3.y); return true; } private void SetScreenCenter(RectTransform target, Vector2 screenPoint) { //IL_0022: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)uiRootRect == (Object)null)) { Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0.5f, 0.5f); target.anchorMax = val; target.anchorMin = val; target.pivot = new Vector2(0.5f, 0.5f); Vector2 anchoredPosition = default(Vector2); if (RectTransformUtility.ScreenPointToLocalPointInRectangle(uiRootRect, screenPoint, (Camera)null, ref anchoredPosition)) { target.anchoredPosition = anchoredPosition; } } } private static Vector2 GetScreenCenter(RectTransform target) { //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) return RectTransformUtility.WorldToScreenPoint((Camera)null, ((Transform)target).position); } private void ClampToScreen(RectTransform target) { //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_0008: 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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0099: Unknown result type (might be due to invalid IL or missing references) Vector2 screenCenter = GetScreenCenter(target); Rect rect = target.rect; float num = ((Rect)(ref rect)).width * 0.5f; rect = target.rect; float num2 = ((Rect)(ref rect)).height * 0.5f; screenCenter.x = Mathf.Clamp(screenCenter.x, num + 6f, Mathf.Max(num + 6f, (float)Screen.width - num - 6f)); screenCenter.y = Mathf.Clamp(screenCenter.y, num2 + 6f, Mathf.Max(num2 + 6f, (float)Screen.height - num2 - 6f)); SetScreenCenter(target, screenCenter); } private void RecoverAfterResolutionChange() { if (lastScreenWidth != Screen.width || lastScreenHeight != Screen.height) { lastScreenWidth = Screen.width; lastScreenHeight = Screen.height; launcherPlaced = false; hudPlaced = false; EnsureInitialPlacement(); if ((Object)(object)launcher != (Object)null) { ClampToScreen(Rect(launcher)); } if ((Object)(object)hud != (Object)null) { ClampToScreen(Rect(hud)); } } } private void ToggleFromLauncher() { if (!InputBlocked()) { SetWindow(!windowOpen); } } private void BeginLauncherDrag(Vector2 pointer) { //IL_0010: 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_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)launcher == (Object)null)) { launcherDragPointerStart = pointer; launcherDragScreenStart = GetScreenCenter(Rect(launcher)); } } private void DragLauncher(Vector2 pointer) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_002d: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)launcher == (Object)null)) { SetScreenCenter(Rect(launcher), launcherDragScreenStart + pointer - launcherDragPointerStart); ClampToScreen(Rect(launcher)); } } private void EndLauncherDrag() { if (!((Object)(object)launcher == (Object)null)) { ClampToScreen(Rect(launcher)); SavePosition(Rect(launcher), Plugin.Settings.PartyButtonNormalizedX, Plugin.Settings.PartyButtonNormalizedY); Plugin.Settings.PartyButtonPositionSaved.Value = true; Plugin.Settings.PartyButtonAttachedToMinimap.Value = false; } } private void BeginHudDrag(Vector2 pointer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)hud == (Object)null) && !windowOpen) { hudDragPointerStart = pointer; hudDragScreenStart = GetScreenCenter(Rect(hud)); } } private void DragHud(Vector2 pointer) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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) if (!((Object)(object)hud == (Object)null) && !windowOpen) { SetScreenCenter(Rect(hud), hudDragScreenStart + pointer - hudDragPointerStart); ClampToScreen(Rect(hud)); } } private void EndHudDrag() { if (!((Object)(object)hud == (Object)null) && !windowOpen) { ClampToScreen(Rect(hud)); SavePosition(Rect(hud), Plugin.Settings.HudNormalizedX, Plugin.Settings.HudNormalizedY); Plugin.Settings.HudPositionSaved.Value = true; } } private static void SavePosition(RectTransform target, ConfigEntry<float> x, ConfigEntry<float> y) { //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_0017: 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) Vector2 screenCenter = GetScreenCenter(target); x.Value = ((Screen.width > 0) ? (screenCenter.x / (float)Screen.width) : 0.5f); y.Value = ((Screen.height > 0) ? (screenCenter.y / (float)Screen.height) : 0.5f); } private static bool InputBlocked() { if ((Object)(object)Chat.instance != (Object)null && (Chat.instance.HasFocus() || Chat.instance.IsChatDialogWindowVisible())) { return true; } if ((Object)(object)TextInput.instance != (Object)null && TextInput.IsVisible()) { return true; } if ((Object)(object)Console.instance != (Object)null && Console.IsVisible()) { return true; } if ((Object)(object)Minimap.instance != (Object)null && Minimap.InTextInput()) { return true; } EventSystem current = EventSystem.current; GameObject val = ((current != null) ? current.currentSelectedGameObject : null); if ((Object)(object)val == (Object)null) { return false; } TMP_InputField componentInParent = val.GetComponentInParent<TMP_InputField>(); if ((Object)(object)componentInParent != (Object)null && (componentInParent.isFocused || (Object)(object)((Component)componentInParent).gameObject == (Object)(object)val || val.transform.IsChildOf(((Component)componentInParent).transform))) { return true; } InputField componentInParent2 = val.GetComponentInParent<InputField>(); if ((Object)(object)componentInParent2 != (Object)null) { if (!componentInParent2.isFocused && !((Object)(object)((Component)componentInParent2).gameObject == (Object)(object)val)) { return val.transform.IsChildOf(((Component)componentInParent2).transform); } return true; } return false; } private void RefreshHud() { //IL_00c1: 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_013a: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)hud == (Object)null || snapshot == null) { return; } string text = snapshot.Name + "|" + string.Join("|", snapshot.Members.Select((PartySnapshot.MemberState member) => member.Id + ":" + member.Name + ":" + member.Hp + ":" + member.MaxHp + ":" + member.Distance + ":" + member.Online)); if (text == lastHudContent) { return; } lastHudContent = text; Clear(hud); float num = Mathf.Clamp(44f + (float)snapshot.Members.Count * 42f, 82f, 420f); Rect(hud).sizeDelta = new Vector2(286f, num); Text(hud.transform, "PARTY " + snapshot.Name + " [" + snapshot.Members.Count + "]", new Vector2(12f, -9f), new Vector2(262f, 24f), 15f, gold: true, (TextAlignmentOptions)257); float num2 = -39f; foreach (PartySnapshot.MemberState member in snapshot.Members) { string text2 = ((member.Id == snapshot.Leader) ? "◆ " : string.Empty) + member.Name; if (Plugin.Settings.ShowClanTag.Value && !string.IsNullOrEmpty(member.ClanTag)) { text2 = text2 + " [" + member.ClanTag + "]"; } Text(hud.transform, text2, new Vector2(12f, num2), new Vector2(174f, 20f), 13f, gold: false, (TextAlignmentOptions)257); if (Plugin.Settings.ShowHp.Value) { MakeImage(hud.transform, "HP Back", new Vector2(168f, 7f), new Vector2(12f, num2 - 22f), new Color(0.05f, 0.035f, 0.02f, 0.95f), nativeInnerStyle: false); MakeImage(hud.transform, "HP", new Vector2(168f * Mathf.Clamp01((member.MaxHp > 0f) ? (member.Hp / member.MaxHp) : 0f), 7f), new Vector2(12f, num2 - 22f), new Color(0.55f, 0.12f, 0.1f, 1f), nativeInnerStyle: false); } if (Plugin.Settings.ShowDistance.Value) { Text(hud.transform, member.Online ? (Mathf.RoundToInt(member.Distance) + " m") : "OFFLINE", new Vector2(194f, num2), new Vector2(78f, 22f), 11f, gold: false, (TextAlignmentOptions)260); } num2 -= 42f; } ClampToScreen(Rect(hud)); } private void ResetPartyButtonPosition() { Plugin.Settings.PartyButtonPositionSaved.Value = false; Plugin.Settings.PartyButtonAttachedToMinimap.Value = true; launcherPlaced = false; EnsureInitialPlacement(); } private void ResetCompactHudPosition() { Plugin.Settings.HudPositionSaved.Value = false; hudPlaced = false; EnsureInitialPlacement(); } private void ResetPartyUiPositions() { ResetPartyButtonPosition(); ResetCompactHudPosition(); ShowNotice("Party controls reset around the minimap."); } private void MaintainModalInput() { if (windowOpen) { Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; if ((Object)(object)suspendedGameCamera != (Object)null) { ((Behaviour)suspendedGameCamera).enabled = false; } } } private void SetWindow(bool value) { //IL_00f8: 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_0089: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)window == (Object)null || value == windowOpen) { return; } windowOpen = value; window.SetActive(value); if ((Object)(object)blocker != (Object)null) { blocker.SetActive(value); } if (value) { page = PartyPage.Hall; GameObject? obj = blocker; if (obj != null) { obj.transform.SetAsLastSibling(); } window.transform.SetAsLastSibling(); previousCursorVisible = Cursor.visible; previousCursorLock = Cursor.lockState; suspendedGameCamera = GameCamera.instance; if ((Object)(object)suspendedGameCamera != (Object)null) { previousGameCameraEnabled = ((Behaviour)suspendedGameCamera).enabled; ((Behaviour)suspendedGameCamera).enabled = false; } MaintainModalInput(); BuildWindow(); } else { if ((Object)(object)suspendedGameCamera != (Object)null) { ((Behaviour)suspendedGameCamera).enabled = previousGameCameraEnabled; } suspendedGameCamera = null; Cursor.lockState = previousCursorLock; Cursor.visible = previousCursorVisible; EventSystem current = EventSystem.current; if (current != null) { current.SetSelectedGameObject((GameObject)null); } } } private void OnDisable() { if (windowOpen) { SetWindow(value: false); } } private void ResetUiReferences() { if (windowOpen && (Object)(object)suspendedGameCamera != (Object)null) { ((Behaviour)suspendedGameCamera).enabled = previousGameCameraEnabled; } initialized = false; windowOpen = false; uiRoot = null; uiRootRect = null; hud = null; window = null; invite = null; launcher = null; blocker = null; nameInput = null; launcherPlaced = false; hudPlaced = false; } private void BuildWindow() { //IL_0043: 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_0057: 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_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Expected O, but got Unknown //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_021a: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)window == (Object)null) { return; } Clear(window); nameInput = null; browserSearchInput = null; ((Graphic)MakeImage(window.transform, "Party Hall Header Panel", new Vector2(780f, 54f), new Vector2(20f, -16f), Color.white, nativeInnerStyle: true)).color = PartyPanelTint; Text(window.transform, "PARTY HALL", new Vector2(38f, -27f), new Vector2(300f, 32f), 25f, gold: true, (TextAlignmentOptions)257); Text(window.transform, "Fear not — the Black Viking spirit stands by your party’s side.", new Vector2(40f, -55f), new Vector2(510f, 20f), 11f, gold: false, (TextAlignmentOptions)257); ((UnityEvent)NativeButton(window.transform, "RESET BUTTON", new Vector2(570f, -27f), new Vector2(116f, 30f)).onClick).AddListener(new UnityAction(ResetPartyUiPositions)); ((UnityEvent)NativeButton(window.transform, "CLOSE", new Vector2(698f, -27f), new Vector2(94f, 30f)).onClick).AddListener((UnityAction)delegate { SetWindow(value: false); }); MakeImage(window.transform, "Separator", new Vector2(780f, 2f), new Vector2(20f, -82f), new Color(0.75f, 0.5f, 0.16f, 0.85f), nativeInnerStyle: false); if (page == PartyPage.Browser) { BuildBrowserWindow(); return; } if (page == PartyPage.InvitePlayers) { BuildInvitePlayersWindow(); return; } if (page == PartyPage.MemberActions) { BuildMemberActionsWindow(); return; } GameObject val = Panel("Party Hall Main Panel", window.transform, new Vector2(474f, 400f), topLeft: true); Rect(val).anchoredPosition = new Vector2(28f, -105f); GameObject val2 = Panel("Party Hall Guide Panel", window.transform, new Vector2(254f, 400f), topLeft: true); Rect(val2).anchoredPosition = new Vector2(538f, -105f); if (snapshot == null) { BuildNoPartyWindow(val.transform, val2.transform); } else { BuildActivePartyWindow(val.transform, val2.transform); } } private void BuildNoPartyWindow(Transform left, Transform right) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0047: 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_007d: 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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Expected O, but got Unknown //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Expected O, but got Unknown //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02a4: Unknown result type (might be due to invalid IL or missing references) Text(left, "FORM A PARTY", new Vector2(24f, -24f), new Vector2(426f, 30f), 21f, gold: true, (TextAlignmentOptions)257); Text(left, "Find an existing company or form your own.", new Vector2(24f, -61f), new Vector2(426f, 28f), 14f, gold: false, (TextAlignmentOptions)257); Text(left, "PARTY NAME", new Vector2(24f, -101f), new Vector2(426f, 22f), 13f, gold: true, (TextAlignmentOptions)257); nameInput = NativeInput(left, new Vector2(24f, -128f), new Vector2(426f, 38f)); nameInput.text = draftPartyName; ((UnityEvent<string>)(object)nameInput.onValueChanged).AddListener((UnityAction<string>)delegate(string value) { draftPartyName = value; }); Text(left, "JOIN MODE", new Vector2(24f, -180f), new Vector2(426f, 22f), 13f, gold: true, (TextAlignmentOptions)257); JoinModeButtons(left, createJoinMode, -207f, delegate(PartyVisibility mode) { TMP_InputField? obj = nameInput; draftPartyName = ((obj != null) ? obj.text : null) ?? draftPartyName; createJoinMode = mode; BuildWindow(); }); ((UnityEvent)NativeButton(left, "CREATE PARTY", new Vector2(24f, -255f), new Vector2(426f, 40f)).onClick).AddListener((UnityAction)delegate { string text = (((Object)(object)nameInput == (Object)null) ? string.Empty : nameInput.text.Trim()); if (string.IsNullOrEmpty(text)) { ShowNotice("Enter a party name first."); } else if (!PartyRpc.Client("FP_CreateParty", text, (int)createJoinMode)) { ShowNotice("Party network is not ready yet."); } }); ((UnityEvent)NativeButton(left, "BROWSE PARTIES", new Vector2(24f, -307f), new Vector2(426f, 38f)).onClick).AddListener(new UnityAction(OpenBrowser)); Text(left, "Ctrl + drag the PARTY button or compact HUD to move it.", new Vector2(24f, -357f), new Vector2(426f, 28f), 12f, gold: false, (TextAlignmentOptions)257); Text(right, "JOIN MODES", new Vector2(22f, -24f), new Vector2(210f, 28f), 18f, gold: true, (TextAlignmentOptions)257); Text(right, "PUBLIC\nJoin immediately from Browse.\n\nREQUEST TO JOIN\nLeader accepts or declines.\n\nINVITE ONLY\nOnly a direct invitation can add you.", new Vector2(22f, -66f), new Vector2(210f, 270f), 13f, gold: false, (TextAlignmentOptions)257); Text(right, "Hotkey: " + Plugin.Settings.PartyWindowHotkey.Value, new Vector2(22f, -350f), new Vector2(210f, 24f), 12f, gold: true, (TextAlignmentOptions)257); } private void BuildActivePartyWindow(Transform left, Transform right) { //IL_004a: 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_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0130: 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_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Unknown result type (might be due to invalid IL or missing references) //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Expected O, but got Unknown //IL_02f7: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Expected O, but got Unknown //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_031b: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03e2: Expected O, but got Unknown //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_0352: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Expected O, but got Unknown //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_0402: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_047c: Unknown result type (might be due to invalid IL or missing references) //IL_04a3: Unknown result type (might be due to invalid IL or missing references) //IL_04b2: Unknown result type (might be due to invalid IL or missing references) //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04eb: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Unknown result type (might be due to invalid IL or missing references) //IL_052f: Unknown result type (might be due to invalid IL or missing references) //IL_0585: Unknown result type (might be due to invalid IL or missing references) //IL_0594: Unknown result type (might be due to invalid IL or missing references) //IL_05c6: Unknown result type (might be due to invalid IL or missing references) //IL_05d5: Unknown result type (might be due to invalid IL or missing references) //IL_05ec: Unknown result type (might be due to invalid IL or missing references) //IL_05f6: Expected O, but got Unknown //IL_0604: Unknown result type (might be due to invalid IL or missing references) //IL_0613: Unknown result type (might be due to invalid IL or missing references) //IL_062a: Unknown result type (might be due to invalid IL or missing references) //IL_0634: Expected O, but got Unknown if (snapshot == null) { return; } Player localPlayer = Player.m_localPlayer; long num = ((localPlayer != null) ? localPlayer.GetPlayerID() : 0); bool flag = num != 0L && snapshot.Leader == num; Text(left, snapshot.Name.ToUpperInvariant(), new Vector2(24f, -24f), new Vector2(426f, 30f), 22f, gold: true, (TextAlignmentOptions)257); Text(left, "Leader ID: " + snapshot.Leader + " • Members: " + snapshot.Members.Count, new Vector2(24f, -61f), new Vector2(426f, 25f), 14f, gold: false, (TextAlignmentOptions)257); Text(left, "JOIN MODE: " + PartyManager.JoinModeLabel(snapshot.Visibility), new Vector2(24f, -88f), new Vector2(426f, 22f), 13f, gold: true, (TextAlignmentOptions)257); MakeImage(left, "Separator", new Vector2(426f, 2f), new Vector2(24f, -116f), new Color(0.75f, 0.5f, 0.16f, 0.75f), nativeInnerStyle: false); Text(left, "COMPANIONS — CLICK FOR ACTIONS", new Vector2(24f, -130f), new Vector2(426f, 22f), 13f, gold: true, (TextAlignmentOptions)257); float num2 = -159f; foreach (PartySnapshot.MemberState item in snapshot.Members.Take(4)) { string text = ((item.Id == snapshot.Leader) ? "LEADER " : "MEMBER ") + item.Name; if (!string.IsNullOrEmpty(item.ClanTag)) { text = text + " [" + item.ClanTag + "]"; } if (!item.Online) { text += " • OFFLINE"; } Button obj = NativeButton(left, text, new Vector2(24f, num2), new Vector2(426f, 36f)); long memberId = item.Id; ((UnityEvent)obj.onClick).AddListener((UnityAction)delegate { selectedMemberId = memberId; page = PartyPage.MemberActions; BuildWindow(); }); num2 -= 42f; } ButtonClickedEvent onClick = NativeButton(left, "LEAVE PARTY", new Vector2(24f, -346f), new Vector2(flag ? 204f : 426f, 38f)).onClick; object obj2 = <>c.<>9__97_0; if (obj2 == null) { UnityAction val = delegate { PartyRpc.Client("FP_Leave"); }; <>c.<>9__97_0 = val; obj2 = (object)val; } ((UnityEvent)onClick).AddListener((UnityAction)obj2); if (flag) { ButtonClickedEvent onClick2 = NativeButton(left, "DISBAND", new Vector2(246f, -346f), new Vector2(204f, 38f)).onClick; object obj3 = <>c.<>9__97_3; if (obj3 == null) { UnityAction val2 = delegate { PartyRpc.Client("FP_Disband"); }; <>c.<>9__97_3 = val2; obj3 = (object)val2; } ((UnityEvent)onClick2).AddListener((UnityAction)obj3); } Text(right, "PARTY CONTROLS", new Vector2(18f, -20f), new Vector2(218f, 26f), 17f, gold: true, (TextAlignmentOptions)257); if (flag || snapshot.MembersCanInvite) { ((UnityEvent)NativeButton(right, "INVITE PLAYER", new Vector2(18f, -53f), new Vector2(218f, 34f)).onClick).AddListener(new UnityAction(OpenInvitePlayers)); } Text(right, "JOIN MODE", new Vector2(18f, -103f), new Vector2(218f, 22f), 13f, gold: true, (TextAlignmentOptions)257); if (flag) { JoinModeButtons(right, snapshot.Visibility, -130f, delegate(PartyVisibility mode) { PartyRpc.Client("FP_SetJoinMode", (int)mode); }); } else { Text(right, PartyManager.JoinModeLabel(snapshot.Visibility), new Vector2(18f, -132f), new Vector2(218f, 24f), 13f, gold: false, (TextAlignmentOptions)257); } Text(right, "JOIN REQUESTS", new Vector2(18f, -181f), new Vector2(218f, 22f), 13f, gold: true, (TextAlignmentOptions)257); if (!flag) { Text(right, "Leader approval only.", new Vector2(18f, -210f), new Vector2(218f, 24f), 12f, gold: false, (TextAlignmentOptions)257); return; } if (joinRequestEntries.Count == 0) { Text(right, "No pending requests.", new Vector2(18f, -210f), new Vector2(218f, 24f), 12f, gold: false, (TextAlignmentOptions)257); return; } float num3 = -209f; foreach (JoinRequestEntry item2 in joinRequestEntries.Take(2)) { Text(right, item2.PlayerName, new Vector2(18f, num3), new Vector2(108f, 25f), 12f, gold: false, (TextAlignmentOptions)257); long requester = item2.PlayerId; ((UnityEvent)NativeButton(right, "ACCEPT", new Vector2(126f, num3), new Vector2(54f, 28f)).onClick).AddListener((UnityAction)delegate { PartyRpc.Client("FP_JoinRequestResponse", requester, true); }); ((UnityEvent)NativeButton(right, "X", new Vector2(184f, num3), new Vector2(40f, 28f)).onClick).AddListener((UnityAction)delegate { PartyRpc.Client("FP_JoinRequestResponse", requester, false); }); num3 -= 36f; } } private void OpenBrowser() { page = PartyPage.Browser; browserEntries.Clear(); browserPageIndex = 0; nextBrowserRefresh = Time.time + 6f; BuildWindow(); if (!PartyRpc.Client("FP_RequestBrowser")) { ShowNotice("Party network is not ready yet."); } } private void BuildBrowserWindow() { //IL_002a: 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_0066: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Unknown result type (might be due to invalid IL or missing references) //IL_04aa: Unknown result type (might be due to invalid IL or missing references) //IL_04cf: Unknown result type (might be due to invalid IL or missing references) //IL_04d9: Expected O, but got Unknown //IL_050c: Unknown result type (might be due to invalid IL or missing references) //IL_051b: Unknown result type (might be due to invalid IL or missing references) //IL_0547: Unknown result type (might be due to invalid IL or missing references) //IL_0556: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Unknown result type (might be due to invalid IL or missing references) //IL_0587: Expected O, but got Unknown //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_0459: Unknown result type (might be due to invalid IL or missing references) //IL_0463: Expected O, but got Unknown if ((Object)(object)window == (Object)null) { return; } GameObject val = Panel("Party Browser Panel", window.transform, new Vector2(764f, 400f), topLeft: true); Rect(val).anchoredPosition = new Vector2(28f, -105f); Text(val.transform, "BROWSE PARTIES", new Vector2(20f, -20f), new Vector2(300f, 28f), 20f, gold: true, (TextAlignmentOptions)257); ((UnityEvent)NativeButton(val.transform, "BACK", new Vector2(620f, -18f), new Vector2(120f, 32f)).onClick).AddListener((UnityAction)delegate { page = PartyPage.Hall; BuildWindow(); }); browserSearchInput = NativeInput(val.transform, new Vector2(20f, -58f), new Vector2(480f, 34f)); browserSearchInput.text = browserSearch; Graphic placeholder = browserSearchInput.placeholder; TMP_Text val2 = (TMP_Text)(object)((placeholder is TMP_Text) ? placeholder : null); if (val2 != null) { val2.text = "Search party or leader"; } ((UnityEvent<string>)(object)browserSearchInput.onValueChanged).AddListener((UnityAction<string>)delegate(string value) { browserSearch = value; }); ((UnityEvent<string>)(object)browserSearchInput.onEndEdit).AddListener((UnityAction<string>)delegate { browserPageIndex = 0; BuildWindow(); }); ButtonClickedEvent onClick = NativeButton(val.transform, "REFRESH", new Vector2(516f, -58f), new Vector2(224f, 34f)).onClick; object obj = <>c.<>9__99_3; if (obj == null) { UnityAction val3 = delegate { PartyRpc.Client("FP_RequestBrowser"); }; <>c.<>9__99_3 = val3; obj = (object)val3; } ((UnityEvent)onClick).AddListener((UnityAction)obj); BrowserPartyEntry[] array = browserEntries.Where((BrowserPartyEntry entry) => string.IsNullOrWhiteSpace(browserSearch) || entry.Name.IndexOf(browserSearch, StringComparison.OrdinalIgnoreCase) >= 0 || entry.LeaderName.IndexOf(browserSearch, StringComparison.OrdinalIgnoreCase) >= 0).ToArray(); int num = Mathf.Max(1, Mathf.CeilToInt((float)array.Length / 4f)); browserPageIndex = Mathf.Clamp(browserPageIndex, 0, num - 1); BrowserPartyEntry[] array2 = array.Skip(browserPageIndex * 4).Take(4).ToArray(); if (array.Length == 0) { Text(val.transform, (browserEntries.Count == 0) ? "No parties available." : "No parties match your search.", new Vector2(20f, -116f), new Vector2(720f, 30f), 14f, gold: false, (TextAlignmentOptions)257); } float num2 = -106f; BrowserPartyEntry[] array3 = array2; foreach (BrowserPartyEntry browserPartyEntry in array3) { Image val4 = MakeImage(val.transform, "Party Browser Row", new Vector2(720f, 50f), new Vector2(20f, num2), Color.white, nativeInnerStyle: true); ((Graphic)val4).color = PartyPanelTint; Text(((Component)val4).transform, browserPartyEntry.Name, new Vector2(12f, -7f), new Vector2(255f, 21f), 14f, gold: true, (TextAlignmentOptions)257); Text(((Component)val4).transform, "Leader: " + browserPartyEntry.LeaderName + " Members: " + browserPartyEntry.Members + " " + PartyManager.JoinModeLabel(browserPartyEntry.Visibility), new Vector2(12f, -28f), new Vector2(560f, 18f), 11f, gold: false, (TextAlignmentOptions)257); if (browserPartyEntry.Visibility == PartyVisibility.InviteOnly) { Text(((Component)val4).transform, "INVITE ONLY", new Vector2(586f, -15f), new Vector2(122f, 22f), 12f, gold: true, (TextAlignmentOptions)260); } else { string label = ((browserPartyEntry.Visibility == PartyVisibility.Public) ? "JOIN" : "REQUEST TO JOIN"); Button obj2 = NativeButton(((Component)val4).transform, label, new Vector2(584f, -9f), new Vector2(124f, 32f)); string partyId = browserPartyEntry.PartyId; string rpc = ((browserPartyEntry.Visibility == PartyVisibility.Public) ? "FP_Join" : "FP_RequestJoin"); ((UnityEvent)obj2.onClick).AddListener((UnityAction)delegate { PartyRpc.Client(rpc, partyId); }); } num2 -= 56f; } if (num > 1) { Button obj3 = NativeButton(val.transform, "PREV", new Vector2(240f, -354f), new Vector2(100f, 30f)); ((Selectable)obj3).interactable = browserPageIndex > 0; ((UnityEvent)obj3.onClick).AddListener((UnityAction)delegate { browserPageIndex--; BuildWindow(); }); Text(val.transform, browserPageIndex + 1 + " / " + num, new Vector2(350f, -358f), new Vector2(64f, 22f), 12f, gold: true, (TextAlignmentOptions)258); Button obj4 = NativeButton(val.transform, "NEXT", new Vector2(424f, -354f), new Vector2(100f, 30f)); ((Selectable)obj4).interactable = browserPageIndex + 1 < num; ((UnityEvent)obj4.onClick).AddListener((UnityAction)delegate { browserPageIndex++; BuildWindow(); }); } } private void OpenInvitePlayers() { page = PartyPage.InvitePlayers; onlinePlayers.Clear(); invitePageIndex = 0; BuildWindow(); if (!PartyRpc.Client("FP_RequestOnlinePlayers")) { ShowNotice("Party network is not ready yet."); } } private void BuildInvitePlayersWindow() { //IL_002a: 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_0066: 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_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_0210: 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) //IL_0266: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Expected O, but got Unknown //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Expected O, but got Unknown //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03fe: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Expected O, but got Unknown if ((Object)(object)window == (Object)null) { return; } GameObject val = Panel("Online Players Panel", window.transform, new Vector2(764f, 400f), topLeft: true); Rect(val).anchoredPosition = new Vector2(28f, -105f); Text(val.transform, "ONLINE PLAYERS", new Vector2(20f, -20f), new Vector2(320f, 28f), 20f, gold: true, (TextAlignmentOptions)257); ((UnityEvent)NativeButton(val.transform, "BACK", new Vector2(620f, -18f), new Vector2(120f, 32f)).onClick).AddListener((UnityAction)delegate { page = PartyPage.Hall; BuildWindow(); }); if (onlinePlayers.Count == 0) { Text(val.transform, "No eligible online players found.", new Vector2(20f, -72f), new Vector2(720f, 30f), 14f, gold: false, (TextAlignmentOptions)257); } int num = Mathf.Max(1, Mathf.CeilToInt((float)onlinePlayers.Count / 6f)); invitePageIndex = Mathf.Clamp(invitePageIndex, 0, num - 1); float num2 = -64f; foreach (OnlinePlayerEntry item in onlinePlayers.Skip(invitePageIndex * 6).Take(6)) { Image val2 = MakeImage(val.transform, "Online Player Row", new Vector2(720f, 40f), new Vector2(20f, num2), Color.white, nativeInnerStyle: true); ((Graphic)val2).color = PartyPanelTint; string text = (string.IsNullOrEmpty(item.ClanTag) ? string.Empty : (" [" + item.ClanTag + "]")); Text(((Component)val2).transform, item.Name + text, new Vector2(12f, -9f), new Vector2(390f, 22f), 14f, gold: false, (TextAlignmentOptions)257); Text(((Component)val2).transform, Mathf.RoundToInt(item.Distance) + " m", new Vector2(402f, -9f), new Vector2(120f, 22f), 12f, gold: false, (TextAlignmentOptions)260); Button obj = NativeButton(((Component)val2).transform, "INVITE", new Vector2(568f, -5f), new Vector2(140f, 30f)); long playerId = item.PlayerId; ((UnityEvent)obj.onClick).AddListener((UnityAction)delegate { PartyRpc.Client("FP_Invite", playerId); }); num2 -= 45f; } if (num > 1) { Button obj2 = NativeButton(val.transform, "PREV", new Vector2(240f, -354f), new Vector2(100f, 30f)); ((Selectable)obj2).interactable = invitePageIndex > 0; ((UnityEvent)obj2.onClick).AddListener((UnityAction)delegate { invitePageIndex--; BuildWindow(); }); Text(val.transform, invitePageIndex + 1 + " / " + num, new Vector2(350f, -358f), new Vector2(64f, 22f), 12f, gold: true, (TextAlignmentOptions)258); Button obj3 = NativeButton(val.transform, "NEXT", new Vector2(424f, -354f), new Vector2(100f, 30f)); ((Selectable)obj3).interactable = invitePageIndex + 1 < num; ((UnityEvent)obj3.onClick).AddListener((UnityAction)delegate { invitePageIndex++; BuildWindow(); }); } } private void BuildMemberActionsWindow() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Expected O, but got Unknown //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Expected O, but got Unknown //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Expected O, but got Unknown if ((Object)(object)window == (Object)null || snapshot == null) { page = PartyPage.Hall; BuildWindow(); return; } GameObject val = Panel("Party Member Actions Panel", window.transform, new Vector2(764f, 400f), topLeft: true); Rect(val).anchoredPosition = new Vector2(28f, -105f); PartySnapshot.MemberState memberState = snapshot.Members.FirstOrDefault((PartySnapshot.MemberState candidate) => candidate.Id == selectedMemberId); if (memberState == null) { page = PartyPage.Hall; BuildWindow(); return; } Text(val.transform, "PARTY MEMBER", new Vector2(24f, -24f), new Vector2(300f, 28f), 20f, gold: true, (TextAlignmentOptions)257); Text(val.transform, memberState.Name + (string.IsNullOrEmpty(memberState.ClanTag) ? string.Empty : (" [" + memberState.ClanTag + "]")), new Vector2(24f, -69f), new Vector2(500f, 30f), 18f, gold: false, (TextAlignmentOptions)257); Text(val.transform, memberState.Online ? ("Online • " + Mathf.RoundToInt(memberState.Distance) + " m") : "Offline", new Vector2(24f, -108f), new Vector2(500f, 28f), 14f, gold: false, (TextAlignmentOptions)257); ((UnityEvent)NativeButton(val.transform, "BACK", new Vector2(620f, -18f), new Vector2(120f, 32f)).onClick).AddListener((UnityAction)delegate { page = PartyPage.Hall; BuildWindow(); }); Player localPlayer = Player.m_localPlayer; long num = ((localPlayer != null) ? localPlayer.GetPlayerID() : 0); if (snapshot.Leader == num && selectedMemberId != num) { ((UnityEvent)NativeButton(val.transform, "TRANSFER LEADER", new Vector2(24f, -170f), new Vector2(280f, 40f)).onClick).AddListener((UnityAction)delegate { page = PartyPage.Hall; PartyRpc.Client("FP_TransferLeader", selectedMemberId); }); ((UnityEvent)NativeButton(val.transform, "KICK MEMBER", new Vector2(24f, -224f), new Vector2(280f, 40f)).onClick).AddListener((UnityAction)delegate { page = PartyPage.Hall; PartyRpc.Client("FP_Kick", selectedMemberId); }); } else { Text(val.transform, "Only the party leader can transfer leadership or remove another member.", new Vector2(24f, -170f), new Vector2(620f, 60f), 14f, gold: false, (TextAlignmentOptions)257); } } private void JoinModeButtons(Transform parent, PartyVisibility selected, float y, Action<PartyVisibility> action) { //IL_0019: 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_0070: 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_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Expected O, but got Unknown //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Expected O, but got Unknown Rect rect = Rect(((Component)parent).gameObject).rect; bool num = ((Rect)(ref rect)).width > 300f; float num2 = (num ? 24f : 18f); float num3 = (num ? 130f : 68f); float num4 = (num ? 12f : 4f); ((UnityEvent)NativeButton(parent, (selected == PartyVisibility.Public) ? "▶ PUBLIC" : "PUBLIC", new Vector2(num2, y), new Vector2(num3, 30f)).onClick).AddListener((UnityAction)delegate { action(PartyVisibility.Public); }); ((UnityEvent)NativeButton(parent, (selected == PartyVisibility.RequestToJoin) ? "▶ REQUEST" : "REQUEST", new Vector2(num2 + num3 + num4, y), new Vector2(num3, 30f)).onClick).AddListener((UnityAction)delegate { action(PartyVisibility.RequestToJoin); }); ((UnityEvent)NativeButton(parent, (selected == PartyVisibility.InviteOnly) ? "▶ INVITE" : "INVITE", new Vector2(num2 + (num3 + num4) * 2f, y), new Vector2(num3, 30f)).onClick).AddListener((UnityAction)delegate { action(PartyVisibility.InviteOnly); }); } private void ShowInvite() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_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) //IL_00c4: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Expected O, but got Unknown if (!((Object)(object)invite == (Object)null)) { Clear(invite); Text(invite.transform, "PARTY INVITATION", new Vector2(22f, -24f), new Vector2(386f, 28f), 20f, gold: true, (TextAlignmentOptions)257); Text(invite.transform, pendingInviterName + " invites you to join:\n" + pendingInviteName, new Vector2(22f, -66f), new Vector2(386f, 50f), 15f, gold: false, (TextAlignmentOptions)257); ((UnityEvent)NativeButton(invite.transform, "ACCEPT", new Vector2(22f, -120f), new Vector2(160f, 34f)).onClick).AddListener((UnityAction)delegate { PartyRpc.Client("FP_InviteResponse", PendingInviteId, true); PendingInviteId = string.Empty; invite.SetActive(false); }); ((UnityEvent)NativeButton(invite.transform, "DECLINE", new Vector2(195f, -120f), new Vector2(160f, 34f)).onClick).AddListener((UnityAction)delegate { PartyRpc.Client("FP_InviteResponse", PendingInviteId, false); PendingInviteId = string.Empty; invite.SetActive(false); }); invite.transform.SetAsLastSibling(); invite.SetActive(true); } } private GameObject Panel(string name, Transform parent, Vector2 size, bool topLeft) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image) }); val.transform.SetParent(parent, false); ApplyImageStyle(val.GetComponent<Image>(), topLeft ? nativeInnerImage : nativeWindowImage, Color.white); if (topLeft) { ((Graphic)val.GetComponent<Image>()).color = PartyPanelTint; } RectTransform obj = Rect(val); Vector2 anchorMin = (obj.anchorMax = (topLeft ? new Vector2(0f, 1f) : new Vector2(0.5f, 0.5f))); obj.anchorMin = anchorMin; obj.pivot = (topLeft ? new Vector2(0f, 1f) : new Vector2(0.5f, 0.5f)); obj.sizeDelta = size; return val; } private Image MakeImage(Transform parent, string name, Vector2 size, Vector2 pos, Color color, bool nativeInnerStyle) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name, new Type[3] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image) }); val.transform.SetParent(parent, false); Image component = val.GetComponent<Image>(); ApplyImageStyle(component, nativeInnerStyle ? nativeInnerImage : null, color); ((Graphic)component).raycastTarget = false; RectTransform obj = Rect(val); Vector2 val2 = default(Vector2); ((Vector2)(ref val2))..ctor(0f, 1f); obj.anchorMax = val2; obj.anchorMin = val2; obj.pivot = new Vector2(0f, 1f); obj.anchoredPosition = pos; obj.sizeDelta = size; return component; } private static void ApplyImageStyle(Image target, Image? source, Color fallbackColor) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0070: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)source != (Object)null) { target.sprite = source.sprite; target.overrideSprite = source.overrideSprite; target.type = source.type; target.preserveAspect = source.preserveAspect; target.fillCenter = source.fillCenter; target.pixelsPerUnitMultiplier = source.pixelsPerUnitMultiplier; ((Graphic)target).material = ((Graphic)source).material; ((Graphic)target).color = ((((Graphic)source).color.a > 0.05f) ? ((Graphic)source).color : fallbackColor); } else { ((Graphic)target).color = fallbackColor; } } private TMP_InputField NativeInput(Transform parent, Vector2 pos, Vector2 size) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: 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_007b: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown GameObject obj = Object.Instantiate<GameObject>(((Component)nativeInputTemplate).gameObject, parent, false); ((Object)obj).name = "PartyNameInput"; obj.SetActive(true); RectTransform obj2 = Rect(obj); Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(0f, 1f); obj2.anchorMax = val; obj2.anchorMin = val; obj2.pivot = new Vector2(0f, 1f); obj2.anchoredPosition = pos; obj2.sizeDelta = size; TMP_InputField component = obj.GetComponent<TMP_InputField>(); component.onValueChanged = new OnChangeEvent(); component.onEndEdit = new SubmitEvent(); component.text = string.Empty; component.characterLimit = 48; component.lineType = (LineType)0; component.contentType = (ContentType)0; Graphic placeholder = component.placeholder; TMP_Text val2 = (TMP_Text)(object)((placeholder is TMP_Text) ? placeholder : null); if (val2 != null) { val2.text = "Enter party name"; } return component; } private Button NativeButton(Transform parent, string label, Vector2 pos, Vector2 size) { //IL_007f: Unknown result type (might be due to inv