NominaOcculta/NominaOcculta/Util.cs

69 lines
2.0 KiB
C#
Raw Normal View History

2021-09-24 17:39:47 +00:00
using System;
using System.Collections.Generic;
2022-05-11 03:48:01 +00:00
using System.Runtime.InteropServices;
using Dalamud.Game.ClientState.Objects.Types;
2021-09-24 17:39:47 +00:00
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads;
2022-05-10 01:57:31 +00:00
namespace NominaOcculta;
2022-05-10 01:57:31 +00:00
internal static class Util {
internal const string SheetName = "CharaMakeName";
2021-09-24 17:39:47 +00:00
2022-05-10 01:57:31 +00:00
internal static void ReplacePlayerName(this SeString text, string name, string replacement) {
if (string.IsNullOrEmpty(name)) {
return;
2021-09-24 17:39:47 +00:00
}
2022-05-10 01:57:31 +00:00
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);
}
2021-09-24 17:39:47 +00:00
2022-05-10 01:57:31 +00:00
break;
}
2021-09-24 17:39:47 +00:00
}
2022-05-10 01:57:31 +00:00
}
2021-09-24 17:39:47 +00:00
2022-05-11 03:48:01 +00:00
internal static unsafe string? RawName(this GameObject obj) {
var gameObj = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*) obj.Address;
return Marshal.PtrToStringUTF8((IntPtr) gameObj->Name);
}
2022-05-10 01:57:31 +00:00
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);
}
2021-09-24 17:39:47 +00:00
2022-05-10 01:57:31 +00:00
private static unsafe byte[] ReadRawBytes(IntPtr ptr) {
if (ptr == IntPtr.Zero) {
return Array.Empty<byte>();
}
2021-09-24 17:39:47 +00:00
2022-05-10 01:57:31 +00:00
var bytes = new List<byte>();
2021-09-24 17:39:47 +00:00
2022-05-10 01:57:31 +00:00
var bytePtr = (byte*) ptr;
while (*bytePtr != 0) {
bytes.Add(*bytePtr);
bytePtr += 1;
2021-09-24 17:39:47 +00:00
}
2022-05-10 01:57:31 +00:00
return bytes.ToArray();
2021-09-24 17:39:47 +00:00
}
}