diff --git a/assets/database/db.bin b/assets/database/db.bin index f5bd5b46f9..9a33c0d728 100644 Binary files a/assets/database/db.bin and b/assets/database/db.bin differ diff --git a/assets/database/db.json b/assets/database/db.json index af2dc26036..2c367af51d 100644 --- a/assets/database/db.json +++ b/assets/database/db.json @@ -7053,9 +7053,9 @@ {"id":22113,"name":"Feralheart Vest","icon":"inv_chest_plate06","type":5,"armorType":2,"stats":[16,9,17,17,14,12,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":5,"quality":4,"classAllowlist":[1],"setName":"Feralheart Raiment","setId":513}, {"id":22149,"name":"Beads of Ogre Mojo","icon":"inv_jewelry_amulet_05","type":2,"stats":[0,0,7,12,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"sources":[{"quest":{"id":8949,"name":"Falrin's Vendetta"}}]}, {"id":22150,"name":"Beads of Ogre Might","icon":"inv_jewelry_amulet_05","type":2,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,1,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"sources":[{"quest":{"id":8949,"name":"Falrin's Vendetta"}}]}, -{"id":22191,"name":"Obsidian Mail Tunic","icon":"inv_chest_chain_17","type":5,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,1,0,0,0,0,0,0,458,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":72,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27590}}]}, +{"id":22191,"name":"Obsidian Mail Tunic","icon":"inv_chest_chain_17","type":5,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,1,0,0,0,0,0,0,458,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":72,"phase":5,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27590}}]}, {"id":22194,"name":"Black Grasp of the Destroyer","icon":"inv_gauntlets_31","type":7,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,1,0,0,0,0,0,0,279,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27589}}]}, -{"id":22195,"name":"Light Obsidian Belt","icon":"inv_belt_16","type":8,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,1,0,0,0,0,0,0,224,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":1,"quality":3,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27588}}]}, +{"id":22195,"name":"Light Obsidian Belt","icon":"inv_belt_16","type":8,"armorType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,1,0,0,0,0,0,0,224,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":5,"quality":3,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27588}}]}, {"id":22196,"name":"Thick Obsidian Breastplate","icon":"inv_chest_chain_17","type":5,"armorType":4,"stats":[38,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,814,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":72,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27587}}]}, {"id":22197,"name":"Heavy Obsidian Belt","icon":"inv_belt_16","type":8,"armorType":4,"stats":[25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":68,"phase":1,"quality":3,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27585}}]}, {"id":22198,"name":"Jagged Obsidian Shield","icon":"inv_shield_22","type":13,"weaponType":7,"handType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2645,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":70,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27586}}]}, @@ -7120,7 +7120,7 @@ {"id":22340,"name":"Pendant of Celerity","icon":"inv_jewelry_necklace_04","type":2,"stats":[0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"npcId":16042,"zoneId":1583}},{"drop":{"difficulty":1,"npcId":16042,"zoneId":1583}}]}, {"id":22342,"name":"Leggings of Torment","icon":"inv_pants_09","type":9,"armorType":1,"stats":[0,0,16,16,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"npcId":16042,"zoneId":1583}},{"drop":{"difficulty":1,"npcId":16042,"zoneId":1583}}]}, {"id":22343,"name":"Handguards of Savagery","icon":"inv_gauntlets_11","type":7,"armorType":3,"stats":[0,0,10,9,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,231,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"npcId":16042,"zoneId":1583}},{"drop":{"difficulty":1,"npcId":16042,"zoneId":1583}}]}, -{"id":22345,"name":"Totem of Rebirth","icon":"inv_relics_totemofrebirth","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":2,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":16097,"zoneId":2557}},{"drop":{"difficulty":1,"npcId":16097,"zoneId":2557}}]}, +{"id":22345,"name":"Totem of Rebirth","icon":"inv_relics_totemofrebirth","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":5,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":16097,"zoneId":2557}},{"drop":{"difficulty":1,"npcId":16097,"zoneId":2557}}]}, {"id":22347,"name":"Fahrad's Reloading Repeater","icon":"inv_weapon_crossbow_04","type":14,"rangedWeaponType":2,"stats":[0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":85,"weaponDamageMax":128,"weaponSpeed":3.2,"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":5,"quality":3,"sources":[{"quest":{"id":9023,"name":"The Perfect Poison"}}]}, {"id":22348,"name":"Doomulus Prime","icon":"inv_hammer_10","type":13,"weaponType":4,"handType":4,"stats":[22,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":158,"weaponDamageMax":265,"weaponSpeed":3.8,"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":5,"quality":3,"sources":[{"quest":{"id":9023,"name":"The Perfect Poison"}}]}, {"id":22377,"name":"The Thunderwood Poker","icon":"inv_sword_17","type":13,"weaponType":2,"handType":2,"stats":[0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":53,"weaponDamageMax":100,"weaponSpeed":1.8,"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":5,"quality":3,"unique":true,"sources":[{"quest":{"id":9023,"name":"The Perfect Poison"}}]}, @@ -7131,7 +7131,7 @@ {"id":22384,"name":"Persuader","icon":"inv_hammer_08","type":13,"weaponType":4,"handType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponDamageMin":86,"weaponDamageMax":161,"weaponSpeed":2.7,"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":63,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27830}}]}, {"id":22385,"name":"Titanic Leggings","icon":"inv_pants_04","type":9,"armorType":4,"stats":[30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,598,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":60,"phase":1,"quality":4,"expansion":1,"sources":[{"crafted":{"profession":2,"spellId":27829}}]}, {"id":22394,"name":"Staff of Metanoia","icon":"inv_staff_29","type":13,"weaponType":8,"handType":4,"stats":[0,0,15,15,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,0],"weaponDamageMin":89,"weaponDamageMax":134,"weaponSpeed":2.1,"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"npcId":10503,"zoneId":2057}},{"drop":{"difficulty":1,"npcId":10503,"zoneId":2057}}]}, -{"id":22395,"name":"Totem of Rage","icon":"inv_relics_totemofrage","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":57,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":9938,"zoneId":1584}},{"drop":{"difficulty":1,"npcId":9938,"zoneId":1584}}]}, +{"id":22395,"name":"Totem of Rage","icon":"inv_relics_totemofrage","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":57,"phase":5,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":9938,"zoneId":1584}},{"drop":{"difficulty":1,"npcId":9938,"zoneId":1584}}]}, {"id":22396,"name":"Totem of Life","icon":"inv_relics_totemoflife","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":78,"phase":5,"quality":4,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":15510,"zoneId":3428}}]}, {"id":22397,"name":"Idol of Ferocity","icon":"inv_relics_idolofferocity","type":14,"rangedWeaponType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":57,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":9025,"zoneId":1584}},{"drop":{"difficulty":1,"npcId":9025,"zoneId":1584}}]}, {"id":22398,"name":"Idol of Rejuvenation","icon":"inv_relics_idolofrejuvenation","type":14,"rangedWeaponType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":62,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":16080,"zoneId":1583}},{"drop":{"difficulty":1,"npcId":16080,"zoneId":1583}}]}, @@ -7452,8 +7452,8 @@ {"id":23178,"name":"Mantle of Lady Falther'ess","icon":"inv_misc_cape_17","type":4,"stats":[0,0,0,9,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":41,"phase":1,"quality":3,"expansion":1,"sources":[{"drop":{"npcId":14686,"zoneId":722}},{"drop":{"difficulty":1,"npcId":14686,"zoneId":722}}]}, {"id":23197,"name":"Idol of the Moon","icon":"inv_relics_idolofrejuvenation","type":14,"rangedWeaponType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true}, {"id":23198,"name":"Idol of Brutality","icon":"inv_relics_idolofferocity","type":14,"rangedWeaponType":4,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"npcId":10435,"zoneId":2017}},{"drop":{"difficulty":1,"npcId":10435,"zoneId":2017}}]}, -{"id":23199,"name":"Totem of the Storm","icon":"inv_relics_totemofrage","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true}, -{"id":23200,"name":"Totem of Sustaining","icon":"inv_relics_totemoflife","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"zoneId":2057}},{"drop":{"difficulty":1,"npcId":10505,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":11261,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10901,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10507,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10504,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10502,"zoneId":2057,"category":"Original Loot"}}]}, +{"id":23199,"name":"Totem of the Storm","icon":"inv_relics_totemofrage","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":5,"quality":3,"unique":true}, +{"id":23200,"name":"Totem of Sustaining","icon":"inv_relics_totemoflife","type":14,"rangedWeaponType":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":5,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"zoneId":2057}},{"drop":{"difficulty":1,"npcId":10505,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":11261,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10901,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10507,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10504,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10502,"zoneId":2057,"category":"Original Loot"}}]}, {"id":23201,"name":"Libram of Divinity","icon":"inv_relics_libramofhope","type":14,"rangedWeaponType":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true,"expansion":1,"sources":[{"drop":{"zoneId":2057}},{"drop":{"difficulty":1,"npcId":10505,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":11261,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10901,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10507,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10504,"zoneId":2057,"category":"Original Loot"}},{"drop":{"difficulty":1,"npcId":10502,"zoneId":2057,"category":"Original Loot"}}]}, {"id":23202,"name":"Libram of Divinity","icon":"inv_relics_libramofhope","type":14,"rangedWeaponType":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true}, {"id":23203,"name":"Libram of Fervor","icon":"inv_relics_libramoftruth","type":14,"rangedWeaponType":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"weaponSkills":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ilvl":65,"phase":1,"quality":3,"unique":true}, @@ -8742,8 +8742,8 @@ {"effectId":63,"spellId":13538,"name":"Enchant Chest - Lesser Absorption","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":66,"spellId":7457,"name":"Enchant Bracer - Minor Stamina","type":6,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":66,"spellId":7863,"name":"Enchant Boots - Minor Stamina","type":10,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, -{"effectId":241,"spellId":13503,"name":"Enchant Weapon - Lesser Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":241,"spellId":7745,"name":"Enchant 2H Weapon - Minor Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":241,"spellId":13503,"name":"Enchant Weapon - Lesser Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":242,"spellId":7748,"name":"Enchant Chest - Lesser Health","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":243,"spellId":7766,"name":"Enchant Bracer - Minor Spirit","type":6,"stats":[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":246,"spellId":7776,"name":"Enchant Chest - Lesser Mana","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, @@ -8818,8 +8818,8 @@ {"effectId":929,"itemId":16217,"spellId":20017,"name":"Enchant Shield - Greater Stamina","type":13,"enchantType":2,"stats":[0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":930,"spellId":13947,"name":"Enchant Gloves - Riding Skill","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":931,"spellId":13948,"name":"Enchant Gloves - Minor Haste","type":7,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, -{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":943,"spellId":13693,"name":"Enchant Weapon - Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":943,"spellId":13529,"name":"Enchant 2H Weapon - Lesser Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":963,"spellId":13937,"name":"Enchant 2H Weapon - Greater Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1483,"itemId":11622,"spellId":15340,"name":"Lesser Arcanum of Rumination","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1503,"itemId":11642,"spellId":15389,"name":"Lesser Arcanum of Constitution","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0],"quality":2}, diff --git a/assets/database/leftover_db.bin b/assets/database/leftover_db.bin index fa55ec23db..d4304485cf 100644 Binary files a/assets/database/leftover_db.bin and b/assets/database/leftover_db.bin differ diff --git a/assets/database/leftover_db.json b/assets/database/leftover_db.json index 11f373d860..62d5356875 100644 --- a/assets/database/leftover_db.json +++ b/assets/database/leftover_db.json @@ -1435,8 +1435,8 @@ {"effectId":63,"spellId":13538,"name":"Enchant Chest - Lesser Absorption","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":66,"spellId":7457,"name":"Enchant Bracer - Minor Stamina","type":6,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":66,"spellId":7863,"name":"Enchant Boots - Minor Stamina","type":10,"stats":[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, -{"effectId":241,"spellId":7745,"name":"Enchant 2H Weapon - Minor Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":241,"spellId":13503,"name":"Enchant Weapon - Lesser Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, +{"effectId":241,"spellId":7745,"name":"Enchant 2H Weapon - Minor Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":242,"spellId":7748,"name":"Enchant Chest - Lesser Health","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":243,"spellId":7766,"name":"Enchant Bracer - Minor Spirit","type":6,"stats":[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":246,"spellId":7776,"name":"Enchant Chest - Lesser Mana","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, @@ -1538,8 +1538,8 @@ {"effectId":1893,"spellId":20028,"name":"Enchant Chest - Major Mana","type":5,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1894,"spellId":20029,"name":"Enchant Weapon - Icy Chill","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1896,"spellId":20030,"name":"Enchant 2H Weapon - Superior Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, -{"effectId":1897,"spellId":13695,"name":"Enchant 2H Weapon - Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1897,"spellId":20031,"name":"Enchant Weapon - Superior Striking","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, +{"effectId":1897,"spellId":13695,"name":"Enchant 2H Weapon - Impact","type":13,"enchantType":1,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":1898,"spellId":20032,"name":"Enchant Weapon - Lifestealing","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":3}, {"effectId":1899,"spellId":20033,"name":"Enchant Weapon - Unholy Weapon","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, {"effectId":1900,"spellId":20034,"name":"Enchant Weapon - Crusader","type":13,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":2}, diff --git a/sim/core/buffs.go b/sim/core/buffs.go index 790009bfdd..22ec62eb64 100644 --- a/sim/core/buffs.go +++ b/sim/core/buffs.go @@ -1402,7 +1402,7 @@ func BattleShoutAura(unit *Unit, impBattleShout int32, boomingVoicePts int32, ha rank := TernaryInt32(IncludeAQ, 7, 6) spellId := BattleShoutSpellId[rank] baseAP := BattleShoutBaseAP[rank] - + return unit.GetOrRegisterAura(Aura{ Label: "Battle Shout", ActionID: ActionID{SpellID: spellId}, @@ -1410,12 +1410,12 @@ func BattleShoutAura(unit *Unit, impBattleShout int32, boomingVoicePts int32, ha BuildPhase: CharacterBuildPhaseBuffs, OnGain: func(aura *Aura, sim *Simulation) { aura.Unit.AddStatsDynamic(sim, stats.Stats{ - stats.AttackPower: math.Floor(baseAP * (1 + 0.05*float64(impBattleShout)) + TernaryFloat64(has3pcWrath, 30, 0)), + stats.AttackPower: math.Floor(baseAP*(1+0.05*float64(impBattleShout)) + TernaryFloat64(has3pcWrath, 30, 0)), }) }, OnExpire: func(aura *Aura, sim *Simulation) { aura.Unit.AddStatsDynamic(sim, stats.Stats{ - stats.AttackPower: -1 * math.Floor(baseAP*(1+0.05*float64(impBattleShout)) + TernaryFloat64(has3pcWrath, 30, 0)), + stats.AttackPower: -1 * math.Floor(baseAP*(1+0.05*float64(impBattleShout))+TernaryFloat64(has3pcWrath, 30, 0)), }) }, }) @@ -1433,8 +1433,8 @@ func TrueshotAura(unit *Unit) *Aura { makeExclusiveBuff(aura, BuffConfig{ Category: "TrueshotAura", Stats: []StatConfig{ - {stats.AttackPower, rangedAP, false}, - {stats.RangedAttackPower, meleeAP, false}, + {stats.AttackPower, meleeAP, false}, + {stats.RangedAttackPower, rangedAP, false}, }, }) diff --git a/sim/core/debuffs.go b/sim/core/debuffs.go index b9d444f5c4..5c9996ae51 100644 --- a/sim/core/debuffs.go +++ b/sim/core/debuffs.go @@ -237,7 +237,7 @@ func StormstrikeAura(unit *Unit) *Aura { aura.Unit.PseudoStats.SchoolDamageTakenMultiplier[stats.SchoolIndexNature] /= 1.20 }, OnSpellHitTaken: func(aura *Aura, sim *Simulation, spell *Spell, result *SpellResult) { - if aura.IsActive() && spell.SpellSchool.Matches(SpellSchoolNature) && result.Landed() && result.Damage > 0 { + if aura.GetStacks() > 0 && spell.SpellSchool.Matches(SpellSchoolNature) && result.Landed() && result.Damage > 0 { aura.RemoveStack(sim) } }, @@ -250,7 +250,7 @@ func StormstrikeAura(unit *Unit) *Aura { NewPeriodicAction(sim, PeriodicActionOptions{ Period: DurationFromSeconds(stormstrikeConfig.natureAttackersFrequency), OnAction: func(s *Simulation) { - if aura.IsActive() { + if aura.GetStacks() > 0 { aura.RemoveStack(sim) } }, diff --git a/sim/shaman/air_totems.go b/sim/shaman/air_totems.go index 76db84b3bc..c97f9a6b7f 100644 --- a/sim/shaman/air_totems.go +++ b/sim/shaman/air_totems.go @@ -1,20 +1,35 @@ package shaman import ( + "fmt" "time" "github.com/wowsims/classic/sim/core" ) +func (shaman *Shaman) setActiveAirTotem(sim *core.Simulation, spell *core.Spell, aura *core.Aura) { + shaman.TotemExpirations[AirTotem] = sim.CurrentTime + aura.Duration + shaman.ActiveTotems[AirTotem] = spell + + if shaman.ActiveTotemBuffs[AirTotem] != nil { + shaman.ActiveTotemBuffs[AirTotem].Deactivate(sim) + } + + shaman.ActiveTotemBuffs[AirTotem] = aura + aura.Activate(sim) +} + const WindfuryTotemRanks = 3 var WindfuryTotemSpellId = [WindfuryTotemRanks + 1]int32{0, 8512, 10613, 10614} +var WindfuryBuffAuraId = [WindfuryTotemRanks + 1]int32{0, 8514, 10607, 10611} var WindfuryTotemBonusDamage = [WindfuryTotemRanks + 1]float64{0, 122, 229, 315} var WindfuryTotemManaCost = [WindfuryTotemRanks + 1]float64{0, 115, 175, 250} var WindfuryTotemLevel = [WindfuryTotemRanks + 1]int{0, 32, 42, 52} func (shaman *Shaman) registerWindfuryTotemSpell() { shaman.WindfuryTotem = make([]*core.Spell, WindfuryTotemRanks+1) + shaman.WindfuryTotemPeriodicActions = make([]*core.PendingAction, WindfuryTotemRanks+1) for rank := 1; rank <= WindfuryTotemRanks; rank++ { config := shaman.newWindfuryTotemSpellConfig(rank) @@ -37,14 +52,35 @@ func (shaman *Shaman) newWindfuryTotemSpellConfig(rank int) core.SpellConfig { manaCost := WindfuryTotemManaCost[rank] level := WindfuryTotemLevel[rank] - duration := time.Second * 120 + // Create a trackable aura for totem weaving + buffAura := shaman.RegisterAura(core.Aura{ + ActionID: core.ActionID{SpellID: WindfuryBuffAuraId[rank]}, + Label: fmt.Sprintf("Windfury (Rank %d)", rank), + Duration: time.Second * 10, + }) + + periodicTriggerAura := shaman.RegisterAura(core.Aura{ + Label: fmt.Sprintf("Windfury Trigger Dummy (Rank %d)", rank), + Duration: time.Minute * 2, + OnGain: func(_ *core.Aura, sim *core.Simulation) { + shaman.ActiveWindfuryTotemPeriodicAction = core.StartPeriodicAction(sim, core.PeriodicActionOptions{ + Period: time.Second * 5, // Totem refreshes every 5 seconds + TickImmediately: true, + OnAction: func(_ *core.Simulation) { + buffAura.Activate(sim) + }, + }) + }, + OnExpire: func(_ *core.Aura, sim *core.Simulation) { + shaman.ActiveWindfuryTotemPeriodicAction.Cancel(sim) + }, + }) spell := shaman.newTotemSpellConfig(manaCost, spellId) spell.RequiredLevel = level spell.Rank = rank spell.ApplyEffects = func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { - shaman.TotemExpirations[EarthTotem] = sim.CurrentTime + duration - shaman.ActiveTotems[EarthTotem] = spell + shaman.setActiveAirTotem(sim, spell, periodicTriggerAura) } return spell } @@ -77,7 +113,6 @@ func (shaman *Shaman) newGraceOfAirTotemSpellConfig(rank int) core.SpellConfig { manaCost := GraceOfAirTotemManaCost[rank] level := GraceOfAirTotemLevel[rank] - duration := time.Second * 120 multiplier := []float64{1, 1.08, 1.15}[shaman.Talents.EnhancingTotems] buffAura := core.GraceOfAirTotemAura(&shaman.Unit, multiplier) @@ -86,10 +121,7 @@ func (shaman *Shaman) newGraceOfAirTotemSpellConfig(rank int) core.SpellConfig { spell.RequiredLevel = level spell.Rank = rank spell.ApplyEffects = func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { - shaman.TotemExpirations[AirTotem] = sim.CurrentTime + duration - shaman.ActiveTotems[AirTotem] = spell - - buffAura.Activate(sim) + shaman.setActiveAirTotem(sim, spell, buffAura) } return spell } @@ -122,14 +154,11 @@ func (shaman *Shaman) newWindwallTotemSpellConfig(rank int) core.SpellConfig { manaCost := WindwallTotemManaCost[rank] level := WindwallTotemLevel[rank] - duration := time.Second * 120 - spell := shaman.newTotemSpellConfig(manaCost, spellId) spell.RequiredLevel = level spell.Rank = rank spell.ApplyEffects = func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { - shaman.TotemExpirations[AirTotem] = sim.CurrentTime + duration - shaman.ActiveTotems[AirTotem] = spell + shaman.setActiveAirTotem(sim, spell, nil) } return spell } diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index e666ea6ddc..d5188639fe 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -298,7 +298,7 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 0.3783 + weights: 0.37458 weights: 0 weights: 0.61768 weights: 0 @@ -308,8 +308,8 @@ stat_weights_results: { weights: 0.61768 weights: 0 weights: 0 - weights: 7.79114 - weights: 4.12646 + weights: 7.55828 + weights: 3.99359 weights: 0 weights: 0 weights: 0 @@ -347,7 +347,7 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 0.25437 + weights: 0.25175 weights: 0 weights: 0.6207 weights: 0 @@ -357,8 +357,8 @@ stat_weights_results: { weights: 0.6207 weights: 0 weights: 0 - weights: 8.21241 - weights: 4.22423 + weights: 7.9792 + weights: 4.09542 weights: 0 weights: 0 weights: 0 @@ -396,7 +396,7 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 0.29286 + weights: 0.29066 weights: 0 weights: 0.66009 weights: 0 @@ -406,8 +406,8 @@ stat_weights_results: { weights: 0.66009 weights: 0 weights: 0 - weights: 7.95565 - weights: 4.7165 + weights: 7.73582 + weights: 4.5741 weights: 0 weights: 0 weights: 0 @@ -445,7 +445,7 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 0.17493 + weights: 0.17257 weights: 0 weights: 0.68942 weights: 0 @@ -455,8 +455,8 @@ stat_weights_results: { weights: 0.68942 weights: 0 weights: 0 - weights: 8.38606 - weights: 5.16538 + weights: 8.15382 + weights: 5.01409 weights: 0 weights: 0 weights: 0 @@ -589,645 +589,645 @@ stat_weights_results: { dps_results: { key: "TestElemental-Phase1-AllItems-Champion'sEarthshaker" value: { - dps: 545.71933 - tps: 567.03928 + dps: 525.79477 + tps: 547.11472 } } dps_results: { key: "TestElemental-Phase1-AllItems-Champion'sStormcaller" value: { - dps: 552.48697 - tps: 573.80692 + dps: 532.00847 + tps: 553.32842 } } dps_results: { key: "TestElemental-Phase1-AllItems-GiftoftheGatheringStorm" value: { - dps: 618.63401 - tps: 640.02394 + dps: 598.25405 + tps: 619.64398 } } dps_results: { key: "TestElemental-Phase1-AllItems-Stormcaller'sGarb" value: { - dps: 647.10915 - tps: 668.42727 + dps: 626.70795 + tps: 648.02608 } } dps_results: { key: "TestElemental-Phase1-AllItems-TheEarthfury" value: { - dps: 518.75319 - tps: 540.06826 + dps: 498.55751 + tps: 519.87259 } } dps_results: { key: "TestElemental-Phase1-AllItems-TheEarthshatterer" value: { - dps: 509.6622 - tps: 530.83488 + dps: 489.53812 + tps: 510.71079 } } dps_results: { key: "TestElemental-Phase1-AllItems-TheFiveThunders" value: { - dps: 556.81608 - tps: 578.13302 + dps: 536.72901 + tps: 558.04595 } } dps_results: { key: "TestElemental-Phase1-AllItems-TheTenStorms" value: { - dps: 569.53537 - tps: 590.8517 + dps: 548.7256 + tps: 570.04193 } } dps_results: { key: "TestElemental-Phase1-AllItems-Warlord'sEarthshaker" value: { - dps: 577.22226 - tps: 598.54171 + dps: 556.79167 + tps: 578.11112 } } dps_results: { key: "TestElemental-Phase1-Average-Default" value: { - dps: 636.79753 - tps: 658.34661 + dps: 616.28663 + tps: 637.8357 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-FullBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 720.55777 - tps: 1138.66668 + dps: 698.51608 + tps: 1116.625 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-FullBuffs-P1-Consumes-LongSingleTarget" value: { - dps: 607.82469 - tps: 628.8105 + dps: 588.30081 + tps: 609.28663 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-FullBuffs-P1-Consumes-ShortSingleTarget" value: { - dps: 702.99968 - tps: 734.24858 + dps: 684.50201 + tps: 715.75092 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-NoBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 399.0541 - tps: 694.93469 + dps: 387.04255 + tps: 682.92313 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-NoBuffs-P1-Consumes-LongSingleTarget" value: { - dps: 358.93761 - tps: 373.73164 + dps: 346.80842 + tps: 361.60245 } } dps_results: { key: "TestElemental-Phase1-Settings-Orc-phase_1-Adaptive-default-NoBuffs-P1-Consumes-ShortSingleTarget" value: { - dps: 536.71355 - tps: 561.86579 + dps: 522.58984 + tps: 547.74208 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-FullBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 722.08902 - tps: 1141.0896 + dps: 700.02105 + tps: 1119.02163 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-FullBuffs-P1-Consumes-LongSingleTarget" value: { - dps: 617.66009 - tps: 638.95921 + dps: 597.79052 + tps: 619.08963 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-FullBuffs-P1-Consumes-ShortSingleTarget" value: { - dps: 734.23666 - tps: 765.78224 + dps: 714.97138 + tps: 746.51695 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-NoBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 393.14296 - tps: 689.02354 + dps: 381.25748 + tps: 677.13806 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-NoBuffs-P1-Consumes-LongSingleTarget" value: { - dps: 360.84458 - tps: 375.63861 + dps: 348.60527 + tps: 363.3993 } } dps_results: { key: "TestElemental-Phase1-Settings-Troll-phase_1-Adaptive-default-NoBuffs-P1-Consumes-ShortSingleTarget" value: { - dps: 559.89369 - tps: 585.04594 + dps: 545.15753 + tps: 570.30977 } } dps_results: { key: "TestElemental-Phase1-SwitchInFrontOfTarget-Default" value: { - dps: 633.22455 - tps: 654.61825 + dps: 612.87099 + tps: 634.2647 } } dps_results: { key: "TestElemental-Phase2-AllItems-Champion'sEarthshaker" value: { - dps: 558.79695 - tps: 580.11458 + dps: 538.73165 + tps: 560.04929 } } dps_results: { key: "TestElemental-Phase2-AllItems-Champion'sStormcaller" value: { - dps: 565.66136 - tps: 586.979 + dps: 545.05166 + tps: 566.3693 } } dps_results: { key: "TestElemental-Phase2-AllItems-GiftoftheGatheringStorm" value: { - dps: 635.25513 - tps: 656.64615 + dps: 614.86564 + tps: 636.25666 } } dps_results: { key: "TestElemental-Phase2-AllItems-Stormcaller'sGarb" value: { - dps: 660.6588 - tps: 681.97856 + dps: 640.11715 + tps: 661.43691 } } dps_results: { key: "TestElemental-Phase2-AllItems-TheEarthfury" value: { - dps: 528.4875 - tps: 549.8045 + dps: 508.18131 + tps: 529.49831 } } dps_results: { key: "TestElemental-Phase2-AllItems-TheEarthshatterer" value: { - dps: 522.28475 - tps: 543.45341 + dps: 502.03381 + tps: 523.20247 } } dps_results: { key: "TestElemental-Phase2-AllItems-TheFiveThunders" value: { - dps: 568.97759 - tps: 590.29725 + dps: 548.75796 + tps: 570.07761 } } dps_results: { key: "TestElemental-Phase2-AllItems-TheTenStorms" value: { - dps: 581.89073 - tps: 603.21039 + dps: 560.94404 + tps: 582.2637 } } dps_results: { key: "TestElemental-Phase2-AllItems-Warlord'sEarthshaker" value: { - dps: 590.11107 - tps: 611.43142 + dps: 569.54274 + tps: 590.8631 } } dps_results: { key: "TestElemental-Phase2-Average-Default" value: { - dps: 666.2129 - tps: 687.76255 + dps: 645.5899 + tps: 667.13954 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 751.21114 - tps: 1169.71339 + dps: 729.12719 + tps: 1147.62944 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 636.92388 - tps: 657.9097 + dps: 617.29548 + tps: 638.28129 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 734.92604 - tps: 766.17495 + dps: 716.29908 + tps: 747.54799 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 418.22805 - tps: 714.10863 + dps: 406.15825 + tps: 702.03883 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 373.73606 - tps: 388.53009 + dps: 361.6873 + tps: 376.48133 } } dps_results: { key: "TestElemental-Phase2-Settings-Orc-phase_2-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 559.55413 - tps: 584.70637 + dps: 545.36237 + tps: 570.51461 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 752.41739 - tps: 1171.35443 + dps: 730.28736 + tps: 1149.2244 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 647.76852 - tps: 669.06789 + dps: 627.78407 + tps: 649.08345 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 767.43304 - tps: 798.97995 + dps: 748.03438 + tps: 779.58129 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 408.4279 - tps: 704.30849 + dps: 396.55 + tps: 692.43059 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 376.24244 - tps: 391.03647 + dps: 364.08355 + tps: 378.87758 } } dps_results: { key: "TestElemental-Phase2-Settings-Troll-phase_2-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 582.71817 - tps: 607.87041 + dps: 567.91395 + tps: 593.06619 } } dps_results: { key: "TestElemental-Phase2-SwitchInFrontOfTarget-Default" value: { - dps: 663.36368 - tps: 684.75778 + dps: 642.89416 + tps: 664.28826 } } dps_results: { key: "TestElemental-Phase3-AllItems-Champion'sEarthshaker" value: { - dps: 608.59939 - tps: 630.27906 + dps: 587.56462 + tps: 609.24429 } } dps_results: { key: "TestElemental-Phase3-AllItems-Champion'sStormcaller" value: { - dps: 615.13038 - tps: 636.81005 + dps: 593.54466 + tps: 615.22433 } } dps_results: { key: "TestElemental-Phase3-AllItems-GiftoftheGatheringStorm" value: { - dps: 660.2386 - tps: 681.91777 + dps: 638.51651 + tps: 660.19568 } } dps_results: { key: "TestElemental-Phase3-AllItems-Stormcaller'sGarb" value: { - dps: 717.52069 - tps: 739.19872 + dps: 696.0052 + tps: 717.68324 } } dps_results: { key: "TestElemental-Phase3-AllItems-TheEarthfury" value: { - dps: 564.58686 - tps: 586.14212 + dps: 543.44723 + tps: 565.00249 } } dps_results: { key: "TestElemental-Phase3-AllItems-TheEarthshatterer" value: { - dps: 559.45309 - tps: 580.86307 + dps: 538.38587 + tps: 559.79584 } } dps_results: { key: "TestElemental-Phase3-AllItems-TheFiveThunders" value: { - dps: 605.03167 - tps: 626.58773 + dps: 583.98487 + tps: 605.54092 } } dps_results: { key: "TestElemental-Phase3-AllItems-TheTenStorms" value: { - dps: 619.94229 - tps: 641.49834 + dps: 598.11349 + tps: 619.66954 } } dps_results: { key: "TestElemental-Phase3-AllItems-Warlord'sEarthshaker" value: { - dps: 642.66328 - tps: 664.34245 + dps: 621.11567 + tps: 642.79484 } } dps_results: { key: "TestElemental-Phase3-Average-Default" value: { - dps: 727.67718 - tps: 749.46031 + dps: 705.76782 + tps: 727.55095 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 832.06097 - tps: 1257.34822 + dps: 808.08383 + tps: 1233.37108 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 693.51119 - tps: 714.89847 + dps: 672.72222 + tps: 694.1095 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 832.74241 - tps: 864.21257 + dps: 811.63893 + tps: 843.10909 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 466.63544 - tps: 762.51602 + dps: 453.40894 + tps: 749.28953 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 426.08484 - tps: 440.87887 + dps: 412.36202 + tps: 427.15605 } } dps_results: { key: "TestElemental-Phase3-Settings-Orc-phase_3-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 633.30525 - tps: 658.45749 + dps: 617.25755 + tps: 642.40979 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 829.58351 - tps: 1255.86476 + dps: 805.64506 + tps: 1231.92631 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 705.86168 - tps: 727.42559 + dps: 684.65351 + tps: 706.21742 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 866.93868 - tps: 898.77575 + dps: 844.96959 + tps: 876.80666 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 455.03168 - tps: 750.91226 + dps: 442.12452 + tps: 738.0051 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 429.94482 - tps: 444.73885 + dps: 416.0468 + tps: 430.84083 } } dps_results: { key: "TestElemental-Phase3-Settings-Troll-phase_3-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 659.82435 - tps: 684.97659 + dps: 643.08006 + tps: 668.2323 } } dps_results: { key: "TestElemental-Phase3-SwitchInFrontOfTarget-Default" value: { - dps: 722.65774 - tps: 744.33692 + dps: 700.93565 + tps: 722.61482 } } dps_results: { key: "TestElemental-Phase4-AllItems-Champion'sEarthshaker" value: { - dps: 615.4778 - tps: 637.23122 + dps: 594.32815 + tps: 616.08158 } } dps_results: { key: "TestElemental-Phase4-AllItems-Champion'sStormcaller" value: { - dps: 621.46598 - tps: 643.2194 + dps: 599.77982 + tps: 621.53324 } } dps_results: { key: "TestElemental-Phase4-AllItems-GiftoftheGatheringStorm" value: { - dps: 702.40562 - tps: 724.45896 + dps: 680.04118 + tps: 702.09452 } } dps_results: { key: "TestElemental-Phase4-AllItems-Stormcaller'sGarb" value: { - dps: 725.49397 - tps: 747.29546 + dps: 703.6728 + tps: 725.47428 } } dps_results: { key: "TestElemental-Phase4-AllItems-TheEarthfury" value: { - dps: 574.18908 - tps: 595.86725 + dps: 552.90469 + tps: 574.58286 } } dps_results: { key: "TestElemental-Phase4-AllItems-TheEarthshatterer" value: { - dps: 567.30375 - tps: 588.83664 + dps: 546.09531 + tps: 567.6282 } } dps_results: { key: "TestElemental-Phase4-AllItems-TheFiveThunders" value: { - dps: 615.26846 - tps: 636.94743 + dps: 594.08152 + tps: 615.76049 } } dps_results: { key: "TestElemental-Phase4-AllItems-TheTenStorms" value: { - dps: 629.83497 - tps: 651.51394 + dps: 607.88592 + tps: 629.56489 } } dps_results: { key: "TestElemental-Phase4-AllItems-Warlord'sEarthshaker" value: { - dps: 648.10727 - tps: 669.86019 + dps: 626.49433 + tps: 648.24725 } } dps_results: { key: "TestElemental-Phase4-Average-Default" value: { - dps: 776.72722 - tps: 798.95101 + dps: 753.96857 + tps: 776.19236 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 895.04459 - tps: 1330.65683 + dps: 869.81455 + tps: 1305.4268 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 740.1213 - tps: 761.97075 + dps: 718.50896 + tps: 740.35841 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 882.82585 - tps: 914.64018 + dps: 860.86112 + tps: 892.67544 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 491.13505 - tps: 787.01563 + dps: 477.50639 + tps: 773.38698 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 457.06676 - tps: 471.86079 + dps: 442.66292 + tps: 457.45695 } } dps_results: { key: "TestElemental-Phase4-Settings-Orc-phase_4-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 670.5592 - tps: 695.71144 + dps: 653.878 + tps: 679.03025 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-FullBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 888.83634 - tps: 1323.67926 + dps: 863.79622 + tps: 1298.63914 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-FullBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 753.62589 - tps: 775.66304 + dps: 731.55135 + tps: 753.58849 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-FullBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 918.94991 - tps: 951.21107 + dps: 896.0869 + tps: 928.34805 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-NoBuffs-P2-Consumes-LongMultiTarget" value: { - dps: 486.53498 - tps: 782.41556 + dps: 473.03232 + tps: 768.9129 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-NoBuffs-P2-Consumes-LongSingleTarget" value: { - dps: 461.39287 - tps: 476.1869 + dps: 446.7735 + tps: 461.56753 } } dps_results: { key: "TestElemental-Phase4-Settings-Troll-phase_4-Adaptive-default-NoBuffs-P2-Consumes-ShortSingleTarget" value: { - dps: 700.63784 - tps: 725.79008 + dps: 683.20066 + tps: 708.3529 } } dps_results: { key: "TestElemental-Phase4-SwitchInFrontOfTarget-Default" value: { - dps: 771.60037 - tps: 793.72746 + dps: 749.02061 + tps: 771.1477 } } dps_results: { diff --git a/sim/shaman/enhancement/enhancement_test.go b/sim/shaman/enhancement/enhancement_test.go index b16b171c5f..3e112afc1a 100644 --- a/sim/shaman/enhancement/enhancement_test.go +++ b/sim/shaman/enhancement/enhancement_test.go @@ -1,6 +1,8 @@ package enhancement import ( + "testing" + _ "github.com/wowsims/classic/sim/common" // imported to get item effects included. "github.com/wowsims/classic/sim/core" "github.com/wowsims/classic/sim/core/proto" @@ -10,38 +12,32 @@ func init() { RegisterEnhancementShaman() } -// func TestEnhancement(t *testing.T) { -// core.RunTestSuite(t, t.Name(), core.FullCharacterTestSuiteGenerator([]core.CharacterSuiteConfig{ -// { -// Class: proto.Class_ClassShaman, -// Phase: 5, -// Race: proto.Race_RaceTroll, -// OtherRaces: []proto.Race{proto.Race_RaceOrc}, +func TestEnhancement(t *testing.T) { + core.RunTestSuite(t, t.Name(), core.FullCharacterTestSuiteGenerator([]core.CharacterSuiteConfig{ + { + Class: proto.Class_ClassShaman, + Phase: 1, + Race: proto.Race_RaceTroll, + OtherRaces: []proto.Race{proto.Race_RaceOrc}, -// Talents: Phase4Talents, -// GearSet: core.GetGearSet("../../../ui/enhancement_shaman/gear_sets", "blank"), -// // OtherGearSets: []core.GearSetCombo{ -// // core.GetGearSet("../../../ui/enhancement_shaman/gear_sets", "phase_5_2h"), -// // }, -// Rotation: core.GetAplRotation("../../../ui/enhancement_shaman/apls", "phase_5"), -// Buffs: core.FullBuffs, -// Consumes: Phase4ConsumesWFWF, -// SpecOptions: core.SpecOptionsCombo{Label: "Sync Auto", SpecOptions: PlayerOptionsSyncAuto}, -// OtherSpecOptions: []core.SpecOptionsCombo{ -// {Label: "Sync Delay OH", SpecOptions: PlayerOptionsSyncDelayOH}, -// }, + Talents: DefaultTalents, + GearSet: core.GetGearSet("../../../ui/enhancement_shaman/gear_sets", "blank"), + Rotation: core.GetAplRotation("../../../ui/enhancement_shaman/apls", "default"), + Buffs: core.FullBuffs, + Consumes: Phase1Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Sync Auto", SpecOptions: PlayerOptionsSyncAuto}, + OtherSpecOptions: []core.SpecOptionsCombo{ + {Label: "Sync Delay OH", SpecOptions: PlayerOptionsSyncDelayOH}, + }, -// ItemFilter: ItemFilters, -// EPReferenceStat: proto.Stat_StatAttackPower, -// StatsToWeigh: Stats, -// }, -// })) -// } + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatAttackPower, + StatsToWeigh: Stats, + }, + })) +} -var Phase1Talents = "-5005202101" -var Phase2Talents = "-5005202105023051" -var Phase3Talents = "05003-5005132105023051" -var Phase4Talents = "25003105003-5005032105023051" +var DefaultTalents = "05-5025002105023051-05105301" var PlayerOptionsSyncDelayOH = &proto.Player_EnhancementShaman{ EnhancementShaman: &proto.EnhancementShaman{ @@ -63,18 +59,18 @@ var optionsSyncAuto = &proto.EnhancementShaman_Options{ SyncType: proto.ShamanSyncType_Auto, } -var Phase4ConsumesWFWF = core.ConsumesCombo{ - Label: "P4-Consumes WF/WF", +var Phase1Consumes = core.ConsumesCombo{ + Label: "P1-Consumes", Consumes: &proto.Consumes{ AttackPowerBuff: proto.AttackPowerBuff_JujuMight, AgilityElixir: proto.AgilityElixir_ElixirOfTheMongoose, + DefaultConjured: proto.Conjured_ConjuredDemonicRune, DefaultPotion: proto.Potions_MajorManaPotion, DragonBreathChili: true, FirePowerBuff: proto.FirePowerBuff_ElixirOfGreaterFirepower, Flask: proto.Flask_FlaskOfSupremePower, Food: proto.Food_FoodBlessSunfruit, MainHandImbue: proto.WeaponImbue_WindfuryWeapon, - OffHandImbue: proto.WeaponImbue_WindfuryWeapon, SpellPowerBuff: proto.SpellPowerBuff_GreaterArcaneElixir, StrengthBuff: proto.StrengthBuff_JujuPower, }, diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index e37a9ba94e..852444f790 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -118,13 +118,18 @@ type Shaman struct { // Totems ActiveTotems [4]*core.Spell - EarthTotems []*core.Spell - FireTotems []*core.Spell - WaterTotems []*core.Spell - AirTotems []*core.Spell - Totems *proto.ShamanTotems + ActiveTotemBuffs [4]*core.Aura TotemExpirations [4]time.Duration // The expiration time of each totem (earth, air, fire, water). + EarthTotems []*core.Spell + FireTotems []*core.Spell + WaterTotems []*core.Spell + AirTotems []*core.Spell + Totems *proto.ShamanTotems + + WindfuryTotemPeriodicActions []*core.PendingAction + ActiveWindfuryTotemPeriodicAction *core.PendingAction + // Shield ActiveShield *core.Spell // Tracks the Shaman's active shield spell ActiveShieldAura *core.Aura diff --git a/sim/shaman/warden/TestWardenShaman.results b/sim/shaman/warden/TestWardenShaman.results index dcec91f857..f19fb02f26 100644 --- a/sim/shaman/warden/TestWardenShaman.results +++ b/sim/shaman/warden/TestWardenShaman.results @@ -1,5 +1,5 @@ character_stats_results: { - key: "TestWardenShaman-Phase4-CharacterStats-Default" + key: "TestWardenShaman-Phase1-CharacterStats-Default" value: { final_stats: 261.05 final_stats: 218.5 @@ -32,7 +32,7 @@ character_stats_results: { final_stats: 0 final_stats: 10 final_stats: 0 - final_stats: 13.7998 + final_stats: 16.7998 final_stats: 5 final_stats: 0 final_stats: 6062.475 @@ -48,14 +48,14 @@ character_stats_results: { } } stat_weights_results: { - key: "TestWardenShaman-Phase4-StatWeights-Default" + key: "TestWardenShaman-Phase1-StatWeights-Default" value: { - weights: 0.1395 + weights: 0.28026 weights: 0 weights: 0 weights: 0 weights: 0 - weights: 0.24647 + weights: 0.16521 weights: 0 weights: 0 weights: 0 @@ -67,7 +67,7 @@ stat_weights_results: { weights: 0 weights: 0 weights: 0 - weights: 0.06065 + weights: 0.12185 weights: 0 weights: 0 weights: 0 @@ -97,100 +97,163 @@ stat_weights_results: { } } dps_results: { - key: "TestWardenShaman-Phase4-Average-Default" + key: "TestWardenShaman-Phase1-AllItems-Champion'sEarthshaker" value: { - dps: 232.16486 - tps: 235.68186 + dps: 344.73305 + tps: 478.32675 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-LongMultiTarget" + key: "TestWardenShaman-Phase1-AllItems-Champion'sStormcaller" value: { - dps: 281.45011 - tps: 311.77628 + dps: 350.971 + tps: 486.84384 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-LongSingleTarget" + key: "TestWardenShaman-Phase1-AllItems-GiftoftheGatheringStorm" value: { - dps: 119.89253 - tps: 113.06718 + dps: 518.93599 + tps: 617.98044 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-ShortSingleTarget" + key: "TestWardenShaman-Phase1-AllItems-Stormcaller'sGarb" value: { - dps: 203.3209 - tps: 224.42687 + dps: 372.68727 + tps: 513.64459 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-LongMultiTarget" + key: "TestWardenShaman-Phase1-AllItems-TheEarthfury" value: { - dps: 140.12039 - tps: 217.7072 + dps: 328.17913 + tps: 465.17719 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-LongSingleTarget" + key: "TestWardenShaman-Phase1-AllItems-TheEarthshatterer" value: { - dps: 64.40117 - tps: 61.06575 + dps: 324.97995 + tps: 460.86574 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Orc-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-ShortSingleTarget" + key: "TestWardenShaman-Phase1-AllItems-TheFiveThunders" value: { - dps: 104.41488 - tps: 115.46625 + dps: 356.02553 + tps: 494.66139 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-LongMultiTarget" + key: "TestWardenShaman-Phase1-AllItems-TheTenStorms" value: { - dps: 283.73536 - tps: 304.69377 + dps: 341.27082 + tps: 483.13295 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-LongSingleTarget" + key: "TestWardenShaman-Phase1-AllItems-Warlord'sEarthshaker" value: { - dps: 114.73953 - tps: 106.55661 + dps: 366.26868 + tps: 502.77399 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-FullBuffs-P4-Consumes-ShortSingleTarget" + key: "TestWardenShaman-Phase1-Average-Default" value: { - dps: 194.32659 - tps: 209.26343 + dps: 308.80189 + tps: 430.05755 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-LongMultiTarget" + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-FullBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 143.63913 - tps: 214.71298 + dps: 101.15974 + tps: 453.94397 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-LongSingleTarget" + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-FullBuffs-P1-Consumes-LongSingleTarget" value: { - dps: 61.45225 - tps: 57.74495 + dps: 94.60706 + tps: 146.28132 } } dps_results: { - key: "TestWardenShaman-Phase4-Settings-Troll-blank-Default-phase_4_enh_tank-NoBuffs-P4-Consumes-ShortSingleTarget" + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-FullBuffs-P1-Consumes-ShortSingleTarget" value: { - dps: 105.22166 - tps: 112.04356 + dps: 144.64969 + tps: 258.2944 } } dps_results: { - key: "TestWardenShaman-Phase4-SwitchInFrontOfTarget-Default" + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-NoBuffs-P1-Consumes-LongMultiTarget" value: { - dps: 218.1517 - tps: 222.21128 + dps: 45.57112 + tps: 286.56929 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-NoBuffs-P1-Consumes-LongSingleTarget" + value: { + dps: 40.55291 + tps: 57.28532 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Orc-blank-Default-default-NoBuffs-P1-Consumes-ShortSingleTarget" + value: { + dps: 59.83212 + tps: 97.15488 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-FullBuffs-P1-Consumes-LongMultiTarget" + value: { + dps: 101.556 + tps: 455.92922 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-FullBuffs-P1-Consumes-LongSingleTarget" + value: { + dps: 95.68787 + tps: 148.71328 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-FullBuffs-P1-Consumes-ShortSingleTarget" + value: { + dps: 144.61191 + tps: 257.44997 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-NoBuffs-P1-Consumes-LongMultiTarget" + value: { + dps: 45.25985 + tps: 286.02104 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-NoBuffs-P1-Consumes-LongSingleTarget" + value: { + dps: 40.27022 + tps: 56.83655 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-Settings-Troll-blank-Default-default-NoBuffs-P1-Consumes-ShortSingleTarget" + value: { + dps: 55.47397 + tps: 87.47694 + } +} +dps_results: { + key: "TestWardenShaman-Phase1-SwitchInFrontOfTarget-Default" + value: { + dps: 285.82406 + tps: 410.83144 } } diff --git a/sim/shaman/warden/warden_test.go b/sim/shaman/warden/warden_test.go index 0cd5dd0bc1..d98586f41a 100644 --- a/sim/shaman/warden/warden_test.go +++ b/sim/shaman/warden/warden_test.go @@ -1,6 +1,8 @@ package warden import ( + "testing" + "github.com/wowsims/classic/sim/core" "github.com/wowsims/classic/sim/core/proto" ) @@ -9,27 +11,27 @@ func init() { RegisterWardenShaman() } -// func TestWardenShaman(t *testing.T) { -// core.RunTestSuite(t, t.Name(), core.FullCharacterTestSuiteGenerator([]core.CharacterSuiteConfig{ -// { -// Class: proto.Class_ClassShaman, -// Phase: 4, -// Race: proto.Race_RaceTroll, -// OtherRaces: []proto.Race{proto.Race_RaceOrc}, +func TestWardenShaman(t *testing.T) { + core.RunTestSuite(t, t.Name(), core.FullCharacterTestSuiteGenerator([]core.CharacterSuiteConfig{ + { + Class: proto.Class_ClassShaman, + Phase: 1, + Race: proto.Race_RaceTroll, + OtherRaces: []proto.Race{proto.Race_RaceOrc}, -// Talents: Phase4Talents, -// GearSet: core.GetGearSet("../../../ui/warden_shaman/gear_sets", "blank"), -// Rotation: core.GetAplRotation("../../../ui/warden_shaman/apls", "phase_4_enh_tank"), -// Buffs: core.FullBuffs, -// Consumes: Phase4Consumes, -// SpecOptions: core.SpecOptionsCombo{Label: "Default", SpecOptions: PlayerOptionsBasic}, + Talents: DefaultTalents, + GearSet: core.GetGearSet("../../../ui/warden_shaman/gear_sets", "blank"), + Rotation: core.GetAplRotation("../../../ui/warden_shaman/apls", "default"), + Buffs: core.FullBuffs, + Consumes: Phase1Consumes, + SpecOptions: core.SpecOptionsCombo{Label: "Default", SpecOptions: PlayerOptionsBasic}, -// ItemFilter: ItemFilters, -// EPReferenceStat: proto.Stat_StatAttackPower, -// StatsToWeigh: Stats, -// }, -// })) -// } + ItemFilter: ItemFilters, + EPReferenceStat: proto.Stat_StatAttackPower, + StatsToWeigh: Stats, + }, + })) +} var PlayerOptionsBasic = &proto.Player_WardenShaman{ WardenShaman: &proto.WardenShaman{ @@ -37,22 +39,22 @@ var PlayerOptionsBasic = &proto.Player_WardenShaman{ }, } -var Phase4Talents = "05033150003-0505032015003151" +var DefaultTalents = "5203015-0505000145503151" -var Phase4Consumes = core.ConsumesCombo{ - Label: "P4-Consumes", +var Phase1Consumes = core.ConsumesCombo{ + Label: "P1-Consumes", Consumes: &proto.Consumes{ AttackPowerBuff: proto.AttackPowerBuff_JujuMight, AgilityElixir: proto.AgilityElixir_ElixirOfTheMongoose, + DefaultConjured: proto.Conjured_ConjuredDemonicRune, DefaultPotion: proto.Potions_MajorManaPotion, DragonBreathChili: true, FirePowerBuff: proto.FirePowerBuff_ElixirOfGreaterFirepower, Flask: proto.Flask_FlaskOfTheTitans, Food: proto.Food_FoodBlessSunfruit, MainHandImbue: proto.WeaponImbue_WindfuryWeapon, - //OffHandImbue: proto.WeaponImbue_ConductiveShieldCoating, - SpellPowerBuff: proto.SpellPowerBuff_GreaterArcaneElixir, - StrengthBuff: proto.StrengthBuff_JujuPower, + SpellPowerBuff: proto.SpellPowerBuff_GreaterArcaneElixir, + StrengthBuff: proto.StrengthBuff_JujuPower, }, } diff --git a/tools/database/gen_db/main.go b/tools/database/gen_db/main.go index 0f95cd5676..fd65521342 100644 --- a/tools/database/gen_db/main.go +++ b/tools/database/gen_db/main.go @@ -139,14 +139,11 @@ func main() { for _, response := range itemTooltips { if response.IsEquippable() { - // Item is not part of an item set OR the item set is not in the deny list - if itemSetID := response.GetItemSetID(); itemSetID == 0 || !slices.Contains(database.DenyItemSetIds, itemSetID) { - // Only included items that are in wowheads gearplanner db - // Wowhead doesn't seem to have a field/flag to signify 'not available / in game' but their gearplanner db has them filtered - item := response.ToItemProto() - if _, ok := filteredWHDBItems[strconv.Itoa(int(item.Id))]; ok { - db.MergeItem(item) - } + // Only included items that are in wowheads gearplanner db + // Wowhead doesn't seem to have a field/flag to signify 'not available / in game' but their gearplanner db has them filtered + item := response.ToItemProto() + if _, ok := filteredWHDBItems[strconv.Itoa(int(item.Id))]; ok { + db.MergeItem(item) } } } diff --git a/tools/database/overrides.go b/tools/database/overrides.go index 51a1054830..34d302ff5a 100644 --- a/tools/database/overrides.go +++ b/tools/database/overrides.go @@ -86,6 +86,17 @@ var ItemOverrides = []*proto.UIItem{ {Id: 20130, Phase: 3}, {Id: 20521, Phase: 3}, {Id: 20517, Phase: 3}, + + // AQ Patch Items with incorrect Phases + // Shaman Totems + {Id: 23199, Phase: 5}, + {Id: 23200, Phase: 5}, + {Id: 22345, Phase: 5}, + {Id: 22395, Phase: 5}, + + // Crafted + {Id: 22191, Phase: 5}, + {Id: 22195, Phase: 5}, } // Keep these sorted by item ID. @@ -426,7 +437,3 @@ var DenyListNameRegexes = []*regexp.Regexp{ regexp.MustCompile(`Test`), regexp.MustCompile(`zOLD`), } - -// Data can easily be found here: -// https://www.wowhead.com/classic/item-sets#item-sets -var DenyItemSetIds = []int{} diff --git a/ui/core/launched_sims.ts b/ui/core/launched_sims.ts index 2387a754a5..a3d39d8e00 100644 --- a/ui/core/launched_sims.ts +++ b/ui/core/launched_sims.ts @@ -41,12 +41,12 @@ export const simLaunchStatuses: Record = { status: LaunchStatus.Unlaunched, }, [Spec.SpecElementalShaman]: { - phase: Phase.Phase1, - status: LaunchStatus.Alpha, + phase: Phase.Phase2, + status: LaunchStatus.Launched, }, [Spec.SpecEnhancementShaman]: { phase: Phase.Phase1, - status: LaunchStatus.Unlaunched, + status: LaunchStatus.Launched, }, [Spec.SpecRestorationShaman]: { phase: Phase.Phase1, @@ -54,7 +54,7 @@ export const simLaunchStatuses: Record = { }, [Spec.SpecWardenShaman]: { phase: Phase.Phase1, - status: LaunchStatus.Unlaunched, + status: LaunchStatus.Launched, }, [Spec.SpecHunter]: { phase: Phase.Phase1, diff --git a/ui/elemental_shaman/gear_sets/phase_1.gear.json b/ui/elemental_shaman/gear_sets/phase_1.gear.json index 4d913b7755..c3a1ffaae4 100644 --- a/ui/elemental_shaman/gear_sets/phase_1.gear.json +++ b/ui/elemental_shaman/gear_sets/phase_1.gear.json @@ -16,6 +16,6 @@ {"id":12930}, {"id":17105,"enchant":2504}, {"id":22329}, - {"id":23199} + {} ] } diff --git a/ui/elemental_shaman/gear_sets/phase_2.gear.json b/ui/elemental_shaman/gear_sets/phase_2.gear.json index d5fa042bb6..db38422a4c 100644 --- a/ui/elemental_shaman/gear_sets/phase_2.gear.json +++ b/ui/elemental_shaman/gear_sets/phase_2.gear.json @@ -16,6 +16,6 @@ {"id":12930}, {"id":17070,"enchant":2504}, {"id":22329}, - {"id":23199} + {} ] } diff --git a/ui/elemental_shaman/gear_sets/phase_3.gear.json b/ui/elemental_shaman/gear_sets/phase_3.gear.json index 09c24f74d0..e226eee6fb 100644 --- a/ui/elemental_shaman/gear_sets/phase_3.gear.json +++ b/ui/elemental_shaman/gear_sets/phase_3.gear.json @@ -16,6 +16,6 @@ {"id":19379}, {"id":19360,"enchant":2504}, {"id":22329}, - {"id":23199} + {} ] } diff --git a/ui/elemental_shaman/gear_sets/phase_4.gear.json b/ui/elemental_shaman/gear_sets/phase_4.gear.json index eedca5ba23..e0c7f77590 100644 --- a/ui/elemental_shaman/gear_sets/phase_4.gear.json +++ b/ui/elemental_shaman/gear_sets/phase_4.gear.json @@ -16,6 +16,6 @@ {"id":19379}, {"id":19360,"enchant":2504}, {"id":19891}, - {"id":23199} + {} ] } diff --git a/ui/elemental_shaman/presets.ts b/ui/elemental_shaman/presets.ts index d32e740632..b2478f8439 100644 --- a/ui/elemental_shaman/presets.ts +++ b/ui/elemental_shaman/presets.ts @@ -79,7 +79,7 @@ export const DefaultAPL = APLPresets[Phase.Phase1][0]; // Talent Presets /////////////////////////////////////////////////////////////////////////// -export const TalentsLevel60 = PresetUtils.makePresetTalents('Level 60', SavedTalents.create({ talentsString: '550331050002151--50105301005' })); +export const TalentsLevel60 = PresetUtils.makePresetTalents('Level 60', SavedTalents.create({ talentsString: '55001150003-5025002105023051' })); export const TalentPresets = { [Phase.Phase1]: [TalentsLevel60], diff --git a/ui/enhancement_shaman/apls/default.apl.json b/ui/enhancement_shaman/apls/default.apl.json new file mode 100644 index 0000000000..5b9de162b7 --- /dev/null +++ b/ui/enhancement_shaman/apls/default.apl.json @@ -0,0 +1,18 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":10442,"rank":4}}},"doAtValue":{"const":{"val":"-6s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10614,"rank":3}}},"doAtValue":{"const":{"val":"-4.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10627,"rank":2}}},"doAtValue":{"const":{"val":"-3s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.5s"}}} + ], + "priorityList": [ + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10442,"rank":4}}}}},"castSpell":{"spellId":{"spellId":10442,"rank":4}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":10611}}},"rhs":{"const":{"val":"1.5s"}}}},"castSpell":{"spellId":{"spellId":10614,"rank":3}}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10627,"rank":2}}}}},"castSpell":{"spellId":{"spellId":10627,"rank":2}}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"20s"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},"castSpell":{"spellId":{"spellId":10414,"rank":7}}}} + ] + } \ No newline at end of file diff --git a/ui/enhancement_shaman/apls/phase_1.apl.json b/ui/enhancement_shaman/apls/phase_1.apl.json deleted file mode 100644 index f274d6fbba..0000000000 --- a/ui/enhancement_shaman/apls/phase_1.apl.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":5394,"rank":1}}},"doAtValue":{"const":{"val":"-6s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":8160,"rank":2}}},"doAtValue":{"const":{"val":"-4.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":6363,"rank":2}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":20572}}},"doAtValue":{"const":{"val":"-1.5s"}}} - ], - "priorityList": [ - {"action":{"castSpell":{"spellId":{"spellId":20572}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"75%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":8052,"rank":2}}}}},"castSpell":{"spellId":{"spellId":8052,"rank":2}}}}, - {"action":{"castSpell":{"spellId":{"spellId":408507}}}}, - {"action":{"castSpell":{"spellId":{"spellId":8056,"rank":1}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":6363,"rank":2}}}}},"castSpell":{"spellId":{"spellId":6363,"rank":2}}}} - ] -} \ No newline at end of file diff --git a/ui/enhancement_shaman/apls/phase_2.apl.json b/ui/enhancement_shaman/apls/phase_2.apl.json deleted file mode 100644 index 872c6dd326..0000000000 --- a/ui/enhancement_shaman/apls/phase_2.apl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10495,"rank":2}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":8161,"rank":3}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":6365,"rank":4}}},"doAtValue":{"const":{"val":"-1.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":20572}}},"doAtValue":{"const":{"val":"-.25s"}}} - ], - "priorityList": [ - {"action":{"castSpell":{"spellId":{"spellId":437349}}}}, - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"55%"}}}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, - {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, - {"action":{"castSpell":{"spellId":{"spellId":408507}}}}, - {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},"castSpell":{"spellId":{"spellId":930,"rank":2}}}}, - {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},"castSpell":{"spellId":{"spellId":10391,"rank":7}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10447,"rank":4}}}}},"castSpell":{"spellId":{"spellId":10447,"rank":4}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10412,"rank":5}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":6365,"rank":4}}}}},"castSpell":{"spellId":{"spellId":6365,"rank":4}}}} - ] -} \ No newline at end of file diff --git a/ui/enhancement_shaman/apls/phase_3.apl.json b/ui/enhancement_shaman/apls/phase_3.apl.json deleted file mode 100644 index 3026c7e06d..0000000000 --- a/ui/enhancement_shaman/apls/phase_3.apl.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10431,"rank":6}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAuraWithStacks":{"auraId":{"spellId":10431,"rank":6},"numStacks":"9"}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAura":{"auraId":{"spellId":415140}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10496,"rank":3}}},"doAtValue":{"const":{"val":"-6.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":8161,"rank":3}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":8835}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10437,"rank":5}}},"doAtValue":{"const":{"val":"-1.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":20572}}},"doAtValue":{"const":{"val":"-.25s"}}} - ], - "priorityList": [ - {"action":{"castSpell":{"spellId":{"spellId":437349}}}}, - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"55%"}}}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, - {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, - {"action":{"castSpell":{"spellId":{"spellId":408507}}}}, - {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":2860,"rank":3}}}}, - {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"const":{"val":"5"}},"rhs":{"auraNumStacks":{"auraId":{"spellId":408505}}}}},"castSpell":{"spellId":{"spellId":15207,"rank":9}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10447,"rank":4}}}}},"castSpell":{"spellId":{"spellId":10447,"rank":4}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10413,"rank":6}}}}, - {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10431,"rank":6}}}}},"castSpell":{"spellId":{"spellId":10431,"rank":6}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10437,"rank":5}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":10437,"rank":5}}}} - ] -} \ No newline at end of file diff --git a/ui/enhancement_shaman/apls/phase_4.apl.json b/ui/enhancement_shaman/apls/phase_4.apl.json deleted file mode 100644 index f0b18c7567..0000000000 --- a/ui/enhancement_shaman/apls/phase_4.apl.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10432,"rank":7}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAuraWithStacks":{"auraId":{"spellId":10432,"rank":7},"numStacks":"9"}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAura":{"auraId":{"spellId":415140}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10497,"rank":4}}},"doAtValue":{"const":{"val":"-6.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25361,"rank":5}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25359,"rank":3}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":20572}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":26297,"tag":6}}},"doAtValue":{"const":{"val":"-1s"}}} - ], - "priorityList": [ - {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10432,"rank":7}}}}},"castSpell":{"spellId":{"spellId":10432,"rank":7}}}}, - {"action":{"castSpell":{"spellId":{"spellId":440580}}}}, - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"autoTimeToNext":{"autoType":"Melee"}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":408490}}},"rhs":{"const":{"val":"100ms"}}}}}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"autoTimeToNext":{"autoType":"Melee"}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":15208,"rank":10}}},"rhs":{"const":{"val":"100ms"}}}}}},"castSpell":{"spellId":{"spellId":15208,"rank":10}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":408505}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":10605,"rank":4}}}}, - {"action":{"castSpell":{"spellId":{"spellId":26297}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"55%"}}}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":29228,"rank":6}}}}},"castSpell":{"spellId":{"spellId":29228,"rank":6}}}}, - {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10414,"rank":7}}}}, - {"action":{"castSpell":{"spellId":{"spellId":425339}}}}, - {"action":{"castSpell":{"spellId":{"spellId":408507}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}} - ] -} diff --git a/ui/enhancement_shaman/apls/phase_5.apl.json b/ui/enhancement_shaman/apls/phase_5.apl.json deleted file mode 100644 index d49419e02f..0000000000 --- a/ui/enhancement_shaman/apls/phase_5.apl.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10432,"rank":7}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAuraWithStacks":{"auraId":{"spellId":10432,"rank":7},"numStacks":"9"}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"activateAura":{"auraId":{"spellId":415140}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10497,"rank":4}}},"doAtValue":{"const":{"val":"-6.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25361,"rank":5}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25359,"rank":3}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":20572}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":26297,"tag":2}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"castSpell":{"spellId":{"itemId":215162}}},"doAtValue":{"const":{"val":"-1s"}}} - ], - "priorityList": [ - {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10432,"rank":7}}}}},"castSpell":{"spellId":{"spellId":10432,"rank":7}}}}, - {"action":{"castSpell":{"spellId":{"spellId":440580}}}}, - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"autoTimeToNext":{"autoType":"Melee"}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":408490}}},"rhs":{"const":{"val":"100ms"}}}}}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"autoTimeToNext":{"autoType":"Melee"}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":15208,"rank":10}}},"rhs":{"const":{"val":"100ms"}}}}}},"castSpell":{"spellId":{"spellId":15208,"rank":10}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":408505}}},"rhs":{"const":{"val":"4"}}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":10605,"rank":4}}}}, - {"action":{"castSpell":{"spellId":{"spellId":26297}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"55%"}}}},"castSpell":{"spellId":{"itemId":13444}}}}, - {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, - {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":29228,"rank":6}}}}},"castSpell":{"spellId":{"spellId":29228,"rank":6}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10414,"rank":7}}}}, - {"action":{"castSpell":{"spellId":{"spellId":425339}}}}, - {"action":{"castSpell":{"spellId":{"spellId":408507}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}} - ] -} diff --git a/ui/enhancement_shaman/gear_sets/blank.gear.json b/ui/enhancement_shaman/gear_sets/blank.gear.json deleted file mode 100644 index 4bcab0861e..0000000000 --- a/ui/enhancement_shaman/gear_sets/blank.gear.json +++ /dev/null @@ -1 +0,0 @@ -{"items": []} \ No newline at end of file diff --git a/ui/enhancement_shaman/gear_sets/phase_1.gear.json b/ui/enhancement_shaman/gear_sets/phase_1.gear.json new file mode 100644 index 0000000000..f0cbd22cbf --- /dev/null +++ b/ui/enhancement_shaman/gear_sets/phase_1.gear.json @@ -0,0 +1,21 @@ +{ + "items": [ + {"id":18817,"enchant":1506}, + {"id":18404}, + {"id":12927}, + {"id":13340,"enchant":849}, + {"id":11726,"enchant":1891}, + {"id":18812,"enchant":1885}, + {"id":19157,"enchant":927}, + {"id":14614}, + {"id":14612,"enchant":1506}, + {"id":14616,"enchant":911}, + {"id":18821}, + {"id":17063}, + {"id":11815}, + {"id":13965}, + {"id":17182,"enchant":2563}, + {}, + {} + ] + } \ No newline at end of file diff --git a/ui/enhancement_shaman/presets.ts b/ui/enhancement_shaman/presets.ts index c270e7a373..abae94a26e 100644 --- a/ui/enhancement_shaman/presets.ts +++ b/ui/enhancement_shaman/presets.ts @@ -3,6 +3,7 @@ import * as PresetUtils from '../core/preset_utils.js'; import { AgilityElixir, AttackPowerBuff, + Conjured, Consumes, Debuffs, FirePowerBuff, @@ -22,12 +23,8 @@ import { } from '../core/proto/common.js'; import { EnhancementShaman_Options as EnhancementShamanOptions, ShamanSyncType } from '../core/proto/shaman.js'; import { SavedTalents } from '../core/proto/ui.js'; -import Phase1APL from './apls/phase_1.apl.json'; -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 BlankGear from './gear_sets/blank.gear.json'; +import DefaultAPLJSON from './apls/default.apl.json'; +import Phase1GearJSON from './gear_sets/phase_1.gear.json'; // Preset options for this spec. // Eventually we will import these values for the raid sim too, so its good to @@ -36,50 +33,52 @@ import BlankGear from './gear_sets/blank.gear.json'; // Gear Presets /////////////////////////////////////////////////////////////////////////// -export const GearBlank = PresetUtils.makePresetGear('Blank', BlankGear); +export const GearPhase1 = PresetUtils.makePresetGear('Phase 1', Phase1GearJSON); -export const GearPresets = {}; +export const GearPresets = { + [Phase.Phase1]: [GearPhase1], + [Phase.Phase2]: [], + [Phase.Phase3]: [], + [Phase.Phase4]: [], + [Phase.Phase5]: [], + [Phase.Phase6]: [], +}; -export const DefaultGear = GearBlank; +export const DefaultGear = GearPresets[Phase.Phase1][0]; /////////////////////////////////////////////////////////////////////////// // APL Presets /////////////////////////////////////////////////////////////////////////// -export const APLPhase1 = PresetUtils.makePresetAPLRotation('Phase 1', Phase1APL); -export const APLPhase2 = PresetUtils.makePresetAPLRotation('Phase 2', Phase2APL); -export const APLPhase3 = PresetUtils.makePresetAPLRotation('Phase 3', Phase3APL); -export const APLPhase4 = PresetUtils.makePresetAPLRotation('Phase 4', Phase4APL); -export const APLPhase5 = PresetUtils.makePresetAPLRotation('Phase 5', Phase5APL); +export const APLDefault = PresetUtils.makePresetAPLRotation('Default', DefaultAPLJSON); export const APLPresets = { - [Phase.Phase1]: [APLPhase1], - [Phase.Phase2]: [APLPhase2], - [Phase.Phase3]: [APLPhase3], - [Phase.Phase4]: [APLPhase4], - [Phase.Phase5]: [APLPhase5], + [Phase.Phase1]: [APLDefault], + [Phase.Phase2]: [], + [Phase.Phase3]: [], + [Phase.Phase4]: [], + [Phase.Phase5]: [], + [Phase.Phase6]: [], }; -export const DefaultAPL = APLPresets[Phase.Phase5][0]; +export const DefaultAPL = APLPresets[Phase.Phase1][0]; /////////////////////////////////////////////////////////////////////////// // Talent Presets /////////////////////////////////////////////////////////////////////////// -export const TalentsPhase1 = PresetUtils.makePresetTalents('Level 25', SavedTalents.create({ talentsString: '-5005202101' })); -export const TalentsPhase2 = PresetUtils.makePresetTalents('Level 40', SavedTalents.create({ talentsString: '-5005202105023051' })); -export const TalentsPhase3 = PresetUtils.makePresetTalents('Level 50', SavedTalents.create({ talentsString: '05003-5005132105023051' })); -export const TalentsPhase4 = PresetUtils.makePresetTalents('Level 60', SavedTalents.create({ talentsString: '25003105003-5005032105023051' })); +export const TalentsLevel60 = PresetUtils.makePresetTalents('Level 60', SavedTalents.create({ talentsString: '05-5025002105023051-05105301' })); export const TalentPresets = { - [Phase.Phase1]: [TalentsPhase1], - [Phase.Phase2]: [TalentsPhase2], - [Phase.Phase3]: [TalentsPhase3], - [Phase.Phase4]: [TalentsPhase4], + [Phase.Phase1]: [TalentsLevel60], + [Phase.Phase2]: [], + [Phase.Phase3]: [], + [Phase.Phase4]: [], [Phase.Phase5]: [], + [Phase.Phase6]: [], }; -export const DefaultTalents = TalentPresets[Phase.Phase4][0]; +export const DefaultTalents = TalentPresets[Phase.Phase1][0]; /////////////////////////////////////////////////////////////////////////// // Options @@ -93,6 +92,7 @@ export const DefaultConsumes = Consumes.create({ agilityElixir: AgilityElixir.ElixirOfTheMongoose, attackPowerBuff: AttackPowerBuff.JujuMight, defaultPotion: Potions.MajorManaPotion, + defaultConjured: Conjured.ConjuredDemonicRune, dragonBreathChili: true, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, flask: Flask.FlaskOfSupremePower, @@ -112,10 +112,8 @@ export const DefaultRaidBuffs = RaidBuffs.create({ fireResistanceAura: true, fireResistanceTotem: true, giftOfTheWild: TristateEffect.TristateEffectImproved, - graceOfAirTotem: TristateEffect.TristateEffectImproved, leaderOfThePack: true, manaSpringTotem: TristateEffect.TristateEffectRegular, - strengthOfEarthTotem: TristateEffect.TristateEffectImproved, }); export const DefaultIndividualBuffs = IndividualBuffs.create({ @@ -133,7 +131,6 @@ export const DefaultDebuffs = Debuffs.create({ exposeArmor: TristateEffect.TristateEffectImproved, faerieFire: true, improvedScorch: true, - stormstrike: true, sunderArmor: true, }); diff --git a/ui/enhancement_shaman/sim.ts b/ui/enhancement_shaman/sim.ts index 67acd37d4b..01d0c9157f 100644 --- a/ui/enhancement_shaman/sim.ts +++ b/ui/enhancement_shaman/sim.ts @@ -131,6 +131,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { presets: { talents: [ + ...Presets.TalentPresets[Phase.Phase6], ...Presets.TalentPresets[Phase.Phase5], ...Presets.TalentPresets[Phase.Phase4], ...Presets.TalentPresets[Phase.Phase3], @@ -138,6 +139,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { ...Presets.TalentPresets[Phase.Phase1], ], rotations: [ + ...Presets.APLPresets[Phase.Phase6], ...Presets.APLPresets[Phase.Phase5], ...Presets.APLPresets[Phase.Phase4], ...Presets.APLPresets[Phase.Phase3], @@ -145,11 +147,16 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { ...Presets.APLPresets[Phase.Phase1], ], gear: [ - Presets.DefaultGear, + ...Presets.GearPresets[Phase.Phase6], + ...Presets.GearPresets[Phase.Phase5], + ...Presets.GearPresets[Phase.Phase4], + ...Presets.GearPresets[Phase.Phase3], + ...Presets.GearPresets[Phase.Phase2], + ...Presets.GearPresets[Phase.Phase1], ], }, - autoRotation: (player): APLRotation => { + autoRotation: (): APLRotation => { return Presets.DefaultAPL.rotation.rotation!; }, diff --git a/ui/index.html b/ui/index.html index b2d940aa08..75241a8401 100644 --- a/ui/index.html +++ b/ui/index.html @@ -186,19 +186,31 @@

Classic

Shaman Elemental - Phase 1 - Alpha + Phase 2
  • - + + +
  • +
  • + + diff --git a/ui/warden_shaman/apls/default.apl.json b/ui/warden_shaman/apls/default.apl.json new file mode 100644 index 0000000000..fcfd2a3328 --- /dev/null +++ b/ui/warden_shaman/apls/default.apl.json @@ -0,0 +1,18 @@ +{ + "type": "TypeAPL", + "prepullActions": [ + {"action":{"castSpell":{"spellId":{"spellId":10442,"rank":4}}},"doAtValue":{"const":{"val":"-6s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10614,"rank":3}}},"doAtValue":{"const":{"val":"-4.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":10627,"rank":2}}},"doAtValue":{"const":{"val":"-3s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.5s"}}} + ], + "priorityList": [ + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10442,"rank":4}}}}},"castSpell":{"spellId":{"spellId":10442,"rank":4}}}}, + {"hide":true,"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":10611}}},"rhs":{"const":{"val":"1.5s"}}}},"castSpell":{"spellId":{"spellId":10614,"rank":3}}}}, + {"hide":true,"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":10627,"rank":2}}}}},"castSpell":{"spellId":{"spellId":10627,"rank":2}}}}, + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"20s"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"50%"}}}},"castSpell":{"spellId":{"spellId":10414,"rank":7}}}} + ] +} diff --git a/ui/warden_shaman/apls/phase_4_ele_tank.apl.json b/ui/warden_shaman/apls/phase_4_ele_tank.apl.json deleted file mode 100644 index dabd5415a0..0000000000 --- a/ui/warden_shaman/apls/phase_4_ele_tank.apl.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10432,"rank":7}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25361,"rank":5}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25359,"rank":3}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.75s"}}} - ], - "priorityList": [ - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"or":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":29228,"rank":6}}}}},{"runeIsEquipped":{"runeId":{"spellId":415231}}}]}},"castSpell":{"spellId":{"spellId":29228,"rank":6}}}}, - {"action":{"condition":{"and":{"vals":[{"dotIsActive":{"spellId":{"spellId":29228,"rank":6}}},{"auraIsActive":{"auraId":{"spellId":440285}}}]}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10414,"rank":7}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"dotRemainingTime":{"spellId":{"spellId":29228,"rank":6}}},"rhs":{"const":{"val":"4s"}}}},"castSpell":{"spellId":{"spellId":408490}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10587,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":10587,"rank":4}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}},{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}}, - {"action":{"castSpell":{"spellId":{"spellId":15208,"rank":10}}}} - ] -} diff --git a/ui/warden_shaman/apls/phase_4_enh_tank.apl.json b/ui/warden_shaman/apls/phase_4_enh_tank.apl.json deleted file mode 100644 index 5a1d2d1856..0000000000 --- a/ui/warden_shaman/apls/phase_4_enh_tank.apl.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":10432,"rank":7}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25361,"rank":5}}},"doAtValue":{"const":{"val":"-4.75s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":25359,"rank":3}}},"doAtValue":{"const":{"val":"-3.25s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":10438,"rank":6}}},"doAtValue":{"const":{"val":"-1.75s"}}} - ], - "priorityList": [ - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"currentManaPercent":{}},"rhs":{"const":{"val":"65%"}}}},"castSpell":{"spellId":{"spellId":425336}}}}, - {"action":{"condition":{"or":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":29228,"rank":6}}}}},{"runeIsEquipped":{"runeId":{"spellId":415231}}}]}},"castSpell":{"spellId":{"spellId":29228,"rank":6}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":408505}}},"rhs":{"const":{"val":"5"}}}},{"runeIsEquipped":{"runeId":{"spellId":408498}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":10605,"rank":4}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"spellId":425339}}}}, - {"action":{"castSpell":{"spellId":{"spellId":17364,"rank":1}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10414,"rank":7}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"auraNumStacks":{"auraId":{"spellId":408505}}},"rhs":{"const":{"val":"5"}}}},{"runeIsEquipped":{"runeId":{"spellId":408498}}},{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":15208,"rank":10}}}}, - {"action":{"castSpell":{"spellId":{"spellId":10473,"rank":4}}}}, - {"action":{"castSpell":{"spellId":{"spellId":425339}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10587,"rank":4}}}}},{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":10587,"rank":4}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":10438,"rank":6}}}}},{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":10438,"rank":6}}}} - ] -} diff --git a/ui/warden_shaman/presets.ts b/ui/warden_shaman/presets.ts index c6c5676248..9cc554b4c2 100644 --- a/ui/warden_shaman/presets.ts +++ b/ui/warden_shaman/presets.ts @@ -5,6 +5,7 @@ import { Alcohol, ArmorElixir, AttackPowerBuff, + Conjured, Consumes, Debuffs, FirePowerBuff, @@ -25,8 +26,7 @@ import { } from '../core/proto/common.js'; import { EnhancementShaman_Options as EnhancementShamanOptions, ShamanSyncType } from '../core/proto/shaman.js'; import { SavedTalents } from '../core/proto/ui.js'; -import Phase4EleTankAPLJSON from './apls/phase_4_ele_tank.apl.json'; -import Phase4EnhTankAPLJSON from './apls/phase_4_enh_tank.apl.json'; +import DefaultAPLJSON from './apls/default.apl.json'; import BlankGear from './gear_sets/blank.gear.json'; // Preset options for this spec. @@ -39,7 +39,14 @@ import BlankGear from './gear_sets/blank.gear.json'; export const GearBlank = PresetUtils.makePresetGear('Blank', BlankGear); -export const GearPresets = {}; +export const GearPresets = { + [Phase.Phase1]: [GearBlank], + [Phase.Phase2]: [], + [Phase.Phase3]: [], + [Phase.Phase4]: [], + [Phase.Phase5]: [], + [Phase.Phase6]: [], +}; export const DefaultGear = GearBlank; @@ -47,36 +54,35 @@ export const DefaultGear = GearBlank; // APL Presets /////////////////////////////////////////////////////////////////////////// -export const APLEnhTankPhase4 = PresetUtils.makePresetAPLRotation('P4 Enh', Phase4EnhTankAPLJSON); -export const APLEleTankPhase4 = PresetUtils.makePresetAPLRotation('P4 Ele', Phase4EleTankAPLJSON); +export const APLDefault = PresetUtils.makePresetAPLRotation('Default', DefaultAPLJSON); export const APLPresets = { - [Phase.Phase1]: [], + [Phase.Phase1]: [APLDefault], [Phase.Phase2]: [], [Phase.Phase3]: [], - [Phase.Phase4]: [APLEnhTankPhase4, APLEleTankPhase4], + [Phase.Phase4]: [], [Phase.Phase5]: [], + [Phase.Phase6]: [], }; -export const DefaultAPL = APLPresets[Phase.Phase4][0]; +export const DefaultAPL = APLPresets[Phase.Phase1][0]; /////////////////////////////////////////////////////////////////////////// // Talent Presets /////////////////////////////////////////////////////////////////////////// -export const TalentsHardCastPhase4 = PresetUtils.makePresetTalents('60 Ele', SavedTalents.create({ talentsString: '55030155000015-050003-500053' })); -export const TalentsSpellhancePhase4 = PresetUtils.makePresetTalents('60 Spellhance', SavedTalents.create({ talentsString: '5503015000301-05250320550001' })); -export const TalentsDeepEnhPhase4 = PresetUtils.makePresetTalents('60 Enh', SavedTalents.create({ talentsString: '05033150003-0505032015003151' })); +export const TalentsLevel60 = PresetUtils.makePresetTalents('Level 60', SavedTalents.create({ talentsString: '5203015-0505000145503151' })); export const TalentPresets = { - [Phase.Phase1]: [], + [Phase.Phase1]: [TalentsLevel60], [Phase.Phase2]: [], [Phase.Phase3]: [], - [Phase.Phase4]: [TalentsDeepEnhPhase4, TalentsSpellhancePhase4, TalentsHardCastPhase4], + [Phase.Phase4]: [], [Phase.Phase5]: [], + [Phase.Phase6]: [], }; -export const DefaultTalents = TalentPresets[Phase.Phase4][0]; +export const DefaultTalents = TalentPresets[Phase.Phase1][0]; /////////////////////////////////////////////////////////////////////////// // Options @@ -91,6 +97,7 @@ export const DefaultConsumes = Consumes.create({ alcohol: Alcohol.AlcoholRumseyRumBlackLabel, armorElixir: ArmorElixir.ElixirOfSuperiorDefense, attackPowerBuff: AttackPowerBuff.JujuMight, + defaultConjured: Conjured.ConjuredDemonicRune, defaultPotion: Potions.MajorManaPotion, dragonBreathChili: true, firePowerBuff: FirePowerBuff.ElixirOfGreaterFirepower, @@ -111,11 +118,9 @@ export const DefaultRaidBuffs = RaidBuffs.create({ fireResistanceAura: true, fireResistanceTotem: true, giftOfTheWild: TristateEffect.TristateEffectImproved, - graceOfAirTotem: TristateEffect.TristateEffectImproved, leaderOfThePack: true, manaSpringTotem: TristateEffect.TristateEffectRegular, powerWordFortitude: TristateEffect.TristateEffectImproved, - strengthOfEarthTotem: TristateEffect.TristateEffectImproved, }); export const DefaultIndividualBuffs = IndividualBuffs.create({ @@ -135,8 +140,8 @@ export const DefaultDebuffs = Debuffs.create({ faerieFire: true, improvedScorch: true, insectSwarm: true, - stormstrike: true, sunderArmor: true, + thunderClap: TristateEffect.TristateEffectRegular, }); export const OtherDefaults = { diff --git a/ui/warden_shaman/sim.ts b/ui/warden_shaman/sim.ts index 0adcdac223..959457dff8 100644 --- a/ui/warden_shaman/sim.ts +++ b/ui/warden_shaman/sim.ts @@ -168,6 +168,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWardenShaman, { presets: { talents: [ + ...Presets.TalentPresets[Phase.Phase6], ...Presets.TalentPresets[Phase.Phase5], ...Presets.TalentPresets[Phase.Phase4], ...Presets.TalentPresets[Phase.Phase3], @@ -175,6 +176,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWardenShaman, { ...Presets.TalentPresets[Phase.Phase1], ], rotations: [ + ...Presets.APLPresets[Phase.Phase6], ...Presets.APLPresets[Phase.Phase5], ...Presets.APLPresets[Phase.Phase4], ...Presets.APLPresets[Phase.Phase3], @@ -182,11 +184,16 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecWardenShaman, { ...Presets.APLPresets[Phase.Phase1], ], gear: [ - Presets.DefaultGear, + ...Presets.GearPresets[Phase.Phase6], + ...Presets.GearPresets[Phase.Phase5], + ...Presets.GearPresets[Phase.Phase4], + ...Presets.GearPresets[Phase.Phase3], + ...Presets.GearPresets[Phase.Phase2], + ...Presets.GearPresets[Phase.Phase1], ], }, - autoRotation: (player): APLRotation => { + autoRotation: (): APLRotation => { return Presets.DefaultAPL.rotation.rotation!; },