From b92984566640b6bbb32a617d981ea142a6a5e71a Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Sun, 8 Dec 2024 20:38:43 -0500 Subject: [PATCH] balance druid presets p6 --- sim/druid/balance/TestBalance.results | 287 +++++++++++++++++++ sim/druid/balance/balance_test.go | 29 ++ ui/balance_druid/apls/phase_6.apl.json | 18 ++ ui/balance_druid/gear_sets/phase_6.gear.json | 21 ++ ui/balance_druid/presets.ts | 36 ++- ui/balance_druid/sim.ts | 8 + 6 files changed, 395 insertions(+), 4 deletions(-) create mode 100644 ui/balance_druid/apls/phase_6.apl.json create mode 100644 ui/balance_druid/gear_sets/phase_6.gear.json diff --git a/sim/druid/balance/TestBalance.results b/sim/druid/balance/TestBalance.results index 8c42b6debd..87ac20b5bc 100644 --- a/sim/druid/balance/TestBalance.results +++ b/sim/druid/balance/TestBalance.results @@ -243,6 +243,55 @@ character_stats_results: { final_stats: 0 } } +character_stats_results: { + key: "TestBalance-Phase6-Lvl60-CharacterStats-Default" + value: { + final_stats: 239.085 + final_stats: 220.11 + final_stats: 574.62625 + final_stats: 407.33 + final_stats: 253 + final_stats: 806 + final_stats: 20 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 41.25 + final_stats: 10 + final_stats: 42.60241 + final_stats: 0 + final_stats: 0 + final_stats: 1288.17 + final_stats: 10 + final_stats: 36.9055 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 7073.95 + final_stats: 0 + final_stats: 0 + final_stats: 2161.22 + final_stats: 740 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 11.9055 + final_stats: 5 + final_stats: 0 + final_stats: 7716.72562 + final_stats: 27 + final_stats: 90 + final_stats: 70 + final_stats: 85 + final_stats: 60 + final_stats: 384 + final_stats: 18 + final_stats: 82 + final_stats: 0 + } +} stat_weights_results: { key: "TestBalance-Phase1-Lvl25-StatWeights-Default" value: { @@ -488,6 +537,55 @@ stat_weights_results: { weights: 0 } } +stat_weights_results: { + key: "TestBalance-Phase6-Lvl60-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: 2.51766 + weights: 0 + weights: 3.19754 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 52.34648 + 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: "TestBalance-Phase1-Lvl25-AllItems-FeralheartRaiment" value: { @@ -1181,3 +1279,192 @@ dps_results: { tps: 4651.67549 } } +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-BloodGuard'sCracklingLeather" + value: { + dps: 1687.01047 + tps: 1707.68065 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-BloodGuard'sLeather" + value: { + dps: 1553.30811 + tps: 1573.93895 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-BloodGuard'sRestoredLeather" + value: { + dps: 1551.16483 + tps: 1571.56459 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-CoagulateBloodguard'sLeathers" + value: { + dps: 2228.16419 + tps: 2249.14903 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-EmeraldDreamkeeperGarb" + value: { + dps: 1537.97903 + tps: 1558.36404 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-EmeraldLeathers" + value: { + dps: 1552.16119 + tps: 1572.79203 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-EmeraldWatcherVestments" + value: { + dps: 1612.23652 + tps: 1632.60186 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-ExiledProphet'sRaiment" + value: { + dps: 2285.28994 + tps: 2306.25511 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-FeralheartRaiment" + value: { + dps: 1332.52676 + tps: 1351.17628 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-Knight-Lieutenant'sCracklingLeather" + value: { + dps: 1687.01047 + tps: 1707.68065 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-Knight-Lieutenant'sLeather" + value: { + dps: 1553.30811 + tps: 1573.93895 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-Knight-Lieutenant'sRestoredLeather" + value: { + dps: 1551.16483 + tps: 1571.56459 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-AllItems-LostWorshipper'sArmor" + value: { + dps: 2375.96718 + tps: 2397.0356 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Average-Default" + value: { + dps: 5565.06142 + tps: 5587.41188 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-FullBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 7790.55418 + tps: 8210.55759 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-FullBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 5545.51763 + tps: 5567.9338 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-FullBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 5770.93221 + tps: 5800.5247 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-NoBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 3796.70876 + tps: 3977.45559 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-NoBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 2579.31854 + tps: 2588.35588 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-NightElf-phase_6-Default-phase_6-NoBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 3245.15197 + tps: 3260.33573 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-FullBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 7687.83305 + tps: 8107.04979 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-FullBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 5515.12699 + tps: 5537.4645 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-FullBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 5769.21478 + tps: 5798.80727 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-NoBuffs-P6-Consumes-LongMultiTarget" + value: { + dps: 3791.8969 + tps: 3972.64372 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-NoBuffs-P6-Consumes-LongSingleTarget" + value: { + dps: 2572.34153 + tps: 2581.37887 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-Settings-Tauren-phase_6-Default-phase_6-NoBuffs-P6-Consumes-ShortSingleTarget" + value: { + dps: 3233.47073 + tps: 3248.65448 + } +} +dps_results: { + key: "TestBalance-Phase6-Lvl60-SwitchInFrontOfTarget-Default" + value: { + dps: 5479.87468 + tps: 5502.34985 + } +} diff --git a/sim/druid/balance/balance_test.go b/sim/druid/balance/balance_test.go index bbcf110416..783c7e58da 100644 --- a/sim/druid/balance/balance_test.go +++ b/sim/druid/balance/balance_test.go @@ -97,6 +97,24 @@ func TestBalance(t *testing.T) { Consumes: Phase5Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Default", SpecOptions: PlayerOptionsAdaptive}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassDruid, + Phase: 6, + Level: 60, + Race: proto.Race_RaceTauren, + OtherRaces: []proto.Race{proto.Race_RaceNightElf}, + + Talents: Phase4Talents, + GearSet: core.GetGearSet("../../../ui/balance_druid/gear_sets", "phase_6"), + Rotation: core.GetAplRotation("../../../ui/balance_druid/apls", "phase_6"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Default", SpecOptions: PlayerOptionsAdaptive}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -161,6 +179,17 @@ var Phase5Consumes = core.ConsumesCombo{ }, } +var Phase6Consumes = core.ConsumesCombo{ + Label: "P6-Consumes", + Consumes: &proto.Consumes{ + DefaultPotion: proto.Potions_MajorManaPotion, + Flask: proto.Flask_FlaskOfAncientKnowledge, + Food: proto.Food_FoodDarkclawBisque, + MainHandImbue: proto.WeaponImbue_EnchantedRepellent, + SpellPowerBuff: proto.SpellPowerBuff_ElixirOfTheMageLord, + }, +} + var PlayerOptionsAdaptive = &proto.Player_BalanceDruid{ BalanceDruid: &proto.BalanceDruid{ Options: &proto.BalanceDruid_Options{ diff --git a/ui/balance_druid/apls/phase_6.apl.json b/ui/balance_druid/apls/phase_6.apl.json new file mode 100644 index 0000000000..fc018298e3 --- /dev/null +++ b/ui/balance_druid/apls/phase_6.apl.json @@ -0,0 +1,18 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":417157}}},"doAtValue":{"const":{"val":"-3.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":9912,"rank":8}}},"doAtValue":{"const":{"val":"-2s"}}} + ], + "priorityList": [ + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":417157}}},"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":417157}}}}},"castSpell":{"spellId":{"spellId":417157},"target":{"type":"Target"}}}}, + {"action":{"multidot":{"spellId":{"spellId":9835,"rank":10},"maxDots":2,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"multidot":{"spellId":{"spellId":414684},"maxDots":2,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":439748}}}}, + {"hide":true,"action":{"multidot":{"spellId":{"spellId":24977,"rank":5},"maxDots":2,"maxOverlap":{"const":{"val":"0ms"}}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":417157}}},{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":408255}}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":25298,"rank":7},"target":{"type":"Target"}}}}, + {"action":{"condition":{"spellCanCast":{"spellId":{"spellId":9912,"rank":8}}},"castSpell":{"spellId":{"spellId":9912,"rank":8},"target":{"type":"Target"}}}} + ] + } + \ No newline at end of file diff --git a/ui/balance_druid/gear_sets/phase_6.gear.json b/ui/balance_druid/gear_sets/phase_6.gear.json new file mode 100644 index 0000000000..1df018bb19 --- /dev/null +++ b/ui/balance_druid/gear_sets/phase_6.gear.json @@ -0,0 +1,21 @@ +{ + "items": [ + {"id":233718,"enchant":7614,"rune":417135}, + {"id":231316}, + {"id":231251,"enchant":2605}, + {"id":233630,"enchant":7564,"rune":439748}, + {"id":233715,"enchant":7648,"rune":414799}, + {"id":231253,"enchant":1883,"rune":414719}, + {"id":233631,"enchant":7647,"rune":414684}, + {"id":231318,"rune":408248}, + {"id":233714,"enchant":7614,"rune":417157}, + {"id":233716,"enchant":7648,"rune":408258}, + {"id":234101,"rune":442896}, + {"id":234463,"rune":442893}, + {"id":230810}, + {"id":231280}, + {"id":234550,"enchant":2504}, + {"id":233616}, + {"id":234474} + ] +} diff --git a/ui/balance_druid/presets.ts b/ui/balance_druid/presets.ts index 0f39f97bac..ff1a303e1a 100644 --- a/ui/balance_druid/presets.ts +++ b/ui/balance_druid/presets.ts @@ -1,6 +1,7 @@ import { Phase } from '../core/constants/other.js'; import * as PresetUtils from '../core/preset_utils.js'; import { + Conjured, Consumes, Debuffs, EnchantedSigil, @@ -26,11 +27,13 @@ import Phase2APL from './apls/phase_2.apl.json'; import Phase3APL from './apls/phase_3.apl.json'; import Phase4APL from './apls/phase_4.apl.json'; import Phase5APL from './apls/phase_5.apl.json'; +import Phase6APL from './apls/phase_6.apl.json'; import Phase1Gear from './gear_sets/phase_1.gear.json'; import Phase2Gear from './gear_sets/phase_2.gear.json'; import Phase3Gear from './gear_sets/phase_3.gear.json'; import Phase4Gear from './gear_sets/phase_4.gear.json'; import Phase5Gear from './gear_sets/phase_5.gear.json'; +import Phase6Gear from './gear_sets/phase_6.gear.json'; // Preset options for this spec. // Eventually we will import these values for the raid sim too, so its good to @@ -45,6 +48,7 @@ export const GearPhase2 = PresetUtils.makePresetGear('Phase 2', Phase2Gear, { cu export const GearPhase3 = PresetUtils.makePresetGear('Phase 3', Phase3Gear, { customCondition: player => player.getLevel() === 50 }); export const GearPhase4 = PresetUtils.makePresetGear('Phase 4', Phase4Gear, { customCondition: player => player.getLevel() === 60 }); export const GearPhase5 = PresetUtils.makePresetGear('Phase 5', Phase5Gear, { customCondition: player => player.getLevel() === 60 }); +export const GearPhase6 = PresetUtils.makePresetGear('Phase 6', Phase6Gear, { customCondition: player => player.getLevel() === 60 }); export const GearPresets = { [Phase.Phase1]: [GearPhase1], @@ -52,9 +56,10 @@ export const GearPresets = { [Phase.Phase3]: [GearPhase3], [Phase.Phase4]: [GearPhase4], [Phase.Phase5]: [GearPhase5], + [Phase.Phase6]: [GearPhase6], }; -export const DefaultGear = GearPresets[Phase.Phase5][0]; +export const DefaultGear = GearPresets[Phase.Phase6][0]; /////////////////////////////////////////////////////////////////////////// // APL Presets @@ -65,6 +70,7 @@ export const APLPhase2 = PresetUtils.makePresetAPLRotation('Phase 2', Phase2APL, export const APLPhase3 = PresetUtils.makePresetAPLRotation('Phase 3', Phase3APL, { customCondition: player => player.getLevel() === 50 }); export const APLPhase4 = PresetUtils.makePresetAPLRotation('Phase 4', Phase4APL, { customCondition: player => player.getLevel() === 60 }); export const APLPhase5 = PresetUtils.makePresetAPLRotation('Phase 5', Phase5APL, { customCondition: player => player.getLevel() === 60 }); +export const APLPhase6 = PresetUtils.makePresetAPLRotation('Phase 6', Phase6APL, { customCondition: player => player.getLevel() === 60 }); export const APLPresets = { [Phase.Phase1]: [APLPhase1], @@ -72,13 +78,14 @@ export const APLPresets = { [Phase.Phase3]: [APLPhase3], [Phase.Phase4]: [APLPhase4], [Phase.Phase5]: [APLPhase5], + [Phase.Phase6]: [APLPhase6], }; export const DefaultAPLs: Record = { 25: APLPresets[Phase.Phase1][0], 40: APLPresets[Phase.Phase2][0], 50: APLPresets[Phase.Phase3][0], - 60: APLPresets[Phase.Phase5][0], + 60: APLPresets[Phase.Phase6][0], }; /////////////////////////////////////////////////////////////////////////// @@ -104,10 +111,31 @@ export const TalentPresets = { [Phase.Phase3]: [TalentsPhase3], [Phase.Phase4]: [TalentsPhase4], [Phase.Phase5]: [], + [Phase.Phase6]: [], }; export const DefaultTalents = TalentPresets[Phase.Phase4][0]; +/////////////////////////////////////////////////////////////////////////// +// Build Presets +/////////////////////////////////////////////////////////////////////////// + +export const PresetBuildPhase4 = PresetUtils.makePresetBuild('Phase 4', { + gear: GearPhase4, + talents: TalentsPhase4, + rotation: APLPhase4, +}); +export const PresetBuildPhase5 = PresetUtils.makePresetBuild('Phase 5', { + gear: GearPhase5, + talents: TalentsPhase4, + rotation: APLPhase5, +}); +export const PresetBuildPhase6 = PresetUtils.makePresetBuild('Phase 6', { + gear: GearPhase6, + talents: TalentsPhase4, + rotation: APLPhase6, +}); + /////////////////////////////////////////////////////////////////////////// // Options /////////////////////////////////////////////////////////////////////////// @@ -117,13 +145,13 @@ export const DefaultOptions = BalanceDruidOptions.create({ }); export const DefaultConsumes = Consumes.create({ + defaultConjured: Conjured.ConjuredDemonicRune, defaultPotion: Potions.MajorManaPotion, enchantedSigil: EnchantedSigil.WrathOfTheStormSigil, flask: Flask.FlaskOfAncientKnowledge, - food: Food.FoodRunnTumTuberSurprise, + food: Food.FoodDarkclawBisque, mainHandImbue: WeaponImbue.EnchantedRepellent, manaRegenElixir: ManaRegenElixir.MagebloodPotion, - mildlyIrradiatedRejuvPot: true, spellPowerBuff: SpellPowerBuff.ElixirOfTheMageLord, zanzaBuff: ZanzaBuff.CerebralCortexCompound, diff --git a/ui/balance_druid/sim.ts b/ui/balance_druid/sim.ts index 0348f45555..8616aa649c 100644 --- a/ui/balance_druid/sim.ts +++ b/ui/balance_druid/sim.ts @@ -111,6 +111,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecBalanceDruid, { presets: { talents: [ + ...Presets.TalentPresets[Phase.Phase6], ...Presets.TalentPresets[Phase.Phase5], ...Presets.TalentPresets[Phase.Phase4], ...Presets.TalentPresets[Phase.Phase3], @@ -118,6 +119,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecBalanceDruid, { ...Presets.TalentPresets[Phase.Phase1], ], rotations: [ + ...Presets.APLPresets[Phase.Phase6], ...Presets.APLPresets[Phase.Phase5], ...Presets.APLPresets[Phase.Phase4], ...Presets.APLPresets[Phase.Phase3], @@ -125,12 +127,18 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecBalanceDruid, { ...Presets.APLPresets[Phase.Phase1], ], gear: [ + ...Presets.GearPresets[Phase.Phase6], ...Presets.GearPresets[Phase.Phase5], ...Presets.GearPresets[Phase.Phase4], ...Presets.GearPresets[Phase.Phase3], ...Presets.GearPresets[Phase.Phase2], ...Presets.GearPresets[Phase.Phase1], ], + builds: [ + Presets.PresetBuildPhase6, + Presets.PresetBuildPhase5, + Presets.PresetBuildPhase4, + ], }, autoRotation: player => {