diff --git a/PlayerTags/Data/PlayerContext.cs b/PlayerTags/Data/PlayerContext.cs index 52a113c..4c848ea 100644 --- a/PlayerTags/Data/PlayerContext.cs +++ b/PlayerTags/Data/PlayerContext.cs @@ -2,11 +2,11 @@ { public enum PlayerContext { - Self, - Party, - Alliance, - Enemy, - Friend, - Other + None = 0x0, + Self = 0x1, + Party = 0x2, + Alliance = 0x4, + Enemy = 0x8, + Friend = 0x10 } } diff --git a/PlayerTags/Features/TagTargetFeature.cs b/PlayerTags/Features/TagTargetFeature.cs index 28ce830..923ae5a 100644 --- a/PlayerTags/Features/TagTargetFeature.cs +++ b/PlayerTags/Features/TagTargetFeature.cs @@ -117,94 +117,93 @@ namespace PlayerTags.Features private PlayerContext GetContextForPlayer(PlayerCharacter playerCharacter) { + PlayerContext playerContext = PlayerContext.None; + if (PluginServices.ClientState.LocalPlayer == playerCharacter) { - return PlayerContext.Self; + playerContext |= PlayerContext.Self; } if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Friend)) { - return PlayerContext.Friend; + playerContext |= PlayerContext.Friend; } if (playerCharacter.StatusFlags.HasFlag(StatusFlags.PartyMember)) { - return PlayerContext.Party; + playerContext |= PlayerContext.Party; } if (playerCharacter.StatusFlags.HasFlag(StatusFlags.AllianceMember)) { - return PlayerContext.Alliance; + playerContext |= PlayerContext.Alliance; } if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Hostile)) { - return PlayerContext.Enemy; + playerContext |= PlayerContext.Enemy; } - return PlayerContext.Other; - } - - private InheritableValue? GetInheritableVisibilityForPlayer(Tag tag, PlayerContext playerContext) - { - switch (playerContext) - { - case PlayerContext.Self: - return tag.IsVisibleForSelf; - case PlayerContext.Friend: - return tag.IsVisibleForFriendPlayers; - case PlayerContext.Party: - return tag.IsVisibleForPartyPlayers; - case PlayerContext.Alliance: - return tag.IsVisibleForAlliancePlayers; - case PlayerContext.Enemy: - return tag.IsVisibleForEnemyPlayers; - case PlayerContext.Other: - return tag.IsVisibleForOtherPlayers; - } - - return null; + return playerContext; } private bool IsVisibleForPlayer(Tag tag, PlayerCharacter playerCharacter) { - var inheritable = GetInheritableVisibilityForPlayer(tag, GetContextForPlayer(playerCharacter)); - if (inheritable == null) - { - return false; - } + var playerContext = GetContextForPlayer(playerCharacter); - if (inheritable.InheritedValue == null || !inheritable.InheritedValue.Value) + if (playerContext.HasFlag(PlayerContext.Self)) { - return false; - } - - return true; - } - - private string ExpandTextParameters(GameObject gameObject, string text) - { - if (gameObject is PlayerCharacter playerCharacter) - { - var parameterIndex = text.ToLower().IndexOf("{PlayerAverageItemLevel}".ToLower()); - if (parameterIndex >= 0) + if (tag.IsVisibleForSelf.InheritedValue == null || !tag.IsVisibleForSelf.InheritedValue.Value) { - unsafe - { - FFXIVClientStructs.FFXIV.Client.Game.Character.Character character = Marshal.PtrToStructure(playerCharacter.Address); - byte[] equipSlotData = new byte[40]; + return false; + } - for (int index = 0; index < equipSlotData.Length; ++index) - { - equipSlotData[index] = character.EquipSlotData[index]; - } + return true; + } - PluginLog.Debug(string.Join(" ", equipSlotData.Select(d => d.ToString("X2")))); - } + bool isVisible = false; + + if (playerContext.HasFlag(PlayerContext.Friend)) + { + if (tag.IsVisibleForFriendPlayers.InheritedValue != null) + { + isVisible |= tag.IsVisibleForFriendPlayers.InheritedValue.Value; } } - return text; + if (playerContext.HasFlag(PlayerContext.Party)) + { + if (tag.IsVisibleForPartyPlayers.InheritedValue != null) + { + isVisible |= tag.IsVisibleForPartyPlayers.InheritedValue.Value; + } + } + + if (!playerContext.HasFlag(PlayerContext.Party) && playerContext.HasFlag(PlayerContext.Alliance)) + { + if (tag.IsVisibleForAlliancePlayers.InheritedValue != null) + { + isVisible |= tag.IsVisibleForAlliancePlayers.InheritedValue.Value; + } + } + + if (playerContext.HasFlag(PlayerContext.Enemy)) + { + if (tag.IsVisibleForEnemyPlayers.InheritedValue != null) + { + isVisible |= tag.IsVisibleForEnemyPlayers.InheritedValue.Value; + } + } + + if (playerContext == PlayerContext.None) + { + if (tag.IsVisibleForOtherPlayers.InheritedValue != null) + { + isVisible |= tag.IsVisibleForOtherPlayers.InheritedValue.Value; + } + } + + return isVisible; } private Payload[] CreatePayloads(GameObject gameObject, Tag tag) @@ -230,8 +229,6 @@ namespace PlayerTags.Features if (!string.IsNullOrWhiteSpace(text)) { - text = ExpandTextParameters(gameObject, text); - if (tag.IsTextItalic.InheritedValue != null && tag.IsTextItalic.InheritedValue.Value) { newPayloads.Add(new EmphasisItalicPayload(true));