promotional bannermobile promotional banner

GearMatic

Smart upgrade detection driven by real stat weights. Tooltips, quest rewards, loot, and bags show exactly how much each item upgrades your spec, across every alt.

File Details

v1.0.9

  • R
  • May 9, 2026
  • 413.28 KB
  • 0
  • 11.0.5+5
  • Retail + 3

File Name

GearMatic-v1.0.9.zip

Supported Versions

  • 11.0.5
  • 5.5.0
  • 4.4.2
  • 3.4.3
  • 2.5.5
  • 1.15.8

GearMatic Changelog

[v1.0.9-release] - 05/09/2026

Fixed

  • Auto-equip no longer stomps a just-equipped upgrade with a worse bag item in the same sweep. When two candidates for the same slot lived in your bags (e.g. Frayed Shoes + Thug Boots in feet), the sweep equipped the first one, then on the very next iteration still saw the slot as empty/weak in its in-memory snapshot, scored the second item as "+100% over empty", and equipped it over the first. Both items would show "+100%" in chat and you'd end up with the worse one equipped and the better one back in your bag. The sweep now refreshes the in-memory equipped snapshot from the known bag link after each successful equip, rather than calling GetInventoryItemLink (which can return nil for a frame on Classic / Anniversary right after EquipCursorItem and would erase the snapshot we just wrote). Subsequent candidates always compare against what was just equipped.
  • Auto-equip weapon swaps no longer leave a ghost off-hand/main-hand entry in the in-memory snapshot. Equipping a two-hander correctly clears slot 17 (the displaced off-hand) from the snapshot, and equipping a shield / off-hand / holdable into slot 17 over a two-hander correctly clears slot 16. Prevents stale weapon-slot entries from biasing later iterations of the same sweep and from showing the wrong off-hand in the loadout window until the next full scan.
  • /say (and other Social) broadcasts no longer drop on auto-equip swaps. The Social handler used GetInventoryItemLink to read the just-equipped item, but on Classic / Anniversary that API can return nil for one frame right after EquipCursorItem, which made Social.OnEquipChange bail at if not id then return end and never reach SendChatMessage. AutoEquip now hands Social the known bag link directly via a new Social.RecordEquip path, which broadcasts immediately and updates the lastEquipped cache. The PLAYER_EQUIPMENT_CHANGED handler still services player-driven (drag-drop, EquipmentManager) equips, with a 1-second post-RecordEquip guard that ignores nil-link timing glitches without breaking real unequip detection.
  • Scoring.ScoreItem no longer returns nil for armor-only items. On Classic, low-level gear like Frayed Shoes or Thug Boots may have GetItemStats return nil because they only carry an armor value. The previous code returned nil in that case, which downstream code read as a score of 0 and produced phantom "+100% over equipped" deltas during a sweep. ScoreItem now falls back to ilvl-rarity scoring (with the fallback flag set, so the auto-equip occupied-slot safety hardening still requires a real stat-weighted scale before swapping).
  • Fallback score now reads the actual armor value from the item tooltip and weights it heavily. Without this, low-level Vanilla gear scored only on ilvl * rarity_multiplier, so a higher-rarity / equal-ilvl piece with zero armor could outscore a lower-rarity piece with 5+ armor and auto-equip would pick the worse one. Scoring now opens a hidden tooltip frame, reads the "X Armor" line, caches the result by item ID, and folds armor into the fallback score at 10x weight (ilvl * rarity_mult + armor * 10) so armor is the dominant signal for armor pieces. Frayed Shoes (5 armor) now reliably beats Thug Boots (0 armor) on score alone.
  • Auto-equip safety hardening relaxed for armor-piece upgrades in fallback mode. The v1.0.8 hardening required a real stat-weighted scale (Pawn) before it would swap into an occupied slot. That was correct for stat-driven items where ilvl alone can mislead, but it blocked obvious armor upgrades on leveling characters with no Pawn scale. AutoEquip now allows the swap into an occupied armor slot when the candidate has strictly more armor than the equipped item (read from the live tooltip, same scanner the score uses). Applies only to true armor slots (head, shoulder, chest, waist, legs, feet, wrist, hand, cloak, shield). Non-armor slots (rings, trinkets, weapons, ranged) keep the strict v1.0.8 rule because their value is in stats, not armor. Combined with the cursor-flow hardening, the worst case is still "wrong stat priority for casters in fallback" - never a destroyed item.

