optimize handling in groups and allicance chat

This commit is contained in:
2022-09-20 07:52:22 +02:00
parent 152a381072
commit 0c89d947f7
2 changed files with 72 additions and 61 deletions

View File

@@ -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;
}
/// <summary>
/// Gets the matches text.
/// </summary>
/// <returns>The match text.</returns>
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<TextPayload> playerTextPayloads = new List<TextPayload>();
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<Payload>().Append(new TextPayload(generatedName)), stringChanges, false);

View File

@@ -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;
}
/// <summary>
/// Adds the given payload changes to the dictionary.
/// </summary>