From 0c89d947f79418d18eef2daf92438ced1730921d Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Tue, 20 Sep 2022 07:52:22 +0200 Subject: [PATCH] optimize handling in groups and allicance chat --- PlayerTags/Features/ChatTagTargetFeature.cs | 94 ++++++++------------- PlayerTags/Features/TagTargetFeature.cs | 39 +++++++++ 2 files changed, 72 insertions(+), 61 deletions(-) diff --git a/PlayerTags/Features/ChatTagTargetFeature.cs b/PlayerTags/Features/ChatTagTargetFeature.cs index 3c9142b..86fd932 100644 --- a/PlayerTags/Features/ChatTagTargetFeature.cs +++ b/PlayerTags/Features/ChatTagTargetFeature.cs @@ -48,9 +48,10 @@ namespace PlayerTags.Features get { Payload textPayload = null; - string textMatch = GetMatchText(); + string textMatch = GetMatchTextInternal(); + string textMatchShort = BuildPlayername(textMatch); - textPayload = DisplayTextPayloads.FirstOrDefault(n => n is TextPayload textPayload && textPayload.Text.Contains(textMatch)); + textPayload = DisplayTextPayloads.FirstOrDefault(n => n is TextPayload textPayload && (textPayload.Text.Contains(textMatch) || ((!string.IsNullOrEmpty(textMatchShort)) && textPayload.Text.Contains(textMatchShort)))); textPayload ??= PlayerPayload; textPayload ??= DisplayTextPayloads.FirstOrDefault(); @@ -63,23 +64,29 @@ namespace PlayerTags.Features SeString = seString; } + private string GetMatchTextInternal() + { + if (GameObject != null) + return GameObject.Name.TextValue; + else if (PlayerPayload != null) + return PlayerPayload.PlayerName; + else + return SeString.TextValue; + } + /// /// Gets the matches text. /// /// The match text. public string GetMatchText() { - if (GameObject != null) - { - return GameObject.Name.TextValue; - } - - if (PlayerPayload != null) - { - return PlayerPayload.PlayerName; - } - - return SeString.TextValue; + var playerNamePayload = PlayerNamePayload; + if (playerNamePayload is PlayerPayload pp) + return pp.PlayerName; + else if (playerNamePayload is TextPayload tp) + return tp.Text; + else + return SeString.TextValue; } } @@ -182,44 +189,6 @@ namespace PlayerTags.Features return stringMatches; } - private string BuildPlayername(string name) - { - var logNameType = GameConfigHelper.Instance.GetLogNameType(); - var result = string.Empty; - - if (logNameType != null) - { - var nameSplitted = name.Split(' '); - - if (nameSplitted.Length > 1) - { - var firstName = nameSplitted[0]; - var lastName = nameSplitted[1]; - - switch (logNameType) - { - case LogNameType.FullName: - result = $"{firstName} {lastName}"; - break; - case LogNameType.LastNameShorted: - result = $"{firstName} {lastName[..1]}."; - break; - case LogNameType.FirstNameShorted: - result = $"{firstName[..1]}. {lastName}"; - break; - case LogNameType.Initials: - result = $"{firstName[..1]}. {lastName[..1]}."; - break; - } - } - } - - if (string.IsNullOrEmpty(result)) - result = name; - - return result; - } - private void SplitOffPartyNumberPrefix(SeString sender, XivChatType type) { if (type == XivChatType.Party || type == XivChatType.Alliance) @@ -232,7 +201,10 @@ namespace PlayerTags.Features else if (payload is TextPayload playerNamePayload && lastPlayerPayload != null) { // Get position of player name in payload - var indexOfPlayerName = playerNamePayload.Text.IndexOf(lastPlayerPayload.PlayerName); + var indexOfPlayerName = playerNamePayload.Text.IndexOf(BuildPlayername(lastPlayerPayload.PlayerName)); + + if (indexOfPlayerName == -1) + indexOfPlayerName = playerNamePayload.Text.IndexOf(lastPlayerPayload.PlayerName); if (indexOfPlayerName > 0) { @@ -260,16 +232,16 @@ namespace PlayerTags.Features List playerTextPayloads = new List(); var playerName = PluginServices.ClientState.LocalPlayer.Name.TextValue; + var playerNameShorted = BuildPlayername(playerName); - if (textPayload.Text == playerName) + if (textPayload.Text == playerName || textPayload.Text == playerNameShorted) { playerTextPayloads.Add(textPayload); - //textPayload.Text = textPayload.Text; - textPayload.Text = playerName; } else { - var textMatchIndex = textPayload.Text.IndexOf(playerName); + var usedPlayerName = chatType == XivChatType.Party || chatType == XivChatType.Alliance ? playerNameShorted : playerName; + var textMatchIndex = textPayload.Text.IndexOf(usedPlayerName); while (textMatchIndex >= 0) { @@ -286,21 +258,21 @@ namespace PlayerTags.Features } // This is the last reference to the local player in this payload - if (textPayload.Text.Length == playerName.Length) + if (textPayload.Text.Length == usedPlayerName.Length) { playerTextPayloads.Add(textPayload); break; } // Create the new name payload and add it - var playerTextPayload = new TextPayload(playerName); + var playerTextPayload = new TextPayload(usedPlayerName); playerTextPayloads.Add(playerTextPayload); seString.Payloads.Insert(textPayloadIndex, playerTextPayload); // Remove from the chopped text from the original payload - textPayload.Text = textPayload.Text.Substring(playerName.Length); + textPayload.Text = textPayload.Text.Substring(usedPlayerName.Length); - textMatchIndex = textPayload.Text.IndexOf(playerName); + textMatchIndex = textPayload.Text.IndexOf(usedPlayerName); } } @@ -380,7 +352,7 @@ namespace PlayerTags.Features var playerName = stringMatch.GetMatchText(); if (playerName != null) { - var generatedName = RandomNameGenerator.Generate(playerName); + var generatedName = BuildPlayername(RandomNameGenerator.Generate(playerName)); if (generatedName != null) { AddPayloadChanges(TagPosition.Replace, Enumerable.Empty().Append(new TextPayload(generatedName)), stringChanges, false); diff --git a/PlayerTags/Features/TagTargetFeature.cs b/PlayerTags/Features/TagTargetFeature.cs index aace99e..34255c0 100644 --- a/PlayerTags/Features/TagTargetFeature.cs +++ b/PlayerTags/Features/TagTargetFeature.cs @@ -4,6 +4,7 @@ using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using FFXIVClientStructs.FFXIV.Client.Game.Object; using Lumina.Excel.GeneratedSheets; +using PlayerTags.Configuration.GameConfig; using PlayerTags.Data; using PlayerTags.Inheritables; using System; @@ -214,6 +215,44 @@ namespace PlayerTags.Features } } + protected static string BuildPlayername(string name) + { + var logNameType = GameConfigHelper.Instance.GetLogNameType(); + var result = string.Empty; + + if (logNameType != null && !string.IsNullOrEmpty(name)) + { + var nameSplitted = name.Split(' '); + + if (nameSplitted.Length > 1) + { + var firstName = nameSplitted[0]; + var lastName = nameSplitted[1]; + + switch (logNameType) + { + case LogNameType.FullName: + result = $"{firstName} {lastName}"; + break; + case LogNameType.LastNameShorted: + result = $"{firstName} {lastName[..1]}."; + break; + case LogNameType.FirstNameShorted: + result = $"{firstName[..1]}. {lastName}"; + break; + case LogNameType.Initials: + result = $"{firstName[..1]}. {lastName[..1]}."; + break; + } + } + } + + if (string.IsNullOrEmpty(result)) + result = name; + + return result; + } + /// /// Adds the given payload changes to the dictionary. ///