87 lines
2.6 KiB
C#
Executable File
87 lines
2.6 KiB
C#
Executable File
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Dalamud.Game.Text.SeStringHandling;
|
|
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
|
|
|
namespace NominaOcculta {
|
|
internal static class Util {
|
|
internal static bool ContainsPlayerName(this SeString text, string name) {
|
|
foreach (var payload in text.Payloads) {
|
|
switch (payload) {
|
|
case PlayerPayload pp:
|
|
if (pp.PlayerName.Contains(name)) {
|
|
return true;
|
|
}
|
|
|
|
break;
|
|
case ITextProvider prov:
|
|
if (prov.Text.Contains(name)) {
|
|
return true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
internal static void ReplacePlayerName(this SeString text, string name, string replacement) {
|
|
if (string.IsNullOrEmpty(name)) {
|
|
return;
|
|
}
|
|
|
|
foreach (var payload in text.Payloads) {
|
|
switch (payload) {
|
|
// case PlayerPayload pp:
|
|
// if (pp.PlayerName.Contains(name)) {
|
|
// pp.PlayerName = pp.PlayerName.Replace(name, replacement);
|
|
// }
|
|
//
|
|
// break;
|
|
case TextPayload txt:
|
|
if (txt.Text.Contains(name)) {
|
|
txt.Text = txt.Text.Replace(name, replacement);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static byte[] Terminate(this byte[] bs) {
|
|
var terminated = new byte[bs.Length + 1];
|
|
Array.Copy(bs, terminated, bs.Length);
|
|
terminated[^1] = 0;
|
|
return terminated;
|
|
}
|
|
|
|
internal static SeString ReadRawSeString(IntPtr ptr) {
|
|
var bytes = ReadRawBytes(ptr);
|
|
return SeString.Parse(bytes);
|
|
}
|
|
|
|
internal static string ReadRawString(IntPtr ptr) {
|
|
var bytes = ReadRawBytes(ptr);
|
|
return Encoding.UTF8.GetString(bytes);
|
|
}
|
|
|
|
internal static unsafe byte[] ReadRawBytes(IntPtr ptr) {
|
|
if (ptr == IntPtr.Zero) {
|
|
return Array.Empty<byte>();
|
|
}
|
|
|
|
var bytes = new List<byte>();
|
|
|
|
var bytePtr = (byte*) ptr;
|
|
while (*bytePtr != 0) {
|
|
bytes.Add(*bytePtr);
|
|
bytePtr += 1;
|
|
}
|
|
|
|
return bytes.ToArray();
|
|
}
|
|
}
|
|
}
|