Mailbox
- Multiple attachments: after taking a single attachment, the remaining attachments in the same mail are reliably read out by Sapi again. Custom auto-jump path removed -- the mailbox now uses the standard refresh again (MAIL_INBOX_UPDATE, currentMenuPosition:OnUpdate), exactly like a fresh mailbox open.
Atlas Loot
- Open keyboard shortcut is now freely rebindable: under Shift+F1, Core, Sku key bindings, Assign key the entry "Open Atlas Loot" appears. The default key remains Ctrl+Shift+L; the user can rebind it like any other Sku shortcut. The new binding takes effect immediately.
- Context-aware jump into boss/instance submenu significantly improved: Path order now matches the actual menu hierarchy (Lists, Plugin, Expansion, Group, Instance/Raid, Boss, Difficulty, Items). The difficulty was previously placed before the instance -- the path could never resolve. Difficulty detection has three fallback layers: primary GetInstanceInfo, secondary the character portrait setting (GetDungeonDifficulty / GetRaidDifficulty -- locked in by the server when entering the instance and therefore reliable), tertiary default "Normal" for world bosses. Lookup tables are now eagerly populated already at login (with staggered retries 5/10/20/35/60 s) and on zone change into an instance. The shortcut therefore works without a cold-start delay on the first key press.
- Wishlist auto-remove: as soon as the "I feel Good" sound plays (a wishlist item has entered the inventory), the item is automatically removed from all wishlist slots. Comparison is primarily by itemID, with a hyperlink-pattern fallback. Items like rings or trinkets that can sit in two slots simultaneously are fully cleaned up.
Character Frame (equipment slots)
- Left-click / right-click on equipped items works again. On TBC Anniversary 2.5.5 a /click <slot> LeftButton without a modifier only triggers UseInventoryItem -- useless for armor, rings and trinkets. Sku now uses a direct API path for equipment slots: Left-click: PickupInventoryItem(slotID) -- the item attaches to the cursor (for swapping, selling or socketing). Right-click: unequip -- PickupInventoryItem + iteration through the bags, first empty slot, PickupContainerItem. If all bags are full the cursor is cleared and a Sapi notice "No free bag space" is announced. On an empty slot an "Empty" notice is announced.
Dungeon Browser
- Auto-refresh removed: the player list is no longer automatically refreshed every 10 seconds. The previous ticker incorrectly affected all Sku menus (currentMenuPosition:OnUpdate independent of the current menu path) and interrupted announcements in completely unrelated submenus.
- Manual "Refresh list" button: triggers a /who search and rebuilds the dungeon browser menu specifically after 0.6 s. Cross-menu protection: if the user navigated away in the meantime nothing happens.
- Sapi feedback after a successful refresh: "Updated. N players found" (or "No players found" / "1 player found"). Issued with a delay after the OnUpdate vocalization so the status announcement is not suppressed.
- Phase transition A to B (sign-up): two staggered passes -- the first pass announces the new status via Sapi, the second pass runs silently in the background (DungeonBrowserRebuildSilent) to integrate the players received via /who. The status announcement now plays through completely while the player list is populated regardless.
- Phase transition B to A (sign-off): double rebuild reduced to one; Sapi announcement is no longer cut off.
- Behavior on group invite: the Sku menu stays open while an invite popup is open. Sku's standard path focuses the popup so the user can interact with Yes/No directly. On accept, Blizzard automatically closes the container frame -- the Sku menu follows and closes too. On decline the container frame stays open and so does the Sku menu.
Stability / quest tooltip
- Crash on quest tooltip request (Shift+Arrow Down) in Shadowmoon Valley fixed. Cause: tInternalChannelName could become nil in CHAT_MSG_CHANNEL_NOTICE/YOU_LEFT (zone-specific channel without a mapping), string.lower(nil) crashed. The follow-up Lua error wiped out the currentMenuPosition pointer, causing all subsequent arrow/Enter key presses to cascade with "attempt to index nil" -- the Sku menu was unusable until reload.
- Three combined safety layers:
1. Direct nil-guard in SkuChat/Core.lua before the string.lower call.
2. Defensive nil-protection in the SkuGenericMenuItem OnUpdate (templates.lua) for currentMenuPosition:OnEnter / VocalizeCurrentMenuName.
3. Recovery guard in the OnClick key dispatcher: on a nil currentMenuPosition Menu[1] is set as a fallback, otherwise the key press is silently discarded -- no more error spam.
Version Display
- Sku.toc and SkuDispatcher/Sku.toc updated to title/version v40.03y.