From 93f08a4cb56f0709c392940b740b7dcd4eb8e375 Mon Sep 17 00:00:00 2001 From: KazWolfe Date: Sat, 18 Nov 2023 12:17:18 -0800 Subject: [PATCH] fix: Use SetValue for FlyText string arrays (#1532) - Might fix a bug causing crashes with certain FlyText use cases, maybe. - Also allows building Dalamud under .NET 8 local envs. --- Dalamud/Game/Gui/FlyText/FlyTextGui.cs | 42 +++++++++++--------------- global.json | 4 +-- 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/Dalamud/Game/Gui/FlyText/FlyTextGui.cs b/Dalamud/Game/Gui/FlyText/FlyTextGui.cs index a7839afa8..36056883e 100644 --- a/Dalamud/Game/Gui/FlyText/FlyTextGui.cs +++ b/Dalamud/Game/Gui/FlyText/FlyTextGui.cs @@ -1,4 +1,3 @@ -using System; using System.Runtime.InteropServices; using System.Threading.Tasks; @@ -113,32 +112,26 @@ internal sealed class FlyTextGui : IDisposable, IServiceType, IFlyTextGui numArray->IntArray[numOffset + 2] = unchecked((int)val1); numArray->IntArray[numOffset + 3] = unchecked((int)val2); numArray->IntArray[numOffset + 4] = unchecked((int)damageTypeIcon); // Icons for damage type - numArray->IntArray[numOffset + 5] = 5; // Unknown + numArray->IntArray[numOffset + 5] = 5; // Unknown numArray->IntArray[numOffset + 6] = unchecked((int)color); numArray->IntArray[numOffset + 7] = unchecked((int)icon); numArray->IntArray[numOffset + 8] = 0; // Unknown numArray->IntArray[numOffset + 9] = 0; // Unknown, has something to do with yOffset - fixed (byte* pText1 = text1.Encode()) - { - fixed (byte* pText2 = text2.Encode()) - { - strArray->StringArray[strOffset + 0] = pText1; - strArray->StringArray[strOffset + 1] = pText2; + strArray->SetValue((int)strOffset + 0, text1.Encode(), false, true, false); + strArray->SetValue((int)strOffset + 1, text2.Encode(), false, true, false); - this.addFlyTextNative( - flytext, - actorIndex, - 1, - (IntPtr)numArray, - numOffset, - 10, - (IntPtr)strArray, - strOffset, - 2, - 0); - } - } + this.addFlyTextNative( + flytext, + actorIndex, + 1, + (IntPtr)numArray, + numOffset, + 10, + (IntPtr)strArray, + strOffset, + 2, + 0); } private static byte[] Terminate(byte[] source) @@ -230,7 +223,8 @@ internal sealed class FlyTextGui : IDisposable, IServiceType, IFlyTextGui if (!dirty) { Log.Verbose("[FlyText] Calling flytext with original args."); - return this.createFlyTextHook.Original(addonFlyText, kind, val1, val2, text2, color, icon, damageTypeIcon, text1, yOffset); + return this.createFlyTextHook.Original(addonFlyText, kind, val1, val2, text2, color, icon, + damageTypeIcon, text1, yOffset); } var terminated1 = Terminate(tmpText1.Encode()); @@ -299,10 +293,10 @@ internal class FlyTextGuiPluginScoped : IDisposable, IServiceType, IFlyTextGui { this.flyTextGuiService.FlyTextCreated += this.FlyTextCreatedForward; } - + /// public event IFlyTextGui.OnFlyTextCreatedDelegate? FlyTextCreated; - + /// public void Dispose() { diff --git a/global.json b/global.json index 3d9090158..133f31ec2 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "sdk": { "version": "7.0.0", - "rollForward": "latestMinor", + "rollForward": "latestMajor", "allowPrerelease": true } -} \ No newline at end of file +}