forked from Dusk/ShaguTweaks-ClassicAPI
- 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019W3rwusM4i1CYaHQAYixJ7
125 lines
6.4 KiB
Markdown
125 lines
6.4 KiB
Markdown
# ClassicAPI integration updates
|
|
|
|
These changes use newer ClassicAPI features while retaining older fallback paths.
|
|
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
|
|
|
|
- **Health correctness:** `UnitHealthMissing` returns a deficit in the same units
|
|
as the health getters. It can be a percentage, so it is no longer used to infer
|
|
absolute health. Direct health and the existing combat-estimation cache remain.
|
|
- **Chat identity:** `GetPlayerInfoByGUID` supplies the name in return position 6.
|
|
The synchronous class fallback now checks that name against the requested player.
|
|
- **Cooldown rendering:** Target Debuff Timer creates native `Cooldown` frames on
|
|
ClassicAPI 1.17.1+, retaining `Model` frames on older builds. Numeric timers and
|
|
the existing timer dispatcher are preserved.
|
|
- **Unit event filtering:** health/power overlays register only player, target and
|
|
pet unit events; the health estimator and target castbar register only target
|
|
unit events. Older clients without `RegisterUnitEvent` use plain registration
|
|
and their existing handler-side checks.
|
|
- **Chat payload:** spam filtering and passive sender collection read
|
|
`GetCurrentChatEvent` when available. The filter uses local payload values and
|
|
does not overwrite shared `arg1`/`arg2` globals. The older global path remains.
|
|
- **Player-cache duplication:** when native persistence is already enabled and
|
|
`C_PlayerCache.RememberPlayer` succeeds, new chat-only sightings do not also
|
|
create ShaguTweaks SavedVariables records. Native class-only lookups can avoid
|
|
creating another record. Existing records, raw levels and social history stay
|
|
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:
|
|
|
|
```lua
|
|
/script UpdateAddOnMemoryUsage(); DEFAULT_CHAT_FRAME:AddMessage(GetAddOnMemoryUsage("ShaguTweaks"))
|
|
```
|
|
|
|
Memory readings include uncollected objects. For comparisons, collect through
|
|
GentleGC first and measure at the same point after login and after playing.
|
|
Texture/native allocations are not equivalent to this Lua-memory counter.
|
|
|
|
For a short CPU investigation:
|
|
|
|
1. Run `/console scriptProfile 1`, then `/reload`.
|
|
2. Run `/script ResetCPUUsage()` and play through a representative encounter.
|
|
3. Read the total CPU time in milliseconds:
|
|
`/script UpdateAddOnCPUUsage(); DEFAULT_CHAT_FRAME:AddMessage(GetAddOnCPUUsage("ShaguTweaks"))`
|
|
4. Run `/console scriptProfile 0`, then `/reload` when finished.
|
|
|
|
Profiling adds overhead. Compare the same workload and measurement duration;
|
|
the cumulative CPU number alone is not an FPS measurement. Profiling is not
|
|
turned on by this addon.
|
|
|
|
## Verification
|
|
|
|
Lua 5.1 syntax checks cover all addon Lua files. Mocked regression checks cover:
|
|
unknown percentage health, valid cached estimates, direct health, native and
|
|
fallback unit-event registration, sixth-return chat identity and name mismatch,
|
|
native chat payload with corrupted globals, duplicate filtering, native/legacy
|
|
cooldown creation, and persistence enabled/disabled while retaining levels and
|
|
history. Existing health overlays and English-only load-list checks also pass.
|
|
These checks do not replace in-game rendering, event-order and combat testing;
|
|
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)
|
|
- [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)
|