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

4.8 KiB
Raw Blame History

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.