f37369cdda
Co-authored-by: Cursor <cursoragent@cursor.com>
44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using FFXIVClientStructs.FFXIV.Client.LayoutEngine;
|
|
using FFXIVClientStructs.FFXIV.Client.System.String;
|
|
using FFXIVClientStructs.Interop;
|
|
using FFXIVClientStructs.STD;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace HSUI.Helpers
|
|
{
|
|
public static class EncryptedStringsHelper
|
|
{
|
|
public static unsafe string GetString(string original)
|
|
{
|
|
if (!original.StartsWith("_rsv_"))
|
|
{
|
|
return original;
|
|
}
|
|
|
|
try
|
|
{
|
|
TempLayoutWorld* layoutWorld = (TempLayoutWorld*)LayoutWorld.Instance();
|
|
StdMap<Utf8String, Pointer<byte>> map = layoutWorld->RsvMap[0];
|
|
Pointer<byte> demangled = map[new Utf8String(original)];
|
|
if (demangled.Value != null && Marshal.PtrToStringUTF8((IntPtr)demangled.Value) is { } result)
|
|
{
|
|
return result;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Plugin.Logger.Error("Error reading rsv map:\n" + e.StackTrace);
|
|
}
|
|
|
|
return original;
|
|
}
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Explicit, Size = 0x230)]
|
|
public unsafe struct TempLayoutWorld
|
|
{
|
|
[FieldOffset(0x220)] public StdMap<Utf8String, Pointer<byte>>* RsvMap;
|
|
}
|
|
}
|