feat(ui): preserve exact retail shortcut records
Carry signed index, object id, and raw spell word losslessly through PlayerDescription, session storage, drag mutation, and AddShortcut wire serialization while keeping gmToolbarUI object-only. Retire AP-103 and record the live ACE relog persistence gate. Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
parent
e65119f0c6
commit
b5b230c860
21 changed files with 271 additions and 181 deletions
14
src/AcDream.Core/Items/ShortcutEntry.cs
Normal file
14
src/AcDream.Core/Items/ShortcutEntry.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
namespace AcDream.Core.Items;
|
||||
|
||||
/// <summary>
|
||||
/// Lossless retail <c>ShortCutData</c> value: signed slot index, object id,
|
||||
/// and raw 32-bit spell word. The C++ object is 16 bytes including its vtable;
|
||||
/// the packed value is exactly 12 bytes. Retail anchors:
|
||||
/// <c>ShortCutData::ShortCutData @ 0x005D55E0</c>,
|
||||
/// <c>ShortCutManager::AddShortCut @ 0x005D5790</c>, and
|
||||
/// <c>acclient.h:36484</c>.
|
||||
/// </summary>
|
||||
public readonly record struct ShortcutEntry(int Index, uint ObjectId, uint SpellId)
|
||||
{
|
||||
public ShortcutEntry WithIndex(int index) => this with { Index = index };
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue