Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The PTR MM cooldown list evaluates the generic potion action before its specialized Liquid Luster rule, so the generic potion can win when both are eligible. This gives Luster priority in the existing Recklessness/Bullseye pre-Trueshot window and adds a fallback during active Trueshot at full Bullseye stacks with more than 20 seconds remaining.
Both Luster rules now require Recklessness and Bullseye. The unconditional end-of-fight fallback stays on the generic potion action. This prevents the prioritized Luster rule from replacing the opener potion in a short fight or replacing a different selected potion. The comment describes the preference without claiming a universal critical-strike cap.
Draft for maintainer review and release-build validation. Only the PTR cds potion rules and their generated marksmanship_ptr() C++ change; shot priorities remain the upstream defaults.
Measured with official Windows nightly af05b9e, PTR 12.1.5.70077, hotfix 2026-10-07/70077. The branch starts at 80f9547, whose only change since that nightly is in sc_evoker.cpp. Base PTR TXT/generated actions match the tested native default.
Current-code results, Patchwerk 1T, personal Font + Heart gear, Recklessness, 20,000 requested iterations per cell (19,999 reported samples), threads=1, fixed_time=1, vary_combat_length=0.2, target_error=0, seed=2026101291. Ten new candidate runs were compared with the saved native controls on the same official executable; actor, seed and complete runtime settings were verified identical within each pair.
At 240s, collected gameplay data is identical. The 300s/360s results support a small gain for these profiles. The 450s/600s differences, including the small negative DR600 estimate, have approximate 95% intervals overlapping zero. Delta SE combines the two marginal standard errors scaled by baseline DPS; iteration covariance is unavailable, so this is not a paired significance claim. This table applies to the guarded policy in the current head.
Regression checks, 2,000 requested iterations per run (1,999 samples), seed=2026101299, fixed_time=1, vary_combat_length=0:
Review scope: one player gear/talent pair per hero, plus bounded short-fight and alternate-potion regressions. Broader gear/stat, talent, AoE, DungeonRoute and release-build validation remain needed. Full Bullseye + Trueshot does not guarantee a universal crit cap; Recklessness can select another highest secondary and Penetrating Shots can preserve value from extra crit. The active-Trueshot fallback retains its tested >20s guard, so it may use less than Luster's full 30s ramp. Potion cooldown and trinket rules are unchanged. Without Bullseye, neither Luster rule is eligible (checked statically; no dedicated no-Bullseye simulation).
The repository's ConvertAPL.py was rerun and checked for idempotence; generated actions match the tested TXT exactly, and C++ outside marksmanship_ptr() is unchanged. The updated translation unit compiled with MSVC 19.44. Full build/CI and release validation are still pending.
Reproduce with the pinned af05b9e simulator. With this PR checked out, extract complete APL files (bash), then save the profiles below:
JSON DPS mean and mean_std_dev are under sim.players[0].collected_data.dps. The tables use the binary's native default controls; previously verified native-vs-inline baseline runs reproduce the same gameplay data.
sentinel.simc (native control profile/settings; output path removed)
darkranger.simc (native control profile/settings; output path removed)