File Details
v1.1.5
- R
- Apr 29, 2026
- 60.38 KB
- 70
- 12.0.5
- Retail
File Name
StatsPro-v1.1.5.zip
Supported Versions
- 12.0.5
Changelog
1.1.5 — Honest font coverage on cross-locale picks
Fixed
- Selecting a non-native locale (e.g. Russian on an English client) now auto-switches to Blizzard's built-in Arial Narrow for readable rendering — no SharedMedia addon required. Previously the addon mistakenly assumed
Fonts\FRIZQT__.TTFalways shipped clean Cyrillic glyphs (true only on the Russian client build); on English / German / French / etc. FRIZQT is Latin-designed, with Cyrillic falling back to OS system fonts (visible but with mismatched kerning and stroke weights — hard to read). The fix recognizes ARIALN as the Blizzard-shipped Latin+Cyrillic font (universal across all non-CJK clients, since it's used for chat/nameplates with cross-realm Russian names) and auto-switches to it when needed. - Existing users with a stale cross-locale
forceLocalesetting now self-heal on next login. The per-login auto-switch sees the now-correct coverage answer and picks the right font. - The "current font may not render cleanly" warning now correctly fires when even the auto-fallback can't cover the chosen locale (e.g. picking Korean on an English client without a SharedMedia CJK font installed). Previously suppressed for Cyrillic on non-Russian clients due to the incorrect assumption above.
Known limitations
- Korean / Chinese on non-CJK clients still requires a SharedMedia font with CJK coverage (NotoSansCJK, SourceHanSans, WenQuanYi, etc.) — Blizzard doesn't ship CJK glyphs on non-CJK client builds, and bundled CJK fonts are too large (5-20MB) to ship inside the addon. Install one of the SharedMedia CJK addons from CurseForge for clean rendering. Without one, labels render as
?-boxes and the inline warning will stay visible.
1.1.4 — LSM CJK font auto-detect
Fixed
- LSM CJK fonts (NotoCJK / SourceHan / WenQuanYi / PingFang / Microsoft YaHei / JhengHei / SimSun / SimHei / MingLiU / Malgun Gothic / Nanum / Apple SD Gothic Neo) no longer trigger a false "font may not cover glyphs" warning when picking a CJK locale. Auto-switch logic now recognizes them by font-family name patterns; previously any non-Blizzard-shipped font was conservatively assumed Latin-only. NotoCJK and SourceHan are now also correctly recognized as covering Cyrillic — ruRU users with these fonts no longer see a false warning either.
Known limitations
- Custom CJK families with generic filenames (e.g.
regular.ttfinside a CJK font pack) still surface the warning because path-based detection can't see the font's display name. Recoverable by ignoring the warning, or report the family on GitHub Issues to add an explicit pattern. - Auto-fallback prefers alphabetic-first match. When multiple LSM CJK fonts are installed, manual font selection is preferred over auto-fallback for best coverage.
1.1.3 — Settings window layering fix
Fixed
- Settings window now opens above raid frames and HUD addons (was rendering at
MEDIUMstrata, same as gameplay HUD; now usesDIALOG).
1.1.2 — Fix empty panels + empty settings on v1.1.x
Fixed
- Panels render empty and settings window opens blank on v1.1.0 / v1.1.1. Hotfix — no DB reset needed, all preferences preserved.
1.1.1 — Migration fix for opted-out users
Fixed
- Migration honors the v1.0.x "use localized labels = off" opt-out — earlier v1.1.0 adopters with the toggle off were silently re-enabled. If affected: open Display → Localization → pick "English".
1.1.0 — Manual locale override + auto-switch font
Added
- New "Language" dropdown in Display tab → Localization. Pick any of the 11 retail locales for on-screen labels regardless of WoW client locale. Replaces the prior
useLocalizedLabelsboolean. - Auto-switch font when picked locale needs glyphs the current font lacks. Saves your previous font, switches to the locale-aware default, restores on switching back. Manually picking a font clears the auto-switch memory.
- Inline warning under the Language dropdown when no installed font covers the picked locale's glyphs. Doesn't block the choice.
Known limitations
- LSM CJK fonts treated as Latin-only by the auto-switch logic — picking a CJK locale fires a "font may not cover glyphs" warning even if your LSM font does cover them. Workaround: pick the LSM font manually via the Font dropdown after switching locale.
1.0.12 — Per-locale TOC Notes
Added
- Localized addon-list description (
## Notes-<locale>:TOC fields) for all 10 non-English retail locales: deDE, esES, esMX, frFR, itIT, koKR, ptBR, ruRU, zhCN, zhTW. Single-line corrections from native speakers welcome via GitHub Issues.
1.0.11 — Localized color-picker labels + Localization toggle preview fix
Added
- Color-picker rows in the Display tab now show localized stat names (e.g. ruRU
Крит Цвет:, zhCN暴击 颜色:, deDEKrit Farbe:). The two non-stat rows ("Rating Color" / "Percentage Color") still show those words in English; only "Color" is localized.
Fixed
- Localization-toggle checkbox preview no longer renders as
?boxes on CJK clients. Was hardcoded toFonts\FRIZQT__.TTF(no CJK glyphs); now usesSTANDARD_TEXT_FONT.
1.0.10 — Locale-aware default font (CJK fix) + RGBToHex hardening
Fixed
- Localized stat labels now render correctly out of the box on CJK clients (zhCN / zhTW / koKR). Default font was
Fonts\FRIZQT__.TTF(no CJK glyphs); nowSTANDARD_TEXT_FONT(locale-aware). - Existing users on the old default font are auto-upgraded (DB v3 → v4). Explicit font choices preserved.
- Font re-applies cleanly within the upgrade session — no broken-glyph flash for CJK users until next
/reload. RGBToHexdefensive guard against SavedVariables corruption — out-of-range RGB values from a hand-edited DB are clamped to[0, 1].
1.0.9 — Carry forward settings from upstream SwiftStats (TaylorSay)
Added
- One-time settings carry-forward from the original SwiftStats by TaylorSay. Users moving from CurseForge SwiftStats to StatsPro now get their panel position, font, scale, and per-stat colors copied on first launch (fresh installs only). Source priority:
SwiftStatsDB(upstream public) >SwiftStatsLocalDB(older internal name).
1.0.8 — Primary stats now show effective (buffed) values + armor combat-taint guard
Fixed
- Primary stats (Strength / Agility / Intellect) now show the same value Blizzard's character sheet displays. Was capturing
UnitStat's base return instead of the effective return; for buffed raiders this understated by 10–25%. Affects users who explicitly enabledShow Strength/Show Agility/Show Intellect(off by default). - Armor damage-reduction calculation no longer aborts mid-pull if
PaperDollFrame_GetArmorReductionreturns a secret-tainted number — wrapped inpcall+issecretvaluefilter.
1.0.7 — Translation polish + Korean Armor/Defensive disambiguation
Fixed
- Defensive panel no longer freezes in split mode when offensive stats are all disabled. Ticker moved off
mainPanel.frameto a dedicated invisible frame that's never hidden by user logic. - SwiftStatsLocal → StatsPro one-time migration now runs reliably — moved from file scope to
PLAYER_ENTERING_WORLD, so it fires regardless of addon load order. - koKR: Armor and Defensive section header no longer collide. Armor stays
방어; Defensive divider becomes수비. - koKR: Parry/Block now distinguishable. Parry
쳐막, Block막기(matches WoW Korean client / community convention).
Changed
- Translation polish across deDE / esES / esMX / frFR / itIT / ptBR / ruRU. Most 3-char abbreviations expanded to 4-char readable forms. Selected swap-outs:
- ruRU: Parry
Пар→Пари, LeechКров→Вамп, DurabilityПрч→Проч. - deDE: Vers
Viel→Viels, StrengthStä→Stär, DurabilityHalt→Haltb. - frFR: Strength
For→Forc, DurabilityDur→Dura, DodgeEsq→Esqu. - esES / esMX: Haste
Cel→Cele, LeechSuc→Robo, StrengthFue→Fuer, AgilityAgi→Agil, DodgeEsq→Esqu. - itIT: Parry
Par→Para, ArmorArm→Armat, StrengthFor→Forz, AgilityAg→Agil, RepairRip→Ripa. - ptBR: Strength
For→Forç, AgilityAgi→Agil, DodgeEsq→Esqu. - enUS / zhCN / zhTW unchanged (already match official WoW client terminology).
- ruRU: Parry
1.0.6 — Localized stat labels (all 11 WoW locales)
Added
- Stat labels now display in your WoW client's language by default across all 11 retail locales (deDE, esES, esMX, frFR, itIT, koKR, ptBR, ruRU, zhCN, zhTW; enUS unchanged). Hand-curated short forms matching StatsPro's compact 4-7 char visual language. Examples: ruRU
Крит / Хаст / Маст, zhCN暴击 / 急速 / 精通, deDEKrit / Tempo / Meist. - Sectioned-mode divider is also localized (e.g. ruRU
— Защита —, zhCN— 防御 —, frFR— Défense —). - "Use localized stat names" toggle on the Display tab — non-English clients can switch back to compact English labels. Hidden on enUS clients.
- Translation quality note — ruRU is user-confirmed; the other 9 locales are best-effort drafts. Native-speaker corrections welcome via GitHub Issues.
Fixed
- Repair-row label no longer flickers blank for one frame after a font change. Pre-existing v1.0.5 issue; closed here because the bug becomes more visible with non-English labels.
Behavior change for non-English-locale users
- First
/reloadafter upgrade switches your panel from English to localized labels. To keep English: Display tab → Localization → uncheck "Use localized stat names". enUS clients see no change.
Known limitation
- Stat Colors color-picker rows in the settings window still show English labels. The on-screen panel is fully localized; only the config-UI rows aren't yet.
1.0.5 — Offensive toggles + leak-free reset
Added
- Master "Show Offensive Stats" toggle on the Stats tab — Crit / Haste / Mastery / Versatility each have their own visibility checkbox plus a master toggle. Includes an opt-in
Hide Zero Valuesfilter (default off). /ss debugslash subcommand — dumps addon version, DB version, toggle states, panel positions, and Lua memory usage into chat for self-serve diagnostics.
Fixed
- Defensive sub-toggles now grey out when master is off (matches existing Tertiary / Durability dependency-disable pattern).
- "Reset to Defaults" no longer leaks the config frame — widget visuals are re-synced from the freshly-reset DB in-place; the frame is reused instead of orphaning child widgets in
_Gon every Reset click. - Repair coin moved to its own row below stats — was sharing a row with the
Repair:label and could overlap stat content in narrow panel layouts (visual mash likeRepair55..88..12).
1.0.4 — Combat-safe lock toggle
Fixed
- Lock Frames toggle stuck after combat — switching off mid-combat updated DB but
Panel:Unlockno-op'd via itsInCombatLockdownguard. Now re-applies onPLAYER_REGEN_ENABLED. - SwiftStatsLocal migration aliased sub-tables — first-load shallow-copy meant
StatsProDB.colorsshared a Lua table reference withSwiftStatsLocalDB.colorswhile both addons were enabled, so color-picker edits in either silently mutated the other. Now usesCopyTable. - Default-fill skipped on coincidental version match —
MigrateDBearly-returned whendbVersion == CURRENT_DB_VERSION, so SwiftStatsLocal migrants whose legacy DB carrieddbVersion=3never picked up StatsPro's defaults. Init loops now run before the version early-return.
Improved
- Repair cost no longer widens the panel — coin string anchored RIGHT, free to extend leftward past the rating/value column. Panel width is now determined purely by stat content.
- Tertiary sub-toggles grey out when master is off (matches Defensive tab pattern).
- Font dropdown refreshes on each open — fonts registered via LibSharedMedia after StatsPro loads now appear without
/reload.
1.0.3 — Refresh-rate slider
Added
- Refresh Rate slider on the Display tab (range
0.1s – 1.0s, default0.5s). Replaces the hidden/run StatsProDB.updateInterval = Xworkaround.
1.0.2 — Dynamic version display
Fixed
- Settings window and Blizzard interface options panel showed stale "v1.0" — version was hardcoded; both labels now read from TOC at runtime via
C_AddOns.GetAddOnMetadata.
1.0.1 — Single-column display polish
Changed
- Single-column layout when only one display dimension is on — toggling
Show RatingorShow Percentageoff now stacks every visible number in one RIGHT-justified column. Previously non-rating rows (Primary / Defensives / Durability / Repair) collapsed to a degenerate empty layout in the value column.
Fixed
- Wide gap / truncated percentage in single-display modes —
GetStringWidthon mostly-empty multi-line strings is unreliable in 12.x retail. Format helpers now route into the rating column when dual-column mode is off. - In-combat taint crash spam — the all-empty short-circuit in
JoinLinesSecretSafecompared elements against"", raising a taint error when in-combat reads put a secret-tainted string in the list. Comparison removed.
1.0.0 — Initial release
First public release under the StatsPro name. Originally inspired by SwiftStats v2.1 by TaylorSay (MIT) — substantially rewritten, with only ~9% of upstream code remaining verbatim (boilerplate, color defaults, basic stat list).
Added
- Defensive stats panel — Dodge, Parry, Block, Armor (as % damage reduction). Independent visibility toggle, per-stat color swatches, hide-zero option.
- Durability tracking — single-pass scan of equipment slots (skipping shirt/tabard), toggle between average and worst-slot percentage. Vendor-format precision (
%.1f%%). - Auto-color durability — green ≥60%, yellow ≥30%, red <30%. Override via custom color when auto-color is off.
- Repair cost — live vendor-format coin string with inline gold/silver/copper icons (
GetCoinTextureString). Rendered on its own line below durability. - Display modes — Flat (one panel, all stats), Sectioned (one panel with
— Defensive —divider), Split (separate draggable panels). - Multi-panel positioning — defensive panel independently draggable in Split mode.
- Master visibility toggle — show/hide all panels via checkbox or
/ss toggle. - Settings UI rewrite — three-tab config window (Display / Stats / Defensive) with inline color swatches and dependency-aware enable/disable.
- Scrollable settings window — full Stats / Defensive content reachable on small monitors and windowed-mode layouts. Scroll resets to top on tab switch.
- Native Blizzard Settings panel integration — registers under
Esc → Options → AddOns → StatsPro. Coexists with/ssand the launcher button.
Changed
- Default text alignment —
RIGHT(wasLEFT). Migrated automatically; explicit user choices preserved. - Effective armor handling —
pcall(UnitArmor)+ secret-value filter for 12.x retail. Refresh runs out-of-combat only. - Versatility — split into rating + flat dual-source display, with combat-safe caching.
- Repair cost API — switched from
GameTooltip:SetInventoryItem(returns secret values in 12.x) toC_TooltipInfo.GetInventoryItem+TooltipUtil.SurfaceArgs.
Fixed
- Misaligned rating + percentage columns — rating is now its own RIGHT-justified third FontString between label and value, so all rating right-edges line up vertically and the percent column has a clean fixed left edge.
- Frame position not persisting —
SetUserPlaced(true)now called afterSetPoint(...)inLoadPosition(12.x retail order requirement). - Position lost on /reload —
PLAYER_LOGOUThandler saves both panels defensively, in case the user drags via paths that bypassOnDragStop. - Durability % differing from vendor — default switched to average (matches vendor display); worst-slot mode preserved as opt-in.
- In-combat secret-value taint — every stat-API read passes through
pcall+issecretvaluefiltering before any arithmetic or comparison.
Removed
- Minimap button — same actions reachable via
/ss toggle, the Blizzard Settings entry, or the master visibility checkbox. Frees minimap real estate. - Legacy slash subcommands (
move,unlock,lock,reset,scale N,size N) — replaced by the redesigned Settings window. Remaining commands:/ss(open config),/ss show,/ss hide,/ss toggle,/ss help.
Migrated
- Existing SwiftStatsLocal users keep all settings —
StatsProDBis populated fromSwiftStatsLocalDBon first load if present. Old DB is left untouched.

