fix(vendor): 6b/6c review corrections — pre-send guards, accumulating staging, trade-note exemption, drag-over tab switch, full-stack sells
Some checks are pending
Headless portability / portable-headless (ubuntu-latest) (push) Waiting to run
Headless portability / portable-headless (windows-latest) (push) Waiting to run
Headless portability / linux-graphical (push) Waiting to run
Headless portability / linux-vulkan (push) Waiting to run
Some checks are pending
Headless portability / portable-headless (ubuntu-latest) (push) Waiting to run
Headless portability / portable-headless (windows-latest) (push) Waiting to run
Headless portability / linux-graphical (push) Waiting to run
Headless portability / linux-vulkan (push) Waiting to run
All thirteen findings, each anchored in recovered bytes or pc reads:
Buy All now runs retail's four PRE-SEND guards in order (pyreal and
alt-currency affordability, container and item slot capacity; strings
recovered from .rdata at 0x007b57b4/0x007b5750) — a rejected batch can
no longer destroy the staged list. Staged adds ACCUMULATE with the
5000 cap ("I can't possibly sell you that much!..." @0x007b59d8) and
the shop rows decrement/restore per RemoveFromShop. The max-value sell
rejection exempts trade notes — the raw bytes at 0x005d1add are `not`
(bitwise), not the pseudo-C's misleading `!`, and the early ret skips
the min check too. BF_RETAINED gates selling end to end (the bit was
already on ClientObject; AP-164's three claims were all false once
traced — RETIRED). Dragging over the vendor window auto-opens the
Selling tab per UpdateDragOver — with a correction to the review's own
citation: token 0x100000cd is the SELLING page, the guard is
"don't reopen the current tab." Sells are full-stack-only (three
retail sites; "Cannot sell part of a stack" @0x007b57ec) and Sell Item
acts on the global selection unconditionally. The confirm string gains
its byte-true trailing '?', dies with the session, staged-row
highlights repaint, dead guids unstage with retail's shopping-list
notice, and move-to-use no longer walks to targets the dispatch would
refuse.
AP-162 narrowed, AP-164 retired, AP-167/AP-168 filed honest.
Clean-room complete solution: 11,508 passed / 4 skipped / 0 failed.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
92ea3977b6
commit
c68ad1e646
11 changed files with 1314 additions and 99 deletions
|
|
@ -303,12 +303,14 @@ public sealed class ItemInteractionController : IDisposable
|
|||
/// case <c>0x100000ca</c>, <c>pc:204011-204079</c>) — the ONE path that
|
||||
/// sends a multi-item Buy in a single wire call. Rides the SAME
|
||||
/// one-request-at-a-time use reservation <see cref="TryBuy"/> does.
|
||||
/// Retail's client-side affordability/pack-capacity pre-checks
|
||||
/// (<c>pc:204017/204032/204053/204067</c>) are deliberately NOT ported
|
||||
/// here either, for the same reason <see cref="TryBuy"/>'s own doc
|
||||
/// comment already gives for the single-item Buy: the server is
|
||||
/// authoritative either way (register AP-162, extended to this batched
|
||||
/// path rather than filing a second near-duplicate row).
|
||||
/// F1 (Slice 6b/6c review): retail's four client-side affordability/
|
||||
/// pack-capacity pre-checks (<c>pc:204017/204032/204053/204067</c>) are
|
||||
/// now ported, but live in the CALLER —
|
||||
/// <c>VendorUiController.BuyAllButtonPressed</c> — ahead of this
|
||||
/// method, not inside it, since they need the staged entries' prices
|
||||
/// and the player's live capacity, neither of which this method
|
||||
/// otherwise touches. <see cref="TryBuy"/>'s single-item path still has
|
||||
/// none (register AP-162, narrowed to that one remaining case).
|
||||
/// </summary>
|
||||
public bool TryBuyAll(
|
||||
uint vendorGuid,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue