31 lines
5.4 KiB
Markdown
31 lines
5.4 KiB
Markdown
# WoW Shaman Flurry
|
|
|
|
## Source precedence and selected values
|
|
|
|
The project-generated DBC talent row `talent-602` is authoritative for this mechanic's rank values and trigger. Its Enhancement ranks are spell IDs `16256`, `16281`, and `16282`; their expanded local tooltips say a melee critical strike grants three following swings with `4%`, `6%`, and `10%` melee haste. The profile in [`src/game/wow335ShamanFlurryRuntime.ts`](../src/game/wow335ShamanFlurryRuntime.ts) reads those descriptions rather than duplicating the rank values.
|
|
|
|
The generated row also contains a rank-two payload mismatch: its expanded tooltip says `6%`, while the raw `rankEffects` child effect has `basePoints: 7`. WotLKDB child aura rows linked from the rank spells report values `12` for child `16277` and `18` for child `16278`; those payload values do not replace the generated project tooltip values. This implementation follows the generated `4/6/10%` tooltips, as directed.
|
|
|
|
The local rank-spell `durationIndex: 21` resolves to `-1` in local `SpellDuration.dbc` row 21, correctly describing each passive talent rank as permanent. The proc child spells—not the passive ranks—carry the temporary aura duration: local `Spell.dbc` rows `16257`, `16277`, and `16278` each reference duration index `8`, which resolves to `15_000ms` in local `SpellDuration.dbc` row 8. Runtime uses this local duration mapping. The local values were read from the extracted client DBC pair at `F:\Projects\LadiksMPQEditor\client-current\patch-T\DBFilesClient\Spell.dbc` and `F:\Projects\LadiksMPQEditor\client-current\patch-S\DBFilesClient\SpellDuration.dbc`. The [WotLKDB rank-two child aura](https://wotlkdb.com/?spell=16277) and [rank-three child aura](https://wotlkdb.com/?spell=16278) corroborate 15 seconds; the rank-one child duration is resolved locally even though its WotLKDB page was not independently readable.
|
|
|
|
The [WotLKDB rank-one parent](https://wotlkdb.com/?spell=16256), [rank-two parent](https://wotlkdb.com/?spell=16281), and [rank-three parent](https://wotlkdb.com/?spell=16282) each show a proc-trigger effect linked to a Flurry child aura. Those pages do not expose the proc flags, child charge count, or the rule for refreshing charges while the aura is active. No rank values or trigger details are taken from those pages when the local generated row already supplies them.
|
|
|
|
## Runtime behavior
|
|
|
|
`combatStore.ts` uses the source actor's exact `talent-602` rank and only recognizes Shaman talent owners. A direct, non-periodic combat result procs on a landed melee critical strike. No random roll is added: each generated rank row lists a 100% proc chance. The effect applies to the owner, so player and generated-companion Shamans keep separate auras and rank values.
|
|
|
|
The temporary aura adds the selected rank's flat melee-haste percentage for 15 seconds. Its three aura stacks represent swing charges; haste is explicitly not multiplied by those charges. Every resolved owner melee autoattack attempt consumes one charge, including a miss, and the triggering swing consumes none because the charge is applied after consuming any prior charge. Main-hand and off-hand attempts consume from the same owner aura. The player and companion Shaman autoattack schedulers recompute that hand's next interval from the post-hit aura state, so a proc speeds following intervals and the third consumed charge stops affecting the interval after that swing.
|
|
|
|
When a new eligible critical occurs with Flurry already active, runtime policy replaces the remaining charges with three and resets the 15-second timer. This is a practical interpretation of “for your next 3 swings”; WotLKDB does not document the stock refresh rule, so this exact refresh policy remains unverified. If two hands are due at the same simulation timestamp, the existing player/party loop order resolves main-hand first and then off-hand; the source pages do not establish a stock order for that tied case.
|
|
|
|
## Coverage limits and assumptions
|
|
|
|
- The passive ranks' generated data omits proc-phase flags. The runtime follows the local tooltip's broad direct melee-critical trigger, including modeled direct melee abilities; it excludes periodic packets. It does not synthesize attacks or spell events absent from the current combat resolver.
|
|
- A critical special ability can apply Flurry, but an already-pending autoattack deadline is not retimed at the moment of that ability hit. Haste is read when the next autoattack swing resolves and its following interval is scheduled. The simulation does not track fractional swing progress, so exact mid-swing haste retiming remains outside this integration.
|
|
- The 15-second value is resolved locally for all three child rank auras. WotLKDB child rows for ranks two and three corroborate it.
|
|
- Charge refresh behavior, proc flags for proc-generated direct melee hits, and ordering for equal-time dual-wield swings remain source boundaries rather than confirmed stock details.
|
|
|
|
## Focused validation
|
|
|
|
[`src/game/wow335ShamanFlurryRuntime.test.ts`](../src/game/wow335ShamanFlurryRuntime.test.ts) checks generated rank identity/IDs, tooltip values, proc gates, rank normalization, the local raw-payload mismatch, aura duration/haste, refresh policy, charge ownership, and expiry. [`src/game/wow335ShamanFlurry.integration.test.ts`](../src/game/wow335ShamanFlurry.integration.test.ts) checks a player Shaman's landed critical and resulting hastened interval plus a generated companion Shaman's own rank and three subsequent autoattack charge consumption.
|