acdream/tests/AcDream.Core.Net.Tests/Messages
Erik f57db35cec fix(net): xpSpent is a dword on the wire, and we were sending eight bytes
RaiseAttribute, RaiseVital, and RaiseSkill each wrote a 64-bit xpSpent,
producing a 24-byte action where the server expects 20. ACE's
GameActionRaiseAttribute and its Vital and Skill siblings read
message.Payload.ReadUInt32(); holtburger's RaiseAttributeData declares
xp_spent: u32 and advances the offset by four. Both oracles agree, and the
four extra bytes were tail the server never reads.

These three are live-wired, from the character sheet through the command
router to SendRaiseAttribute, so this was shipping on every attribute, vital,
and skill raise. It has not caused a visible failure because ACE reads the low
dword and stops, and a single raise cost has never approached the dword
ceiling. That is luck about value ranges, not correctness about layout.

Worth noting the shape of the miss: the sibling builder BuildTrainSkill had
already been corrected to a 20-byte, 32-bit credits field, and its test is even
named U32CreditsNotU64. The same class of bug was found and fixed once in this
file and the other three cases were left behind.

The parameter stays ulong because the cost comes from 64-bit server XP tables
several layers up in the App and Runtime command chain; narrowing that end to
end is a separate change and is filed in the audit's open questions. Nothing is
lost at the wire: a cost that does not fit in a dword was never expressible
here.

The existing test asserted the 24-byte shape and is corrected, joined by a
theory that sweeps zero, one, a realistic cost, and uint.MaxValue across both
remaining builders.