Changed

  • Auto-equip success line stays branded "GearMatic" (no rename). Local chat-frame line continues to be |cff7777ffGearMatic|r equipped X (+N%). It is suppressed only when /say will actually carry the announcement (SAY toggle on, not in an instance, slot was occupied). Other Social toggles (party / raid / guild / bg) do not suppress the local print, so you always have a personal record when /say cannot fire.

Added

  • Bundled the same Anton font CritMatic uses for its alerts. Registered with LibSharedMedia as Anton. Loadout window title, header, and footer now render in Anton with an outline so the two addons share a visual identity. Falls back to Blizzard fonts if the file is missing.

Changed

  • Loadout slot textures now show clearly. Empty slot art renders at the same size as the item icon (both at full slot extent with 7%/7% texture-coord trim to remove the dark border that comes baked into Blizzard's slot art), and a dark slot background is laid behind so the slot is visible against the loadout window backdrop. Each slot uses its specific Blizzard art: Head, Neck, Shoulder, Back, Chest, Shirt, Tabard, Wrists, Hands, Waist, Legs, Feet, Finger, Trinket, MainHand, SecondaryHand, Ranged.
  • Loadout prev/next buttons are now greyed out at the boundaries: prev disabled on the first character, next disabled on the last, both disabled when only one character is tracked. The cycle no longer wraps around past the last alt.
  • Tooltip and quest/loot indicators no longer show the red downgrade chevron for sidegrades. Items in the -1% to +1% range get a clean line with no chevron prefix; only true downgrades (delta <= -1) get the red chevron.

[v1.0.8-release] - 05/09/2026

Added

  • New General-tab toggle: "Prefer Pawn weights for scoring" (default on, disabled when Pawn is not installed). When on, GearMatic auto-picks the Pawn-imported scale that matches your class (and spec when possible) and uses those weights for every scoring path (tooltip, quest reward, loot, bag overlay, browser, auto-equip). No manual "Set Active" click needed. When off, GearMatic falls back to your manually selected profile or its bundled defaults.

  • Renamed the cross-character browser to Loadout. Window title now reads "GearMatic Loadout". New slash command /gm loadout (the old /gm browser, /gm browse, /gm chars aliases still work).

  • New keybinding in General settings: "Open loadout". Bind any key to instantly open the Loadout window. Reapplied on login.

  • Quest reward chevron now uses armor value as a third tiebreaker after armor-type priority and delta. When two leather pieces tie at +100% for a Rogue, the one with more armor wins. Helps when an empty slot gives both items the same delta but one is objectively better-protected.

  • New "Run auto-equip sweep now" button in the Auto-equip group on the General tab. Triggers a single sweep on demand, even with the master toggle off. Same hardened safety path applies.

  • Auto-equip cursor flow can no longer lose an item. ClearCursor() removed entirely from the swap path. New flow: pick up the bag item → EquipCursorItem(slot) → if anything left on cursor, drop it back into the bag slot we just picked from (which is empty by definition) → if even that fails, abort with a chat message telling the user "item is on your cursor, drop it manually, nothing was lost." Worst case is the new item stays in the bag and the previously-equipped item stays equipped. There is no path to a destroyed/lost item.

  • Critical auto-equip safety hardening. Auto-equip will no longer swap into an occupied slot when GearMatic cannot make a real comparison. Specifically: an upgrade is only auto-equipped over an existing item when (a) a real stat-weight scale is active (not the iLvl fallback), (b) both the candidate and currently-equipped item produced positive non-fallback scores, and (c) the raw stat-weighted delta clears the user's minimum percent. Filling a genuinely empty slot still works as before. This closes the path where a missing spec / not-yet-cached scoring caused the equipped item to read as score=0 and any bag item to read as a "+100% upgrade", which on a fragile cursor swap could lose the previously-equipped item.

  • Auto-equip swap is now atomic via EquipCursorItem instead of PickupContainerItem + PickupInventoryItem + ClearCursor. Same pattern EquipmentManager and Pawn use. Eliminates the edge case where the previously-equipped item could fall off the cursor when its origin slot was already occupied. Falls back to the old path on clients without EquipCursorItem.

  • Auto-equip now triggers on PLAYER_ENTERING_WORLD (login / /reload / zone change) too, not just on bag updates and combat-end. If you enable the toggle while items are already in your bags, a /reload is now enough; you no longer have to wait for a bag update or combat-end event before existing upgrades get equipped.

  • /gm equip prints a sweep summary: sweep done, considered N upgrade(s), equipped M. Helps debug "why didn't anything equip".

  • "Cannot auto-equip in combat" message no longer spams the chat for automatic sweeps; it only prints when you ran /gm equip manually while in combat.

  • Loadout window redesigned as a paperdoll. Real WoW slot textures and item icons, two-column gear layout matching the Blizzard character pane, weapon row at the bottom. Per-slot durability bar colored green/yellow/red. Hover any slot for the full item tooltip with durability percent. Header shows class-colored character name, race, class, level, spec. Footer shows iLvl, lowest-slot durability, and (N/total) position. Prev / Next buttons at the bottom corners cycle through every alt on the realm; left/right arrow keys also navigate while focused.

[v1.0.7-release] - 05/09/2026

Changed

  • Stat Import tab help text now explicitly mentions both wowsims.github.io exports and the Pawn addon as sources, with both names highlighted, so users understand the single paste box accepts strings from either.

[v1.0.6-release] - 05/09/2026

Added

  • LICENSE file at the repo root: All Rights Reserved. Embedded third-party libraries (Ace3, LibStub, etc.) keep their own original licenses.
  • Every TOC now declares ## X-License: All Rights Reserved.

[v1.0.5-release] - 05/09/2026

Added

  • New General-tab toggle: "Defer to Pawn for tooltip and bag overlay". When Pawn is loaded and the toggle is on, GearMatic hides its current-spec tooltip line and green bag chevron so they do not duplicate Pawn's display. Yellow alt-aware chevrons, quest reward chevron, loot chevron, cross-character browser, durability nag, auto-equip, and social broadcasts stay live (Pawn does not provide those). Disabled-grey when Pawn is not installed. Default off.

[v1.0.4-release] - 05/09/2026

Added

  • Saved profiles list now shows a blue [Pawn] tag next to scales that were auto-imported from the Pawn addon, so you can tell at a glance which profile came from where.
  • One-time login warning on retail when Pawn is not loaded: GearMatic does not bundle retail stat weights, so on Mainline you need Pawn installed for accurate scoring. Without Pawn (or a manually pasted scale), GearMatic on retail falls back to item-level only.

Notes

  • Retail requires Pawn. Bundled wowsims weights only cover Vanilla through Mists. On retail, install Pawn with your usual scales and GearMatic will auto-import them.

[v1.0.3-release] - 05/09/2026

Added

  • Retail / Mainline support, backed by Pawn. GearMatic_Mainline.toc is back (Interface 110005). Spec auto-detect now uses GetSpecialization() first on retail, then falls through to the classic talent API. GearMatic does not bundle retail wowsims weights, so on retail the recommended path is: install Pawn with your usual scales and let GearMatic auto-import them on login (or paste your own scale via /gm import).

[v1.0.2-release] - 05/09/2026

Added

  • Real Pawn integration. If the Pawn addon is loaded, GearMatic now imports every non-hidden Pawn scale into your saved profiles automatically on login. Toggle in General settings ("Auto-import scales from Pawn"), or run on demand with the new "Sync Pawn scales now" button or /gm pawn slash command.

Changed

  • Replaced the dead ## OptionalDeps: Pawn declaration in every TOC with a real runtime integration. The TOC line was previously a no-op that implied an integration we did not actually deliver.

[v1.0.1-release] - 05/08/2026

Removed

  • Dropped Retail / Mainline support. The addon was never actually compatible with retail (no retail spec API, no retail wowsims weights bundled). Removing the broken GearMatic_Mainline.toc so users on Dragonflight / War Within do not install something that silently fails.

[v1.0.0-release] - 05/08/2026

Initial public release.

Added

  • Cross-character equipped gear tracker with login durability nag.
  • Smart upgrade detection driven by Pawn-format stat weights.
  • Bundled wowsims default scales for Vanilla, TBC, Wrath, Cata, Mists (57 specs).
  • Auto-detect spec from talents.
  • Tooltip overlay on bag, vendor, AH, group loot, and mail items.
  • Quest reward window chevron for the best reward for your spec, with class armor priority (Plate > Mail > Leather > Cloth).
  • Loot window chevron on upgrades.
  • Bag overlay chevron on bag items, compatible with Bagnon and most bag addons.
  • Yellow chevron variant for items the current character cannot wear but at least one alt can.
  • Auto-equip toggle for out-of-combat upgrade swaps. Manual sweep with /gm equip.
  • Cross-character browser at /gm browser showing iLvl, lowest durability, and per-slot scores.
  • Stat profiles tab in settings: paste, save, switch active scale, per-profile keybinds, and a cycle keybind.
  • Social tab broadcasts equip changes to /say (skipped in instances), /party, /raid, /guild, and /battleground.
  • Minimap button (off by default).
  • Sidebar settings layout via Ace3 with General, Stat Import, and Social tabs.