QoL – Quality of Life (WoW Forever)

Sell junk, auto repair, auto quests, tooltip IDs & vendor prices, square minimap, action rings for controller — all in one addon for WoW Forever.
Back to Files

0.0.9

File nameQoL-0.0.9.zip
Uploader
ollidiemausollidiemaus
Uploaded
Oct 17, 2026
Downloads
24
Size
1.4 MB
Flavors
RetailForever
File ID
9219425
Type
R
Release
Supported game versions
  • 12.1.5
  • 12.1.0
  • 1.60.1

What's new

Quality of Life

0.0.9 (2026-10-17)

Full Changelog Previous Releases

  • Merge pull request #36 from ollidiemaus/remove-bag-sort-button
    Remove the combined bag sort button now that Forever shows its own
  • Remove the combined bag sort button now that Forever shows its own
    Forever's client update of 2026-10-17 shows Blizzard's sort button right
    of the combined bag's search box, so QoL's button left of it was a second
    identical one. The option, its strings, stubs and spec go; a saved
    showCombinedBagSort stays in QoLDB, kept and never read, so an older QoL
    still finds it. The feature can come back from PRs #1 and #25 if Forever
    hides the button again.
    Closes #35
  • Hide the minimap zone text's frame when it moves, or at its default spot on request
    Since Forever 1.60.1 the frame is the zone text button's own StateTexture and
    AddTexture, not MinimapCluster.BorderTop, so moved zone text took it along.
    Closes #34
  • Explain the /rl write to hash_SlashCmdList in the development notes
    Checked against Forever's chat code: what fills and reads the table, and
    what a miss does.
    Part of #33.
  • Give saved data a version and keep settings QoL doesn't understand
    QoLDB.version (now 1) and migrations run one version at a time at load; a
    file from a newer QoL is left alone, and a failing migration stops without
    raising the version. A saved option whose type doesn't match its default
    now stays in the file: Get returns the default, Set replaces it.
    Part of #33.
  • Reuse each key's deferred request, and schedule functions defined once
    ns.Later and ns.LaterOutsideWindows keep one request per key, reset by each
    new request, and the per-frame batch swaps between two tables. A key asked
    for again while the batch runs, before its turn, now waits for the next frame
    with the newer function instead of running the stale one first. Every
    feature's schedule helper passes a function defined once at file scope.
    Closes #32
  • Check Edit Mode frames past the screen edge without per-frame garbage
    Insets go around as four numbers instead of tables, a frame anchored
    again reuses its own copy of its anchors, and the watcher's schedule
    hands ns.Later one function defined at file scope. ns.Later's own
    request table is #32's.
    Refs #31
  • Hear the druid's mana only while the mana bar shows, set less per tick
    The druid mana bar hears UNIT_DISPLAYPOWER, UNIT_MAXPOWER and the three
    vehicle events through a "player" listener made at Init. UNIT_POWER_FREQUENT
    goes on that listener in Apply when the bar shows and off when it hides, so
    with the option off, as a non-druid or in caster and travel form no mana
    event reaches QoL, and other units' never do. The vehicle events now reach
    QoL only for the player across the addon.
    A tick sets only the bar's value, passed as it is (it can be secret), and
    the texts that changed: with Status Text off and the bar not hovered it sets
    none. The range is set in Apply, which UNIT_MAXPOWER wakes. The Status Text
    CVars are read when the bar is made and on CVAR_UPDATE for them, also while
    the bar hides; the game's Status Text dropdown sets both with SetCVar.
    The test client counts a status bar's range sets, a font string's text sets
    and the CVar reads.
    Closes #30. Part of #27.
  • Hear class health bar unit events for their units only
    The class-colored health bars hear UNIT_TARGET, UNIT_CLASSIFICATION_CHANGED
    and UNIT_TARGETABLE_CHANGED through a "target", "focus" listener and the
    three vehicle events through a "player" listener, both made at Init. The
    game filters the units now, so the per-handler unit filter is gone and
    other raid members' target changes and nameplate units no longer wake QoL.
    The spec that fired UNIT_TARGET for raid7 becomes a listen query: the
    target events reach QoL for the target and the focus, never for party,
    raid or nameplate units. The vehicle events still reach QoL for every unit
    through the druid mana bar until #30 moves it, so the query doesn't cover
    them; the vehicle spec still covers the player listener.
    Part of #27 and #29.
  • Hear pet changes for the player only, through unit listeners
    ns.Events:NewUnitListener(unit1[, unit2]) registers events with
    RegisterUnitEvent on a frame of its own, so the game drops other units'
    events before QoL wakes. A listener's On skips an event the client
    doesn't know and returns false, like ns.Events:On, and Off unregisters
    one, for events that only matter while something shows. It passes only
    the units it has: the API's units aren't nilable.
    The action bars hear UNIT_PET through a "player" listener, so other
    players' pet changes no longer wake QoL. The stubs get RegisterUnitEvent
    and UnregisterEvent, Fire delivers a unit event only to frames
    registered for that unit, and Stubs.Listens(event, unit) says whether
    any frame would get it. The development notes' rules say unit events go
    through a listener from now on.
    Part of #27, closes #28.
  • Tell agent skills where issues and domain docs live
    docs/agents/ says issues are GitHub Issues via gh and the domain docs are one GLOSSARY.md at the root with ADRs in docs/adr/. .pkgmeta keeps GLOSSARY.md out of the release, like the rest of the docs.

This mod has no additional files