From 7a689eceb0850a047be64982b222fc5177b70eac Mon Sep 17 00:00:00 2001 From: Kayla Glick Date: Thu, 26 Dec 2024 11:34:34 -0500 Subject: [PATCH] mage phase 6 presets --- sim/mage/mage_test.go | 52 ++++++++ ui/mage/apls/p6_fire.apl.json | 27 +++++ ui/mage/apls/p6_spellfrost.apl.json | 35 ++++++ ui/mage/gear_sets/p6_fire.gear.json | 21 ++++ ui/mage/gear_sets/p6_frost.gear.json | 22 ++++ ui/mage/presets.ts | 171 ++++++++++++++++----------- ui/mage/sim.ts | 8 +- 7 files changed, 266 insertions(+), 70 deletions(-) create mode 100644 ui/mage/apls/p6_fire.apl.json create mode 100644 ui/mage/apls/p6_spellfrost.apl.json create mode 100644 ui/mage/gear_sets/p6_fire.gear.json create mode 100644 ui/mage/gear_sets/p6_frost.gear.json diff --git a/sim/mage/mage_test.go b/sim/mage/mage_test.go index caee043f06..6453eb96e7 100644 --- a/sim/mage/mage_test.go +++ b/sim/mage/mage_test.go @@ -172,6 +172,24 @@ func TestFire(t *testing.T) { Consumes: Phase5Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Fire", SpecOptions: PlayerOptionsFire}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassMage, + Phase: 6, + Level: 60, + Race: proto.Race_RaceTroll, + OtherRaces: []proto.Race{proto.Race_RaceGnome}, + + Talents: Phase6TalentsFire, + GearSet: core.GetGearSet("../../ui/mage/gear_sets", "p6_fire"), + Rotation: core.GetAplRotation("../../ui/mage/apls", "p6_fire"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Fire", SpecOptions: PlayerOptionsFire}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -230,6 +248,24 @@ func TestFrost(t *testing.T) { Consumes: Phase5Consumes, SpecOptions: core.SpecOptionsCombo{Label: "Frost", SpecOptions: PlayerOptionsFrost}, + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatSpellPower, + StatsToWeigh: Stats, + }, + { + Class: proto.Class_ClassMage, + Phase: 6, + Level: 60, + Race: proto.Race_RaceTroll, + OtherRaces: []proto.Race{proto.Race_RaceGnome}, + + Talents: phase6talentsfrost, + GearSet: core.GetGearSet("../../ui/mage/gear_sets", "p6_frost"), + Rotation: core.GetAplRotation("../../ui/mage/apls", "p6_spellfrost"), + Buffs: core.FullBuffsPhase6, + Consumes: Phase6Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Frost", SpecOptions: PlayerOptionsFrost}, + ItemFilter: ItemFilters, EPReferenceStat: proto.Stat_StatSpellPower, StatsToWeigh: Stats, @@ -255,6 +291,9 @@ var Phase5TalentsArcane = "2500550010031531--2035020310004" var Phase5TalentsFire = "21-5052300123033151-203500031" var phase5talentsfrost = "250025001002--05350203100351051" +var Phase6TalentsFire = "-0552323121033151-203500031" +var phase6talentsfrost = "005055001--20350203110351351" + var PlayerOptionsArcane = &proto.Player_Mage{ Mage: &proto.Mage{ Options: &proto.Mage_Options{ @@ -339,6 +378,19 @@ var Phase5Consumes = core.ConsumesCombo{ }, } +var Phase6Consumes = core.ConsumesCombo{ + Label: "P6-Consumes", + Consumes: &proto.Consumes{ + DefaultPotion: proto.Potions_MajorManaPotion, + Flask: proto.Flask_FlaskOfAncientKnowledge, + FirePowerBuff: proto.FirePowerBuff_ElixirOfGreaterFirepower, + FrostPowerBuff: proto.FrostPowerBuff_ElixirOfFrostPower, + Food: proto.Food_FoodDarkclawBisque, + MainHandImbue: proto.WeaponImbue_EnchantedRepellent, + SpellPowerBuff: proto.SpellPowerBuff_ElixirOfTheMageLord, + }, +} + var ItemFilters = core.ItemFilter{ WeaponTypes: []proto.WeaponType{ proto.WeaponType_WeaponTypeDagger, diff --git a/ui/mage/apls/p6_fire.apl.json b/ui/mage/apls/p6_fire.apl.json new file mode 100644 index 0000000000..03f95e82f5 --- /dev/null +++ b/ui/mage/apls/p6_fire.apl.json @@ -0,0 +1,27 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":25306,"rank":12}}},"doAtValue":{"const":{"val":"-3s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":401502}}},"doAtValue":{"const":{"val":"-3s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":428878}}},"doAtValue":{"const":{"val":"-2.5s"}}} + ], + "priorityList": [ + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"15%"}}}},"castSpell":{"spellId":{"spellId":12051}}}}, + {"action":{"condition":{"not":{"val":{"spellIsReady":{"spellId":{"spellId":425121}}}}},"castSpell":{"spellId":{"spellId":12472}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":456398,"tag":2}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":456398,"tag":2}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"castSpell":{"spellId":{"spellId":2139}}}}, + {"action":{"condition":{"or":{"vals":[{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400624}}},{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":400615}}}}},{"auraIsActive":{"auraId":{"spellId":48108,"tag":1}}}]}},{"runeIsEquipped":{"runeId":{"spellId":400615}}}]}},"castSpell":{"spellId":{"spellId":10199,"rank":7}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":469237}}},{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"1"}}}}]}},"strictSequence":{"actions":[{"move":{"rangeFromTarget":{"const":{"val":"15"}}}},{"castSpell":{"spellId":{"spellId":13021,"rank":5}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":400613}}}}},{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"2"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"6s"}}}}]}}]}},"castSpell":{"spellId":{"spellId":400613}}}}, + {"action":{"condition":{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"2"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"6s"}}}}]}},"castSpell":{"spellId":{"spellId":10207,"rank":7}}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400624}}},{"auraIsActiveWithReactionTime":{"auraId":{"spellId":48108}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":11129}}}}}]}},"castSpell":{"spellId":{"spellId":18809,"rank":8}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"5"}}}},{"or":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":428878}}}}},{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"1"}}}}]}}]}},"castSpell":{"spellId":{"spellId":11129}}}}, + {"action":{"castSpell":{"spellId":{"spellId":401556}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"spellIsReady":{"spellId":{"spellId":12472}}}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":26297}}}}}]}},"castSpell":{"spellId":{"itemId":230243}}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":12873,"rank":3}}},"rhs":{"const":{"val":"5"}}}},{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"spellCastTime":{"spellId":{"spellId":428878}}}}}]}}]}},"castSpell":{"spellId":{"spellId":428878}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":467399}}},{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10151,"rank":11}}}}},{"not":{"val":{"spellInFlight":{"spellId":{"spellId":10151,"rank":11}}}}}]}},"castSpell":{"spellId":{"spellId":10151,"rank":11}}}}, + {"action":{"castSpell":{"spellId":{"spellId":401502}}}}, + {"action":{"castSpell":{"spellId":{"spellId":25306,"rank":12}}}}, + {"action":{"castSpell":{"spellId":{"spellId":10207,"rank":7}}}} + ] +} diff --git a/ui/mage/apls/p6_spellfrost.apl.json b/ui/mage/apls/p6_spellfrost.apl.json new file mode 100644 index 0000000000..9eaf9e5429 --- /dev/null +++ b/ui/mage/apls/p6_spellfrost.apl.json @@ -0,0 +1,35 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":13033,"rank":4}}},"doAtValue":{"const":{"val":"-4.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":401502}}},"doAtValue":{"const":{"val":"-3s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":428878}}},"doAtValue":{"const":{"val":"-3s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":412532}}},"doAtValue":{"const":{"val":"-2.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10181,"rank":10}}},"doAtValue":{"const":{"val":"-2.5s"}}} + ], + "priorityList": [ + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":469238}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":13033,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15s"}}}}]}},"castSpell":{"spellId":{"spellId":13033,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"15%"}}}},"castSpell":{"spellId":{"spellId":12051}}}}, + {"action":{"castSpell":{"spellId":{"itemId":231282}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":26297}}}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":425121}}}}}]}},"castSpell":{"spellId":{"itemId":230243}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},"castSpell":{"spellId":{"spellId":440802}}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":456398,"tag":2}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":456398,"tag":2}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"castSpell":{"spellId":{"spellId":2139}}}}, + {"action":{"condition":{"runeIsEquipped":{"runeId":{"spellId":400615}}},"castSpell":{"spellId":{"spellId":10199,"rank":7}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":400647}}},{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":1218345}}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":400640}}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":428878}}},{"runeIsEquipped":{"runeId":{"spellId":428739}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":428878}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":428878}}},{"castSpell":{"spellId":{"spellId":428739}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":428878}}},{"runeIsEquipped":{"runeId":{"spellId":400640}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":428878}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":428878}}},{"castSpell":{"spellId":{"spellId":400640}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":401502}}},{"runeIsEquipped":{"runeId":{"spellId":428739}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":401502}}},{"castSpell":{"spellId":{"spellId":428739}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":401502}}},{"runeIsEquipped":{"runeId":{"spellId":400640}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":401502}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":401502}}},{"castSpell":{"spellId":{"spellId":400640}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":412532}}},{"runeIsEquipped":{"runeId":{"spellId":428739}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":412532}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":412532}}},{"castSpell":{"spellId":{"spellId":428739}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":412532}}},{"runeIsEquipped":{"runeId":{"spellId":400640}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":412532}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":412532}}},{"castSpell":{"spellId":{"spellId":400640}}}]}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":428739}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":25304,"rank":11}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":10181,"rank":10}}},{"castSpell":{"spellId":{"spellId":428739}}}]}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"runeIsEquipped":{"runeId":{"spellId":400647}}},{"runeIsEquipped":{"runeId":{"spellId":400640}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":400647}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"spellCastTime":{"spellId":{"spellId":25304,"rank":11}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":10181,"rank":10}}},{"castSpell":{"spellId":{"spellId":400640}}}]}}}, + {"action":{"castSpell":{"spellId":{"spellId":401556}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"spellIsReady":{"spellId":{"spellId":425121}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":428739}}}}},{"or":{"vals":[{"not":{"val":{"runeIsEquipped":{"runeId":{"spellId":440802}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":440802}}}}}]}}]}},"castSpell":{"spellId":{"spellId":12472}}}}, + {"action":{"condition":{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":428878,"tag":1}}},"rhs":{"spellCastTime":{"spellId":{"spellId":428878}}}}}]}},"castSpell":{"spellId":{"spellId":428878}}}}, + {"action":{"castSpell":{"spellId":{"spellId":412532}}}}, + {"action":{"castSpell":{"spellId":{"spellId":401502}}}}, + {"action":{"castSpell":{"spellId":{"spellId":10181,"rank":10}}}} + ] +} diff --git a/ui/mage/gear_sets/p6_fire.gear.json b/ui/mage/gear_sets/p6_fire.gear.json new file mode 100644 index 0000000000..37f345235b --- /dev/null +++ b/ui/mage/gear_sets/p6_fire.gear.json @@ -0,0 +1,21 @@ +{ + "items": [ + {"id":233404,"enchant":7634,"rune":400624}, + {"id":233620}, + {"id":233403,"enchant":2605}, + {"id":233424,"enchant":2463,"rune":400615}, + {"id":233402,"enchant":7648,"rune":412324}, + {"id":234114,"enchant":7655,"rune":428878}, + {"id":233631,"enchant":2616,"rune":400613}, + {"id":233633,"rune":401502}, + {"id":233574,"enchant":7634,"rune":425121}, + {"id":233405,"enchant":7648,"rune":412322}, + {"id":234032,"rune":442894}, + {"id":233425,"rune":442895}, + {"id":230243}, + {"id":233991}, + {"id":233423,"enchant":2504}, + {"id":19311}, + {"id":233571} + ] +} diff --git a/ui/mage/gear_sets/p6_frost.gear.json b/ui/mage/gear_sets/p6_frost.gear.json new file mode 100644 index 0000000000..037456ecfa --- /dev/null +++ b/ui/mage/gear_sets/p6_frost.gear.json @@ -0,0 +1,22 @@ +{ + "items": [ + {"id":233624,"enchant":7634,"rune":428739}, + {"id":231324}, + {"id":231325,"enchant":2605}, + {"id":233630,"enchant":2463,"rune":440802}, + {"id":231327,"enchant":7648,"rune":400647}, + {"id":231326,"enchant":7655,"rune":428741}, + {"id":233631,"enchant":2615,"rune":400640}, + {"id":233633,"rune":412532}, + {"id":234108,"enchant":7634,"rune":425121}, + {"id":233611,"enchant":7648,"rune":412322}, + {"id":234463,"rune":442894}, + {"id":234032,"rune":442895}, + {"id":231282}, + {"id":230243}, + {"id":229972,"enchant":2504}, + {}, + {"id":228381} + ] + } + \ No newline at end of file diff --git a/ui/mage/presets.ts b/ui/mage/presets.ts index 1bf59019e7..4487e676b2 100644 --- a/ui/mage/presets.ts +++ b/ui/mage/presets.ts @@ -23,83 +23,96 @@ import { } from '../core/proto/common'; import { Mage_Options as MageOptions, Mage_Options_ArmorType as ArmorType } from '../core/proto/mage'; import { SavedTalents } from '../core/proto/ui'; -import Phase1APLArcane from './apls/p1_arcane.apl.json'; -import Phase1APLFire from './apls/p1_fire.apl.json'; -import Phase2APLArcane from './apls/p2_arcane.apl.json'; -import Phase2APLFire from './apls/p2_fire.apl.json'; -// import Phase3APLArcane from './apls/p3_arcane.apl.json'; -import Phase3APLFire from './apls/p3_fire.apl.json'; -import Phase3APLFrost from './apls/p3_frost.apl.json'; -import Phase4APLArcane from './apls/p4_arcane.apl.json'; -import Phase4APLFire from './apls/p4_fire.apl.json'; -import Phase4APLFrost from './apls/p4_frost.apl.json'; -import Phase5APLFire from './apls/p5_fire.apl.json'; -import Phase5APLSpellFrost from './apls/p5_spellfrost.apl.json'; -import Phase1GearFire from './gear_sets/p1_fire.gear.json'; -import Phase1Gear from './gear_sets/p1_generic.gear.json'; -import Phase2GearArcane from './gear_sets/p2_arcane.gear.json'; -import Phase2GearFire from './gear_sets/p2_fire.gear.json'; -import Phase2GearFrost from './gear_sets/p2_frost.gear.json'; -import Phase3GearFire from './gear_sets/p3_fire.gear.json'; -import Phase3GearFrostFFB from './gear_sets/p3_frost_ffb.gear.json'; -import Phase4GearArcane from './gear_sets/p4_arcane.gear.json'; -import Phase4GearFire from './gear_sets/p4_fire.gear.json'; -import Phase4GearFrost from './gear_sets/p4_frost.gear.json'; -import Phase5GearArcane from './gear_sets/p5_arcane.gear.json'; -import Phase5GearFire from './gear_sets/p5_fire.gear.json'; -import Phase5GearFrost from './gear_sets/p5_frost.gear.json'; +// APLs +import Phase1APLArcaneJSON from './apls/p1_arcane.apl.json'; +import Phase1APLFireJSON from './apls/p1_fire.apl.json'; +import Phase2APLArcaneJSON from './apls/p2_arcane.apl.json'; +import Phase2APLFireJSON from './apls/p2_fire.apl.json'; +// import Phase3APLArcaneJSON from './apls/p3_arcane.apl.json'; +import Phase3APLFireJSON from './apls/p3_fire.apl.json'; +import Phase3APLFrostJSON from './apls/p3_frost.apl.json'; +import Phase4APLArcaneJSON from './apls/p4_arcane.apl.json'; +import Phase4APLFireJSON from './apls/p4_fire.apl.json'; +import Phase4APLFrostJSON from './apls/p4_frost.apl.json'; +import Phase5APLFireJSON from './apls/p5_fire.apl.json'; +import Phase5APLSpellFrostJSON from './apls/p5_spellfrost.apl.json'; +import Phase6APLFireJSON from './apls/p6_fire.apl.json'; +import Phase6APLSpellFrostJSON from './apls/p6_spellfrost.apl.json'; +// Gear +import Phase1GearFireJSON from './gear_sets/p1_fire.gear.json'; +import Phase1GearJSON from './gear_sets/p1_generic.gear.json'; +import Phase2GearArcaneJSON from './gear_sets/p2_arcane.gear.json'; +import Phase2GearFireJSON from './gear_sets/p2_fire.gear.json'; +import Phase2GearFrostJSON from './gear_sets/p2_frost.gear.json'; +import Phase3GearFireJSON from './gear_sets/p3_fire.gear.json'; +import Phase3GearFrostFFBJSON from './gear_sets/p3_frost_ffb.gear.json'; +import Phase4GearArcaneJSON from './gear_sets/p4_arcane.gear.json'; +import Phase4GearFireJSON from './gear_sets/p4_fire.gear.json'; +import Phase4GearFrostJSON from './gear_sets/p4_frost.gear.json'; +import Phase5GearArcaneJSON from './gear_sets/p5_arcane.gear.json'; +import Phase5GearFireJSON from './gear_sets/p5_fire.gear.json'; +import Phase5GearFrostJSON from './gear_sets/p5_frost.gear.json'; +import Phase6GearFireJSON from './gear_sets/p6_fire.gear.json'; +import Phase6GearFrostJSON from './gear_sets/p6_frost.gear.json'; /////////////////////////////////////////////////////////////////////////// // Gear Presets /////////////////////////////////////////////////////////////////////////// -export const GearArcanePhase1 = PresetUtils.makePresetGear('P1 Arcane', Phase1Gear, { +export const GearArcanePhase1 = PresetUtils.makePresetGear('P1 Arcane', Phase1GearJSON, { customCondition: player => player.getLevel() === 25, }); -export const GearFirePhase1 = PresetUtils.makePresetGear('P1 Fire', Phase1GearFire, { +export const GearFirePhase1 = PresetUtils.makePresetGear('P1 Fire', Phase1GearFireJSON, { customCondition: player => player.getLevel() === 25, }); -export const GearFrostPhase1 = PresetUtils.makePresetGear('P1 Frost', Phase1Gear, { +export const GearFrostPhase1 = PresetUtils.makePresetGear('P1 Frost', Phase1GearJSON, { customCondition: player => player.getLevel() === 25, }); -export const GearArcanePhase2 = PresetUtils.makePresetGear('P2 Arcane', Phase2GearArcane, { +export const GearArcanePhase2 = PresetUtils.makePresetGear('P2 Arcane', Phase2GearArcaneJSON, { customCondition: player => player.getLevel() === 40, }); -export const GearFirePhase2 = PresetUtils.makePresetGear('P2 Fire', Phase2GearFire, { +export const GearFirePhase2 = PresetUtils.makePresetGear('P2 Fire', Phase2GearFireJSON, { customCondition: player => player.getLevel() === 40, }); -export const GearFrostPhase2 = PresetUtils.makePresetGear('P2 Frost', Phase2GearFrost, { +export const GearFrostPhase2 = PresetUtils.makePresetGear('P2 Frost', Phase2GearFrostJSON, { customCondition: player => player.getLevel() === 40, }); // No new Phase 3 Arcane presets at the moment export const GearArcanePhase3 = GearArcanePhase2; -export const GearFirePhase3 = PresetUtils.makePresetGear('P3 Fire', Phase3GearFire, { +export const GearFirePhase3 = PresetUtils.makePresetGear('P3 Fire', Phase3GearFireJSON, { customCondition: player => player.getLevel() === 50, }); -export const GearFrostPhase3 = PresetUtils.makePresetGear('P3 Frost', Phase3GearFrostFFB, { +export const GearFrostPhase3 = PresetUtils.makePresetGear('P3 Frost', Phase3GearFrostFFBJSON, { customCondition: player => player.getLevel() === 50, }); // No new Phase 4 Arcane presets at the moment -export const GearArcanePhase4 = PresetUtils.makePresetGear('P4 Arcane', Phase4GearArcane, { +export const GearArcanePhase4 = PresetUtils.makePresetGear('P4 Arcane', Phase4GearArcaneJSON, { customCondition: player => player.getLevel() === 60, }); -export const GearFirePhase4 = PresetUtils.makePresetGear('P4 Fire', Phase4GearFire, { +export const GearFirePhase4 = PresetUtils.makePresetGear('P4 Fire', Phase4GearFireJSON, { customCondition: player => player.getLevel() === 60, }); -export const GearFrostPhase4 = PresetUtils.makePresetGear('P4 Frost', Phase4GearFrost, { +export const GearFrostPhase4 = PresetUtils.makePresetGear('P4 Frost', Phase4GearFrostJSON, { customCondition: player => player.getLevel() === 60, }); -export const GearArcanePhase5 = PresetUtils.makePresetGear('P5 Arcane', Phase5GearArcane, { +export const GearArcanePhase5 = PresetUtils.makePresetGear('P5 Arcane', Phase5GearArcaneJSON, { customCondition: player => player.getLevel() === 60, }); -export const GearFirePhase5 = PresetUtils.makePresetGear('P5 Fire', Phase5GearFire, { +export const GearFirePhase5 = PresetUtils.makePresetGear('P5 Fire', Phase5GearFireJSON, { customCondition: player => player.getLevel() === 60, }); -export const GearFrostPhase5 = PresetUtils.makePresetGear('P5 Frost', Phase5GearFrost, { +export const GearFrostPhase5 = PresetUtils.makePresetGear('P5 Frost', Phase5GearFrostJSON, { + customCondition: player => player.getLevel() === 60, +}); + +export const GearFirePhase6 = PresetUtils.makePresetGear('P6 Fire', Phase6GearFireJSON, { + customCondition: player => player.getLevel() === 60, +}); +export const GearFrostPhase6 = PresetUtils.makePresetGear('P6 Frost', Phase6GearFrostJSON, { customCondition: player => player.getLevel() === 60, }); @@ -109,11 +122,13 @@ export const GearPresets = { [Phase.Phase3]: [GearArcanePhase3, GearFirePhase3, GearFrostPhase3], [Phase.Phase4]: [GearArcanePhase4, GearFirePhase4, GearFrostPhase4], [Phase.Phase5]: [GearArcanePhase5, GearFirePhase5, GearFrostPhase5], + [Phase.Phase6]: [GearFirePhase6, GearFrostPhase6], + [Phase.Phase7]: [], }; export const DefaultGearArcane = GearPresets[Phase.Phase5][0]; -export const DefaultGearFire = GearPresets[Phase.Phase5][1]; -export const DefaultGearFrost = GearPresets[Phase.Phase5][2]; +export const DefaultGearFire = GearPresets[Phase.Phase6][0]; +export const DefaultGearFrost = GearPresets[Phase.Phase6][1]; export const DefaultGear = DefaultGearFire; @@ -121,43 +136,50 @@ export const DefaultGear = DefaultGearFire; // APL Presets /////////////////////////////////////////////////////////////////////////// -export const APLArcanePhase1 = PresetUtils.makePresetAPLRotation('P1 Arcane', Phase1APLArcane, { +export const APLArcanePhase1 = PresetUtils.makePresetAPLRotation('P1 Arcane', Phase1APLArcaneJSON, { customCondition: player => player.getLevel() === 25, }); -export const APLFirePhase1 = PresetUtils.makePresetAPLRotation('P1 Fire', Phase1APLFire, { +export const APLFirePhase1 = PresetUtils.makePresetAPLRotation('P1 Fire', Phase1APLFireJSON, { customCondition: player => player.getLevel() === 25, }); -export const APLArcanePhase2 = PresetUtils.makePresetAPLRotation('P2 Arcane', Phase2APLArcane, { +export const APLArcanePhase2 = PresetUtils.makePresetAPLRotation('P2 Arcane', Phase2APLArcaneJSON, { customCondition: player => player.getLevel() === 40, }); -export const APLFirePhase2 = PresetUtils.makePresetAPLRotation('P2 Fire', Phase2APLFire, { +export const APLFirePhase2 = PresetUtils.makePresetAPLRotation('P2 Fire', Phase2APLFireJSON, { customCondition: player => player.getLevel() === 40, }); // No new Phase 3 Arcane presets at the moment export const APLArcanePhase3 = APLArcanePhase2; -export const APLFirePhase3 = PresetUtils.makePresetAPLRotation('P3 Fire', Phase3APLFire, { +export const APLFirePhase3 = PresetUtils.makePresetAPLRotation('P3 Fire', Phase3APLFireJSON, { customCondition: player => player.getLevel() === 50, }); -export const APLFrostPhase3 = PresetUtils.makePresetAPLRotation('P3 Frost', Phase3APLFrost, { +export const APLFrostPhase3 = PresetUtils.makePresetAPLRotation('P3 Frost', Phase3APLFrostJSON, { customCondition: player => player.getLevel() === 50, }); -export const APLArcanePhase4 = PresetUtils.makePresetAPLRotation('P4 Arcane', Phase4APLArcane, { +export const APLArcanePhase4 = PresetUtils.makePresetAPLRotation('P4 Arcane', Phase4APLArcaneJSON, { + customCondition: player => player.getLevel() >= 60, +}); +export const APLFirePhase4 = PresetUtils.makePresetAPLRotation('P4 Fire', Phase4APLFireJSON, { customCondition: player => player.getLevel() >= 60, }); -export const APLFirePhase4 = PresetUtils.makePresetAPLRotation('P4 Fire', Phase4APLFire, { +export const APLFrostPhase4 = PresetUtils.makePresetAPLRotation('P4 Frost', Phase4APLFrostJSON, { customCondition: player => player.getLevel() >= 60, }); -export const APLFrostPhase4 = PresetUtils.makePresetAPLRotation('P4 Frost', Phase4APLFrost, { + +export const APLFirePhase5 = PresetUtils.makePresetAPLRotation('P5 Fire', Phase5APLFireJSON, { + customCondition: player => player.getLevel() >= 60, +}); +export const APLSpellfrostPhase5 = PresetUtils.makePresetAPLRotation('P5 Frost', Phase5APLSpellFrostJSON, { customCondition: player => player.getLevel() >= 60, }); -export const APLFirePhase5 = PresetUtils.makePresetAPLRotation('P5 Fire', Phase5APLFire, { +export const APLFirePhase6 = PresetUtils.makePresetAPLRotation('P6 Fire', Phase6APLFireJSON, { customCondition: player => player.getLevel() >= 60, }); -export const APLSpellfrostPhase5 = PresetUtils.makePresetAPLRotation('P5 Frost', Phase5APLSpellFrost, { +export const APLSpellfrostPhase6 = PresetUtils.makePresetAPLRotation('P6 Frost', Phase6APLSpellFrostJSON, { customCondition: player => player.getLevel() >= 60, }); @@ -167,6 +189,8 @@ export const APLPresets = { [Phase.Phase3]: [APLArcanePhase3, APLFirePhase3, APLFrostPhase3], [Phase.Phase4]: [APLArcanePhase4, APLFirePhase4, APLFrostPhase4], [Phase.Phase5]: [APLFirePhase5, APLSpellfrostPhase5], + [Phase.Phase6]: [APLFirePhase6, APLSpellfrostPhase6], + [Phase.Phase7]: [], }; export const DefaultAPLs: Record> = { @@ -189,9 +213,9 @@ export const DefaultAPLs: Record player.getLevel() === 25, }); @@ -209,6 +231,7 @@ export const TalentsFirePhase1 = PresetUtils.makePresetTalents('25 Fire', SavedT customCondition: player => player.getLevel() === 25, }); +// P2 export const TalentsArcanePhase2 = PresetUtils.makePresetTalents('40 Arcane', SavedTalents.create({ talentsString: '2250050310031531' }), { customCondition: player => player.getLevel() === 40, }); @@ -216,6 +239,7 @@ export const TalentsFirePhase2 = PresetUtils.makePresetTalents('40 Fire', SavedT customCondition: player => player.getLevel() === 40, }); +// P3 // No new Phase 3 Arcane presets at the moment export const TalentsArcanePhase3 = TalentsArcanePhase2; export const TalentsFirePhase3 = PresetUtils.makePresetTalents('50 Fire', SavedTalents.create({ talentsString: '-0550020123033151-2035' }), { @@ -225,20 +249,28 @@ export const TalentsFrostPhase3 = PresetUtils.makePresetTalents('50 Frost', Save customCondition: player => player.getLevel() === 50, }); -export const TalentsArcanePhase4 = PresetUtils.makePresetTalents('60 Arcane', SavedTalents.create({ talentsString: '0550050210031531-054-203500001' }), { +// P4 +export const TalentsArcanePhase4_5 = PresetUtils.makePresetTalents('P4/5 Arcane', SavedTalents.create({ talentsString: '0550050210031531-054-203500001' }), { customCondition: player => player.getLevel() === 60, }); -export const TalentsFirePhase4 = PresetUtils.makePresetTalents('60 Fire', SavedTalents.create({ talentsString: '21-5052300123033151-203500031' }), { +export const TalentsFirePhase4_5 = PresetUtils.makePresetTalents('P4/5 Fire', SavedTalents.create({ talentsString: '21-5052300123033151-203500031' }), { customCondition: player => player.getLevel() === 60, }); -export const TalentsFrostfirePhase4 = PresetUtils.makePresetTalents('60 Frostfire', SavedTalents.create({ talentsString: '-0550320003021-2035020310035105' }), { +export const TalentsFrostfirePhase4 = PresetUtils.makePresetTalents('P4 Frostfire', SavedTalents.create({ talentsString: '-0550320003021-2035020310035105' }), { + customCondition: player => player.getLevel() === 60, +}); + +// P5 +export const TalentsFrostPhase5 = PresetUtils.makePresetTalents('P5 Spellfrost', SavedTalents.create({ talentsString: '250025001002--05350203100351051' }), { customCondition: player => player.getLevel() === 60, }); -export const TalentsArcanePhase5 = PresetUtils.makePresetTalents('60 Arcane', SavedTalents.create({ talentsString: '2500550010031531--2035020310004' }), { +// P6 +// No new arcane build +export const TalentsFirePhase6 = PresetUtils.makePresetTalents('P6 Fire', SavedTalents.create({ talentsString: '-0552323121033151-203500031' }), { customCondition: player => player.getLevel() === 60, }); -export const TalentsFrostPhase5 = PresetUtils.makePresetTalents('60 Frost', SavedTalents.create({ talentsString: '250025001002--05350203100351051' }), { +export const TalentsFrostPhase6 = PresetUtils.makePresetTalents('P6 Spellfrost', SavedTalents.create({ talentsString: '005055001--20350203110351351' }), { customCondition: player => player.getLevel() === 60, }); @@ -246,14 +278,15 @@ export const TalentPresets = { [Phase.Phase1]: [TalentsArcanePhase1, TalentsFirePhase1, TalentsFirePhase1], [Phase.Phase2]: [TalentsArcanePhase2, TalentsFirePhase2, TalentsFirePhase2], [Phase.Phase3]: [TalentsArcanePhase3, TalentsFirePhase3, TalentsFrostPhase3], - [Phase.Phase4]: [TalentsFrostfirePhase4], - [Phase.Phase5]: [TalentsArcanePhase5, TalentsFirePhase4, TalentsFrostPhase5], + [Phase.Phase4]: [TalentsArcanePhase4_5, TalentsFirePhase4_5, TalentsFrostfirePhase4], + [Phase.Phase5]: [TalentsArcanePhase4_5, TalentsFirePhase4_5, TalentsFrostPhase5], + [Phase.Phase6]: [TalentsFirePhase6, TalentsFrostPhase6], + [Phase.Phase7]: [], }; export const DefaultTalentsArcane = TalentPresets[Phase.Phase5][0]; -export const DefaultTalentsFire = TalentPresets[Phase.Phase5][1]; -export const DefaultTalentsFrostfire = TalentPresets[Phase.Phase4][0]; -export const DefaultTalentsFrost = TalentPresets[Phase.Phase5][2]; +export const DefaultTalentsFire = TalentPresets[Phase.Phase6][0]; +export const DefaultTalentsFrost = TalentPresets[Phase.Phase6][1]; export const DefaultTalents = DefaultTalentsFire; @@ -279,7 +312,7 @@ export const DefaultConsumes = Consumes.create({ enchantedSigil: EnchantedSigil.WrathOfTheStormSigil, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, flask: Flask.FlaskOfAncientKnowledge, - food: Food.FoodRunnTumTuberSurprise, + food: Food.FoodDarkclawBisque, frostPowerBuff: FrostPowerBuff.ElixirOfFrostPower, mageScroll: MageScroll.MageScrollArcanePower, mainHandImbue: WeaponImbue.EnchantedRepellent, diff --git a/ui/mage/sim.ts b/ui/mage/sim.ts index 897b73b23c..93ce28cb9d 100644 --- a/ui/mage/sim.ts +++ b/ui/mage/sim.ts @@ -114,6 +114,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecMage, { presets: { rotations: [ + ...Presets.APLPresets[Phase.Phase7], + ...Presets.APLPresets[Phase.Phase6], ...Presets.APLPresets[Phase.Phase5], ...Presets.APLPresets[Phase.Phase4], ...Presets.APLPresets[Phase.Phase3], @@ -121,6 +123,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecMage, { ...Presets.APLPresets[Phase.Phase1], ], talents: [ + ...Presets.TalentPresets[Phase.Phase7], + ...Presets.TalentPresets[Phase.Phase6], ...Presets.TalentPresets[Phase.Phase5], ...Presets.TalentPresets[Phase.Phase4], ...Presets.TalentPresets[Phase.Phase3], @@ -128,6 +132,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecMage, { ...Presets.TalentPresets[Phase.Phase1], ], gear: [ + ...Presets.GearPresets[Phase.Phase7], + ...Presets.GearPresets[Phase.Phase6], ...Presets.GearPresets[Phase.Phase5], ...Presets.GearPresets[Phase.Phase4], ...Presets.GearPresets[Phase.Phase3], @@ -201,7 +207,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecMage, { defaultName: 'Frost', iconUrl: getSpecIcon(Class.ClassMage, 2), - talents: Presets.DefaultTalentsFrostfire.data, + talents: Presets.DefaultTalentsFrost.data, specOptions: Presets.DefaultOptions, consumes: Presets.DefaultConsumes, otherDefaults: Presets.OtherDefaults,