Files
healer-man/docs/NPC_CRITICAL_BLOCK_IMPORTS_2026-10-06.md
2026-10-06 22:25:34 -04:00

95 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ordinary Creature Critical Block imports — 2026-10-06
## Import boundary
`src/game/enemyBlockAuras.ts` keeps
`supportedEnemyBlockAuraDefinition` fail-closed for Critical Block
(47294–47296) and Deterrence. The separate
`ordinaryCreatureSelfTargetCriticalBlockAuraDefinition` guard admits only
Critical Block after the caller supplies an
`EnemyNpcCriticalBlockImportProof` for one ordinary Creature self-cast. The
defender, caster, and target IDs must be the same nonempty ID; the proof must
explicitly identify an ordinary Creature and exclude a native defender, a
summon, and a character defender. It also carries the bounded applicability
token `azerothcore-e822d718-default-spellmod-path`.
The guard validates the complete raw spell signature, runtime contract, block
chance, and the exact aura-107 sibling list against the reviewed profile/rank
row before returning an aura-253 runtime definition. Aura 107 stays present in
the source signature and unsupported-effect metadata. Its no-op behavior is
specific to the reviewed default core path; a custom aura script/module or a
private server override invalidates that applicability proof. The WoW,
Ascension, and Epoch labels identify client DBC rows. They do not certify
private server overrides for those clients. Player and party casts must never
use this full-import guard.
## Reviewed Spell.dbc signatures
Each listed effect is type 6, mechanic 0, target A/B 1/0, radius 0, period 0;
spell range index is 1, school mask is 1, damage class is 0, duration is
permanent (`-1` in the raw signature), and stack amount is 0. The parsed
`basePoints` below are the client amount (`Spell.dbc` base-points field plus
one). The Spell.dbc hashes and source paths are pinned in
`NPC_BLOCK_AURA_PARITY_2026-10-06.md`.
| Profile | Spell | Aura effects (`auraType:basePoints:miscValue`) |
| --- | ---: | --- |
| WoW 3.3.5a | 47294 | `253:20:0`, `107:5:7` |
| WoW 3.3.5a | 47295 | `253:40:0`, `107:10:7` |
| WoW 3.3.5a | 47296 | `253:60:0`, `107:15:7` |
| Ascension | 47294 | `253:100:0`, `107:4:7`, `107:8:3` |
| Ascension | 47295 | `253:100:0`, `107:7:7`, `107:16:3` |
| Ascension | 47296 | `253:100:0`, `107:10:7`, `107:25:3` |
| Epoch | 47294 | `253:20:0`, `107:5:7` |
| Epoch | 47295 | `253:40:0`, `107:10:7` |
| Epoch | 47296 | `253:60:0`, `107:15:7` |
Aura 253 supplies the modeled critical-block chance. Aura 107 is
`SPELL_AURA_ADD_FLAT_MODIFIER`; misc 7 is the spell critical-chance modifier,
and Ascension also has misc 3 (`SPELLMOD_EFFECT1`). In the pinned AzerothCore
checkout at commit `e822d718322289dd036fb2daf8867ba41283bf9a`,
`SpellAuraEffects.cpp:780` sends aura spell modifiers through `ApplySpellMod`.
`ApplySpellMod` returns at lines 813–816 when the target is not a player, so
these aura-107 spell modifiers do not apply to an ordinary Creature on that
default path. This evidence does not cover custom aura scripts, custom modules,
or external server changes.
## Source assignment availability
The pinned AzerothCore base `creature_template_spell.sql` dump and checked
`db_world` SQL updates contain no `Spell` assignment for 47294, 47295, or
47296. This pass adds an importer guard and its evidence only; it does not
assign Critical Block to a creature. A real source creature assignment is
still required before any NPC receives the buff. Do not infer or fabricate one
from the player talent spell rows.
Deterrence remains outside the full importer because its source signatures
also contain effects (including aura 185 or aura 27) that are not represented
by ordinary NPC block inputs.
## Focused coverage
`src/game/enemyBlockAuras.test.ts` covers all three ranks in all three client
profiles, missing and malformed proof, mismatched self-target IDs, native,
summoned, and character-defender exclusions, the pinned applicability token,
generic importer fail-closed behavior, Deterrence exclusion, and raw signature
drift. The focused command is:
```text
npx vitest run src/game/enemyBlockAuras.test.ts
```
`combatStore.ts` uses this guard only for an ordinary source Creature's
self-target descriptor with a known template entry. The compiler pins all
three rank signatures in Ascension/Epoch, including aura-107 siblings, and
validates them even when no source NPC assignment uses them. Its duration-index
0 parser sentinel is 0; the guarded runtime definition normalizes the source
permanent aura to an `expiresAt=null` lifetime.
`enemyCriticalBlockImport.integration.test.ts` passes two actual runtime tests:
a clearly labeled synthetic self-cast applies the permanent aura without
damage, produces a deterministic critical block, and clears on reset; native,
summoned, character and non-self fixtures are excluded. This synthetic fixture
does not establish a real creature assignment. Regenerated campaign data is
byte-for-byte unchanged from this pass's starting snapshot.