using Platform; using System.Collections.Generic; namespace Harmony.XUiC_PlayersListPatches { [HarmonyPatch(typeof(XUiC_PlayersList))] [HarmonyPatch("updatePlayersList")] public class updatePlayersListPatch { public static bool Prefix(XUiC_PlayersList __instance) { EntityPlayerLocal entityPlayer1 = __instance.xui.playerUI.entityPlayer; bool hideGamestage = false; if (RebirthVariables.customInfested == "hidesurprise" ) { List listCurrentQuests = entityPlayer1.QuestJournal.quests; for (int index = 0; index < listCurrentQuests.Count; ++index) { if (listCurrentQuests[index].CurrentState == Quest.QuestState.InProgress && listCurrentQuests[index].RallyMarkerActivated) { hideGamestage = true; break; } } } List sentityIdRefList = new List(); for (int index = 0; index < GameManager.Instance.World.Players.list.Count; ++index) { EntityPlayer _Ref = GameManager.Instance.World.Players.list[index]; sentityIdRefList.Add(new XUiC_PlayersList.SEntityIdRef(_Ref.entityId, _Ref)); } __instance.numberOfPlayers.Text = sentityIdRefList.Count.ToString(); __instance.playerPager.SetLastPageByElementsAndPageLength(sentityIdRefList.Count, __instance.playerList.Rows); if (GameManager.Instance.persistentLocalPlayer.ACL != null) { foreach (PlatformUserIdentifierAbs _userIdentifier in GameManager.Instance.persistentLocalPlayer.ACL) { PersistentPlayerData playerData = GameManager.Instance.persistentPlayers.GetPlayerData(_userIdentifier); if (playerData != null && !((UnityEngine.Object)GameManager.Instance.World.GetEntity(playerData.EntityId) != (UnityEngine.Object)null)) sentityIdRefList.Add(new XUiC_PlayersList.SEntityIdRef(playerData)); } } sentityIdRefList.Sort((IComparer)new XUiC_PlayersList.PlayersSorter(entityPlayer1)); GameServerInfo gameServerInfo = SingletonMonoBehaviour.Instance.IsServer ? SingletonMonoBehaviour.Instance.LocalServerInfo : SingletonMonoBehaviour.Instance.LastGameServerInfo; bool _showCrossplay = gameServerInfo != null && gameServerInfo.AllowsCrossplay; if (!_showCrossplay) { EPlayGroup playGroup1 = DeviceFlags.Current.ToPlayGroup(); for (int index = 0; index < sentityIdRefList.Count; ++index) { EPlayGroup playGroup2 = sentityIdRefList[index].PlayerData.PlayGroup; if (playGroup2 != EPlayGroup.Unknown && playGroup2 != playGroup1) { _showCrossplay = true; break; } } } int index1; for (index1 = 0; index1 < __instance.playerList.Rows && index1 < sentityIdRefList.Count; ++index1) { int index2 = index1 + __instance.playerList.Rows * __instance.playerPager.GetPage(); if (index2 < sentityIdRefList.Count) { XUiC_PlayersListEntry playerEntry = __instance.playerEntries[index1]; if (playerEntry != null) { EntityPlayer entityPlayer2 = sentityIdRefList[index2].Ref; bool flag1 = (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)null && (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)entityPlayer1 && entityPlayer2.IsInPartyOfLocalPlayer; bool flag2 = (UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)null || (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)entityPlayer1 && entityPlayer2.IsFriendOfLocalPlayer; if (!((UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)null)) { int entityId = entityPlayer2.entityId; } PersistentPlayerData persistentPlayerData = sentityIdRefList[index2].PlayerId != null ? GameManager.Instance.persistentPlayers.GetPlayerData(sentityIdRefList[index2].PlayerId) : GameManager.Instance.persistentPlayers.GetPlayerDataFromEntityID(entityPlayer2.entityId); if (persistentPlayerData != null) { foreach (EBlockType _blockType in (IEnumerable)EnumUtils.Values()) playerEntry.playerBlockStateChanged(persistentPlayerData.PlatformData, _blockType, persistentPlayerData.PlatformData.Blocked[_blockType].State); if ((UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)null) { playerEntry.IsOffline = false; playerEntry.EntityId = entityPlayer2.entityId; playerEntry.PlayerData = persistentPlayerData; playerEntry.ViewComponent.IsVisible = true; playerEntry.PlayerName.UpdatePlayerData(persistentPlayerData.PlayerData, _showCrossplay, persistentPlayerData.PlayerName.DisplayName); playerEntry.AdminSprite.IsVisible = entityPlayer2.IsAdmin; playerEntry.TwitchSprite.IsVisible = entityPlayer2.TwitchEnabled && entityPlayer2.TwitchActionsEnabled == EntityPlayer.TwitchActionsStates.Enabled; playerEntry.TwitchDisabledSprite.IsVisible = entityPlayer2.TwitchActionsEnabled != EntityPlayer.TwitchActionsStates.Enabled || entityPlayer2.TwitchSafe; playerEntry.TwitchDisabledSprite.SpriteName = entityPlayer2.TwitchActionsEnabled != EntityPlayer.TwitchActionsStates.Enabled ? "ui_game_symbol_twitch_action_disabled" : "ui_game_symbol_brick"; playerEntry.TwitchDisabledSprite.ToolTip = entityPlayer2.TwitchActionsEnabled != EntityPlayer.TwitchActionsStates.Enabled ? XUiC_PlayersList.twitchDisabled : XUiC_PlayersList.twitchSafe; XUiV_Label zombieKillsText = playerEntry.ZombieKillsText; int num = entityPlayer2.KilledZombies; string str1 = num.ToString(); zombieKillsText.Text = str1; XUiV_Label playerKillsText = playerEntry.PlayerKillsText; num = entityPlayer2.KilledPlayers; string str2 = num.ToString(); playerKillsText.Text = str2; XUiV_Label deathsText = playerEntry.DeathsText; num = entityPlayer2.Died; string str3 = num.ToString(); deathsText.Text = str3; XUiV_Label levelText = playerEntry.LevelText; num = entityPlayer2.Progression.GetLevel(); string str4 = num.ToString(); levelText.Text = str4; XUiV_Label gamestageText = playerEntry.GamestageText; num = entityPlayer2.gameStage; string str5 = num.ToString(); gamestageText.Text = str5; if (hideGamestage) { gamestageText.Text = "N/A"; } playerEntry.PingText.Text = !((UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)entityPlayer1) || !SingletonMonoBehaviour.Instance.IsServer ? (entityPlayer2.pingToServer < 0 ? "--" : entityPlayer2.pingToServer.ToString()) : "--"; playerEntry.Voice.IsVisible = (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)entityPlayer1; playerEntry.Chat.IsVisible = (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)entityPlayer1; playerEntry.IsFriend = flag2; playerEntry.ShowOnMapEnabled = flag2 | flag1; if (flag2 | flag1) { float magnitude = (entityPlayer2.GetPosition() - entityPlayer1.GetPosition()).magnitude; playerEntry.DistanceToFriend.Text = ValueDisplayFormatters.Distance(magnitude); } else playerEntry.DistanceToFriend.Text = "--"; playerEntry.buttonReportPlayer.IsVisible = PlatformManager.MultiPlatform.PlayerReporting != null && (UnityEngine.Object)entityPlayer2 != (UnityEngine.Object)entityPlayer1; playerEntry.AllyStatus = !((UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)entityPlayer1) ? (!flag2 ? (!__instance.invitesReceivedList.Contains(persistentPlayerData.PrimaryId) ? (!__instance.invitesSentList.Contains(persistentPlayerData.PrimaryId) ? XUiC_PlayersListEntry.EnumAllyInviteStatus.NA : XUiC_PlayersListEntry.EnumAllyInviteStatus.Sent) : XUiC_PlayersListEntry.EnumAllyInviteStatus.Received) : XUiC_PlayersListEntry.EnumAllyInviteStatus.Friends) : XUiC_PlayersListEntry.EnumAllyInviteStatus.LocalPlayer; if ((UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)entityPlayer1) playerEntry.PartyStatus = !entityPlayer1.partyInvites.Contains(entityPlayer2) ? (!entityPlayer1.IsInParty() ? XUiC_PlayersListEntry.EnumPartyStatus.LocalPlayer_NoParty : ((UnityEngine.Object)entityPlayer1.Party.Leader == (UnityEngine.Object)entityPlayer1 ? XUiC_PlayersListEntry.EnumPartyStatus.LocalPlayer_InPartyAsLead : XUiC_PlayersListEntry.EnumPartyStatus.LocalPlayer_InParty)) : XUiC_PlayersListEntry.EnumPartyStatus.LocalPlayer_Received; else if (entityPlayer1.IsInParty()) { bool flag3 = entityPlayer1.IsPartyLead(); playerEntry.PartyStatus = !entityPlayer1.Party.MemberList.Contains(entityPlayer2) ? (!entityPlayer2.IsInParty() || !entityPlayer2.Party.IsFull() ? (flag3 ? XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_NoPartyAsLead : XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_NoParty) : XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_PartyFullAsLead) : (!flag3 ? (entityPlayer2.IsPartyLead() ? XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_InPartyIsLead : XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_InParty) : XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_InPartyAsLead); } else if (entityPlayer1.partyInvites.Contains(entityPlayer2)) { if (entityPlayer2.IsInParty() && entityPlayer2.Party.IsFull()) { playerEntry.PartyStatus = XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_NoPartyAsLead; entityPlayer1.partyInvites.Remove(entityPlayer2); } else playerEntry.PartyStatus = XUiC_PlayersListEntry.EnumPartyStatus.LocalPlayer_Received; } else { entityPlayer2.IsInParty(); playerEntry.PartyStatus = XUiC_PlayersListEntry.EnumPartyStatus.OtherPlayer_NoPartyAsLead; } } else { playerEntry.IsOffline = true; playerEntry.EntityId = -1; playerEntry.PlayerData = persistentPlayerData; playerEntry.PlayerName.UpdatePlayerData(persistentPlayerData.PlayerData, _showCrossplay, persistentPlayerData.PlayerName.DisplayName ?? sentityIdRefList[index2].PlayerId.CombinedString); playerEntry.AdminSprite.IsVisible = false; playerEntry.TwitchSprite.IsVisible = false; playerEntry.TwitchDisabledSprite.IsVisible = false; playerEntry.DistanceToFriend.IsVisible = true; playerEntry.DistanceToFriend.Text = "--"; playerEntry.ZombieKillsText.Text = "--"; playerEntry.PlayerKillsText.Text = "--"; playerEntry.DeathsText.Text = "--"; playerEntry.LevelText.Text = "--"; playerEntry.GamestageText.Text = "--"; playerEntry.PingText.Text = "--"; playerEntry.Voice.IsVisible = false; playerEntry.Chat.IsVisible = false; playerEntry.IsOffline = true; playerEntry.AllyStatus = !((UnityEngine.Object)entityPlayer2 == (UnityEngine.Object)entityPlayer1) ? (!flag2 ? (!__instance.invitesReceivedList.Contains(persistentPlayerData.PrimaryId) ? (!__instance.invitesSentList.Contains(persistentPlayerData.PrimaryId) ? XUiC_PlayersListEntry.EnumAllyInviteStatus.NA : XUiC_PlayersListEntry.EnumAllyInviteStatus.Sent) : XUiC_PlayersListEntry.EnumAllyInviteStatus.Received) : XUiC_PlayersListEntry.EnumAllyInviteStatus.Friends) : XUiC_PlayersListEntry.EnumAllyInviteStatus.LocalPlayer; playerEntry.PartyStatus = XUiC_PlayersListEntry.EnumPartyStatus.Offline; playerEntry.labelPartyIcon.IsVisible = true; playerEntry.buttonReportPlayer.IsVisible = true; playerEntry.buttonShowOnMap.IsVisible = false; playerEntry.labelShowOnMap.IsVisible = true; } playerEntry.RefreshBindings(); } } } else break; } for (; index1 < __instance.playerList.Rows; ++index1) { XUiC_PlayersListEntry playerEntry = __instance.playerEntries[index1]; if (playerEntry != null) { playerEntry.EntityId = -1; playerEntry.PlayerData = (PersistentPlayerData)null; playerEntry.PlayerName.ClearPlayerData(); playerEntry.AdminSprite.IsVisible = false; playerEntry.TwitchSprite.IsVisible = false; playerEntry.TwitchDisabledSprite.IsVisible = false; playerEntry.ZombieKillsText.Text = string.Empty; playerEntry.PlayerKillsText.Text = string.Empty; playerEntry.DeathsText.Text = string.Empty; playerEntry.LevelText.Text = string.Empty; playerEntry.GamestageText.Text = string.Empty; playerEntry.PingText.Text = string.Empty; playerEntry.Voice.IsVisible = false; playerEntry.Chat.IsVisible = false; playerEntry.ShowOnMapEnabled = false; playerEntry.DistanceToFriend.IsVisible = false; playerEntry.AllyStatus = XUiC_PlayersListEntry.EnumAllyInviteStatus.Empty; playerEntry.PartyStatus = XUiC_PlayersListEntry.EnumPartyStatus.Offline; playerEntry.buttonReportPlayer.IsVisible = false; playerEntry.labelAllyIcon.IsVisible = false; playerEntry.labelPartyIcon.IsVisible = false; playerEntry.labelShowOnMap.IsVisible = false; } } return false; } } }