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

4.6 KiB
Raw Permalink Blame History

Enemy Bloodlust source contract — 2026-10-05

src/game/enemyBloodlust.ts records the sourced NPC contract for spell 6742 and exposes the melee swing-interval calculation used when independent Aura 138 haste effects overlap. It models one explicitly selected friendly creature per application. It does not infer Shaman player-party semantics from the similarly named player spell.

Pinned client rows

The active Ascension Spell.dbc is ../LadiksMPQEditor/client-current/area-52/patch-D/DBFilesClient/Spell.dbc (SHA-256 2f77f18b91ffbae32a19568e4bc05ec78ee384b6ba8dd2a6e05f0e97abbb2dce). The Epoch Spell.dbc is ../HealerMan-Storage/pipeline-work/dungeons/epoch-client/DBFilesClient/Spell.dbc (SHA-256 d5cce1a83550dcfa9eb2f0251dbb11fd24c272534b2b1a9b230924a44d817ab3). Both contain the same spell 6742 fields:

Spell.dbc field Value
Range index 4
School mask / damage class 8 / 1
Duration index / resolved duration 9 / 30,000 ms
Dispel / stack amount 1 (Magic) / 0
Attributes 0–7 0
Effect 6 (APPLY_AURA)
Aura / base points 138 (MOD_MELEE_HASTE) / +30
Implicit targets A / B 21 (TARGET_UNIT_TARGET_ALLY) / 0
Radius / misc value / period 0 / 0 / 0
Trigger spell 0

The duration comes from the pinned shared patch-S SpellDuration.dbc (eeae44ef0185924f3d6ec57ab2701c66566db86e51ab0bae017a9449126eb3a0); the shared SpellRadius.dbc fallback is dba6ed2f165f75c84dda5f32ae46b1a01fe562efd88fa51fd19365705c3e6a44. SpellRange index 4 comes from shared patch-S SpellRange.dbc (SHA-256 bb899631818942a7a7100abfb7a970612a79ac99637b1b459561e2b108125ddd): both friendly and hostile ranges are 0–30 yards, with flags 0. This row and the effect target describe a selected friendly unit, not an area target; the effect has no radius.

Historical NPC selection and cast gates

The read-only AzerothCore world snapshot's creature_template_spell.sql lists Hamhock (entry 1717) with spells 6742 and 421. Its smart_scripts.sql rows provide two separate Bloodlust paths:

  • Update-in-combat event 0 has a fixed 5,000 ms initial delay, no repeat timer, 100% chance, and NOT_REPEATABLE flag 1. It casts spell 6742 with cast flags 32 (SMARTCAST_AURA_NOT_PRESENT) on target type 1 (self). AzerothCore only processes this event while Hamhock is engaged; the cast flag skips recasting while that target already has Bloodlust.
  • Friendly-missing-buff event 16 uses spell 6742, radius 30, repeat interval 10,000 ms, and onlyInCombat=0. It casts spell 6742 with flags 0 on target type 7 (SMART_TARGET_ACTION_INVOKER), the selected missing-buff recipient. The event starts active without an initial delay and resets its 10-second repeat timer after it processes a recipient.

The historical FriendlyMissingBuffInRange predicate further requires the candidate creature to be alive, in combat, non-hostile to the caster, within 30 yards on the same map and phase, and missing spell 6742. The search uses a creature-list searcher, so this AI path selects creatures rather than the player party. Its predicate has no self-exclusion or line-of-sight check; the normal, untriggered cast still uses ordinary spell validation. Distance checks include the source and target object sizes. These are source gates; the current game entity state has no faction, phase, or collision-radius data and must document its corresponding selection approximation.

Haste stacking

AzerothCore maps Aura 138 to HandleModMeleeSpeedPct, which applies a separate percentage attack-speed factor to main-hand and off-hand swing intervals. The same-effect spell-group lookup suppresses weaker members only when the data places them in an exclusive group. The historical spell_group.sql does not place either 6742 or Enrage 8599 in its “Melee Haste Buffs” group. Their two +30% effects therefore combine as separate factors: an active Bloodlust and Enrage yield 1 / (1.3 × 1.3), or about 0.591716 of the prior swing interval. They do not become one additive +60% modifier (0.625 interval factor).

enemyMeleeHasteIntervalMultiplier applies the sourced positive and negative Aura 138 interval factors to marked source modifiers in the already-filtered active aura list for one enemy, then preserves the existing additive interval calculation for unmarked haste modifiers. It leaves auto-attack ability cooldowns and unrelated haste channels unchanged. The Bloodlust contract itself exposes only melee haste, Magic dispel, a 30-second duration, and the explicit-friendly 30-yard target shape.

Focused validation is npx vitest run src/game/enemyBloodlust.test.ts src/game/enemyBloodlust.integration.test.ts.