35 lines
1.2 KiB
C#
35 lines
1.2 KiB
C#
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace MareSynchronos.Utils;
|
|
|
|
public static class ChatUtils
|
|
{
|
|
// Based on https://git.anna.lgbt/anna/ExtraChat/src/branch/main/client/ExtraChat/Util/PayloadUtil.cs
|
|
// This must store a Guid (16 bytes), as Chat 2 converts the data back to one
|
|
|
|
public static RawPayload CreateExtraChatTagPayload(Guid guid)
|
|
{
|
|
var header = (byte[])[
|
|
0x02, // Payload.START_BYTE
|
|
0x27, // SeStringChunkType.Interactable
|
|
2 + 16, // remaining length: ExtraChat sends 19 here but I think its an error
|
|
0x20 // Custom ExtraChat InfoType
|
|
];
|
|
|
|
var footer = (byte)0x03; // Payload.END_BYTE
|
|
|
|
return new RawPayload([..header, ..guid.ToByteArray(), footer]);
|
|
}
|
|
|
|
// We have a unique identifier in the form of a GID, which can be consistently mapped to the same GUID
|
|
public static RawPayload CreateExtraChatTagPayload(string gid)
|
|
{
|
|
var gidBytes = UTF8Encoding.UTF8.GetBytes(gid);
|
|
var hashedBytes = MD5.HashData(gidBytes);
|
|
var guid = new Guid(hashedBytes);
|
|
return CreateExtraChatTagPayload(guid);
|
|
}
|
|
}
|