Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions sim/paladin/retribution/TestRetribution.results
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ dps_results: {
dps_results: {
key: "TestRetribution-AllItems-BattlegearofWingedTriumph"
value: {
dps: 220107.38712
tps: 209301.73722
dps: 219578.18026
tps: 208740.3494
hps: 22.01849
}
}
Expand Down Expand Up @@ -1745,16 +1745,16 @@ dps_results: {
dps_results: {
key: "TestRetribution-AllItems-PlateofWingedTriumph"
value: {
dps: 198300.26187
tps: 187581.66327
dps: 197237.50605
tps: 186416.08954
hps: 21.68227
}
}
dps_results: {
key: "TestRetribution-AllItems-PlateoftheLightningEmperor"
value: {
dps: 190509.13643
tps: 180288.19267
dps: 190598.81848
tps: 180354.55575
hps: 21.68227
}
}
Expand Down Expand Up @@ -2665,16 +2665,16 @@ dps_results: {
dps_results: {
key: "TestRetribution-AllItems-VestmentsofWingedTriumph"
value: {
dps: 151014.33863
tps: 143678.78136
dps: 152149.58139
tps: 144779.5247
hps: 22.01849
}
}
dps_results: {
key: "TestRetribution-AllItems-VestmentsoftheLightningEmperor"
value: {
dps: 151965.57664
tps: 144293.14055
dps: 152869.65999
tps: 145120.88518
hps: 22.93067
}
}
Expand Down Expand Up @@ -2737,16 +2737,16 @@ dps_results: {
dps_results: {
key: "TestRetribution-AllItems-WhiteTigerPlate"
value: {
dps: 178038.64323
tps: 168609.79115
dps: 178172.69382
tps: 168653.57855
hps: 21.68227
}
}
dps_results: {
key: "TestRetribution-AllItems-WhiteTigerVestments"
value: {
dps: 151840.08141
tps: 144401.87523
dps: 152414.48109
tps: 144858.06661
hps: 22.93067
}
}
Expand Down
2 changes: 1 addition & 1 deletion ui/paladin/retribution/apls/default.apl.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
{"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":53595}}},"rhs":{"const":{"val":"0"}}}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":53595}}},"rhs":{"const":{"val":"0.2s"}}}}]}},"wait":{"duration":{"spellTimeToReady":{"spellId":{"spellId":53595}}}}}},
{"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":138164}}},{"auraIsActive":{"auraId":{"spellId":138169},"includeReactionTime":true}},{"or":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentGenericResource":{}},"rhs":{"const":{"val":"3"}}}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentGenericResource":{}},"rhs":{"const":{"val":"4"}}}},{"not":{"val":{"spellCanCast":{"spellId":{"spellId":35395}}}}},{"not":{"val":{"spellCanCast":{"spellId":{"spellId":20271}}}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":879}}}},
{"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":31884},"includeReactionTime":true}},{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":138164}}},{"auraIsActive":{"auraId":{"spellId":138169},"includeReactionTime":true}},{"cmp":{"op":"OpGe","lhs":{"currentGenericResource":{}},"rhs":{"const":{"val":"4"}}}}]}}]}},"castSpell":{"spellId":{"spellId":85256}}}},
{"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":138164}}}}},{"auraIsActive":{"auraId":{"spellId":138169},"includeReactionTime":true}}]}},{"auraIsActive":{"auraId":{"spellId":31884},"includeReactionTime":true}}]}},"castSpell":{"spellId":{"spellId":20271}}}},
{"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"auraIsKnown":{"auraId":{"spellId":70762}}},{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":138164}}},{"auraIsActive":{"auraId":{"spellId":138169},"includeReactionTime":true}}]}}]}},{"auraIsActive":{"auraId":{"spellId":31884},"includeReactionTime":true}}]}},"castSpell":{"spellId":{"spellId":20271}}}},
{"action":{"castSpell":{"spellId":{"spellId":35395}}}},
{"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"0"}}}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"0.2s"}}}}]}},"wait":{"duration":{"spellTimeToReady":{"spellId":{"spellId":35395}}}}}},
{"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":138159}}},{"auraIsKnown":{"auraId":{"spellId":122028}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}},{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"4"}}}}]}},"castSpell":{"spellId":{"spellId":879}}}},
Expand Down
16 changes: 8 additions & 8 deletions ui/paladin/retribution/gear_sets/p5.gear.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
"items": [
{ "id": 99379, "gems": [95346, 76671], "reforging": 152, "upgradeStep": "UpgradeStepFour" },
{ "id": 105513, "reforging": 137, "upgradeStep": "UpgradeStepFour" },
{ "id": 99373, "enchant": 4803, "gems": [76671, 76671], "reforging": 160, "upgradeStep": "UpgradeStepFour" },
{ "id": 102249, "enchant": 4424, "gems": [76671], "upgradeStep": "UpgradeStepFour", "tinker": 4897 },
{ "id": 99387, "enchant": 4419, "gems": [76671, 76674, 76674], "upgradeStep": "UpgradeStepFour" },
{ "id": 99373, "enchant": 4803, "gems": [76671, 76674], "reforging": 159, "upgradeStep": "UpgradeStepFour" },
{ "id": 102249, "enchant": 4424, "gems": [76674], "upgradeStep": "UpgradeStepFour", "tinker": 4897 },
{ "id": 99387, "enchant": 4419, "gems": [76674, 76671, 76671], "upgradeStep": "UpgradeStepFour" },
{ "id": 105411, "enchant": 4415, "gems": [0], "reforging": 140, "upgradeStep": "UpgradeStepFour" },
{ "id": 99380, "enchant": 4432, "gems": [76671, 76671, 0], "reforging": 154, "upgradeStep": "UpgradeStepFour", "tinker": 4898 },
{ "id": 105509, "enchant": 4223, "gems": [76674, 76700, 76700], "upgradeStep": "UpgradeStepFour", "tinker": 4223 },
{ "id": 105640, "enchant": 4823, "gems": [76643, 76643, 76671], "upgradeStep": "UpgradeStepFour" },
{ "id": 99380, "enchant": 4432, "gems": [76674, 76671, 0], "reforging": 140, "upgradeStep": "UpgradeStepFour", "tinker": 4898 },
{ "id": 105509, "enchant": 4223, "gems": [76674, 76700, 76700], "reforging": 152, "upgradeStep": "UpgradeStepFour", "tinker": 4223 },
{ "id": 105640, "enchant": 4823, "gems": [76636, 76636, 76671], "upgradeStep": "UpgradeStepFour" },
{ "id": 105531, "enchant": 4429, "gems": [76700], "reforging": 147, "upgradeStep": "UpgradeStepFour" },
{ "id": 105620, "gems": [76700], "reforging": 161, "upgradeStep": "UpgradeStepFour" },
{ "id": 105589, "gems": [76700], "reforging": 154, "upgradeStep": "UpgradeStepFour" },
{ "id": 105620, "gems": [76671], "reforging": 161, "upgradeStep": "UpgradeStepFour" },
{ "id": 105589, "gems": [76671], "reforging": 147, "upgradeStep": "UpgradeStepFour" },
{ "id": 105491, "upgradeStep": "UpgradeStepFour" },
{ "id": 105609, "upgradeStep": "UpgradeStepFour" },
{ "id": 105610, "enchant": 4444, "gems": [76700], "upgradeStep": "UpgradeStepFour" },
Expand Down
18 changes: 18 additions & 0 deletions ui/paladin/retribution/presets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,24 @@ export const P3_EP_PRESET = PresetUtils.makePresetEpWeights(
),
);

