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

@ -94,6 +94,7 @@ send_wield(item, mask):
send GetAndWieldItem(item.id, mask)
on server-confirmed WieldObject(item):
reconcile the item's optimistic rollback snapshot separately
if item matches pending.requestedItem
and pending.blockingItem is none:
clear pending
@ -116,7 +117,10 @@ The request is not complete when `GetAndWieldItem` is merely sent. Retail
`UIAttemptWield` records `prevRequest = IR_WIELD` and leaves the item waiting
until `ServerSaysMoveItem` reconciles it. acdream therefore keeps AutoWield
busy through the final authoritative `WieldObject`; allowing another switch
during the optimistic interval makes ACE reject otherwise valid items.
during the optimistic interval makes ACE reject otherwise valid items. Retail
`ACCWeenieObject::ServerSaysMoveItem @ 0x0058DBB0` clears the matching request
directly; that UI completion is intentionally independent of the object's
separate optimistic rollback counter.
## Known remaining retail surface