The event-level retry only protected the ITEM_SLOT_UPDATE broadcast, but
ItemSlot:Update() reads GetContainerItemInfo live on every call and is
invoked from many paths (OnShow → ReloadAllItemSlots, AddItemSlot,
BAG_UPDATE_TYPE, search updates). On a laggy server those live reads
flash slots empty. Add a shared retry queue at the slot-render level so
a slot with self.hasItem set will defer rather than draw nil; cap at
RENDER_RETRY_MAX so a genuinely emptied slot still resolves within ~3s.
Single-retry was still flashing slots empty on the inventory when lag
exceeded 0.25s — the retry pass would read nil and broadcast the empty.
Track a per-slot retry counter (capped at RETRY_MAX=12, ~3s) so we keep
deferring until the link comes back or we hit the ceiling. Bank was
never affected — it goes through PLAYERBANKSLOTS_CHANGED, not BAG_UPDATE.
Under server lag BAG_UPDATE can fire before item data arrives, causing
GetContainerItemInfo to return nil for a still-occupied slot and Bagnon
to broadcast ITEM_SLOT_UPDATE with no link — the slot then renders empty
until the next bag event. UpdateItem now queues a single ~0.25s retry
for the bag when a previously occupied slot reads nil; the retry pass
trusts whatever it reads, so genuine empties still resolve.
- Bagnon_Forever: silence "Unknown Bank Type" for regular guild banks; mirror
IsPersonalBank/IsRealmBank from BANK_PERMISSIONS_PAYLOAD onto GuildBankFrame
and broadcast GUILDBANK_TYPE_DETECTED so other modules pick up the bank type
- TitleFrame: show "Personal Bank" / "Realm Bank" instead of always "Guild Bank";
re-render on GUILDBANK_TYPE_DETECTED to handle event-ordering races
- LibItemSearch: full-tooltip text scan (substring across every line, cached);
bare-text search now falls back to it at 3+ chars so typing "Agility" or
"Strength" finds matching gear. Explicit prefix tt:<text> also works
- SortBtn: rewrite DoContainerMoves to use the 3-pickup swap pattern with
client-side cursor verification and an explicit 50ms inter-swap delay;
much faster than the old link-verify loop without outpacing the realm
server and desyncing after ~10 moves
* fix(db): 🐛 Fixes an issue where personal and realm bank information wouldn't get updated
Introduce the "Blizzard_GuildBankUI" addon in constructor, ensuring that the `GuildBankFrame` is loaded for bank type detection.
Hide the Blizzard Guildbank to avoid both Bagnon and Blizzard banks being shown at the same time.
This breaks the red color from the bank tabs
* refactor(db): ♻️ Use old implementation for personal and guild bank detection
* fix: 🐛 Fix issue where personal and realm bank wasn't identified on guild bank change event
* fix(db): 🐛 Fixes an issue where only current guild bank tab would be added to db
Use `QueryGuildBankTab` to preload items in guild bank tabs and identify trigger in GUILDBANKBAGSLOTS_CHANGED event to update bags when items are ready
* fix(db): 🐛 Correctly index realm and personal banks on initial load
This was made because someone was looking for and not only that but within Bagnon when changing the frame layer there's "HIGH" and "TOPLEVEL", and both of them were doing the same thing