Core.Net tests go 655 to 659.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 01:59:47 +02:00
..
AceWireWriter.cs test(net): generate wire fixtures from ACE's own writer, not hand-typed hex 2026-07-29 01:49:15 +02:00
AllegianceRequestsTests.cs feat(allegiance): Phase H.2 AllegianceRequests + AllegianceTree model 2026-04-18 17:17:45 +02:00
AppraiseInfoParserTests.cs fix #234: port retail appraisal floaty and inscriptions 2026-07-23 12:12:57 +02:00
AppraiseTests.cs fix(gameplay): reconcile wield ownership and target facing 2026-07-15 08:19:23 +02:00
AutonomousPositionTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
CastSpellTests.cs feat: port retail magic lifecycle and retained spell UI 2026-07-15 10:55:22 +02:00
CharacterActionsTests.cs fix(net): xpSpent is a dword on the wire, and we were sending eight bytes 2026-07-29 01:59:47 +02:00
CharacterEnterWorldTests.cs perf(net): frame recurring sends in place 2026-07-25 06:02:52 +02:00
CharacterListTests.cs fix(net): conform character entry and session shutdown 2026-07-21 10:33:03 +02:00
CharacterLogOffTests.cs fix(net): conform character entry and session shutdown 2026-07-21 10:33:03 +02:00
ChatTests.cs fix(net): ranged speech carries a range float our parser was eating 2026-07-29 01:51:34 +02:00
ClientCommandRequestsTests.cs feat(ui): port retail spellbook interactions 2026-07-15 16:26:30 +02:00
CombatEventTests.cs fix(net): Phase L.1c conform combat wire events 2026-04-28 10:54:50 +02:00
CreateObjectTests.cs fix(ui): preserve retail item titles and spacing 2026-07-24 05:21:01 +02:00
DeleteObjectTests.cs feat(net): port retail physics spawn and event timestamps 2026-07-14 00:22:17 +02:00
EmoteTextTests.cs feat(net): #18 holtburger inbound chat parity - EmoteText, SoulEmote, ServerMessage, PlayerKilled, WeenieError + Windows-1252 codec 2026-04-25 19:06:01 +02:00
GameActionLoginCompleteTests.cs feat(net): Phase 4.8 — send GameAction.LoginComplete after EnterWorld 2026-04-11 23:36:19 +02:00
GameEventDispatcherTests.cs fix(net): stop dropping every transient string on a chat type that isn't sent 2026-07-29 01:58:02 +02:00
GameEventsInventoryTests.cs fix(net): D.2b-B B-Wire — ParseInventoryServerSaveFailed reads weenieError 2026-06-21 18:55:56 +02:00
HearSpeechGoldenTests.cs fix(net): ranged speech carries a range float our parser was eating 2026-07-29 01:51:34 +02:00
InteractRequestsTests.cs test(B.5): exercise i32 sign-correctness for BuildPickUp.placement 2026-05-14 15:05:07 +02:00
InventoryActionsTests.cs fix #234: port retail appraisal floaty and inscriptions 2026-07-23 12:12:57 +02:00
InventoryRemoveObjectTests.cs feat(net): D.2b-B B-Wire — InventoryRemoveObject (0x0024) parser 2026-06-21 18:52:21 +02:00
JumpActionTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
MoveToStateGoldenTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
MoveToStateTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
ObjDescEventTests.cs feat(net): port retail physics spawn and event timestamps 2026-07-14 00:22:17 +02:00
ParentEventTests.cs feat(combat): port retail held weapon parenting 2026-07-11 13:02:26 +02:00
PickupEventTests.cs fix(B.5): handle PickupEvent 0xF74A so picked-up items despawn locally 2026-05-14 16:13:16 +02:00
PlayerKilledTests.cs feat(net): #18 holtburger inbound chat parity - EmoteText, SoulEmote, ServerMessage, PlayerKilled, WeenieError + Windows-1252 codec 2026-04-25 19:06:01 +02:00
PlayScriptGoldenTests.cs test(net): generate wire fixtures from ACE's own writer, not hand-typed hex 2026-07-29 01:49:15 +02:00
PositionPackTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
PrivateUpdatePropertyInt64Tests.cs fix(ui): port live experience quality updates (#217) 2026-07-13 20:43:48 +02:00
PrivateUpdatePropertyIntTests.cs feat(net): D.2b-B B-Wire — PrivateUpdatePropertyInt (0x02CD) parser 2026-06-21 18:50:56 +02:00
ProjectileVfxPacketFixtures.cs feat(net): port retail physics spawn and event timestamps 2026-07-14 00:22:17 +02:00
PublicUpdatePropertyIntTests.cs feat(D.5.2): PublicUpdatePropertyInt (0x02CE) parser 2026-06-17 18:29:23 +02:00
RawMotionStatePackTests.cs feat(L.2b): outbound movement wire parity — RawMotionState default-difference, JumpPack, contact byte 2026-06-30 22:30:01 +02:00
ServerMessageTests.cs feat(net): #18 holtburger inbound chat parity - EmoteText, SoulEmote, ServerMessage, PlayerKilled, WeenieError + Windows-1252 codec 2026-04-25 19:06:01 +02:00
SetStackSizeTests.cs feat(net): D.2b-B B-Wire — SetStackSize (0x0197) parser 2026-06-21 18:51:42 +02:00
SetStateTests.cs feat(phys L.2g slice 1): inbound SetState (0xF74B) parser 2026-05-12 22:15:31 +02:00
SetTurbineChatChannelsTests.cs feat(net+chat): #19 TurbineChat (0xF7DE) codec + ChatChannelInfo + SetTurbineChatChannels parser 2026-04-25 19:44:56 +02:00
SocialActionsTests.cs feat(ui): share indicator detail panels 2026-07-17 10:27:41 +02:00
SocialStateMessagesTests.cs feat(chat): port retail client command families 2026-07-13 14:50:15 +02:00
SoulEmoteTests.cs feat(net): #18 holtburger inbound chat parity - EmoteText, SoulEmote, ServerMessage, PlayerKilled, WeenieError + Windows-1252 codec 2026-04-25 19:06:01 +02:00
TurbineChatTests.cs feat(net+chat): #19 TurbineChat (0xF7DE) codec + ChatChannelInfo + SetTurbineChatChannels parser 2026-04-25 19:44:56 +02:00
UpdateMotionTests.cs feat(R4-V3): wire completion - mt 8/9 parsing + full params exposure + the mt-0 sticky trailer (closes M7, M13, M14-wire-note) 2026-07-03 11:53:53 +02:00
UpdatePositionTests.cs feat(net): port retail physics spawn and event timestamps 2026-07-14 00:22:17 +02:00
VectorUpdateGoldenTests.cs test(net): generate wire fixtures from ACE's own writer, not hand-typed hex 2026-07-29 01:49:15 +02:00