From 4f65ba3d98a835fdad920f2b93876893d42bad71 Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Thu, 26 Dec 2024 10:53:10 -0500 Subject: [PATCH] warlock p5/p6 preset --- sim/warlock/dps/TestAffliction.results | 484 ++++++++++++++++ sim/warlock/dps/TestDemonology.results | 444 +++++++++++++++ sim/warlock/dps/TestDestruction.results | 526 ++++++++++++++++-- sim/warlock/dps/dps_warlock_test.go | 136 +++++ ui/protection_paladin/presets.ts | 2 +- ui/tank_warlock/presets.ts | 2 +- ui/warlock/apls/p4/destruction.apl.json | 3 +- ui/warlock/apls/p5/affliction.apl.json | 34 ++ ui/warlock/apls/p5/demonology.apl.json | 30 + ui/warlock/apls/p5/destruction.apl.json | 30 + ui/warlock/apls/p6/affliction.apl.json | 27 + ui/warlock/apls/p6/demonology.apl.json | 24 + ui/warlock/apls/p6/destruction.apl.json | 25 + .../gear_sets/p5/demonology_hybrid.gear.json | 0 ui/warlock/gear_sets/p6/affliction.gear.json | 22 + ui/warlock/gear_sets/p6/demonology.gear.json | 22 + ui/warlock/gear_sets/p6/destruction.gear.json | 21 + ui/warlock/presets.ts | 200 +++++-- ui/warlock/sim.ts | 10 +- 19 files changed, 1941 insertions(+), 101 deletions(-) create mode 100644 ui/warlock/apls/p5/affliction.apl.json create mode 100644 ui/warlock/apls/p5/demonology.apl.json create mode 100644 ui/warlock/apls/p5/destruction.apl.json create mode 100644 ui/warlock/apls/p6/affliction.apl.json create mode 100644 ui/warlock/apls/p6/demonology.apl.json create mode 100644 ui/warlock/apls/p6/destruction.apl.json delete mode 100644 ui/warlock/gear_sets/p5/demonology_hybrid.gear.json create mode 100644 ui/warlock/gear_sets/p6/affliction.gear.json create mode 100644 ui/warlock/gear_sets/p6/demonology.gear.json create mode 100644 ui/warlock/gear_sets/p6/destruction.gear.json diff --git a/sim/warlock/dps/TestAffliction.results b/sim/warlock/dps/TestAffliction.results index e94ae90075..f848651fd4 100644 --- a/sim/warlock/dps/TestAffliction.results +++ b/sim/warlock/dps/TestAffliction.results @@ -145,6 +145,104 @@ character_stats_results: { final_stats: 0 } } +character_stats_results: { + key: "TestAffliction-Phase5-Lvl60-CharacterStats-Default" + value: { + final_stats: 216.315 + final_stats: 215.05 + final_stats: 587.719 + final_stats: 423.775 + final_stats: 421.245 + final_stats: 919.6225 + final_stats: 0 + final_stats: 40 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 40 + final_stats: 41.25 + final_stats: 9 + final_stats: 39.69229 + final_stats: 0 + final_stats: 0 + final_stats: 1036.315 + final_stats: 9 + final_stats: 33.7525 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7449.625 + final_stats: 0 + final_stats: 0 + final_stats: 1542.1 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.7525 + final_stats: 5 + final_stats: 0 + final_stats: 7411.19 + final_stats: 27 + final_stats: 60 + final_stats: 100 + final_stats: 100 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 65 + final_stats: 0 + } +} +character_stats_results: { + key: "TestAffliction-Phase6-Lvl60-CharacterStats-Default" + value: { + final_stats: 211.255 + final_stats: 209.99 + final_stats: 596.4475 + final_stats: 404.8 + final_stats: 337.755 + final_stats: 952.8775 + final_stats: 0 + final_stats: 40 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 60 + final_stats: 41.25 + final_stats: 4 + final_stats: 39.3792 + final_stats: 0 + final_stats: 0 + final_stats: 1031.255 + final_stats: 4 + final_stats: 33.4995 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7165 + final_stats: 0 + final_stats: 0 + final_stats: 1549.98 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.4995 + final_stats: 5 + final_stats: 0 + final_stats: 7498.475 + final_stats: 27 + final_stats: 60 + final_stats: 60 + final_stats: 85 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 82 + final_stats: 0 + } +} stat_weights_results: { key: "TestAffliction-Phase2-Lvl40-StatWeights-Default" value: { @@ -292,6 +390,104 @@ stat_weights_results: { weights: 0 } } +stat_weights_results: { + key: "TestAffliction-Phase5-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: -0.65107 + weights: 0 + weights: 3.05307 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 26.49213 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} +stat_weights_results: { + key: "TestAffliction-Phase6-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: -0.02472 + weights: 0 + weights: 4.3263 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 28.89265 + weights: 24.95792 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} dps_results: { key: "TestAffliction-Phase2-Lvl40-AllItems-DeathmistRaiment" value: { @@ -572,3 +768,291 @@ dps_results: { hps: 793.04076 } } +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 1061.30476 + tps: 741.81397 + hps: 251.25233 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 685.63026 + tps: 436.78323 + hps: 241.88918 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 1060.95016 + tps: 742.53144 + hps: 249.91993 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 3982.49272 + tps: 3059.99059 + hps: 789.03722 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 675.32353 + tps: 438.95909 + hps: 237.12557 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-Kezan'sUnstoppableTaint-231346" + value: { + dps: 4146.64541 + tps: 3189.37973 + hps: 854.83854 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 1061.30476 + tps: 741.81397 + hps: 251.25233 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 1861.89131 + tps: 1380.01006 + hps: 357.31465 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 1833.49375 + tps: 1359.7658 + hps: 364.37985 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 3980.44809 + tps: 3059.8528 + hps: 789.03722 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Average-Default" + value: { + dps: 4180.03363 + tps: 3212.54524 + hps: 851.81323 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 4142.64941 + tps: 4216.52344 + hps: 843.62185 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 4142.64941 + tps: 3186.21652 + hps: 843.62185 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 4071.61127 + tps: 3266.32219 + hps: 793.72141 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 1839.13917 + tps: 2520.4761 + hps: 408.85822 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 1839.13917 + tps: 1430.68214 + hps: 408.85822 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 1819.19108 + tps: 1478.32408 + hps: 364.13866 + } +} +dps_results: { + key: "TestAffliction-Phase5-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 4162.55171 + tps: 3202.61921 + hps: 850.4873 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 751.31712 + tps: 668.15813 + hps: 233.24317 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 350.03273 + tps: 267.58617 + hps: 239.63198 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 745.97212 + tps: 666.26501 + hps: 230.60037 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 4452.05812 + tps: 4308.78999 + hps: 959.31949 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 349.1955 + tps: 279.56964 + hps: 238.42729 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-Kezan'sUnstoppableTaint-231346" + value: { + dps: 4483.65952 + tps: 4334.86846 + hps: 969.43493 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 751.31712 + tps: 668.15813 + hps: 233.24317 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 1017.15132 + tps: 924.73958 + hps: 292.43015 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 1004.35353 + tps: 913.17642 + hps: 297.99763 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 4476.0991 + tps: 4332.95434 + hps: 939.26576 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Average-Default" + value: { + dps: 4511.57599 + tps: 4367.02487 + hps: 964.24634 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 4517.30073 + tps: 5657.64738 + hps: 967.49925 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 4517.30073 + tps: 4374.2179 + hps: 967.49925 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-FullBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 4169.62811 + tps: 3950.71365 + hps: 857.70126 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 2041.42181 + tps: 3402.6998 + hps: 499.11369 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 2041.42181 + tps: 1998.05135 + hps: 499.11369 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-Settings-Orc-affliction-Affliction Warlock-affliction-NoBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 1954.31843 + tps: 1860.52403 + hps: 460.45966 + } +} +dps_results: { + key: "TestAffliction-Phase6-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 4536.94416 + tps: 4391.44075 + hps: 983.07888 + } +} diff --git a/sim/warlock/dps/TestDemonology.results b/sim/warlock/dps/TestDemonology.results index a474b07dfb..90b119ae64 100644 --- a/sim/warlock/dps/TestDemonology.results +++ b/sim/warlock/dps/TestDemonology.results @@ -47,6 +47,104 @@ character_stats_results: { final_stats: 0 } } +character_stats_results: { + key: "TestDemonology-Phase5-Lvl60-CharacterStats-Default" + value: { + final_stats: 216.315 + final_stats: 215.05 + final_stats: 600.81175 + final_stats: 418.715 + final_stats: 423.775 + final_stats: 876.8875 + final_stats: 0 + final_stats: 40 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 40 + final_stats: 41.25 + final_stats: 9 + final_stats: 48.6088 + final_stats: 0 + final_stats: 0 + final_stats: 1036.315 + final_stats: 9 + final_stats: 44.7525 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7373.725 + final_stats: 0 + final_stats: 0 + final_stats: 1535.1 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.7525 + final_stats: 5 + final_stats: 0 + final_stats: 7542.1175 + final_stats: 27 + final_stats: 90 + final_stats: 100 + final_stats: 100 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 65 + final_stats: 0 + } +} +character_stats_results: { + key: "TestDemonology-Phase6-Lvl60-CharacterStats-Default" + value: { + final_stats: 211.255 + final_stats: 209.99 + final_stats: 564.443 + final_stats: 383.295 + final_stats: 383.295 + final_stats: 946.6475 + final_stats: 0 + final_stats: 40 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 60 + final_stats: 46.25 + final_stats: 10 + final_stats: 40.02437 + final_stats: 0 + final_stats: 0 + final_stats: 1031.255 + final_stats: 10 + final_stats: 36.4995 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 6842.425 + final_stats: 0 + final_stats: 0 + final_stats: 1558.98 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.4995 + final_stats: 5 + final_stats: 0 + final_stats: 7178.43 + final_stats: 27 + final_stats: 60 + final_stats: 90 + final_stats: 105 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 82 + final_stats: 0 + } +} stat_weights_results: { key: "TestDemonology-Phase2-Lvl40-StatWeights-Default" value: { @@ -96,6 +194,104 @@ stat_weights_results: { weights: 0 } } +stat_weights_results: { + key: "TestDemonology-Phase5-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: -0.9522 + weights: 0 + weights: 3.1364 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 24.84675 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} +stat_weights_results: { + key: "TestDemonology-Phase6-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: 2.99212 + weights: 0 + weights: 1.6566 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 25.27465 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} dps_results: { key: "TestDemonology-Phase2-Lvl40-AllItems-DeathmistRaiment" value: { @@ -159,3 +355,251 @@ dps_results: { tps: 512.50795 } } +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 2526.42259 + tps: 1074.52032 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 43.10907 + tps: 44.03123 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 2526.46762 + tps: 1075.0827 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 4615.25242 + tps: 2747.35821 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 41.49167 + tps: 42.31726 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 2526.42259 + tps: 1074.52032 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 3102.16083 + tps: 1491.82781 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 3077.08071 + tps: 1484.76187 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 4615.25242 + tps: 2747.35821 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Average-Default" + value: { + dps: 4853.25731 + tps: 2821.08348 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 5325.85459 + tps: 3735.59781 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 4817.66438 + tps: 2788.22521 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 5362.43981 + tps: 2912.59633 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 2194.10938 + tps: 2248.88312 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 1989.98655 + tps: 1253.74336 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 2247.05134 + tps: 1330.35197 + } +} +dps_results: { + key: "TestDemonology-Phase5-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 4816.72937 + tps: 2787.04696 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 2232.65923 + tps: 1341.83806 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 45.37489 + tps: 45.44939 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 2231.28604 + tps: 1341.05438 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 4663.21023 + tps: 3707.49011 + hps: 938.24926 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 44.13867 + tps: 44.04976 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 2232.65923 + tps: 1341.83806 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 2839.43364 + tps: 1898.95647 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 2810.46554 + tps: 1887.50819 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 4672.16233 + tps: 3717.65286 + hps: 947.78641 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Average-Default" + value: { + dps: 4847.07694 + tps: 3827.51902 + hps: 945.02348 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 5186.09543 + tps: 5195.20552 + hps: 960.86811 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 4782.59977 + tps: 3761.18462 + hps: 947.30592 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-FullBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 5039.9812 + tps: 3728.01491 + hps: 826.4136 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 2193.87281 + tps: 3214.51087 + hps: 498.32201 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 2041.07389 + tps: 1750.93772 + hps: 498.71717 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-Settings-Orc-demonology-Demonology Warlock-demonology-NoBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 2157.6129 + tps: 1754.15873 + hps: 449.39646 + } +} +dps_results: { + key: "TestDemonology-Phase6-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 4804.31173 + tps: 3780.60178 + hps: 946.03274 + } +} diff --git a/sim/warlock/dps/TestDestruction.results b/sim/warlock/dps/TestDestruction.results index 372d6c0a1c..7790d39b29 100644 --- a/sim/warlock/dps/TestDestruction.results +++ b/sim/warlock/dps/TestDestruction.results @@ -194,6 +194,104 @@ character_stats_results: { final_stats: 0 } } +character_stats_results: { + key: "TestDestruction-Phase5-Lvl60-CharacterStats-Default" + value: { + final_stats: 216.315 + final_stats: 215.05 + final_stats: 606.63075 + final_stats: 417.45 + final_stats: 421.245 + final_stats: 926.6225 + final_stats: 0 + final_stats: 40 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 40 + final_stats: 41.25 + final_stats: 9 + final_stats: 49.58793 + final_stats: 0 + final_stats: 0 + final_stats: 1036.315 + final_stats: 9 + final_stats: 43.7525 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7354.75 + final_stats: 0 + final_stats: 0 + final_stats: 1543.1 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.7525 + final_stats: 5 + final_stats: 0 + final_stats: 7600.3075 + final_stats: 27 + final_stats: 60 + final_stats: 110 + final_stats: 110 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 65 + final_stats: 0 + } +} +character_stats_results: { + key: "TestDestruction-Phase6-Lvl60-CharacterStats-Default" + value: { + final_stats: 211.255 + final_stats: 209.99 + final_stats: 589.17375 + final_stats: 408.595 + final_stats: 351.67 + final_stats: 892.835 + final_stats: 0 + final_stats: 117 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 40 + final_stats: 46.25 + final_stats: 10 + final_stats: 48.44182 + final_stats: 0 + final_stats: 0 + final_stats: 1031.255 + final_stats: 10 + final_stats: 42.4995 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7221.925 + final_stats: 0 + final_stats: 0 + final_stats: 1586.98 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 12.4995 + final_stats: 5 + final_stats: 0 + final_stats: 7425.7375 + final_stats: 27 + final_stats: 60 + final_stats: 60 + final_stats: 75 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 82 + final_stats: 0 + } +} stat_weights_results: { key: "TestDestruction-Phase1-Lvl25-StatWeights-Default" value: { @@ -347,9 +445,9 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: -0.5532 + weights: -0.42129 weights: 0 - weights: 2.15947 + weights: 1.50521 weights: 0 weights: 0 weights: 0 @@ -358,7 +456,105 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 22.53764 + weights: 21.27666 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} +stat_weights_results: { + key: "TestDestruction-Phase5-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: 0.72 + weights: 0 + weights: 2.19353 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 25.15213 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} +stat_weights_results: { + key: "TestDestruction-Phase6-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: 0.54194 + weights: 0 + weights: 4.38341 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0.11063 + weights: 30.75433 weights: 0 weights: 0 weights: 0 @@ -582,126 +778,378 @@ dps_results: { dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-BloodGuard'sDreadweave" value: { - dps: 1990.88161 - tps: 1744.55253 + dps: 2019.74096 + tps: 1777.35245 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-DeathmistRaiment" value: { - dps: 517.84174 - tps: 245.04758 + dps: 517.73964 + tps: 246.46875 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-EmeraldEnchantedVestments" value: { - dps: 1982.59791 - tps: 1735.45823 + dps: 2017.42416 + tps: 1776.25968 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-InfernalPactEssence-216509" value: { - dps: 3498.65307 - tps: 3145.96675 + dps: 3561.16812 + tps: 3204.6214 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-IronweaveBattlesuit" value: { - dps: 507.86449 - tps: 249.50813 + dps: 507.35194 + tps: 248.69002 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-Kezan'sUnstoppableTaint-231346" value: { - dps: 3570.62724 - tps: 3205.48633 + dps: 3602.96068 + tps: 3238.54812 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" value: { - dps: 1990.88161 - tps: 1744.55253 + dps: 2019.74096 + tps: 1777.35245 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-MalevolentProphet'sVestments" value: { - dps: 2703.96669 - tps: 2454.92803 + dps: 2713.13975 + tps: 2465.87357 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-NightmareProphet'sGarb" value: { - dps: 2621.26129 - tps: 2381.95971 + dps: 2625.49396 + tps: 2389.45341 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-AllItems-ZilaGular-223214" value: { - dps: 3505.18163 - tps: 3154.04784 + dps: 3519.26947 + tps: 3171.38974 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Average-Default" value: { - dps: 3630.37561 - tps: 3263.45116 + dps: 3677.18547 + tps: 3310.61185 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P4-Consumes-LongMultiTarget" value: { - dps: 3593.24799 - tps: 4266.37507 + dps: 3651.53713 + tps: 4328.15485 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P4-Consumes-LongSingleTarget" value: { - dps: 3593.24799 - tps: 3229.07953 + dps: 3651.53713 + tps: 3283.02184 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P4-Consumes-ShortSingleTarget" value: { - dps: 3711.51776 - tps: 3338.786 + dps: 3825.30213 + tps: 3467.44378 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P4-Consumes-LongMultiTarget" value: { - dps: 1935.20302 - tps: 2886.47649 + dps: 1954.10419 + tps: 2919.09259 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P4-Consumes-LongSingleTarget" value: { - dps: 1935.20302 - tps: 1741.70468 + dps: 1954.10419 + tps: 1762.42145 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P4-Consumes-ShortSingleTarget" value: { - dps: 1934.16595 - tps: 1725.64305 + dps: 1961.47554 + tps: 1771.99437 } } dps_results: { key: "TestDestruction-Phase4-Lvl60-SwitchInFrontOfTarget-Default" value: { - dps: 3601.94422 - tps: 3236.71793 + dps: 3629.27608 + tps: 3260.81828 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 2063.39382 + tps: 1774.05919 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 786.26889 + tps: 507.87717 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 2077.79213 + tps: 1789.24229 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 4010.57416 + tps: 3558.50469 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 747.3055 + tps: 497.90185 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-Kezan'sUnstoppableTaint-231346" + value: { + dps: 4172.37173 + tps: 3716.83222 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 2063.39382 + tps: 1774.05919 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 2875.14263 + tps: 2555.87734 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 2845.44956 + tps: 2535.14492 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 4006.95157 + tps: 3558.50469 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Average-Default" + value: { + dps: 4227.96813 + tps: 3769.83078 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 4206.44265 + tps: 4765.25333 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 4206.44265 + tps: 3747.48106 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 4550.4174 + tps: 4151.87702 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P5-Consumes-LongMultiTarget" + value: { + dps: 1991.64663 + tps: 2914.42108 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P5-Consumes-LongSingleTarget" + value: { + dps: 1991.64663 + tps: 1800.31131 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P5-Consumes-ShortSingleTarget" + value: { + dps: 2126.543 + tps: 1968.95702 + } +} +dps_results: { + key: "TestDestruction-Phase5-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 4205.27278 + tps: 3747.53499 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-BloodGuard'sDreadweave" + value: { + dps: 2094.5829 + tps: 1773.04433 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-DeathmistRaiment" + value: { + dps: 486.21031 + tps: 226.24697 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-EmeraldEnchantedVestments" + value: { + dps: 2116.82801 + tps: 1794.52536 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-InfernalPactEssence-216509" + value: { + dps: 5050.18296 + tps: 4447.28854 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-IronweaveBattlesuit" + value: { + dps: 452.59978 + tps: 228.33573 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-Kezan'sUnstoppableTaint-231346" + value: { + dps: 5013.42957 + tps: 4424.73229 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-Knight-Lieutenant'sDreadweave" + value: { + dps: 2094.5829 + tps: 1773.04433 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-MalevolentProphet'sVestments" + value: { + dps: 3144.2087 + tps: 2756.45148 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-NightmareProphet'sGarb" + value: { + dps: 3097.30626 + tps: 2718.80617 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-AllItems-ZilaGular-223214" + value: { + dps: 5028.50603 + tps: 4436.44065 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Average-Default" + value: { + dps: 5155.88426 + tps: 4559.51454 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 5068.5507 + tps: 5444.07005 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 5068.5507 + tps: 4477.46445 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-FullBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 5730.96576 + tps: 5080.87641 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 2437.48614 + tps: 3225.48274 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 2437.48614 + tps: 2169.35526 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-Settings-Orc-destruction-Destruction Warlock-destruction-NoBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 2723.42699 + tps: 2489.81203 + } +} +dps_results: { + key: "TestDestruction-Phase6-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 5051.62001 + tps: 4460.72236 } } diff --git a/sim/warlock/dps/dps_warlock_test.go b/sim/warlock/dps/dps_warlock_test.go index aa4648bf6d..1714883728 100644 --- a/sim/warlock/dps/dps_warlock_test.go +++ b/sim/warlock/dps/dps_warlock_test.go @@ -59,6 +59,40 @@ func TestAffliction(t *testing.T) { Consumes: Phase4Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Affliction Warlock", SpecOptions: DefaultAfflictionWarlock}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 5, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase5DemoTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p5", "affliction"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p5", "affliction"), + Buffs: core.FullBuffsPhase5, + Consumes: Phase5Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Affliction Warlock", SpecOptions: DefaultAfflictionWarlock}, + + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 6, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase6DestroTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p6", "affliction"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p6", "affliction"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Affliction Warlock", SpecOptions: DefaultAfflictionWarlock}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -80,6 +114,40 @@ func TestDemonology(t *testing.T) { Consumes: Phase2Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Demonology Warlock", SpecOptions: DefaultDemonologyWarlock}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 5, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase5DemoTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p5", "demonology"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p5", "demonology"), + Buffs: core.FullBuffsPhase5, + Consumes: Phase5Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Demonology Warlock", SpecOptions: DefaultDemonologyWarlock}, + + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 6, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase6DestroTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p6", "demonology"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p6", "demonology"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Demonology Warlock", SpecOptions: DefaultDemonologyWarlock}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -150,6 +218,40 @@ func TestDestruction(t *testing.T) { Consumes: Phase4Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Destruction Warlock", SpecOptions: DefaultDestroWarlock}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 5, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase5DestroTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p5", "destruction"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p5", "destruction"), + Buffs: core.FullBuffsPhase5, + Consumes: Phase5Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Destruction Warlock", SpecOptions: DefaultDestroWarlock}, + + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassWarlock, + Phase: 6, + Level: 60, + Race: proto.Race_RaceOrc, + + Talents: Phase6DestroTalents, + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets/p6", "destruction"), + Rotation: core.GetAplRotation("../../../ui/warlock/apls/p6", "destruction"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Destruction Warlock", SpecOptions: DefaultDestroWarlock}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -169,6 +271,14 @@ var Phase3NFRuinTalents = "25002500102-03-50502051020001" var Phase4AffTalents = "4500253012201005--50502051020001" var Phase4DestroTalents = "05002-035004-5050205102005151" +var Phase5AffTalents = "4500253012201005--50502051020001" +var Phase5DemoTalents = "-230205015250005-52500051020001" +var Phase5DestroTalents = "05002-23-5550205122005151" + +var Phase6AffTalents = "3500243212201005-2302050152001" +var Phase6DemoTalents = "-230205015250005-52500051020001" +var Phase6DestroTalents = "05002-23-5550205122005151" + var DefaultDestroWarlock = &proto.Player_Warlock{ Warlock: &proto.Warlock{ Options: &proto.WarlockOptions{ @@ -245,6 +355,32 @@ var Phase4Consumes = core.ConsumesCombo{ }, } +var Phase5Consumes = core.ConsumesCombo{ + Label: "P5-Consumes", + Consumes: &proto.Consumes{ + DefaultPotion: proto.Potions_MajorManaPotion, + Flask: proto.Flask_FlaskOfSupremePower, + FirePowerBuff: proto.FirePowerBuff_ElixirOfGreaterFirepower, + ShadowPowerBuff: proto.ShadowPowerBuff_ElixirOfShadowPower, + Food: proto.Food_FoodTenderWolfSteak, + MainHandImbue: proto.WeaponImbue_FlametongueWeapon, + SpellPowerBuff: proto.SpellPowerBuff_GreaterArcaneElixir, + }, +} + +var Phase6Consumes = core.ConsumesCombo{ + Label: "P6-Consumes", + Consumes: &proto.Consumes{ + DefaultPotion: proto.Potions_MajorManaPotion, + Flask: proto.Flask_FlaskOfSupremePower, + FirePowerBuff: proto.FirePowerBuff_ElixirOfGreaterFirepower, + ShadowPowerBuff: proto.ShadowPowerBuff_ElixirOfShadowPower, + Food: proto.Food_FoodDarkclawBisque, + MainHandImbue: proto.WeaponImbue_FlametongueWeapon, + SpellPowerBuff: proto.SpellPowerBuff_ElixirOfTheMageLord, + }, +} + var ItemFilters = core.ItemFilter{ WeaponTypes: []proto.WeaponType{ proto.WeaponType_WeaponTypeSword, diff --git a/ui/protection_paladin/presets.ts b/ui/protection_paladin/presets.ts index 260ed6b7bc..e27fd7c499 100644 --- a/ui/protection_paladin/presets.ts +++ b/ui/protection_paladin/presets.ts @@ -120,7 +120,7 @@ export const DefaultConsumes = Consumes.create({ armorElixir: ArmorElixir.ElixirOfSuperiorDefense, defaultPotion: Potions.GreaterStoneshieldPotion, dragonBreathChili: true, - food: Food.FoodTenderWolfSteak, + food: Food.FoodDarkclawBisque, flask: Flask.FlaskOfTheTitans, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, fillerExplosive: Explosive.ExplosiveDenseDynamite, diff --git a/ui/tank_warlock/presets.ts b/ui/tank_warlock/presets.ts index 71c8c7b6fe..726e2c7d5e 100644 --- a/ui/tank_warlock/presets.ts +++ b/ui/tank_warlock/presets.ts @@ -225,7 +225,7 @@ export const DefaultConsumes = Consumes.create({ fillerExplosive: Explosive.ExplosiveDenseDynamite, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, flask: Flask.FlaskOfAncientKnowledge, - food: Food.FoodTenderWolfSteak, + food: Food.FoodDarkclawBisque, healthElixir: HealthElixir.ElixirOfFortitude, mainHandImbue: WeaponImbue.ShadowOil, manaRegenElixir: ManaRegenElixir.MagebloodPotion, diff --git a/ui/warlock/apls/p4/destruction.apl.json b/ui/warlock/apls/p4/destruction.apl.json index 6990af128d..1649a3590e 100644 --- a/ui/warlock/apls/p4/destruction.apl.json +++ b/ui/warlock/apls/p4/destruction.apl.json @@ -24,6 +24,7 @@ {"action":{"condition":{"and":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":427713}}}}},{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":426320}}}}},{"or":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":440870}}}}},{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":440870}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E35"}}}}]}}]}}]}},"multidot":{"spellId":{"spellId":11668,"rank":7},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, {"action":{"condition":{"and":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":427713}}}}},{"or":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":440870}}}}},{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":440870}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E35"}}}}]}}]}}]}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, - {"action":{"castSpell":{"spellId":{"spellId":412758}}}} + {"action":{"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"const":{"val":"false"}},"castSpell":{"spellId":{"spellId":20572}}}} ] } diff --git a/ui/warlock/apls/p5/affliction.apl.json b/ui/warlock/apls/p5/affliction.apl.json new file mode 100644 index 0000000000..ce111cf8b4 --- /dev/null +++ b/ui/warlock/apls/p5/affliction.apl.json @@ -0,0 +1,34 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":18288}}},"doAtValue":{"const":{"val":"-5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":11661,"rank":9}}},"doAtValue":{"const":{"val":"-2.5"}}}, + {"action":{"castSpell":{"spellId":{"itemId":229910}}},"doAtValue":{"const":{"val":"0s"}}} + ], + "priorityList": [ + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":469211}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":469225}}}}},{"not":{"val":{"warlockPetIsActive":{}}}}]}},"castSpell":{"spellId":{"spellId":688}}}}, + {"action":{"castSpell":{"spellId":{"itemId":215162}}}}, + {"action":{"castSpell":{"spellId":{"itemId":228255}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"5s"}}}},{"warlockPetIsActive":{}}]}},"castSpell":{"spellId":{"itemId":230238}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":11717,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":11717,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"0.5s"}}}},"castSpell":{"spellId":{"spellId":18871,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"3.5s"}}}},"channelSpell":{"spellId":{"spellId":11675,"rank":4},"interruptIf":{"gcdIsReady":{}}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"warlockCurrentPetMana":{}},"rhs":{"const":{"val":"800"}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":426320},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":426320}}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}},"multidot":{"spellId":{"spellId":427717},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":427717}}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"18s"}}}},"multidot":{"spellId":{"spellId":11713,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":403501}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}},"multidot":{"spellId":{"spellId":11700,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"hide":true,"action":{"condition":{"auraIsActive":{"auraId":{"spellId":457558}}},"cancelAura":{"auraId":{"spellId":457558}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":426311}}},{"auraIsKnown":{"auraId":{"spellId":448686}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":448686}}},{"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}]}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":426311}}},{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":448686}}}}}]}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"hide":true,"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":18881,"rank":4},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"castSpell":{"spellId":{"spellId":11661,"rank":9}}}}, + {"action":{"condition":{"const":{"val":"false"}},"castSpell":{"spellId":{"spellId":20572}}}} + ] + } + \ No newline at end of file diff --git a/ui/warlock/apls/p5/demonology.apl.json b/ui/warlock/apls/p5/demonology.apl.json new file mode 100644 index 0000000000..0b3d4ac28c --- /dev/null +++ b/ui/warlock/apls/p5/demonology.apl.json @@ -0,0 +1,30 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":11661,"rank":9}}},"doAtValue":{"const":{"val":"-2.5s"}}} + ], + "priorityList": [ + {"action":{"castSpell":{"spellId":{"itemId":231284}}}}, + {"action":{"castSpell":{"spellId":{"itemId":230238}}}}, + {"action":{"castSpell":{"spellId":{"itemId":215162}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":11717,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":11717,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"1.5"}}}},"castSpell":{"spellId":{"spellId":18871,"rank":6}}}}, + {"hide":true,"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"3.5"}}}},"castSpell":{"spellId":{"spellId":17923,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"3.5"}}}},"channelSpell":{"spellId":{"spellId":11675,"rank":4},"interruptIf":{"gcdIsReady":{}}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"warlockCurrentPetMana":{}},"rhs":{"const":{"val":"800"}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10"}}}}]}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":426320},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":426320}}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"18s"}}}},"multidot":{"spellId":{"spellId":11713,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":403501}}}}, + {"hide":true,"action":{"condition":{"auraIsActive":{"auraId":{"spellId":457558}}},"cancelAura":{"auraId":{"spellId":457558}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":426311}}},{"auraIsKnown":{"auraId":{"spellId":448686}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":448686}}},{"castSpell":{"spellId":{"spellId":11672,"rank":6}}}]}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":426311}}},{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":448686}}}}}]}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E35"}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":440873}}},"rhs":{"const":{"val":"2.5s"}}}}]}},"castSpell":{"spellId":{"spellId":11661,"rank":9}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E35"}},{"auraIsActive":{"auraId":{"spellId":440873}}}]}},"castSpell":{"spellId":{"spellId":17924,"rank":2}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"castSpell":{"spellId":{"spellId":11661,"rank":9}}}} + ] + } + \ No newline at end of file diff --git a/ui/warlock/apls/p5/destruction.apl.json b/ui/warlock/apls/p5/destruction.apl.json new file mode 100644 index 0000000000..1c27f44ada --- /dev/null +++ b/ui/warlock/apls/p5/destruction.apl.json @@ -0,0 +1,30 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":412758}}},"doAtValue":{"const":{"val":"-2.25s"}}}, + {"action":{"castSpell":{"spellId":{"itemId":229910}}},"doAtValue":{"const":{"val":"0s"}},"hide":true} + ], + "priorityList": [ + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":469211}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":469222}}}}},{"not":{"val":{"warlockPetIsActive":{}}}}]}},"castSpell":{"spellId":{"spellId":688}}}}, + {"action":{"condition":{"warlockPetIsActive":{}},"castSpell":{"spellId":{"itemId":230238}}}}, + {"action":{"condition":{"and":{"vals":[{"warlockPetIsActive":{}},{"not":{"val":{"auraIsActive":{"auraId":{"itemId":230238}}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"17s"}}}}]}},"castSpell":{"spellId":{"itemId":229910}}}}, + {"action":{"castSpell":{"spellId":{"itemId":228255}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":469222}}},"castSpell":{"spellId":{"itemId":215162}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":11717,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":11717,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"1.5"}}}},"castSpell":{"spellId":{"spellId":18871,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"3.5"}}}},"castSpell":{"spellId":{"spellId":17923,"rank":6}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"warlockCurrentPetMana":{}},"rhs":{"const":{"val":"800"}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10"}}}}]}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":427714}}}}},"castSpell":{"spellId":{"spellId":18932,"rank":4}}}}, + {"hide":true,"action":{"condition":{"auraIsActive":{"auraId":{"spellId":426311}}},"multidot":{"spellId":{"spellId":11672,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"5s"}}}},"multidot":{"spellId":{"spellId":11668,"rank":7},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":11668,"rank":7}}}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":440873}}},{"not":{"val":{"isExecutePhase":{"threshold":"E35"}}}}]}},"castSpell":{"spellId":{"spellId":17924,"rank":2}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E35"}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":440873}}},"rhs":{"const":{"val":"1.8s"}}}}]}},"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E35"}},{"cmp":{"op":"OpGt","lhs":{"auraRemainingTime":{"auraId":{"spellId":412758}}},"rhs":{"const":{"val":"1.85s"}}}},{"auraIsActive":{"auraId":{"spellId":440873}}}]}},"castSpell":{"spellId":{"spellId":17924,"rank":2}}}}, + {"action":{"condition":{"not":{"val":{"isExecutePhase":{"threshold":"E35"}}}},"castSpell":{"spellId":{"spellId":403629}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"const":{"val":"false"}},"castSpell":{"spellId":{"spellId":20572}}}} + ] +} \ No newline at end of file diff --git a/ui/warlock/apls/p6/affliction.apl.json b/ui/warlock/apls/p6/affliction.apl.json new file mode 100644 index 0000000000..5685658c37 --- /dev/null +++ b/ui/warlock/apls/p6/affliction.apl.json @@ -0,0 +1,27 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":18288}}},"doAtValue":{"const":{"val":"-5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":426320}}},"doAtValue":{"const":{"val":"-2s"}}} + ], + "priorityList": [ + {"action":{"castSpell":{"spellId":{"itemId":229910}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":469225}}}}},{"not":{"val":{"warlockPetIsActive":{}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":18708}}},{"castSpell":{"spellId":{"spellId":712}}},{"castSpell":{"spellId":{"spellId":18788}}}]}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"warlockCurrentPetMana":{}},"rhs":{"const":{"val":"800"}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":427717},"maxDots":1,"maxOverlap":{"const":{"val":"7499ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":11700,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":426320},"maxDots":1,"maxOverlap":{"const":{"val":"7499ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"9s"}}}},"multidot":{"spellId":{"spellId":11713,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"5999ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":25311,"rank":7},"maxDots":1,"maxOverlap":{"const":{"val":"5999ms"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":403501}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":17941}}},"castSpell":{"spellId":{"spellId":25307,"rank":10}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}}]}},"multidot":{"spellId":{"spellId":18881,"rank":4},"maxDots":1,"maxOverlap":{"const":{"val":"5999ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"channelSpell":{"spellId":{"spellId":11675,"rank":4},"interruptIf":{"gcdIsReady":{}}}}}, + {"action":{"condition":{"const":{"val":"false"}},"castSpell":{"spellId":{"spellId":20572}}}} + ] + } + \ No newline at end of file diff --git a/ui/warlock/apls/p6/demonology.apl.json b/ui/warlock/apls/p6/demonology.apl.json new file mode 100644 index 0000000000..9b94bbd21a --- /dev/null +++ b/ui/warlock/apls/p6/demonology.apl.json @@ -0,0 +1,24 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":25307,"rank":10}}},"doAtValue":{"const":{"val":"-2.5s"}}} + ], + "priorityList": [ + {"action":{"castSpell":{"spellId":{"itemId":231284}}}}, + {"action":{"castSpell":{"spellId":{"itemId":230238}}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"1.5"}}}},"castSpell":{"spellId":{"spellId":18871,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"3.5"}}}},"channelSpell":{"spellId":{"spellId":11675,"rank":4},"interruptIf":{"gcdIsReady":{}}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"warlockCurrentPetMana":{}},"rhs":{"const":{"val":"800"}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10"}}}}]}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},"multidot":{"spellId":{"spellId":426320},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":426320}}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}},"multidot":{"spellId":{"spellId":25311,"rank":7},"maxDots":1,"maxOverlap":{"const":{"val":"2000ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"18s"}}}},"multidot":{"spellId":{"spellId":11713,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":403501}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"10s"}}}},{"runeIsEquipped":{"runeId":{"spellId":403668}}}]}},"multidot":{"spellId":{"spellId":11700,"rank":6},"maxDots":1,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"castSpell":{"spellId":{"spellId":25307,"rank":10}}}} + ] + } + \ No newline at end of file diff --git a/ui/warlock/apls/p6/destruction.apl.json b/ui/warlock/apls/p6/destruction.apl.json new file mode 100644 index 0000000000..58f9af3fea --- /dev/null +++ b/ui/warlock/apls/p6/destruction.apl.json @@ -0,0 +1,25 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":412758}}},"doAtValue":{"const":{"val":"-2.25s"}}} + ], + "priorityList": [ + {"action":{"condition":{"warlockPetIsActive":{}},"castSpell":{"spellId":{"itemId":230238}}}}, + {"action":{"condition":{"or":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":469222}}}}},{"auraIsActive":{"auraId":{"spellId":469222}}}]}},"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"warlockPetIsActive":{}},{"not":{"val":{"auraIsActive":{"auraId":{"itemId":230238}}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"17s"}}}}]}},"castSpell":{"spellId":{"itemId":229910}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":13444}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}},{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"25%"}}}},{"isExecutePhase":{"threshold":"E35"}}]}},"castSpell":{"spellId":{"itemId":12662}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"1.5"}}}},"castSpell":{"spellId":{"spellId":18871,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"2.5"}}}},"castSpell":{"spellId":{"spellId":17923,"rank":6}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":1214088}}},{"cmp":{"op":"OpLe","lhs":{"auraNumStacks":{"auraId":{"spellId":1214088}}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":18932,"rank":4}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":427714}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":427714}}}}}]}},"castSpell":{"spellId":{"spellId":18932,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"5s"}}}},"multidot":{"spellId":{"spellId":25309,"rank":8},"maxDots":1,"maxOverlap":{"spellCastTime":{"spellId":{"spellId":25309,"rank":8}}}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":412758}}},"rhs":{"const":{"val":"1.8"}}}},"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E35"}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":440873}}},"rhs":{"spellCastTime":{"spellId":{"spellId":412758}}}}}]}},"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":440873}}},{"auraIsActive":{"auraId":{"spellId":440873}}}]}},"castSpell":{"spellId":{"spellId":17924,"rank":2}}}}, + {"action":{"condition":{"not":{"val":{"isExecutePhase":{"threshold":"E35"}}}},"castSpell":{"spellId":{"spellId":403629}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"10%"}}}},"castSpell":{"spellId":{"spellId":11689,"rank":6}}}}, + {"action":{"castSpell":{"spellId":{"spellId":412758}}}}, + {"action":{"condition":{"const":{"val":"false"}},"castSpell":{"spellId":{"spellId":20572}}}} + ] +} diff --git a/ui/warlock/gear_sets/p5/demonology_hybrid.gear.json b/ui/warlock/gear_sets/p5/demonology_hybrid.gear.json deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/ui/warlock/gear_sets/p6/affliction.gear.json b/ui/warlock/gear_sets/p6/affliction.gear.json new file mode 100644 index 0000000000..95f33dd6be --- /dev/null +++ b/ui/warlock/gear_sets/p6/affliction.gear.json @@ -0,0 +1,22 @@ +{ + "items": [ + {"id":233624,"enchant":7630,"rune":427712}, + {"id":233620}, + {"id":234082,"enchant":2605}, + {"id":233630,"enchant":2621,"rune":403511}, + {"id":234062,"enchant":7648,"rune":403668}, + {"id":231079,"enchant":7655,"rune":427717}, + {"id":231073,"enchant":2614,"rune":403501}, + {"id":233633,"rune":426243}, + {"id":234108,"enchant":7630,"rune":425464}, + {"id":234093,"enchant":7648,"rune":426320}, + {"id":234436,"rune":442897}, + {"id":234463,"rune":442894}, + {"id":233991}, + {"id":234080}, + {"id":229910,"enchant":2504}, + {}, + {"id":233571} + ] + } + \ No newline at end of file diff --git a/ui/warlock/gear_sets/p6/demonology.gear.json b/ui/warlock/gear_sets/p6/demonology.gear.json new file mode 100644 index 0000000000..78e8b99a18 --- /dev/null +++ b/ui/warlock/gear_sets/p6/demonology.gear.json @@ -0,0 +1,22 @@ +{ + "items": [ + {"id":233381,"enchant":7630,"rune":427712}, + {"id":231346}, + {"id":231077,"enchant":2605}, + {"id":233630,"enchant":2621,"rune":403511}, + {"id":233380,"enchant":7648,"rune":403668}, + {"id":231079,"enchant":7655,"rune":427733}, + {"id":231073,"enchant":2614,"rune":403501}, + {"id":231078,"rune":426301}, + {"id":231075,"enchant":7630,"rune":425464}, + {"id":231072,"enchant":7648,"rune":426320}, + {"id":234803,"rune":442897}, + {"id":234101,"rune":468762}, + {"id":230238}, + {"id":231284}, + {"id":233599,"enchant":2504}, + {"id":233616}, + {"id":234976} + ] + } + \ No newline at end of file diff --git a/ui/warlock/gear_sets/p6/destruction.gear.json b/ui/warlock/gear_sets/p6/destruction.gear.json new file mode 100644 index 0000000000..b73424a973 --- /dev/null +++ b/ui/warlock/gear_sets/p6/destruction.gear.json @@ -0,0 +1,21 @@ +{ + "items": [ + {"id":233381,"enchant":7630,"rune":427713}, + {"id":233620}, + {"id":233379,"enchant":2605}, + {"id":233630,"enchant":2621}, + {"id":233380,"enchant":7648,"rune":412727}, + {"id":234114,"enchant":7655,"rune":412758}, + {"id":233631,"enchant":2616,"rune":403629}, + {"id":233633,"rune":426316}, + {"id":233574,"enchant":7630,"rune":425464}, + {"id":233377,"enchant":7648,"rune":440870}, + {"id":234032,"rune":468762}, + {"id":234463,"rune":442894}, + {"id":230238}, + {"id":228255}, + {"id":229910,"enchant":2504}, + {}, + {"id":234976} + ] +} \ No newline at end of file diff --git a/ui/warlock/presets.ts b/ui/warlock/presets.ts index 05ca3081da..af8cde0a3b 100644 --- a/ui/warlock/presets.ts +++ b/ui/warlock/presets.ts @@ -14,6 +14,7 @@ import { ManaRegenElixir, Potions, Profession, + Race, RaidBuffs, SaygesFortune, ShadowPowerBuff, @@ -30,58 +31,74 @@ import { WarlockOptions_WeaponImbue as WarlockWeaponImbue, } from '../core/proto/warlock.js'; // apls -import DestroP1APL from './apls/p1/destruction.apl.json'; -import AfflictionAPL from './apls/p2/affliction.apl.json'; -import DemonologyAPL from './apls/p2/demonology.apl.json'; -import DestroConflagAPL from './apls/p2/fire.conflag.apl.json'; -import DestroMgiAPL from './apls/p2/fire.imp.apl.json'; -import BackdraftAPLP3 from './apls/p3/backdraft.apl.json'; -import NFRuinAPLP3 from './apls/p3/nf.ruin.apl.json'; -import AffAPLP4 from './apls/p4/affliction.apl.json'; -import DestroAPLP4 from './apls/p4/destruction.apl.json'; +import DestroAplP1JSON from './apls/p1/destruction.apl.json'; +import AfflictionAplP2JSON from './apls/p2/affliction.apl.json'; +import DemonologyAplP2JSON from './apls/p2/demonology.apl.json'; +import DestroConflagAplP2JSON from './apls/p2/fire.conflag.apl.json'; +import DestroMgiAplP2JSON from './apls/p2/fire.imp.apl.json'; +import BackdraftAplP3JSON from './apls/p3/backdraft.apl.json'; +import NFRuinAplP3JSON from './apls/p3/nf.ruin.apl.json'; +import AffAplP4JSON from './apls/p4/affliction.apl.json'; +import DestroAplP4JSON from './apls/p4/destruction.apl.json'; +import AffAplP5JSON from './apls/p5/affliction.apl.json'; +import DemoAplP5JSON from './apls/p5/demonology.apl.json'; +import DestroAplP5JSON from './apls/p5/destruction.apl.json'; +import AffAplP6JSON from './apls/p6/affliction.apl.json'; +import DemoAplP6JSON from './apls/p6/demonology.apl.json'; +import DestroAplP6JSON from './apls/p6/destruction.apl.json'; // gear -import DestructionGear from './gear_sets/p1/destruction.gear.json'; -import FireImpGear from './gear_sets/p2/fire.imp.gear.json'; -import FireSuccubusGear from './gear_sets/p2/fire.succubus.gear.json'; -import ShadowGear from './gear_sets/p2/shadow.gear.json'; -import BackdraftGearP3 from './gear_sets/p3/backdraft.gear.json'; -import NFRuinGearP3 from './gear_sets/p3/nf.ruin.gear.json'; -import AffGearP4 from './gear_sets/p4/affliction.gear.json'; -import DestroGearP4 from './gear_sets/p4/destruction.gear.json'; -import AffGearP5 from './gear_sets/p5/affliction.gear.json'; -import DemoGearP5 from './gear_sets/p5/demonology.gear.json'; -import DestroGearP5 from './gear_sets/p5/destruction.gear.json'; +import DestructionGearJSON from './gear_sets/p1/destruction.gear.json'; +import FireImpGearJSON from './gear_sets/p2/fire.imp.gear.json'; +import FireSuccubusGearJSON from './gear_sets/p2/fire.succubus.gear.json'; +import ShadowGearJSON from './gear_sets/p2/shadow.gear.json'; +import BackdraftGearP3JSON from './gear_sets/p3/backdraft.gear.json'; +import NFRuinGearP3JSON from './gear_sets/p3/nf.ruin.gear.json'; +import AffGearP4JSON from './gear_sets/p4/affliction.gear.json'; +import DestroGearP4JSON from './gear_sets/p4/destruction.gear.json'; +import AffGearP5JSON from './gear_sets/p5/affliction.gear.json'; +import DemoGearP5JSON from './gear_sets/p5/demonology.gear.json'; +import DestroGearP5JSON from './gear_sets/p5/destruction.gear.json'; +import AffGearP6JSON from './gear_sets/p6/affliction.gear.json'; +import DemoGearP6JSON from './gear_sets/p6/demonology.gear.json'; +import DestroGearP6JSON from './gear_sets/p6/destruction.gear.json'; /////////////////////////////////////////////////////////////////////////// // Gear Presets /////////////////////////////////////////////////////////////////////////// -export const GearDestructionPhase1 = PresetUtils.makePresetGear('Destruction', DestructionGear, { customCondition: player => player.getLevel() === 25 }); +export const GearDestructionPhase1 = PresetUtils.makePresetGear('Destruction', DestructionGearJSON, { customCondition: player => player.getLevel() === 25 }); -export const FireImpGearPhase2 = PresetUtils.makePresetGear('P2 Fire Imp', FireImpGear, { customCondition: player => player.getLevel() === 40 }); -export const FireSuccubusGearPhase2 = PresetUtils.makePresetGear('P2 Fire Succubus', FireSuccubusGear, { customCondition: player => player.getLevel() === 40 }); -export const ShadowGearPhase2 = PresetUtils.makePresetGear('P2 Shadow', ShadowGear, { customCondition: player => player.getLevel() === 40 }); +export const FireImpGearPhase2 = PresetUtils.makePresetGear('P2 Fire Imp', FireImpGearJSON, { customCondition: player => player.getLevel() === 40 }); +export const FireSuccubusGearPhase2 = PresetUtils.makePresetGear('P2 Fire Succubus', FireSuccubusGearJSON, { customCondition: player => player.getLevel() === 40 }); +export const ShadowGearPhase2 = PresetUtils.makePresetGear('P2 Shadow', ShadowGearJSON, { customCondition: player => player.getLevel() === 40 }); -export const BackdraftGearPhase3 = PresetUtils.makePresetGear('P3 Backdraft', BackdraftGearP3, { customCondition: player => player.getLevel() === 50 }); -export const NFRuinGearPhase3 = PresetUtils.makePresetGear('P3 NF/Ruin', NFRuinGearP3, { customCondition: player => player.getLevel() === 50 }); +export const BackdraftGearPhase3 = PresetUtils.makePresetGear('P3 Backdraft', BackdraftGearP3JSON, { customCondition: player => player.getLevel() === 50 }); +export const NFRuinGearPhase3 = PresetUtils.makePresetGear('P3 NF/Ruin', NFRuinGearP3JSON, { customCondition: player => player.getLevel() === 50 }); -export const AffGearPhase4 = PresetUtils.makePresetGear('P4 Aff', AffGearP4, { customCondition: player => player.getLevel() === 60 }); -export const DestroGearPhase4 = PresetUtils.makePresetGear('P4 Destro', DestroGearP4, { customCondition: player => player.getLevel() === 60 }); +export const AffGearPhase4 = PresetUtils.makePresetGear('P4 Aff', AffGearP4JSON, { customCondition: player => player.getLevel() === 60 }); +export const DestroGearPhase4 = PresetUtils.makePresetGear('P4 Destro', DestroGearP4JSON, { customCondition: player => player.getLevel() === 60 }); -export const AffGearPhase5 = PresetUtils.makePresetGear('P5 Aff', AffGearP5, { customCondition: player => player.getLevel() === 60 }); -export const DemoGearPhase5 = PresetUtils.makePresetGear('P5 Demo', AffGearP5, { customCondition: player => player.getLevel() === 60 }); -export const DestroGearPhase5 = PresetUtils.makePresetGear('P5 Destro', DestroGearP5, { customCondition: player => player.getLevel() === 60 }); +export const AffGearPhase5 = PresetUtils.makePresetGear('P5 Aff', AffGearP5JSON, { customCondition: player => player.getLevel() === 60 }); +export const DemoGearPhase5 = PresetUtils.makePresetGear('P5 Demo', DemoGearP5JSON, { customCondition: player => player.getLevel() === 60 }); +export const DestroGearPhase5 = PresetUtils.makePresetGear('P5 Destro', DestroGearP5JSON, { customCondition: player => player.getLevel() === 60 }); + +export const AffGearPhase6 = PresetUtils.makePresetGear('P6 Aff', AffGearP6JSON, { customCondition: player => player.getLevel() === 60 }); +export const DemoGearPhase6 = PresetUtils.makePresetGear('P6 Demo', DemoGearP6JSON, { customCondition: player => player.getLevel() === 60 }); +export const DestroGearPhase6 = PresetUtils.makePresetGear('P6 Destro', DestroGearP6JSON, { customCondition: player => player.getLevel() === 60 }); export const GearPresets = { [Phase.Phase1]: [GearDestructionPhase1], [Phase.Phase2]: [FireImpGearPhase2, FireSuccubusGearPhase2, ShadowGearPhase2], [Phase.Phase3]: [NFRuinGearPhase3, BackdraftGearPhase3], [Phase.Phase4]: [AffGearPhase4, DestroGearPhase4], - [Phase.Phase5]: [], + [Phase.Phase5]: [AffGearPhase5, DemoGearPhase5, DestroGearPhase5], + [Phase.Phase6]: [AffGearPhase6, DemoGearPhase6, DestroGearPhase6], + [Phase.Phase7]: [], }; -export const DefaultGearAff = AffGearPhase4; -export const DefaultGearDestro = DestroGearPhase4; +export const DefaultGearAff = GearPresets[Phase.Phase6][0]; +export const DefaultGearDemo = GearPresets[Phase.Phase6][1];; +export const DefaultGearDestro = GearPresets[Phase.Phase6][2];; export const DefaultGear = DefaultGearDestro; @@ -90,37 +107,59 @@ export const DefaultGear = DefaultGearDestro; /////////////////////////////////////////////////////////////////////////// // P1 -export const RotationDestructionPhase1 = PresetUtils.makePresetAPLRotation('Destruction', DestroP1APL, { +export const RotationDestructionPhase1 = PresetUtils.makePresetAPLRotation('Destruction', DestroAplP1JSON, { customCondition: player => player.getLevel() === 25, }); // P2 -export const DestroMgiRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Destro Imp', DestroMgiAPL, { +export const DestroMgiRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Destro Imp', DestroMgiAplP2JSON, { customCondition: player => player.getLevel() === 40, }); -export const DestroConflagRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Destro Conflag', DestroConflagAPL, { +export const DestroConflagRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Destro Conflag', DestroConflagAplP2JSON, { customCondition: player => player.getLevel() === 40, }); -export const DemonologyRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Demonology', DemonologyAPL, { +export const DemonologyRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Demonology', DemonologyAplP2JSON, { customCondition: player => player.getLevel() === 40, }); -export const AfflictionRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Affliction', AfflictionAPL, { +export const AfflictionRotationPhase2 = PresetUtils.makePresetAPLRotation('P2 Affliction', AfflictionAplP2JSON, { customCondition: player => player.getLevel() === 40, }); // P3 -export const BackdraftRotationPhase3 = PresetUtils.makePresetAPLRotation('P3 Backdraft', BackdraftAPLP3, { +export const BackdraftRotationPhase3 = PresetUtils.makePresetAPLRotation('P3 Backdraft', BackdraftAplP3JSON, { customCondition: player => player.getLevel() === 50, }); -export const NFRuinRotationPhase3 = PresetUtils.makePresetAPLRotation('P3 NF/Ruin', NFRuinAPLP3, { +export const NFRuinRotationPhase3 = PresetUtils.makePresetAPLRotation('P3 NF/Ruin', NFRuinAplP3JSON, { customCondition: player => player.getLevel() === 50, }); // P4 -export const DestroRotationPhase4 = PresetUtils.makePresetAPLRotation('P4 Destro', DestroAPLP4, { +export const AffRotationPhase4 = PresetUtils.makePresetAPLRotation('P4 Aff', AffAplP4JSON, { + customCondition: player => player.getLevel() === 60, +}); +export const DestroRotationPhase4 = PresetUtils.makePresetAPLRotation('P4 Destro', DestroAplP4JSON, { + customCondition: player => player.getLevel() === 60, +}); + +// P5 +export const AffRotationPhase5 = PresetUtils.makePresetAPLRotation('P5 Aff', AffAplP5JSON, { + customCondition: player => player.getLevel() === 60, +}); +export const DemoRotationPhase5 = PresetUtils.makePresetAPLRotation('P5 Demo', DemoAplP5JSON, { customCondition: player => player.getLevel() === 60, }); -export const AffRotationPhase4 = PresetUtils.makePresetAPLRotation('P4 Aff', AffAPLP4, { +export const DestroRotationPhase5 = PresetUtils.makePresetAPLRotation('P5 Destro', DestroAplP5JSON, { + customCondition: player => player.getLevel() === 60, +}); + +// P5 +export const AffRotationPhase6 = PresetUtils.makePresetAPLRotation('P6 Aff', AffAplP6JSON, { + customCondition: player => player.getLevel() === 60, +}); +export const DemoRotationPhase6 = PresetUtils.makePresetAPLRotation('P6 Demo', DemoAplP6JSON, { + customCondition: player => player.getLevel() === 60, +}); +export const DestroRotationPhase6 = PresetUtils.makePresetAPLRotation('P6 Destro', DestroAplP6JSON, { customCondition: player => player.getLevel() === 60, }); @@ -129,7 +168,9 @@ export const APLPresets = { [Phase.Phase2]: [DestroMgiRotationPhase2, DestroConflagRotationPhase2, DemonologyRotationPhase2, AfflictionRotationPhase2], [Phase.Phase3]: [NFRuinRotationPhase3, BackdraftRotationPhase3], [Phase.Phase4]: [AffRotationPhase4, DestroRotationPhase4], - [Phase.Phase5]: [], + [Phase.Phase5]: [AffRotationPhase5, DemoRotationPhase5, DestroRotationPhase5], + [Phase.Phase6]: [AffRotationPhase6, DemoRotationPhase6, DestroRotationPhase6, ], + [Phase.Phase7]: [], }; export const DefaultAPLs: Record> = { @@ -148,8 +189,9 @@ export const DefaultAPLs: Record) => player.getLevel() === 25, }; +// P2 export const DestroMgiTalentsPhase2 = { name: 'P2 Destro Imp', data: SavedTalents.create({ talentsString: '-01-055020512000415' }), @@ -186,6 +229,8 @@ export const AfflictionTalentsPhase2 = { data: SavedTalents.create({ talentsString: '3500253012201105--1' }), enableWhen: (player: Player) => player.getLevel() === 40, }; + +// P3 export const BackdraftTalentsPhase3 = { name: 'P3 Backdraft', data: SavedTalents.create({ talentsString: '-032004-5050205102005151' }), @@ -196,32 +241,69 @@ export const NFRuinTalentsPhase3 = { data: SavedTalents.create({ talentsString: '25002500102-03-50502051020001' }), enableWhen: (player: Player) => player.getLevel() === 50, }; -export const AffTalentsPhase3 = { - name: 'P4 Aff', + +// P4 +export const AffTalentsPhase4_5 = { + name: 'P4/5 Aff', data: SavedTalents.create({ talentsString: '4500253012201005--50502051020001' }), enableWhen: (player: Player) => player.getLevel() === 60, }; -export const DestroTalentsPhase3 = { +export const DestroTalentsPhase4 = { name: 'P4 Destro', data: SavedTalents.create({ talentsString: '05002-035-5250205122005151' }), enableWhen: (player: Player) => player.getLevel() === 60, }; +// P5 +export const DemoTalentsPhase5_6 = { + name: 'P5/6 Demo', + data: SavedTalents.create({ talentsString: '-230205015250005-52500051020001' }), + enableWhen: (player: Player) => player.getLevel() === 60, +} +export const DestroTalentsPhase5_6 = { + name: 'P5/6 Destro', + data: SavedTalents.create({ talentsString: '05002-23-5550205122005151' }), + enableWhen: (player: Player) => player.getLevel() === 60, +} + +// P6 +export const AffTalentsPhase6 = { + name: 'P6 Aff', + data: SavedTalents.create({ talentsString: '3500243212201005-2302050152001' }), + enableWhen: (player: Player) => player.getLevel() === 60, +} + export const TalentPresets = { [Phase.Phase1]: [DestroP1Talents], [Phase.Phase2]: [DestroMgiTalentsPhase2, DestroConflagTalentsPhase2, DemonologyTalentsPhase2, AfflictionTalentsPhase2], [Phase.Phase3]: [NFRuinTalentsPhase3, BackdraftTalentsPhase3], - [Phase.Phase4]: [AffTalentsPhase3, DestroTalentsPhase3], - [Phase.Phase5]: [], + [Phase.Phase4]: [AffTalentsPhase4_5, DestroTalentsPhase4], + [Phase.Phase5]: [AffTalentsPhase4_5, DemoTalentsPhase5_6, DestroTalentsPhase5_6], + [Phase.Phase6]: [AffTalentsPhase6, DemoTalentsPhase5_6, DestroTalentsPhase5_6], + [Phase.Phase7]: [], }; -export const DefaultTalentsAff = TalentPresets[Phase.Phase4][0]; -export const DefaultTalentsDestro = TalentPresets[Phase.Phase4][1]; +export const DefaultTalentsAff = TalentPresets[Phase.Phase6][0]; +export const DefaultTalentsDemo = TalentPresets[Phase.Phase6][1]; +export const DefaultTalentsDestro = TalentPresets[Phase.Phase6][2]; export const DefaultTalents = DefaultTalentsDestro; -export const PresetBuildAff = PresetUtils.makePresetBuild('Aff', { gear: DefaultGearAff, talents: DefaultTalentsAff, rotation: DefaultAPLs[60][0] }); -export const PresetBuildDestro = PresetUtils.makePresetBuild('Destro', { +/////////////////////////////////////////////////////////////////////////// +// Builds +/////////////////////////////////////////////////////////////////////////// + +export const PresetBuildAff = PresetUtils.makePresetBuild('Affliction', { + gear: DefaultGearAff, + talents: DefaultTalentsAff, + rotation: DefaultAPLs[60][0] +}); +export const PresetBuildDemo = PresetUtils.makePresetBuild('Demonology', { + gear: DefaultGearDemo, + talents: DefaultTalentsDemo, + rotation: DefaultAPLs[60][1] +}); +export const PresetBuildDestro = PresetUtils.makePresetBuild('Destruction', { gear: DefaultGearDestro, talents: DefaultTalentsDestro, rotation: DefaultAPLs[60][2], @@ -244,13 +326,13 @@ export const DefaultConsumes = Consumes.create({ enchantedSigil: EnchantedSigil.WrathOfTheStormSigil, flask: Flask.FlaskOfAncientKnowledge, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, - food: Food.FoodTenderWolfSteak, + food: Food.FoodDarkclawBisque, mainHandImbue: WeaponImbue.EnchantedRepellent, manaRegenElixir: ManaRegenElixir.MagebloodPotion, - + mildlyIrradiatedRejuvPot: true, spellPowerBuff: SpellPowerBuff.ElixirOfTheMageLord, shadowPowerBuff: ShadowPowerBuff.ElixirOfShadowPower, - zanzaBuff: ZanzaBuff.GizzardGum, + zanzaBuff: ZanzaBuff.SpiritOfZanza, }); export const DefaultRaidBuffs = RaidBuffs.create({ @@ -285,6 +367,7 @@ export const DefaultDebuffs = Debuffs.create({ faerieFire: true, homunculi: 100, improvedScorch: true, + improvedShadowBolt: true, judgementOfWisdom: true, markOfChaos: true, occultPoison: true, @@ -295,5 +378,6 @@ export const OtherDefaults = { distanceFromTarget: 25, profession1: Profession.Enchanting, profession2: Profession.Tailoring, + race: Race.RaceOrc, channelClipDelay: 150, }; diff --git a/ui/warlock/sim.ts b/ui/warlock/sim.ts index c2db7d3a3e..167bcff72c 100644 --- a/ui/warlock/sim.ts +++ b/ui/warlock/sim.ts @@ -120,6 +120,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWarlock, { // }, defaults: { + race: Presets.OtherDefaults.race, + // Default equipped gear. gear: Presets.DefaultGear.gear, @@ -193,6 +195,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWarlock, { presets: { // Preset talents that the user can quickly select. talents: [ + ...Presets.TalentPresets[Phase.Phase7], + ...Presets.TalentPresets[Phase.Phase6], ...Presets.TalentPresets[Phase.Phase5], ...Presets.TalentPresets[Phase.Phase4], ...Presets.TalentPresets[Phase.Phase3], @@ -201,6 +205,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWarlock, { ], // Preset rotations that the user can quickly select. rotations: [ + ...Presets.APLPresets[Phase.Phase7], + ...Presets.APLPresets[Phase.Phase6], ...Presets.APLPresets[Phase.Phase5], ...Presets.APLPresets[Phase.Phase4], ...Presets.APLPresets[Phase.Phase3], @@ -210,6 +216,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWarlock, { // Preset gear configurations that the user can quickly select. gear: [ + ...Presets.GearPresets[Phase.Phase7], + ...Presets.GearPresets[Phase.Phase6], ...Presets.GearPresets[Phase.Phase5], ...Presets.GearPresets[Phase.Phase4], ...Presets.GearPresets[Phase.Phase3], @@ -217,7 +225,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWarlock, { ...Presets.GearPresets[Phase.Phase1], ], // Preset builds (gear, talents, APL) that the user can quickly select. - builds: [Presets.PresetBuildAff, Presets.PresetBuildDestro], + builds: [Presets.PresetBuildAff, Presets.PresetBuildDemo, Presets.PresetBuildDestro], }, autoRotation: player => {