forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
6114a2295f
commit
69809f7228
593 files changed
+903643
-40774
No files matched your search
@@ -0,0 +1,121 @@
|
||||
# Enemy triggered shout audit — 2026-10-06
|
||||
|
||||
This report covers only separate-victim child spells from Intimidating Shout
|
||||
5246 and Frightening Shout 19134. It preserves the existing caster-centered
|
||||
fear source contract and keeps unsupported source effects explicit.
|
||||
|
||||
## Pinned client evidence
|
||||
|
||||
The Ascension input is
|
||||
`../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Spell.dbc`,
|
||||
SHA-256
|
||||
`2f77f18b91ffbae32a19568e4bc05ec78ee384b6ba8dd2a6e05f0e97abbb2dce`. The
|
||||
Epoch input is
|
||||
`../HealerMan-Storage/pipeline-work/dungeons/epoch-client/DBFilesClient/Spell.dbc`,
|
||||
SHA-256
|
||||
`d5cce1a83550dcfa9eb2f0251dbb11fd24c272534b2b1a9b230924a44d817ab3`. Both
|
||||
use the existing shared patch-S `SpellDuration.dbc` and `SpellRadius.dbc`
|
||||
fallbacks; Epoch is not represented as carrying untouched sibling support
|
||||
tables. The matching source pins also live in `enemySourceAuras.ts`.
|
||||
|
||||
Direct reads from both `WDBC` inputs confirm raw Spell.dbc field 212 is
|
||||
`MaxAffectedTargets` (5246 = 5; 19134 = 0) and field 2 is `Dispel` (0 for
|
||||
both parents and both children). `DamageClass` is field 213; `Attributes2` is
|
||||
field 6 and is zero on all four rows. The profile signatures below are kept
|
||||
separate, including Epoch 5246's Attributes1 value 136.
|
||||
|
||||
| Parent cast | Explicit child spell | Parent range | Parent area | Area target cap | Parent fear duration: Asc / Epoch | Child control duration: Asc / Epoch |
|
||||
| --- | --- | ---: | --- | ---: | ---: | ---: |
|
||||
| 5246 Intimidating Shout | 20511 Intimidating Shout | 8 yd | Caster-centered hostile radius 8 yd | 5 | 5 s / 8 s | Stun 5 s / 8 s |
|
||||
| 19134 Frightening Shout | 29544 Frightening Shout | 10 yd | Caster-centered hostile radius 8 yd | 0 (unlimited) | 4 s / 6 s | Fear 3 s / 6 s |
|
||||
|
||||
Each parent has effect 0 `TRIGGER_SPELL` (effect type 64), target A 6
|
||||
(`TARGET_UNIT_TARGET_ENEMY`), and the exact child ID shown above. Each child
|
||||
has target A 6, target B 0. Parent effects 1 and 2 use target A 22
|
||||
(`TARGET_SRC_CASTER`) plus target B 15 (`TARGET_UNIT_SRC_AREA_ENEMY`) at
|
||||
radius index 14 (8 yd). The first area aura is fear, aura 7. Effect 2 is aura
|
||||
31 (`MOD_INCREASE_SPEED`, +25%) and remains unsupported.
|
||||
|
||||
Child 20511 is stun aura 12 on both profiles. Ascension also has aura 87
|
||||
(`MOD_DAMAGE_PERCENT_TAKEN`) for +15% physical damage taken over 5 seconds;
|
||||
it has no direct damage effect. Epoch 20511 contains only the 8-second stun.
|
||||
Child 29544 is fear aura 7 only: 3 seconds in Ascension and 6 seconds in
|
||||
Epoch. It likewise has no direct damage effect. Battle Shout 9128 and
|
||||
Demoralizing Shouts 16244/13730 have no DBC trigger ID in either selected
|
||||
profile, so their names do not qualify them for this triggered-child path.
|
||||
|
||||
The existing direct aura baseline remains owned by `enemySourceAuras.ts` and
|
||||
its existing attack-catalog contract. This report does not replace those rows
|
||||
with the triggered-shout child contracts or claim full implementation of
|
||||
parent effect 2.
|
||||
|
||||
## Targeting and core behavior
|
||||
|
||||
The read-only historical source used for the targeting audit is under
|
||||
`../wow-pvt-server-backups-2/azerothcore-wotlk/src/server/game/Spells/`.
|
||||
`SpellEffects.cpp` `Spell::EffectTriggerSpell` supplies the parent effect's
|
||||
`unitTarget` to the child when `NeedsToBeTriggeredByCaster` is true;
|
||||
`SpellInfo.cpp` returns true when the child requires an explicit unit target.
|
||||
That establishes one child victim: the parent's explicit hostile victim.
|
||||
The runtime helper therefore accepts that victim only if the caller's
|
||||
hostile/range/LOS recheck still considers it eligible. It never chooses a
|
||||
different secondary target for the child.
|
||||
|
||||
The same source's `Spell::SelectEffectImplicitTargets` combines area effects
|
||||
whose target A/B, implicit conditions and calculated radius match. Here
|
||||
effects 1 and 2 share the same pair and radius, so one caster-centered area
|
||||
recipient selection receives their effect mask. `SelectImplicitAreaTargets`
|
||||
limits that set using `MaxAffectedTargets` when nonzero, then
|
||||
`AddUnitTarget` merges effect masks when a target GUID already exists. There
|
||||
is no exclusion of the explicit cast victim from the area result: if it is
|
||||
also a valid hostile within 8 yards, it can receive both the child and the
|
||||
parent area aura. Accordingly `planEnemyTriggeredShoutTargets` returns the
|
||||
eligible explicit child victim separately and preserves the area list
|
||||
unchanged.
|
||||
|
||||
`WorldObjectSpellAreaTargetCheck` applies 3D radius and the base spell target
|
||||
check; `WorldObjectSpellTargetCheck` applies hostile eligibility. These area
|
||||
checks do not add a per-recipient line-of-sight test. The parent explicit
|
||||
victim still follows ordinary explicit-cast checks. Spell.dbc has no
|
||||
`Attributes2` ignore-LOS flag for these parents. The caller remains
|
||||
responsible for game-specific visibility/LOS eligibility when forming each
|
||||
input list; the pure targeting helper does not perform spatial queries.
|
||||
|
||||
The area cap applies to the parent area recipients only: 5 for 5246 and no
|
||||
cap for 19134. The child is a separate triggered cast with one explicit unit
|
||||
target. No extra max-target cap is applied to the parent's area list, and no
|
||||
synthetic damage packet is introduced for either child.
|
||||
|
||||
## Overlap and lifecycle contract
|
||||
|
||||
Parent and child control remain separate named timed auras so control-removal
|
||||
paths, expiry and caster refresh can retain each sourced timer. The shared utility tag is
|
||||
`enemy-control-source:<fear|stun>`. Effective shout control is resolved from
|
||||
currently active tagged auras on the requested target: the aura with the
|
||||
latest expiry supplies the runtime mechanic/timer, with stun winning an exact
|
||||
expiry tie. Thus an Ascension 19134 overlap resolves to parent fear through
|
||||
4 seconds after its child fear expires at 3 seconds; a 5246 child stun wins
|
||||
when its expiry ties the parent fear. Epoch 19134 ties are both fear, while
|
||||
Epoch 5246 ties resolve to stun.
|
||||
|
||||
All four DBC rows have Dispel 0, so the source does not mark these control
|
||||
auras as dispellable. The source children have stack amount zero and no
|
||||
`AURA_UNIQUE` bit in either profile. The project aura policy refreshes an existing same-caster copy and
|
||||
preserves a different caster's active same-spell application. Removal of a
|
||||
shout caster retains these four timed control aura IDs on other targets:
|
||||
`enemy-control:source-spell-20511`, `enemy-control:source-spell-29544`,
|
||||
`enemy-control:source-spell-5246`, and `enemy-control:source-spell-19134`.
|
||||
Removing the recipient still removes its auras.
|
||||
|
||||
## Boundaries
|
||||
|
||||
This source pass does not model parent aura 31's +25% movement speed, immune
|
||||
target exceptions, creature-specific AoE immunity, random selection ordering
|
||||
when 5246 has more than five area recipients, or every server/database script
|
||||
override. Historical SmartAI rows establish source NPC casts but do not change
|
||||
the DBC target geometry. The runtime's incoming eligible target snapshots
|
||||
remain authoritative. A client/core difference or changed source pin must
|
||||
fail the exact signature check rather than broaden behavior by spell name.
|
||||
|
||||
Focused verification: `npx vitest run src/game/enemyTriggeredShouts.test.ts
|
||||
src/game/enemySourceAuras.test.ts`.
|
||||
Reference in new issue
Block a user