feat: server-synced bag sort, fix world map continent bounds, update docs

Inventory sort: clicking "Sort Bags" now generates CMSG_SWAP_ITEM packets
to move items server-side (one swap per frame to avoid race conditions).
Client-side sort runs immediately for visual preview; server swaps follow.
New Inventory::computeSortSwaps() computes minimal swap sequence using
selection-sort permutation on quality→itemId→stackCount comparator.

World map: fix continent bounds derivation that used intersection (max/min)
instead of union (min/max) of child zone bounds, causing continent views
to display zoomed-in/clipped.

Update README.md and docs/status.md with current features, release info,
and known gaps (v1.8.2-preview, 664 opcode handlers, NPC voices, bag
independence, CharSections auto-detect, quest GO server limitation).
This commit is contained in:
Kelsi 2026-03-24 09:24:09 -07:00
parent 62e99da1c2
commit c18720f0f0
7 changed files with 145 additions and 22 deletions

View file

@ -129,6 +129,18 @@ public:
// Purely client-side: reorders the local inventory struct without server interaction.
void sortBags();
// A single swap operation using WoW bag/slot addressing (for CMSG_SWAP_ITEM).
struct SwapOp {
uint8_t srcBag;
uint8_t srcSlot;
uint8_t dstBag;
uint8_t dstSlot;
};
// Compute the CMSG_SWAP_ITEM operations needed to reach sorted order.
// Does NOT modify the inventory — caller is responsible for sending packets.
std::vector<SwapOp> computeSortSwaps() const;
// Test data
void populateTestItems();