4.8 KiB
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:
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.