feat: port retail magic lifecycle and retained spell UI
Complete the retail cast-intent, target, component, enchantment, and busy-state paths; mount the DAT-authored spell bar, spellbook, component book, effects panels, and shared panel lifecycle; and add scoped input plus conformance coverage. Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
parent
7b7ffcd278
commit
07be994d97
84 changed files with 17822 additions and 1051 deletions
|
|
@ -147,6 +147,31 @@ public sealed class ClientCommandRequestsTests
|
|||
Assert.Equal(25u, Read(body, 16));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddSpellFavorite_MatchesRetailThreeIntegerPayload()
|
||||
{
|
||||
byte[] body = ClientCommandRequests.BuildAddSpellFavorite(9u, 42u, 3, 7);
|
||||
|
||||
Assert.Equal(24, body.Length);
|
||||
Assert.Equal(ClientCommandRequests.AddSpellFavoriteOpcode, Read(body, 8));
|
||||
Assert.Equal(42u, Read(body, 12));
|
||||
Assert.Equal(3u, Read(body, 16));
|
||||
Assert.Equal(7u, Read(body, 20));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RemoveFavoriteAndFilter_MatchRetailPayloads()
|
||||
{
|
||||
byte[] remove = ClientCommandRequests.BuildRemoveSpellFavorite(2u, 42u, 6);
|
||||
byte[] filter = ClientCommandRequests.BuildSpellbookFilter(3u, 0xA5u);
|
||||
|
||||
Assert.Equal(ClientCommandRequests.RemoveSpellFavoriteOpcode, Read(remove, 8));
|
||||
Assert.Equal(42u, Read(remove, 12));
|
||||
Assert.Equal(6u, Read(remove, 16));
|
||||
Assert.Equal(ClientCommandRequests.SpellbookFilterOpcode, Read(filter, 8));
|
||||
Assert.Equal(0xA5u, Read(filter, 12));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LegacyFriendsCommand_IsAControlMessageWithoutGameActionEnvelope()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue