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

@ -363,10 +363,10 @@ void WorldMap::loadZonesFromDBC() {
cont.locTop = z.locTop; cont.locBottom = z.locBottom;
first = false;
} else {
cont.locLeft = std::max(cont.locLeft, z.locLeft);
cont.locRight = std::min(cont.locRight, z.locRight);
cont.locTop = std::max(cont.locTop, z.locTop);
cont.locBottom = std::min(cont.locBottom, z.locBottom);
cont.locLeft = std::min(cont.locLeft, z.locLeft);
cont.locRight = std::max(cont.locRight, z.locRight);
cont.locTop = std::min(cont.locTop, z.locTop);
cont.locBottom = std::max(cont.locBottom, z.locBottom);
}
}
}