fix(inventory): complete switches on wield response

Clear retail AutoWield on the matching authoritative WieldObject instead of waiting for unrelated rollback bookkeeping to drain. This prevents a completed switch from consuming the next weapon activation locally, including crossbows.

Co-Authored-By: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-13 09:00:54 +02:00
parent ea5cf5b842
commit 3e84027885
9 changed files with 47 additions and 21 deletions

View file

@ -744,7 +744,7 @@ public sealed class ClientObjectTableTests
}
[Fact]
public void ConfirmMove_publishesOnlyAfterFinalOutstandingRequest()
public void ConfirmWield_publishesIndependentlyOfRollbackOutstandingCount()
{
var table = new ClientObjectTable();
const uint item = 0x944u, player = 0x50000001u, pack = 0x40000005u;
@ -753,13 +753,12 @@ public sealed class ClientObjectTableTests
table.WieldItemOptimistic(item, player, EquipMask.MeleeWeapon);
table.MoveItemOptimistic(item, pack, 0);
var confirmed = new List<uint>();
table.MoveRequestConfirmed += moved => confirmed.Add(moved.ObjectId);
table.WieldConfirmed += moved => confirmed.Add(moved.ObjectId);
table.ConfirmMove(item);
Assert.Empty(confirmed);
table.ConfirmWield(item);
table.ConfirmMove(item);
Assert.Equal(new[] { item }, confirmed);
Assert.True(table.RollbackMove(item));
}
[Fact]