- Put the new bag into bank bag slots with PutItemInBag(); EquipCursorItem()
doesn't place bags there. Character bag slots keep EquipCursorItem() with
PutItemInBag() as a fallback if the bag stays on the cursor.
- SwapBag() phase 2 waits up to ~3 s (12 x 0.25 s) for the old bag to be
reported empty before placing the new one, since instant moves out of the
bank can take a moment to be confirmed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019W3rwt5PZSpEDkXYzRuRhH
MoveItems() uses ClassicAPI's C_Container.MoveItem() when available (and
no move equips a bag): each round sends every move whose slots are free
and unlocked, then waits for BAG_UPDATE_DELAYED (1 s fallback) before the
next round. Restack() queues exact amounts; EmptyBag()/FillBag() move
whole stacks. Locked slots are retried up to 5 times, stock-state
handling matches ProcessMoveQueue(), and the cursor-based queue remains
the fallback. Approach taken from brues-code/pfUI libs/libbagsort.lua.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019W3rwt5PZSpEDkXYzRuRhH