Use SeStringEvaluator instead of RaptureTextModule for the debug display

This commit is contained in:
RedworkDE 2025-12-23 14:58:47 +01:00
parent f76d77f79d
commit 186b1b8376
2 changed files with 15 additions and 8 deletions

View file

@ -1,18 +1,18 @@
using Dalamud.Data;
using Dalamud.Game.Text.Evaluator;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Client.System.String;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Client.UI.Misc;
using FFXIVClientStructs.FFXIV.Component.Text;
using FFXIVClientStructs.Interop;
using Lumina.Excel;
using Lumina.Text.ReadOnly;
using System.Diagnostics.CodeAnalysis;
using Lumina.Text.ReadOnly;
using System.Linq;
namespace Dalamud.Game.Chat;
@ -150,12 +150,9 @@ internal unsafe readonly struct LogMessage(LogMessageQueueItem* ptr) : ILogMessa
// the formatting logic is taken from RaptureLogModule_Update
using var utf8 = new Utf8String();
SetName(logModule, this.SourceEntity);
SetName(logModule, this.TargetEntity);
logModule->RaptureTextModule->FormatString(this.GameData.Value.Text.ToDalamudString().EncodeWithNullTerminator(), &ptr->Parameters, &utf8);
return new ReadOnlySeString(utf8.AsSpan());
return Service<SeStringEvaluator>.Get().EvaluateFromLogMessage(this.LogMessageId, ptr->Parameters.Select(p => (SeStringParameter)p).ToArray());
void SetName(RaptureLogModule* self, LogMessageEntity item)
{

View file

@ -1,5 +1,7 @@
using System.Globalization;
using FFXIVClientStructs.FFXIV.Component.Text;
using Lumina.Text.ReadOnly;
using DSeString = Dalamud.Game.Text.SeStringHandling.SeString;
@ -75,4 +77,12 @@ public readonly struct SeStringParameter
public static implicit operator SeStringParameter(string value) => new(value);
public static implicit operator SeStringParameter(ReadOnlySpan<byte> value) => new(value);
public static unsafe implicit operator SeStringParameter(TextParameter value) => value.Type switch
{
TextParameterType.Uninitialized => default,
TextParameterType.Integer => new((uint)value.IntValue),
TextParameterType.ReferencedUtf8String => new(new ReadOnlySeString(value.ReferencedUtf8StringValue->Utf8String.AsSpan())),
TextParameterType.String => new(value.StringValue),
};
}