From e4c77412268106c52240d18a918c66dec0a6bcbe Mon Sep 17 00:00:00 2001 From: OEVG <950+oevg@noreply.octowow.st> Date: Sat, 31 Oct 2026 20:02:00 -0400 Subject: [PATCH] Tidy README and review ClassicAPI v1.18.13 changes - Debuff Timer: hide the native Cooldown's own countdown numbers so the countdownForCooldowns CVar cannot double the overlay text. - README: merge the duplicated feature lists, match module names and default states to the in-game options, link the extra Docs, and state the recommended ClassicAPI version. - Docs/CLASSICAPI_UPDATES.md: record the v1.17.7 to v1.18.13 review. - .gitignore: ignore editor and merge leftovers. - ShaguTweaks.toc: drop the Russian note from the English-only fork. Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_019W3rwusM4i1CYaHQAYixJ7 --- .gitignore | 6 ++ Docs/CLASSICAPI_UPDATES.md | 59 +++++++++++++-- README.md | 139 ++++++++++++++++++------------------ ShaguTweaks.toc | 1 - mods/target-debufftimer.lua | 6 ++ 5 files changed, 136 insertions(+), 75 deletions(-) diff --git a/.gitignore b/.gitignore index 4769c88..3514480 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ *.bak *.tmp +*.orig +*.rej +*.log .DS_Store Thumbs.db +desktop.ini +.vscode/ +.idea/ diff --git a/Docs/CLASSICAPI_UPDATES.md b/Docs/CLASSICAPI_UPDATES.md index f411f97..c0b17e6 100644 --- a/Docs/CLASSICAPI_UPDATES.md +++ b/Docs/CLASSICAPI_UPDATES.md @@ -1,9 +1,14 @@ # ClassicAPI integration updates These changes use newer ClassicAPI features while retaining older fallback paths. -ClassicAPI v1.17.6 was the latest release reviewed on 2026-10-24. Update both -ClassicAPI's DLL and its bundled `!!!ClassicAPI` addon together, following its -installation instructions; a DLL update needs a full client restart. +ClassicAPI v1.18.13 was the latest release reviewed on 2026-10-31 (the previous +review covered v1.17.6 on 2026-10-24). Update both ClassicAPI's DLL and its +bundled `!!!ClassicAPI` addon together, following its installation +instructions; a DLL update needs a full client restart. + +The integration code below was written against v1.17.6. The v1.17.7 to v1.18.13 +review found nothing that needed a rewrite; see +[Reviewed since v1.17.6](#reviewed-since-v1176). ## Changes @@ -29,6 +34,50 @@ installation instructions; a DLL update needs a full client restart. intact. With persistence off or native storage unavailable, the original Lua cache behavior remains. The addon never enables native persistence itself. +## Reviewed since v1.17.6 + +156 ClassicAPI commits (v1.17.7 to v1.18.13) were read against the modules in +this addon. + +**Changed here** + +- **Debuff Timer:** the native `Cooldown` frame it creates now calls + `SetHideCountdownNumbers(true)` when available. ClassicAPI can draw its own + countdown numbers when the `countdownForCooldowns` CVar is `1` (default `0`), + which would have doubled the timer text this module draws itself. + +**Worth knowing, no code change** + +- **Nameplate crash fix (v1.18.10):** world-tick subscribers now run after the + UI draw. Before this, an addon that restyled a nameplate from + `NAME_PLATE_CREATED` or a `C_Timer` callback could crash the client. No + crash was traced to this addon, but v1.18.10 or newer is recommended for the + Nameplates modules. +- **Range Color:** since v1.18.0, `C_Spell.IsSpellInRange` returns `nil` for a + unit the spell cannot be cast at. The module already treats `nil` as "no + range to fail", so it needs nothing. +- **Cooldown Numbers:** action, bag and spellbook cooldowns are still 1.12 + indicator Models, and `CooldownFrame_SetTimer` still serves them. The + module's hook is still required; the native countdown numbers do not replace + it. +- **Filtered unit events:** `RegisterUnitEvent` now also filters custom events + that ClassicAPI fires itself (v1.18.9). The vanilla events used here were + already filtered. + +**Not adopted** + +- `UNIT_POWER_UPDATE`, `UNIT_POWER_FREQUENT`, `UNIT_MAXPOWER` (v1.18.10): the + legacy `UNIT_MANA` / `UNIT_ENERGY` / `UNIT_RAGE` events still fire and the + overlays depend on their payloads. Switching would add a code path without a + measured gain. +- `UNIT_AURA_DELTA` and aura instance IDs (v1.17.10): the debuff library + refreshes on `UNIT_AURA` for the target and reads auras by index, so it does + not need change sets. +- `UNIT_TARGET`, `UnitFacing`, `wipe`, the `Cooldown` countdown formatter and + the other new APIs: no module here needs them. + +Nothing from this review was tested in game. + ## Measuring performance On current ClassicAPI, the following prints ShaguTweaks' Lua memory in KiB: @@ -66,8 +115,10 @@ no memory/FPS improvement is claimed without a live measurement. ## Primary references +- [ClassicAPI v1.18.13](https://github.com/brues-code/ClassicAPI/releases/tag/v1.18.13) +- [API reference (v1.18.13)](https://github.com/brues-code/ClassicAPI/blob/v1.18.13/docs/API.md) - [ClassicAPI v1.17.6](https://github.com/brues-code/ClassicAPI/releases/tag/v1.17.6) -- [API reference](https://github.com/brues-code/ClassicAPI/blob/v1.17.6/docs/API.md) +- [Nameplate crash fix](https://github.com/brues-code/ClassicAPI/commit/4eb214f) - [Native cooldown rendering](https://github.com/brues-code/ClassicAPI/commit/b83bb5b52b11ffd51dd59aa7465b1185222f2bd4) - [Reliable chat payload](https://github.com/brues-code/ClassicAPI/commit/b5aed30a5db5ef033dd9a6619d8f74310787c4c9) - [Native player-name lookup](https://github.com/brues-code/ClassicAPI/commit/c7bb90895f8802ba837833d5ad1f9acbe0afece4) diff --git a/README.md b/README.md index 77f23f0..3f456ba 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,17 @@ # 🧩 ShaguTweaks — ClassicAPI -A lightweight fork of [ShaguTweaks](https://github.com/shagu/ShaguTweaks) for **Turtle WoW-like servers**. +A lightweight fork of [ShaguTweaks](https://github.com/shagu/ShaguTweaks) for **Turtle WoW-like servers**, focused on **stability, compatibility and performance** while keeping the original ShaguTweaks experience. -Focused on **stability, compatibility and performance** while keeping the original ShaguTweaks experience. +This is an English-only customization of [Dusk/ShaguTweaks-ClassicAPI](https://octowow.st/git/Dusk/ShaguTweaks-ClassicAPI), based on ShaguTweaks, for the Vanilla client environment with ClassicAPI. > This fork requires ClassicAPI and targets **Turtle WoW-like server/client environments**. -An English-only customization of [Dusk/ShaguTweaks-ClassicAPI](https://octowow.st/git/Dusk/ShaguTweaks-ClassicAPI), based on [ShaguTweaks](https://github.com/shagu/ShaguTweaks), for the Vanilla client environment with ClassicAPI. - -## Features of this fork - -- **Modern Class Colors:** optional palette for all nine Vanilla classes, including blue shamans. Listed directly below **Unit Frame Class Colors**. -- **Modern textures:** class-tinted health artwork and precolored rage, energy and focus artwork. Mana uses the light-blue rectangular retail fill on every supported frame, including the druid's separate mana bar in bear/cat forms. -- **Real Health Numbers:** percentage on the left and current health on the right, inset 4 pixels. Power numbers remain centered. Unknown absolute target health stays percentage-only. -- **Number styling:** health, percentage and power numbers copy the corresponding character name's font, size and shadow. Gold is the default; **White Unit Frame Numbers** under Unit Frames switches the numbers to white independently of Modern Class Colors. -- **Movable Unit Frames:** hold **Ctrl+Shift+Alt** to drag; right-click while unlocked to reset. -- **Portrait resting glow:** with **Unit Frame Big Health**, the resting pulse is limited to the portrait. The full status artwork is restored outside resting or in combat. -- **Tooltip details:** restored guild ranks and leader marker; optional modern class colors and health texture. NPC interaction and tooltip-clear handling prevent cached colors leaking between tooltips. -- **Range Color fixes:** self/rangeless spells no longer use a misleading legacy fallback; invalid friendly/hostile target checks and stale red/no-mana tint are handled. No additional AoE-specific exceptions have been added. -- **English-only loading:** only English data and translations are included, avoiding unused locale allocations. -- **ClassicAPI integration:** native cooldown support, filtered unit events, corrected chat identity/payload handling, and reduced duplicate player-cache records when native persistence is already enabled. Older fallbacks are retained. - ## 🔌 Requirements -- **[ClassicAPI](https://github.com/brues-code/ClassicAPI) — required** -- **[SuperWoW](https://github.com/balakethelock/SuperWoW) — optional / recommended** +- **[ClassicAPI](https://github.com/brues-code/ClassicAPI) — required.** Install both the DLL and its bundled `!!!ClassicAPI` addon, and restart the client after a DLL update. v1.18.10 or newer is recommended (it includes a crash fix for addons that restyle nameplates). The integration was last reviewed against v1.18.13; see [Docs/CLASSICAPI_UPDATES.md](Docs/CLASSICAPI_UPDATES.md). +- **[SuperWoW](https://github.com/balakethelock/SuperWoW) — optional / recommended.** Only used as an additional fallback for some cast/GUID information. -ClassicAPI is the main API layer. SuperWoW is only used as an additional fallback for some cast/GUID information. +ClassicAPI is the main API layer. ## 📦 Installation @@ -38,29 +23,44 @@ ClassicAPI is the main API layer. SuperWoW is only used as an additional fallbac Settings: **Esc → Advanced Options**. -## ✨ Main changes +## ✨ What's different in this fork + +**Unit frames** + +- **Modern Class Colors:** optional palette for all nine Vanilla classes, including blue shamans. Listed directly below **Unit Frame Class Colors**. +- **Modern textures:** class-tinted health artwork and precolored rage, energy and focus artwork. Mana uses the light-blue rectangular retail fill on every supported frame, including the druid's separate mana bar in bear/cat forms. +- **Real Health Numbers:** an independent module. Percentage on the left and current health on the right, inset 4 pixels; power numbers remain centered. It uses direct values when available and a lazy Vanilla health estimator for percentage-only targets, so unknown absolute target health stays percentage-only. +- **Number styling:** health, percentage and power numbers copy the corresponding character name's font, size and shadow. Gold is the default; **White Unit Frame Numbers** under Unit Frames switches the numbers to white independently of Modern Class Colors. +- **Unit Frame Big Health** is presentation-only and no longer forces numeric health/power text. With it, the resting pulse is limited to the portrait, and the full status artwork is restored outside resting or in combat. +- **Movable Unit Frames:** Player, Target, Party, Minimap, Buffs, Debuffs and Weapon Buffs share one mover and alignment grid. Hold **Ctrl+Shift+Alt** to drag; right-click while unlocked to reset. + +**Tooltips, items and action bars** + +- **Tooltip Details:** restored guild ranks and leader marker; optional modern class colors and health texture. NPC interaction and tooltip-clear handling prevent cached colors leaking between tooltips. +- **Item Rarity Borders** cover merchant, quest, mail, trade, crafting and loot frames, and **Item Rarity Glows** add an independent glow using the same shared rarity engine. +- **Range Color:** self/rangeless spells no longer use a misleading legacy fallback; invalid friendly/hostile target checks and stale red/no-mana tint are handled. No additional AoE-specific exceptions have been added. + +**Performance and stability** -- ClassicAPI-backed integration for casts, auras, items and unit data. - Reduced per-frame work, tooltip scans and repeated UI updates. - Event-driven target and nameplate castbars where possible. - Safer GUID-based handling for same-name enemies. -- Better Turtle WoW-like server compatibility for custom items, spells and UI changes. - Safer hooks and fewer destructive global overrides. -- Expanded Item Rarity Borders support for merchant, quest, mail, trade, crafting and loot frames. -- Added independent Item Rarity Glows using the shared item rarity engine. -- Expanded Movable Unit Frames to handle Player, Target, Party, Minimap, Buffs, Debuffs and Weapon Buffs through one shared Ctrl+Shift mover and alignment grid. -- Restored Real Health Numbers as an independent module, with direct values when available and a lazy Vanilla health estimator fallback for percentage-only targets. -- Unit Frame Big Health is presentation-only again and no longer forces numeric health/power text. -- Various stability fixes across legacy ShaguTweaks modules. +- **English-only loading:** only English data and translations are included, avoiding unused locale allocations. +- Better Turtle WoW-like server compatibility for custom items, spells and UI changes, plus various stability fixes across legacy ShaguTweaks modules. -## 🔷 Mods using ClassicAPI directly +## 🔷 ClassicAPI integration -- Actionbar Range Color +ClassicAPI backs casts, auras, items and unit data: native cooldown support, filtered unit events, corrected chat identity/payload handling, and reduced duplicate player-cache records when native persistence is already enabled. Older fallbacks are retained for clients without the newer features. + +Modules that use ClassicAPI directly: + +- Range Color - AoE Loot - Auto Dismount - Chat Tweaks - Equip Compare -- Free Slots +- Free Slot Count - Improved Castbar - Item Rarity Borders - Item Rarity Glows @@ -68,39 +68,42 @@ Settings: **Esc → Advanced Options**. - Real Health Numbers - Nameplate Class Colors - Nameplate Castbar -- No Toggle +- No Toggle Auto-Attack - Sell Junk - Skip Gossip Text -- Enemy Target Castbar +- Enemy Castbars - Tooltip Details - WorldMap Window -Other modules can also benefit indirectly from ClassicAPI through shared ShaguTweaks libraries and caches. +Other modules can also benefit indirectly from ClassicAPI through shared ShaguTweaks libraries and caches. Per-version notes are in [Docs/CLASSICAPI_UPDATES.md](Docs/CLASSICAPI_UPDATES.md). ## ⚙️ Modules +Names match the in-game options list. Modules marked *(off)* are disabled until you enable them. + ### Action Bar - Auto Dismount - Auto Stance -- Actionbar Range Color +- Range Color *(off)* - Cooldown Numbers -- Hide Gryphons -- Improved Castbar +- Hide Gryphons *(off)* +- Improved Castbar *(off)* - No Toggle Auto-Attack -- Reduced Actionbar +- Reduced Actionbar Size *(off)* ### Unit Frames -- Big Health -- Class Colors -- Class Portraits -- Energy & Mana Tick -- Health Colors +- Unit Frame Big Health *(off)* +- Unit Frame Class Colors *(off)* +- Modern Class Colors *(off)* +- Unit Frame Class Portraits *(off)* +- Unit Frame Energy & Mana Tick *(off)* - Movable Unit Frames -- Real Health Numbers -- Enemy Target Castbar -- Target Debuff Timer +- Real Health Numbers *(off)* +- White Unit Frame Numbers *(off)* +- Enemy Castbars +- Debuff Timer ### Nameplates @@ -111,28 +114,28 @@ Other modules can also benefit indirectly from ClassicAPI through shared ShaguTw ### Tooltip & Items - Equip Compare -- Free Slots +- Free Slot Count - Item Rarity Borders -- Item Rarity Glows +- Item Rarity Glows *(off)* - Sell Junk - Tooltip Details - Vendor Values ### Chat & Social -- Blue Shaman Class Colors +- Blue Shaman Class Colors *(off)* - Chat Tweaks -- Chat Levels -- Chat Spam Filter +- Chat Levels *(off)* +- Chat Spam Filter *(off)* - Social Colors ### Minimap & World Map -- Clean Minimap -- Minimap Clock -- Minimap Square -- Minimap Tweaks -- Minimap Zoom +- Minimap Clean *(off)* +- MiniMap Clock +- MiniMap Square *(off)* +- MiniMap Tweaks +- Enlarged Minimap *(off)* - Hide Tracking Icon - WorldMap Class Colors - WorldMap Coordinates @@ -140,28 +143,22 @@ Other modules can also benefit indirectly from ClassicAPI through shared ShaguTw ### Loot -- AoE Loot -- Improved Roll Frames +- AoE Loot *(off)* +- Improved Roll Frames *(off)* - Loot Cursor ### Interface -- Darkened UI -- Hide Errors -- Smaller Error Frame +- Darkened UI *(off)* +- Hide Errors *(off)* +- Smaller Error Frame *(off)* - XP Bar Text ### General - Super WoW Compatibility - Turtle WoW Compatibility -- Skip Gossip Text - -## 🔧 Compatibility - -- ClassicAPI integration -- Turtle WoW-like server integration -- SuperWoW integration +- Skip Gossip Text *(off)* ## 🧹 Removed / integrated modules @@ -181,7 +178,9 @@ For detailed provenance and licensing information, see: - [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) - [PROJECT_IDENTITY.md](PROJECT_IDENTITY.md) - [Docs/ASSET_PROVENANCE.md](Docs/ASSET_PROVENANCE.md) -- [LICENSES/](LICENSES/) +- [Docs/MODERN_MANA.md](Docs/MODERN_MANA.md) +- [Docs/UPSTREAM_README.md](Docs/UPSTREAM_README.md) — the Dusk fork's README, kept for reference +- [LICENSES/](LICENSES) ## 🙏 Credits diff --git a/ShaguTweaks.toc b/ShaguTweaks.toc index 28dd779..929ed6b 100644 --- a/ShaguTweaks.toc +++ b/ShaguTweaks.toc @@ -2,7 +2,6 @@ ## Title: |cffffcc00Shagu|cffffffffTweaks |cffcccccc[ClassicAPI] ## Author: Shagu ## Notes: A collection of tweaks and enhancements to the Default UI -## Notes-ruRU: Коллекция настроек и улучшений стандартного пользовательского интерфейса. ## Version: GIT ## Dependencies: !!!ClassicAPI ## SavedVariables: ShaguTweaks_player_cache, ShaguTweaks_social_cache diff --git a/mods/target-debufftimer.lua b/mods/target-debufftimer.lua index 8efa4ba..db9df6a 100644 --- a/mods/target-debufftimer.lua +++ b/mods/target-debufftimer.lua @@ -205,6 +205,12 @@ module.enable = function(self) local frameType = API.nativecooldowns and "Cooldown" or "Model" button.cd = CreateFrame(frameType, "TargetFrameDebuff"..i.."Cooldown", button, "CooldownFrameTemplate") button.cd.noCooldownCount = true + -- The timer text is drawn by the overlay below. A native Cooldown + -- would otherwise add a second set of numbers when the + -- countdownForCooldowns CVar is turned on. + if type(button.cd.SetHideCountdownNumbers) == "function" then + button.cd:SetHideCountdownNumbers(true) + end button.cd:SetAllPoints() button.cd:SetScale(.6) button.cd:SetAlpha(.8)