export const P5_EP_PRESET = PresetUtils.makePresetEpWeights(
'P5 (WiP)',
Stats.fromMap(
{
[Stat.StatStrength]: 1.0,
[Stat.StatHitRating]: 0.76,
[Stat.StatExpertiseRating]: 0.76,
[Stat.StatHasteRating]: 0.75,
[Stat.StatMasteryRating]: 0.74,
[Stat.StatCritRating]: 0.73,
[Stat.StatAttackPower]: 0.44,
},
{
[PseudoStat.PseudoStatMainHandDps]: 1.8,
},
),
);

export const PRERAID_EP_PRESET = PresetUtils.makePresetEpWeights(
'Pre-raid',
Stats.fromMap(
Expand Down
28 changes: 25 additions & 3 deletions ui/paladin/retribution/sim.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { Player } from '../../core/player.js';
import { PlayerClasses } from '../../core/player_classes';
import { APLRotation, APLRotation_Type } from '../../core/proto/apl.js';
import { Debuffs, Faction, IndividualBuffs, PartyBuffs, PseudoStat, Race, RaidBuffs, Spec, Stat, UnitStats } from '../../core/proto/common.js';
import { Stats, UnitStat } from '../../core/proto_utils/stats.js';
import { StatCapType } from '../../core/proto/ui.js';
import { StatCap, Stats, UnitStat } from '../../core/proto_utils/stats.js';
import { defaultRaidBuffMajorDamageCooldowns } from '../../core/proto_utils/utils';
import * as PaladinInputs from '../inputs.js';
import * as Presets from './presets.js';
Expand Down Expand Up @@ -104,6 +105,15 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, {
epWeights: Presets.P3_EP_PRESET.epWeights,
// Default stat caps for the Reforge Optimizer
statCaps: getStatCaps(),
softCapBreakpoints: (() => {
return [
StatCap.fromPseudoStat(PseudoStat.PseudoStatMeleeHastePercent, {
breakpoints: [50],
capType: StatCapType.TypeSoftCap,
postCapEPs: [0],
}),
];
})(),
// Default consumes settings.
consumables: Presets.DefaultConsumables,
// Default talents.
Expand Down Expand Up @@ -149,7 +159,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, {
},

presets: {
epWeights: [Presets.P1_P2_EP_PRESET, Presets.P3_EP_PRESET, Presets.PRERAID_EP_PRESET],
epWeights: [Presets.P1_P2_EP_PRESET, Presets.P3_EP_PRESET, Presets.P5_EP_PRESET, Presets.PRERAID_EP_PRESET],
rotations: [Presets.APL_PRESET],
// Preset talents that the user can quickly select.
talents: [Presets.DefaultTalents],
Expand Down Expand Up @@ -196,6 +206,18 @@ export class RetributionPaladinSimUI extends IndividualSimUI<Spec.SpecRetributio
constructor(parentElem: HTMLElement, player: Player<Spec.SpecRetributionPaladin>) {
super(parentElem, player, SPEC_CONFIG);

this.reforger = new ReforgeOptimizer(this);
this.reforger = new ReforgeOptimizer(this, {
updateSoftCaps: softCaps => {
const hasteCap = softCaps.find(v => v.unitStat.equalsPseudoStat(PseudoStat.PseudoStatMeleeHastePercent));
if (hasteCap) {
const hasteWeights = player.getEpWeights().getStat(Stat.StatHasteRating);
const critWeights = player.getEpWeights().getStat(Stat.StatCritRating);
const masteryWeights = player.getEpWeights().getStat(Stat.StatMasteryRating);
const postCap = Math.max(0.01, Math.min(hasteWeights, critWeights, masteryWeights) - 0.01);
hasteCap.postCapEPs = [postCap * Mechanics.HASTE_RATING_PER_HASTE_PERCENT];
}
return softCaps;
},
});
}
}