diff --git a/src/AcDream.Core.Net/Messages/GameEvents.cs b/src/AcDream.Core.Net/Messages/GameEvents.cs
index edb98809..71c7a4f5 100644
--- a/src/AcDream.Core.Net/Messages/GameEvents.cs
+++ b/src/AcDream.Core.Net/Messages/GameEvents.cs
@@ -402,11 +402,17 @@ public static class GameEvents
return BinaryPrimitives.ReadUInt32LittleEndian(payload);
}
- /// 0x00A0 InventoryServerSaveFailed: revert a speculative local inventory op.
- public static uint? ParseInventoryServerSaveFailed(ReadOnlySpan payload)
+ /// 0x00A0 InventoryServerSaveFailed: revert a speculative local inventory op.
+ /// (itemGuid, weenieError) — ACE GameEventInventoryServerSaveFailed.cs; holtburger
+ /// events.rs:147 reads both fields.
+ public readonly record struct InventoryServerSaveFailed(uint ItemGuid, uint WeenieError);
+
+ public static InventoryServerSaveFailed? ParseInventoryServerSaveFailed(ReadOnlySpan payload)
{
- if (payload.Length < 4) return null;
- return BinaryPrimitives.ReadUInt32LittleEndian(payload);
+ if (payload.Length < 8) return null;
+ return new InventoryServerSaveFailed(
+ BinaryPrimitives.ReadUInt32LittleEndian(payload),
+ BinaryPrimitives.ReadUInt32LittleEndian(payload.Slice(4)));
}
/// 0x0052 CloseGroundContainer: server closed a ground container view.
diff --git a/tests/AcDream.Core.Net.Tests/Messages/GameEventsInventoryTests.cs b/tests/AcDream.Core.Net.Tests/Messages/GameEventsInventoryTests.cs
index c77f646b..0517a1ff 100644
--- a/tests/AcDream.Core.Net.Tests/Messages/GameEventsInventoryTests.cs
+++ b/tests/AcDream.Core.Net.Tests/Messages/GameEventsInventoryTests.cs
@@ -59,4 +59,17 @@ public sealed class GameEventsInventoryTests
Assert.Equal(3u, p.Value.Placement);
Assert.Equal(1u, p.Value.ContainerType);
}
+
+ [Fact]
+ public void ParseInventoryServerSaveFailed_readsGuidAndError()
+ {
+ var b = new byte[8];
+ BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(0), 0x50000A01u); // itemGuid
+ BinaryPrimitives.WriteUInt32LittleEndian(b.AsSpan(4), 0x0Au); // weenieError
+
+ var p = GameEvents.ParseInventoryServerSaveFailed(b);
+ Assert.NotNull(p);
+ Assert.Equal(0x50000A01u, p!.Value.ItemGuid);
+ Assert.Equal(0x0Au, p.Value.WeenieError);
+ }
}