131 lines
7.4 KiB
Markdown
131 lines
7.4 KiB
Markdown
# WoW 3.3.5 Hunter Deterrence source audit — 2026-10-06
|
||
|
||
## Result
|
||
|
||
This is the dated pre-integration audit. The selected catalog row, five-aura
|
||
player/companion package and guarded hit resolution are implemented in the
|
||
[October 7 continuation](DETERRENCE_INTEGRATION_2026-10-07.md). Missing-runtime
|
||
statements below describe the October 6 source-audit boundary.
|
||
|
||
Spell 19263 is a five-second, self-targeted, aura-only source row. Its linked
|
||
`spell_linked_spell` aura 67801 is part of the same defensive package. The
|
||
source contract in `src/game/wow335Deterrence.ts` accepts that exact parent,
|
||
child, and link signature and fails closed on profile or sibling drift. It
|
||
does not import the ability or resolve combat outcomes.
|
||
|
||
## Client and linked-row evidence
|
||
|
||
The read-only WoW 3.3.5a `Spell.dbc` is
|
||
`../wow-pvt-server-backups-2/wow335a/Data/patch-A.MPQ/DBFilesClient/Spell.dbc`,
|
||
SHA-256
|
||
`57011d528fd66cf39f5ab6fb168e389ab9e4cc1b8050f7201a54239d489b415c`.
|
||
`Spell.dbc` has 234 fields, so the parsed field shift is zero. Duration index
|
||
28 resolves to 5,000 ms in the pinned `SpellDuration.dbc` at
|
||
`../LadiksMPQEditor/client-current/patch-S/DBFilesClient/SpellDuration.dbc`,
|
||
SHA-256
|
||
`eeae44ef0185924f3d6ec57ab2701c66566db86e51ab0bae017a9449126eb3a`.
|
||
|
||
Raw aura values below show the parsed DBC base-points value (the raw field plus
|
||
one). All listed effects are `APPLY_AURA`, target A 1, target B 0, mechanic 0,
|
||
radius 0, period 0, and misc value 0. No effect has a triggered spell.
|
||
|
||
| Spell row | Attributes 0–7 | Damage class | School | Duration | Effects |
|
||
| --- | --- | ---: | ---: | ---: | --- |
|
||
| 19263 Deterrence | `[327696, 16, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `47:+100`, `287:+100`, `25:0` |
|
||
| 67801 Deterrence | `[328080, 16, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `288:+100`, `185:-100` |
|
||
| 65871 Deterrence | `[327696, 0, 0, 0, 0, 0, 0, 0]` | None (0) | 1 | 5,000 ms | `47:+100`, `287:+100`, `25:0` |
|
||
|
||
The pinned read-only AzerothCore data row is
|
||
`(19263,67801,2,'Deterrence')` in
|
||
`../wow-pvt-server-backups-2/azerothcore-wotlk/data/sql/base/db_world/spell_linked_spell.sql`.
|
||
The selected core defines type 2 as `SPELL_LINK_AURA` in
|
||
`src/server/game/Spells/SpellMgr.h`. `SpellMgr::LoadSpellLinked` stores this
|
||
under the Aura link key, and `Aura::HandleAuraSpecificMods` applies 67801 to
|
||
the same target through the original caster when 19263 is added. On removal, the core removes
|
||
the linked 67801 aura from that target and caster. The link is an aura
|
||
relationship, not a Spell.dbc trigger effect.
|
||
|
||
Spell 65871 is a same-name DBC row, but it is not the selected package: its
|
||
Attributes1 differs, it has no SkillLineAbility row, and no `spell_linked_spell`
|
||
row references it. Spell 19263 is the only one of these rows listed on
|
||
SkillLineAbility skill line 51. That source metadata does not establish how the
|
||
current HealerMan catalog exposes or learns the spell. The generated Hunter
|
||
catalog currently contains no 19263 entry.
|
||
|
||
## Pinned core behavior
|
||
|
||
Historical core behavior is pinned to read-only AzerothCore
|
||
`e822d718322289dd036fb2daf8867ba41283bf9a`; the link row above comes from its
|
||
base world SQL. The active project and generated data remain authoritative for
|
||
implementation.
|
||
|
||
- Aura 47 is `SPELL_AURA_MOD_PARRY_PERCENT`. Its player aura handler enables
|
||
parry and updates the player's parry percentage. The 19263 effect contributes
|
||
+100 to that aura type; the actual attack result still depends on the
|
||
defender's parry capability and the incoming attack path.
|
||
- Aura 287 is `SPELL_AURA_DEFLECT_SPELLS`. The pinned `Unit::MagicSpellHitResult`
|
||
and `Unit::MeleeSpellHitResult` check it for Magic-class spells and ranged
|
||
damage-class spells. Deflection is checked after miss/resist and requires the
|
||
defender not to be stunned. The attacker must be in the defender's front arc
|
||
unless the target has Aura 288. The linked 67801 supplies that Aura 288, so
|
||
the complete 19263 package does not retain a frontal-facing requirement.
|
||
Ordinary ranged weapon auto attacks do not enter these spell deflection
|
||
checks; linked Aura 185 changes their ranged miss chance separately.
|
||
- Aura 25 is `SPELL_AURA_MOD_PACIFY`. Its amount is zero, but the aura handler
|
||
still sets the pacified unit flag. The pinned `AttackerStateUpdate` returns
|
||
for a pacified unit, and spell casts with `PreventionType=PACIFY` are rejected.
|
||
- Aura 185 is `SPELL_AURA_MOD_ATTACKER_RANGED_HIT_CHANCE`, not a disarm aura.
|
||
On the target, its -100 modifier raises the attacker's ranged miss chance by
|
||
100 percentage points in `Unit::GetUnitMissChance`. It applies to ranged
|
||
weapon attacks and ranged-damage-class spells, subject to each spell's own
|
||
hit attributes.
|
||
- The parent is DamageClass None, has SchoolMask 1, Dispel 0, Mechanic 0, and
|
||
contains only self-targeted aura effects. Its own application is not an
|
||
incoming Magic, melee, or ranged hit. Its triggered-spell fields are zero;
|
||
67801 comes from the separate linked-aura row.
|
||
|
||
Relevant pinned paths are `src/server/game/Spells/Auras/SpellAuraDefines.h`,
|
||
`SpellAuraEffects.cpp`, `SpellMgr.cpp`, and `Auras/SpellAuras.cpp`, plus
|
||
`src/server/game/Entities/Unit/Unit.cpp` and `src/server/game/Spells/Spell.cpp`.
|
||
The enum and consumer paths establish the raw aura roles and gates; they do not
|
||
provide a complete simulator hit table.
|
||
|
||
## HealerMan boundary
|
||
|
||
Generic WoW aura conversion already recognizes Aura 47 as a parry stat and
|
||
Aura 25 as a pacify tag. The incoming player and companion hit paths consume
|
||
parry from target-local aura stats. No current Hunter Deterrence definition
|
||
applies those auras, because 19263 is absent from the generated Hunter catalog.
|
||
The existing 67801 contract in `enemyBlockAuras.ts` uses Aura 288 only as an
|
||
ordinary enemy Creature block input; that is not player/party deflection
|
||
coverage.
|
||
|
||
The normalized enemy attack record carries `spellId`, `damageClass`,
|
||
`schoolMask`, `attackKind`, and `damageOrigin`, but the generated enemy damage
|
||
source table does not retain raw `Attributes3`. The pinned
|
||
`SPELL_ATTR3_ALWAYS_HIT` bit is `0x00040000` and bypasses the deflect hit gate.
|
||
The current shared incoming result also lacks a distinct deflect stage and does
|
||
not pass attacker-relative facing or defender stunned state into that resolver.
|
||
Those missing inputs block a safe generic deflect runtime. An exact adapter
|
||
would need the active 19263/67801 aura package on the actual defender, the
|
||
source spell's profile, damage class and raw AlwaysHit attributes, ordinary
|
||
ranged-auto identity, attacker-facing relation, stun state, and placement after
|
||
the source miss/resist checks.
|
||
|
||
At the start of this source audit, the player autoattack scheduler lacked the
|
||
`pacified` aura gate already present in the party action loop. The shared runtime
|
||
continuation now gates player main/offhand and owned Scout ranged autos on active
|
||
actor-local pacify. Actual accepted-aura scheduler fixtures cover that gate;
|
||
they do not prove a Deterrence cast. A future 19263 import still needs the linked
|
||
aura lifetime and the missing deflect inputs above. This source helper records
|
||
exact rows and linkage only. See
|
||
[the integration report](CONTROL_UTILITY_CONTINUATION_2026-10-06.md).
|
||
|
||
## Focused verification
|
||
|
||
`src/game/wow335Deterrence.test.ts` verifies the parent/child signatures and
|
||
the exact type-2 aura link. It rejects another profile, the same-name 65871
|
||
duplicate, changed aura siblings, changed duration, and missing or extra link
|
||
rows. Only this focused helper test was run; no build, live run, or full suite
|
||
was part of the scoped source audit.
|