NextBest

Per-character macros that stay in sync with your bags: each profile has a priority list of items, and the macro /uses the first one you actually have.

File Details

1.4.4

  • R
  • May 6, 2026
  • 29.02 KB
  • 7
  • 2.5.5
  • Classic TBC

File Name

NextBest.zip

Supported Versions

  • 2.5.5
## [1.4.4] - 2026-05-06

### Changed
- **Management window:** **Items** / **Mounts** are now **talent-style side tabs**
(icons on the right edge of the frame) instead of buttons under the title;
**Create macro** / **Help** sit higher and the frame height is slightly reduced.

## [1.4.3] - 2026-05-06

### Changed
- **Mounts macros are zone-resolved (Items-style):** the addon now picks a
single priority row in Lua and writes a short macro — **`#showtooltip`** +
**`/dismount [mounted]`** + one **`/cast [nomounted]`** (spells) or
**`/use [nomounted] item:NNN`** (items). The body is rebuilt on
**`ZONE_CHANGED_NEW_AREA`** / **`PLAYER_ENTERING_WORLD`** (registered under
**`pcall`**) so the action bar icon and tooltip always match the mount that
will cast in the current zone, without relying on
**`#showtooltip [flyable]; …`** conditionals.

### Fixed
- **Outland detection:** **`IsFlyableArea()`** is unreliable on some TBC
Anniversary builds. **`mountZoneIsFlyable()`** now walks the
**`C_Map`** parent chain: it returns **`false`** when it hits an Azeroth
continent map (**12 / 13 / 1411 / 1413**) and **`true`** when it hits an
Outland zone map (**100 Hellfire / 102 Zangarmarsh / 104 Shadowmoon /
105 Blade's Edge / 107 Nagrand / 108 Terokkar / 109 Netherstorm /
111 Shattrath / 1955 Shattrath / 530 / 101**). **Shattrath** skips a strict
**`IsFlyableArea()`** gate so flying rows are not stuck on ground in the
city.
- **Engineering item mounts without Fly ticked:** known flight-only item ids
(**34060** Flying Machine Control, **34061** / **35225** Turbo-Charged
Flying Machine Control) are treated as flying-only when picking the
preferred row, so Azeroth no longer chooses them ahead of a ground row.

## [1.4.2] - 2026-05-06

### Added
- **Mounts profiles accept item-based mounts** (e.g. engineering *Turbo-Charged Flying Machine Control*): list rows can be **`{ itemID, name, flying }`** as well as spell rows. The generated macro uses **`/use [nomounted,…] item:NNN`** for those entries and **`/cast`** for spell mounts. Parsing accepts shift-click item links, **`itemID:NNN`**, **`Name#NNN`**, and plain names when the client resolves them via **`GetItemInfo`**.

## [1.4.1] - 2026-05-06

### Fixed
- **Addon failed to load** on some TBC Anniversary clients: registering the
**`LEARNED_SPELL_IN_TAB`** event could error and abort the rest of
[NextBest.lua](NextBest.lua) (no slash commands, no minimap button, no UI).
Registration is now wrapped in **`pcall`** so the addon always finishes loading;
mount macros still refresh on **`BAG_UPDATE`** / login as before.

## [1.4.0] - 2026-05-06

### Added
- **Items / Mounts tabs** under the window title: each tab lists only profiles of that
type. **Mounts** profiles store a priority list of **mount spell names** (with a
per-row **Fly** checkbox). The generated macro uses `/dismount [mounted]` and
`/cast [nomounted,flyable] …` for flying-tagged entries and `/cast [nomounted] …`
for ground entries, in list order. **`LEARNED_SPELL_IN_TAB`** triggers a macro
refresh when you learn a new spell.
- **Make macro global** (per profile): optional checkbox under **Respect item cooldowns**
(Items) or directly under **Priority for:** (Mounts). When checked, the macro is
created/edited on the **General (account)** macro tab instead of the character tab;
wrong-tab macros are moved when out of combat (same pattern as the old
character-only migration).
- **Slash:** `/citem create <name> mounts` creates a mounts profile. **`/citem <profile> fly <spell> on|off`**
toggles the flying flag for a mount list row (mount profiles only).

### Changed
- Saved variables: **`NextBestDB.uiTab`**, **`NextBestDB.uiSelectedByTab`** (per-tab
selection); legacy **`uiSelected`** is migrated once into **`uiSelectedByTab.items`**.
Profiles may set **`type`** (`items` / `mounts`), **`globalMacro`**, and
**`lastMacroPerChar`** (internal, so toggling global vs character rewrites the macro).