refactor(core): D.5.3/B.2 — move ShortcutStore to Core.Items (decouple Load from the wire type)

Matches the ClientObjectTable model-placement convention; Load now takes (slot,objGuid) pairs so
the store has no Core.Net dependency. + self-drop wire-count assert + comment fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-20 15:50:33 +02:00
parent 250f7827be
commit ff3592ec25
4 changed files with 32 additions and 28 deletions

View file

@ -581,6 +581,8 @@ public class ToolbarControllerTests
Assert.Equal(0x5001u, slots[Row1[3]].Cell.ItemId); // re-added to source (net no-op)
Assert.Contains((3u, 0x5001u), adds); // AddShortcut(3, A) sent
Assert.Single(removes); // exactly RemoveShortcut(3) [from the lift]
Assert.Single(adds); // exactly AddShortcut(3, A) [the re-place]
}
[Fact]

View file

@ -1,24 +1,21 @@
using System.Collections.Generic;
using AcDream.Core.Net.Items;
using AcDream.Core.Net.Messages;
using AcDream.Core.Items;
using Xunit;
namespace AcDream.Core.Net.Tests.Items;
namespace AcDream.Core.Tests.Items;
public class ShortcutStoreTests
{
[Fact]
public void Load_mapsIndexToObjId_skipsEmptyAndOutOfRange()
public void Load_mapsSlotToObjId_skipsEmptyAndOutOfRange()
{
var store = new ShortcutStore();
var entries = new List<PlayerDescriptionParser.ShortcutEntry>
store.Load(new (int, uint)[]
{
new(Index: 0, ObjectGuid: 0x5001u, SpellId: 0, Layer: 0),
new(Index: 3, ObjectGuid: 0x5002u, SpellId: 0, Layer: 0),
new(Index: 5, ObjectGuid: 0u, SpellId: 7, Layer: 1), // spell-only → skipped (item store)
new(Index: 99, ObjectGuid: 0x5003u, SpellId: 0, Layer: 0), // out of range → skipped
};
store.Load(entries);
(0, 0x5001u),
(3, 0x5002u),
(5, 0u), // empty/spell → skipped
(99, 0x5003u), // out of range → skipped
});
Assert.Equal(0x5001u, store.Get(0));
Assert.Equal(0x5002u, store.Get(3));
Assert.Equal(0u, store.Get(5));