feat(DalamudSystemMenu): localize, switch around options (closes #336)

This commit is contained in:
goat 2021-04-28 15:27:33 +02:00
parent 0448c9e36a
commit a5aa9cd849
No known key found for this signature in database
GPG key ID: F18F057873895461
2 changed files with 20 additions and 9 deletions

View file

@ -4,7 +4,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using CheapLoc;
using Dalamud.Hooking;
using FFXIVClientStructs.FFXIV.Component.GUI;
@ -113,16 +113,19 @@ namespace Dalamud.Game.Addon
var secondStringEntry = &atkValueArgs[6 + 15];
atkValueChangeType(secondStringEntry, ValueType.String);
var strPlugins = Encoding.UTF8.GetBytes(Loc.Localize("SystemMenuPlugins", "Dalamud Plugins"));
var strSettings = Encoding.UTF8.GetBytes(Loc.Localize("SystemMenuSettings", "Dalamud Settings"));
// do this the most terrible way possible since im lazy
var bytes = stackalloc byte[17];
Marshal.Copy(System.Text.Encoding.ASCII.GetBytes("Dalamud Settings"), 0, new IntPtr(bytes), 16);
bytes[16] = 0x0;
var bytes = stackalloc byte[strPlugins.Length + 1];
Marshal.Copy(strPlugins, 0, new IntPtr(bytes), strPlugins.Length);
bytes[strPlugins.Length] = 0x0;
atkValueSetString(firstStringEntry, bytes); // this allocs the string properly using the game's allocators and copies it, so we dont have to worry about memory fuckups
var bytes2 = stackalloc byte[16];
Marshal.Copy(System.Text.Encoding.ASCII.GetBytes("Dalamud Plugins"), 0, new IntPtr(bytes2), 15);
bytes2[15] = 0x0;
var bytes2 = stackalloc byte[strSettings.Length + 1];
Marshal.Copy(strSettings, 0, new IntPtr(bytes2), strSettings.Length);
bytes2[strSettings.Length] = 0x0;
atkValueSetString(secondStringEntry, bytes2);
@ -137,11 +140,11 @@ namespace Dalamud.Game.Addon
{
if (commandId == 69420)
{
this.dalamud.DalamudUi.OpenSettings();
this.dalamud.DalamudUi.OpenPluginInstaller();
}
else if (commandId == 69421)
{
this.dalamud.DalamudUi.OpenPluginInstaller();
this.dalamud.DalamudUi.OpenSettings();
}
else
{

View file

@ -1,5 +1,6 @@
using System;
using System.Runtime.InteropServices;
using System.Text;
using Serilog;
namespace Dalamud.Game.Internal.Libc {
@ -39,6 +40,13 @@ namespace Dalamud.Game.Internal.Libc {
return new OwnedStdString(pReallocString, DeallocateStdString);
}
public OwnedStdString NewString(string content, Encoding encoding = null)
{
encoding ??= Encoding.UTF8;
return this.NewString(encoding.GetBytes(content));
}
private void DeallocateStdString(IntPtr address) {
this.stdStringDeallocate(address);
}