insert tag and icon before party number in chat
This commit is contained in:
@@ -221,7 +221,7 @@ namespace PlayerTags.Features
|
||||
var stringMatches = GetStringMatches(message);
|
||||
foreach (var stringMatch in stringMatches)
|
||||
{
|
||||
Dictionary<TagPosition, List<Payload>> stringChanges = new Dictionary<TagPosition, List<Payload>>();
|
||||
Dictionary<TagPosition, StringChanges> stringChanges = new Dictionary<TagPosition, StringChanges>();
|
||||
|
||||
if (stringMatch.GameObject is PlayerCharacter playerCharacter)
|
||||
{
|
||||
@@ -233,7 +233,7 @@ namespace PlayerTags.Features
|
||||
var payloads = GetPayloads(jobTag, stringMatch.GameObject);
|
||||
if (payloads.Any())
|
||||
{
|
||||
AddPayloadChanges(jobTag.TagPositionInChat.InheritedValue.Value, payloads, stringChanges);
|
||||
AddPayloadChanges(jobTag.TagPositionInChat.InheritedValue.Value, payloads, stringChanges, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -247,7 +247,7 @@ namespace PlayerTags.Features
|
||||
var generatedName = RandomNameGenerator.Generate(playerName);
|
||||
if (generatedName != null)
|
||||
{
|
||||
AddPayloadChanges(TagPosition.Replace, Enumerable.Empty<Payload>().Append(new TextPayload(generatedName)), stringChanges);
|
||||
AddPayloadChanges(TagPosition.Replace, Enumerable.Empty<Payload>().Append(new TextPayload(generatedName)), stringChanges, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -267,7 +267,7 @@ namespace PlayerTags.Features
|
||||
var customTagPayloads = GetPayloads(customTag, stringMatch.GameObject);
|
||||
if (customTagPayloads.Any())
|
||||
{
|
||||
AddPayloadChanges(customTag.TagPositionInChat.InheritedValue.Value, customTagPayloads, stringChanges);
|
||||
AddPayloadChanges(customTag.TagPositionInChat.InheritedValue.Value, customTagPayloads, stringChanges, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ namespace PlayerTags.Features
|
||||
/// <param name="tagPosition">The position of the changes.</param>
|
||||
/// <param name="payloadChanges">The payload changes to add.</param>
|
||||
/// <param name="nameplateChanges">The dictionary to add changes to.</param>
|
||||
private void AddPayloadChanges(NameplateElement nameplateElement, TagPosition tagPosition, IEnumerable<Payload> payloadChanges, Dictionary<NameplateElement, Dictionary<TagPosition, List<Payload>>> nameplateChanges)
|
||||
private void AddPayloadChanges(NameplateElement nameplateElement, TagPosition tagPosition, IEnumerable<Payload> payloadChanges, Dictionary<NameplateElement, Dictionary<TagPosition, StringChanges>> nameplateChanges, bool forceUsingSingleAnchorPayload)
|
||||
{
|
||||
if (!payloadChanges.Any())
|
||||
{
|
||||
@@ -137,10 +137,10 @@ namespace PlayerTags.Features
|
||||
|
||||
if (!nameplateChanges.Keys.Contains(nameplateElement))
|
||||
{
|
||||
nameplateChanges[nameplateElement] = new Dictionary<TagPosition, List<Payload>>();
|
||||
nameplateChanges[nameplateElement] = new();
|
||||
}
|
||||
|
||||
AddPayloadChanges(tagPosition, payloadChanges, nameplateChanges[nameplateElement]);
|
||||
AddPayloadChanges(tagPosition, payloadChanges, nameplateChanges[nameplateElement], forceUsingSingleAnchorPayload);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -152,7 +152,7 @@ namespace PlayerTags.Features
|
||||
/// <param name="freeCompany">The free company text to change.</param>
|
||||
private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany)
|
||||
{
|
||||
Dictionary<NameplateElement, Dictionary<TagPosition, List<Payload>>> nameplateChanges = new Dictionary<NameplateElement, Dictionary<TagPosition, List<Payload>>>();
|
||||
Dictionary<NameplateElement, Dictionary<TagPosition, StringChanges>> nameplateChanges = new();
|
||||
|
||||
if (gameObject is PlayerCharacter playerCharacter)
|
||||
{
|
||||
@@ -171,7 +171,7 @@ namespace PlayerTags.Features
|
||||
{
|
||||
var generatedName = RandomNameGenerator.Generate(characterName);
|
||||
if (generatedName != null)
|
||||
AddPayloadChanges(NameplateElement.Name, TagPosition.Replace, Enumerable.Empty<Payload>().Append(new TextPayload(generatedName)), nameplateChanges);
|
||||
AddPayloadChanges(NameplateElement.Name, TagPosition.Replace, Enumerable.Empty<Payload>().Append(new TextPayload(generatedName)), nameplateChanges, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ namespace PlayerTags.Features
|
||||
{
|
||||
var payloads = GetPayloads(tag, gameObject);
|
||||
if (payloads.Any())
|
||||
AddPayloadChanges(tag.TagTargetInNameplates.InheritedValue.Value, tag.TagPositionInNameplates.InheritedValue.Value, payloads, nameplateChanges);
|
||||
AddPayloadChanges(tag.TagTargetInNameplates.InheritedValue.Value, tag.TagPositionInNameplates.InheritedValue.Value, payloads, nameplateChanges, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,12 @@ namespace PlayerTags.Features
|
||||
/// </summary>
|
||||
public abstract class TagTargetFeature : IDisposable
|
||||
{
|
||||
protected class StringChanges
|
||||
{
|
||||
public List<Payload> Payloads { get; init; } = new();
|
||||
public bool ForceUsingSingleAnchorPayload { get; set; } = false;
|
||||
}
|
||||
|
||||
public ActivityContextManager ActivityContextManager { get; init; }
|
||||
|
||||
public TagTargetFeature()
|
||||
@@ -214,24 +220,17 @@ namespace PlayerTags.Features
|
||||
/// <param name="tagPosition">The position to add changes to.</param>
|
||||
/// <param name="payloads">The payloads to add.</param>
|
||||
/// <param name="stringChanges">The dictionary to add the changes to.</param>
|
||||
protected void AddPayloadChanges(TagPosition tagPosition, IEnumerable<Payload> payloads, Dictionary<TagPosition, List<Payload>> stringChanges)
|
||||
protected void AddPayloadChanges(TagPosition tagPosition, IEnumerable<Payload> payloads, Dictionary<TagPosition, StringChanges> stringChanges, bool forceUsingSingleAnchorPayload)
|
||||
{
|
||||
if (payloads == null || !payloads.Any())
|
||||
if (payloads != null && payloads.Any() && stringChanges != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!stringChanges.Keys.Contains(tagPosition))
|
||||
stringChanges[tagPosition] = new();
|
||||
|
||||
if (stringChanges == null)
|
||||
{
|
||||
return;
|
||||
var changes = stringChanges[tagPosition];
|
||||
changes.Payloads.AddRange(payloads);
|
||||
changes.ForceUsingSingleAnchorPayload = forceUsingSingleAnchorPayload;
|
||||
}
|
||||
|
||||
if (!stringChanges.Keys.Contains(tagPosition))
|
||||
{
|
||||
stringChanges[tagPosition] = new List<Payload>();
|
||||
}
|
||||
|
||||
stringChanges[tagPosition].AddRange(payloads);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -240,7 +239,7 @@ namespace PlayerTags.Features
|
||||
/// <param name="seString">The string to apply changes to.</param>
|
||||
/// <param name="stringChanges">The changes to apply.</param>
|
||||
/// <param name="anchorPayload">The payload in the string that changes should be anchored to. If there is no anchor, the changes will be applied to the entire string.</param>
|
||||
protected void ApplyStringChanges(SeString seString, Dictionary<TagPosition, List<Payload>> stringChanges, List<Payload> anchorPayloads = null, Payload anchorReplacePayload = null)
|
||||
protected void ApplyStringChanges(SeString seString, Dictionary<TagPosition, StringChanges> stringChanges, List<Payload> anchorPayloads = null, Payload anchorReplacePayload = null)
|
||||
{
|
||||
if (stringChanges.Count == 0)
|
||||
{
|
||||
@@ -265,47 +264,51 @@ namespace PlayerTags.Features
|
||||
|
||||
foreach (var tagPosition in tagPositionsOrdered)
|
||||
{
|
||||
if (stringChanges.TryGetValue(tagPosition, out var payloads) && payloads.Any())
|
||||
if (stringChanges.TryGetValue(tagPosition, out var payloads) && payloads.Payloads.Any())
|
||||
{
|
||||
AddSpacesBetweenTextPayloads(stringChanges[tagPosition], tagPosition);
|
||||
AddSpacesBetweenTextPayloads(stringChanges[tagPosition].Payloads, tagPosition);
|
||||
if (tagPosition == TagPosition.Before)
|
||||
{
|
||||
if (anchorPayloads != null && anchorPayloads.Any())
|
||||
Payload anchorFirst = payloads.ForceUsingSingleAnchorPayload ? anchorReplacePayload : anchorPayloads?.FirstOrDefault();
|
||||
|
||||
if (anchorFirst != null)
|
||||
{
|
||||
var anchorPayload = anchorPayloads.First();
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorPayload);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex, payloads);
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorFirst);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex, payloads.Payloads);
|
||||
}
|
||||
else
|
||||
{
|
||||
seString.Payloads.InsertRange(0, payloads);
|
||||
seString.Payloads.InsertRange(0, payloads.Payloads);
|
||||
}
|
||||
}
|
||||
else if (tagPosition == TagPosition.After)
|
||||
{
|
||||
if (anchorPayloads != null && anchorPayloads.Any())
|
||||
Payload anchorLast = payloads.ForceUsingSingleAnchorPayload? anchorReplacePayload : anchorPayloads?.LastOrDefault();
|
||||
|
||||
if (anchorLast != null)
|
||||
{
|
||||
var anchorPayload = anchorPayloads.Last();
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorPayload);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex + 1, payloads);
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorLast);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex + 1, payloads.Payloads);
|
||||
}
|
||||
else
|
||||
{
|
||||
seString.Payloads.AddRange(payloads);
|
||||
seString.Payloads.AddRange(payloads.Payloads);
|
||||
}
|
||||
}
|
||||
else if (tagPosition == TagPosition.Replace)
|
||||
{
|
||||
if (anchorReplacePayload != null)
|
||||
Payload anchorReplace = anchorReplacePayload;
|
||||
|
||||
if (anchorReplace != null)
|
||||
{
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorReplacePayload);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex, payloads);
|
||||
seString.Payloads.Remove(anchorReplacePayload);
|
||||
var anchorPayloadIndex = seString.Payloads.IndexOf(anchorReplace);
|
||||
seString.Payloads.InsertRange(anchorPayloadIndex, payloads.Payloads);
|
||||
seString.Payloads.Remove(anchorReplace);
|
||||
}
|
||||
else
|
||||
{
|
||||
seString.Payloads.Clear();
|
||||
seString.Payloads.AddRange(payloads);
|
||||
seString.Payloads.AddRange(payloads.Payloads);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user