NameplateSCT | nSCT - Scrolling Combat Text |

NameplateSCT draws scrolling combat text out of the unit it actually happened to, instead of one pile of numbers in the middle of the screen. Big crits on the mob you are fighting, greyed-out numbers on the ones you are not, damage you take on ur own plate
Back to Files

NameplateSCT v1.69

File nameNameplateSCT.zip
Uploader
AcidBombAcidBomb
Uploaded
Nov 15, 2026
Downloads
45
Size
5.2 MB
Flavors
Classic TBCClassicTitan Reforged ClassicRetailForever
File ID
9625463
Type
R
Release
Supported game versions
  • 12.1.5
  • 3.80.2
  • 2.5.6
  • 1.60.1
  • 1.15.9

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: HealEvent forwards it to DrawHeal, which passes it into DisplayText's spellName slot, where GetSpellTexture(spellId or spellName or "") already used it as the fallback. The UNIT_COMBAT heal 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 reach GetSpellTexture and 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: DamageEvent and MissEvent compared guid to the player GUID and indexed guidToUnit[guid] unguarded, exactly what HealEvent was just hardened against. Both now read the GUID once behind isSecretValue, skip the plate lookup when it is secret, and MissEvent compares a single onPlayer flag instead of playerGUID ~= guid four times.
  • One guarded icon sink: DisplayText, DisplayIconWithoutText and DisplayTextOverkill now resolve their texture through a shared iconTexture helper, 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 |Cff codes 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, GetHealColor and hexToRGB are the only colour paths left.
  • Cast tracker hardening: the UNIT_SPELLCAST_* handlers ignore calls that arrive with no event name, channels remember their castGUID, and UNIT_SPELLCAST_CHANNEL_STOP clears 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 whiteAutoAttacks and no longer depend on damageColor being on, so turning school colouring off cannot turn swings yellow. RANGE_DAMAGE is 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) and abilityColor (default ffff00): every non-auto-attack hit draws in one ability colour. Turn it off and the existing damageColor school colouring takes over exactly as before.
  • useCritColor now 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 single critColor override.
  • 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 GetTextColor treats 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: In UNIT_COMBAT, "targettarget" (and other *target derived tokens) are promoted to "player" ONLY when UnitIsUnit(unit, "player") explicitly answers true; 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:
    • isDamageCapableSpell no longer blindly returns true for unknown/non-harmful spells (utility casts, buffs, potions), and recordDamageCast never fabricates isTarget = true when no target existed.
    • isHealCapableSpell excludes 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 when UnitThreatSituation("player", unit) is secret/unreadable, and gates Priority-4 auto-attack fallbacks on "target" using UnitAttackSpeed("player") (and glancing) 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, default true) to Appearance -> Colours, and included active filter= in Dashboard Copy details.

[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 via C_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"), and PLAYER_TARGET_CHANGED / NAME_PLATE_UNIT_REMOVED clear 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" to GetTextColor and check "melee" before DAMAGE_TYPE_COLORS[school] so normal swings render white (#FFFFFF), physical abilities render yellow (#FFFF00), elemental spells use school colors, and useCritColor defaults to true (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): Track UNIT_SPELLCAST_SENT, UNIT_SPELLCAST_START, UNIT_SPELLCAST_CHANNEL_START, UNIT_SPELLCAST_CHANNEL_STOP, and UNIT_SPELLCAST_SUCCEEDED for your healing/helpful casts (C_Spell.IsSpellHelpful plus 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 accessible targetName) keep a 15s HoT window with the cast's healing spell ID.
  • CLEU incoming-heal guard: CombatFilter now requires playerGUID == sourceGUID (or your own pet/guardian) for heals even when personal damage taken is on.
  • Settings label: Renamed showHealing in /nsct to "Healing you cast" with a clear description.