NameplateSCT v1.69
What's new
[1.69] (2026-11-14)
Heal icons fall back to the spell name, and damage/miss gain the same GUID guards
HealEvent took spellName from the combat log and never used it, so a heal whose payload
carried no spellId (the parser clears id 0) drew its number without the icon even though the
name identifies the spell.
- The name now reaches the icon lookup:
HealEventforwards it toDrawHeal, which passes it intoDisplayText'sspellNameslot, whereGetSpellTexture(spellId or spellName or "")already used it as the fallback. TheUNIT_COMBATheal caller passes no name, so restricted-client healing is unchanged. - Secret guard at the boundary: the name is forwarded only after
isSecretValue(spellName)proves it plain, so a secret name can never reachGetSpellTextureand taint the icon lookup. Losing the hint costs the icon only — the amount, which may legitimately stay secret, still draws. - Damage and misses close the same hole:
DamageEventandMissEventcomparedguidto the player GUID and indexedguidToUnit[guid]unguarded, exactly whatHealEventwas just hardened against. Both now read the GUID once behindisSecretValue, skip the plate lookup when it is secret, andMissEventcompares a singleonPlayerflag instead ofplayerGUID ~= guidfour times. - One guarded icon sink:
DisplayText,DisplayIconWithoutTextandDisplayTextOverkillnow resolve their texture through a sharediconTexturehelper, which takes the spell id first and refuses a secret spell name — so every number (damage, miss, heal, overkill, icon-only) is covered, not just heals. - Removed
ColorText: the pre-1.64 colour helper was unreferenced dead code that still wove|Cffcodes into the text. Colour is a FontString property now, and a secret amount cannot be concatenated, so the helper would have broken the secret contract had anything ever called it again.GetTextColor,GetHealColorandhexToRGBare the only colour paths left. - Cast tracker hardening: the
UNIT_SPELLCAST_*handlers ignore calls that arrive with no event name, channels remember theircastGUID, andUNIT_SPELLCAST_CHANNEL_STOPclears only the channel that actually stopped instead of closing an unrelated one.
White auto-attacks, a yellow ability colour, and crits that keep the colour they had
The colour rules painted every crit in one colour and gave abilities their spell-school colour, so a white swing crit turned yellow and a fireball drew orange instead of the yellow an ability is meant to have.
- Auto-attacks are white on their own switch: melee swings, Auto Shot and wands take
whiteAutoAttacksand no longer depend ondamageColorbeing on, so turning school colouring off cannot turn swings yellow.RANGE_DAMAGEis now read as a ranged auto-attack instead of an ability, so Auto Shot and wand shots are white on both combat paths. - New
useAbilityColor(default on) andabilityColor(defaultffff00): every non-auto-attack hit draws in one ability colour. Turn it off and the existingdamageColorschool colouring takes over exactly as before. useCritColornow defaults off: a crit keeps the colour of the hit that produced it — a white swing crit stays white, an ability crit keeps the ability colour. Turning the switch on restores the singlecritColoroverride.- Wired into
/nsct: the Colours page gains "Use an ability colour" and "Ability colour (hex)"; the school toggle and the normal-hit field grey out while the ability colour owns the decision, so no control silently does nothing. - Secret safe: every colour here comes from plain profile text resolved to numbers before the
text is written, and
GetTextColortreats a secret spell name as "not an auto-attack" instead of comparing it.
[1.68] (2026-11-14)
Hardened player-only attribution (targettarget, heals, swings, AoE) & /nsct controls
- Closed
targettarget/ derived token leaks: InUNIT_COMBAT,"targettarget"(and other*targetderived tokens) are promoted to"player"ONLY whenUnitIsUnit(unit, "player")explicitly answerstrue; unverified derived tokens are dropped ("target-of-target is not you") in both nameplate and screen modes so targeting a boss attacking a tank or targeting another player never leaks their hits or heals. - Closed buff/utility & heal window leaks:
isDamageCapableSpellno longer blindly returnstruefor unknown/non-harmful spells (utility casts, buffs, potions), andrecordDamageCastnever fabricatesisTarget = truewhen no target existed.isHealCapableSpellexcludes non-healing helpful buffs, dispels, blessings, shouts, and resurrections (NON_HEAL_HELPFUL_SPELLS). Direct single-target heals carry a 1-hit charge (lastHealHitsLeft = 1) instead of letting another healer's direct heals piggyback inside the 2s window, and only HoT/Mend Pet spells (HOT_HEAL_SPELLS) extend into the 12s HoT window.
- Hardened strict AoE & swing gating: Default
attributionMode = "strict"never fails open on off-target AoE whenUnitThreatSituation("player", unit)is secret/unreadable, and gates Priority-4 auto-attack fallbacks on"target"usingUnitAttackSpeed("player")(andglancing) so raid/party melee spam on your target cannot flood as white swings. - Dashboard & Settings integration (
/nsct):- Added Combat filter (
attributionMode:strict,balanced,all) to Dashboard Quick Settings and General -> Player Attribution. - Added Include your DoTs on off-targets (
attributePlayerDots), Include AoE on engaged mobs (attributeAoeCasts), and Include your pet's target (attributePetTargets) to General -> Player Attribution. - Added Auto-attacks always white (
whiteAutoAttacks, defaulttrue) to Appearance -> Colours, and included activefilter=in Dashboard Copy details.
- Added Combat filter (
[1.67] (2026-11-14)
Fixed: Only show damage/heals from you, white swings, and yellow abilities & crits
On restricted clients (UNIT_COMBAT), off-target nameplates previously drew damage and misses from other players, pinned single-target or self-only heals still left a brief window for other healers' numbers, and auto-attack swings drew yellow instead of white while crits defaulted to non-yellow.
- Strict player-only damage & miss attribution (
UNIT_COMBAT): Damage and misses on hostile nameplates now require positive player ownership—targeted offensive cast attribution (UNIT_SPELLCAST_SENT/START/CHANNEL_START/SUCCEEDED), active player DoT/debuff verification viaC_UnitAuras.GetUnitAuraInstanceIDs(unit, "HARMFUL|PLAYER", 1)(e.g. Flame Shock, Serpent Sting), AoE/channel casts gated by player engagement (UnitThreatSituation("player", unit)), active melee auto-attack / Auto Shot on"target"(PLAYER_ENTER_COMBAT/PLAYER_LEAVE_COMBAT,START_AUTOREPEAT_SPELL/STOP_AUTOREPEAT_SPELL,C_Spell.IsCurrentSpell), or"pettarget". Unattributed hits on off-targets or unattacked targets and damage taken by friendly units are dropped ("not your damage"), andPLAYER_TARGET_CHANGED/NAME_PLATE_UNIT_REMOVEDclear stale unit attribution. - Tightened heal attribution (
isYourRecentHeal): Single-target heals with a captured recipient no longer admit unrelated allies during the 2s cast window, and self-only heals (e.g. Exhilaration, Crimson Vial, Desperate Prayer, Frenzied Regeneration) are restricted to player/pet. - Default colors restored: Auto-attack swings and Auto Shot now pass
"melee"toGetTextColorand check"melee"beforeDAMAGE_TYPE_COLORS[school]so normal swings render white (#FFFFFF), physical abilities render yellow (#FFFF00), elemental spells use school colors, anduseCritColordefaults totrue(critColor = "ffff00") so crits render yellow (#FFFF00).
[1.66] (2026-11-14)
Fixed: Only show heals cast by you, not random heals on everyone
With showHealing enabled on Forever, UNIT_COMBAT (HEAL) previously drew every heal on any visible unit—other healers, potions/regen, and enemies healing themselves. And on Classic/CLEU, enabling Show damage you take (personal) also let other players' heals on you leak through.
- Player heal attribution on restricted clients (
UNIT_COMBAT): TrackUNIT_SPELLCAST_SENT,UNIT_SPELLCAST_START,UNIT_SPELLCAST_CHANNEL_START,UNIT_SPELLCAST_CHANNEL_STOP, andUNIT_SPELLCAST_SUCCEEDEDfor your healing/helpful casts (C_Spell.IsSpellHelpfulplus ground/AoE/channel healing spells). Unattributed heals and heals on hostile units (UnitCanAttack) are dropped ("not your heal"). - HoT and channel support: Channeled heals stay authorized until
UNIT_SPELLCAST_CHANNEL_STOP(capped at 12s), cast/instant/AoE heals open a 2s window, and captured friendly recipients (target,mouseover, self, pet, or accessibletargetName) keep a 15s HoT window with the cast's healing spell ID. - CLEU incoming-heal guard:
CombatFilternow requiresplayerGUID == sourceGUID(or your own pet/guardian) for heals even whenpersonaldamage taken is on. - Settings label: Renamed
showHealingin/nsctto "Healing you cast" with a clear description.
This mod has no additional files