remote-party-finder/csharp/SourceGenerator/SeStringExtensions.cs

37 lines
1007 B
C#

using System.Linq;
using Lumina.Text;
using Lumina.Text.Payloads;
namespace SourceGenerator;
internal static class SeStringExtensions {
internal static string TextValue(this SeString str) {
var payloads = str.Payloads
.Select(p => {
if (p is TextPayload text) {
return p.Data[0] == 0x03
? text.RawString[1..]
: text.RawString;
}
if (p.Data.Length <= 1) {
return "";
}
if (p.Data[1] == 0x1F) {
return "-";
}
if (p.Data.Length > 2 && p.Data[1] == 0x20) {
var value = p.Data.Length > 4
? p.Data[3] - 1
: p.Data[2];
return ((char) (48 + value)).ToString();
}
return "";
});
return string.Join("", payloads);
}
}