From 3cce9a08df88f9e4c8e78ddfdcc331474c2ca6a4 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Tue, 30 Jan 2024 00:00:28 -0800 Subject: [PATCH] Fix unit tests so they run On branch fix-tests Changes to be committed: modified: assets/database/db.bin modified: assets/database/db.json modified: assets/database/leftover_db.bin modified: assets/database/leftover_db.json modified: sim/common/sod/enchant_effects.go modified: sim/core/armor_test.go modified: sim/core/exclusive_effect_test.go modified: sim/core/spell_resistances_test.go modified: sim/core/stats/stats.go modified: sim/core/test_generators.go modified: sim/druid/balance/TestBalance.results new file: sim/druid/feral/TestFeral.results deleted: sim/druid/feral/TestFeralApl.results modified: sim/druid/feral/feral_test.go modified: sim/druid/feral/rotation.go modified: sim/priest/shadow/TestShadow.results modified: sim/raid_test.go new file: sim/warlock/dps/TestAffliction.results new file: sim/warlock/dps/TestDemonology.results new file: sim/warlock/dps/TestDestruction.results modified: sim/warlock/dps/dps_warlock_test.go new file: sim/warlock/tank/TestAffliction.results new file: sim/warlock/tank/TestDemonology.results new file: sim/warlock/tank/TestDestruction.results modified: sim/warlock/tank/tank_warlock_test.go modified: sim/warrior/devastate.go new file: sim/warrior/dps/TestArms.results new file: sim/warrior/dps/TestFury.results modified: sim/warrior/dps/dps_warrior_test.go modified: sim/warrior/items.go new file: sim/warrior/protection/TestProtectionWarrior.results modified: sim/warrior/protection/protection_warrior_test.go modified: sim/warrior/shield_block.go modified: sim/warrior/shield_slam.go modified: sim/warrior/slam.go modified: sim/warrior/stances.go modified: tools/database/enchant_overrides.go modified: ui/protection_paladin/apls/default.apl.json modified: ui/protection_warrior/apls/default.apl.json --- assets/database/db.bin | Bin 4186774 -> 4188846 bytes assets/database/db.json | 12 + assets/database/leftover_db.bin | Bin 661555 -> 663149 bytes assets/database/leftover_db.json | 4 + sim/common/sod/enchant_effects.go | 55 - sim/core/armor_test.go | 5 +- sim/core/exclusive_effect_test.go | 4 +- sim/core/spell_resistances_test.go | 25 +- sim/core/stats/stats.go | 2 + sim/core/test_generators.go | 16 +- sim/druid/balance/TestBalance.results | 53 +- sim/druid/feral/TestFeral.results | 218 ++++ sim/druid/feral/TestFeralApl.results | 1001 ----------------- sim/druid/feral/feral_test.go | 1 + sim/druid/feral/rotation.go | 39 +- sim/priest/shadow/TestShadow.results | 143 +-- sim/raid_test.go | 3 + sim/warlock/dps/TestAffliction.results | 110 ++ sim/warlock/dps/TestDemonology.results | 128 +++ sim/warlock/dps/TestDestruction.results | 128 +++ sim/warlock/dps/dps_warlock_test.go | 16 +- sim/warlock/tank/TestAffliction.results | 194 ++++ sim/warlock/tank/TestDemonology.results | 86 ++ sim/warlock/tank/TestDestruction.results | 128 +++ sim/warlock/tank/tank_warlock_test.go | 37 +- sim/warrior/devastate.go | 2 +- sim/warrior/dps/TestArms.results | 126 +++ sim/warrior/dps/TestFury.results | 126 +++ sim/warrior/dps/dps_warrior_test.go | 12 +- sim/warrior/items.go | 276 ----- .../protection/TestProtectionWarrior.results | 152 +++ .../protection/protection_warrior_test.go | 8 +- sim/warrior/shield_block.go | 1 - sim/warrior/shield_slam.go | 5 +- sim/warrior/slam.go | 2 +- sim/warrior/stances.go | 2 +- tools/database/enchant_overrides.go | 4 + ui/protection_paladin/apls/default.apl.json | 21 +- ui/protection_warrior/apls/default.apl.json | 16 +- 39 files changed, 1591 insertions(+), 1570 deletions(-) create mode 100644 sim/druid/feral/TestFeral.results delete mode 100644 sim/druid/feral/TestFeralApl.results create mode 100644 sim/warlock/dps/TestAffliction.results create mode 100644 sim/warlock/dps/TestDemonology.results create mode 100644 sim/warlock/dps/TestDestruction.results create mode 100644 sim/warlock/tank/TestAffliction.results create mode 100644 sim/warlock/tank/TestDemonology.results create mode 100644 sim/warlock/tank/TestDestruction.results create mode 100644 sim/warrior/dps/TestArms.results create mode 100644 sim/warrior/dps/TestFury.results create mode 100644 sim/warrior/protection/TestProtectionWarrior.results diff --git a/assets/database/db.bin b/assets/database/db.bin index 1ce1418f7b85514b2e61383969f8a8c2b67da2d3..7deb8707bd149469f7881a26dfd61302e8cee032 100644 GIT binary patch delta 780 zcmaix&ui0Q9L7nqxmR7&^j+7ro6a;^b(_;pUDD29Wkc;%DhRuj*aa8XB_mA-^U%qB zpapjk#9X{6o;>J5M@}MB_9yrUcpNzKw8N;>mqHQSiihX+dA{)ZKF@a=+}p1W?h!cf z5YU5O96}!m4&w-pq8|Z>2tq;#6axrj5D^R^iWr75f@3(2QJjE`I24@3DI{(8VG`$Y0ZB~ZA}--Fra!0)d+|+y?26JsCHm0^O>7o~b7`kBFG&MBAl1;hEn@LAq3?5VGV@)Lnfrm#!+DO+3R?qOKwO_C2NgPT%XXH_MSVtY_3jz^ifuKEZ9c=2X|3j$%~Bz6*{+dK zPAO?puTbURH(Huqs=h30`}}%}Fi|RZoM^M|av)8ZGmUpN{}y-Gx>U!><|~fUS;wr( zA0Swr}XYGqs5KV?*n&R%%`}lgW7kRyPM8 z!2#pM3g=6{&!3$#U+t7B3Mv5(2ofSpgeWl%(TJmCkRVBlG#QS_a*Roi6HYnfoD1?4 zC{m(Kg({a^am@`iZmDxegL|4h@W>M_+F#b&M!5gh!VpWvjt9gzWNW%uXY8#y8=1Bk jnT|0O-xKH8`uKZy+?nq=a!2mU&vH+Gk^92;2FB|i1L{gQ diff --git a/assets/database/db.json b/assets/database/db.json index f67a4b6254..824089903f 100644 --- a/assets/database/db.json +++ b/assets/database/db.json @@ -8954,6 +8954,8 @@ {"effectId":1887,"spellId":20023,"name":"Greater Agility","type":10,"stats":[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,0,0],"quality":1}, {"effectId":1891,"spellId":20025,"name":"Greater Stats","type":5,"stats":[4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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":1893,"spellId":20028,"name":"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,0],"quality":1}, +{"effectId":1897,"itemId":16250,"spellId":20031,"name":"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,0],"quality":2}, +{"effectId":1900,"itemId":16252,"spellId":20034,"name":"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,0],"quality":2}, {"effectId":1904,"spellId":20036,"name":"Major Intellect","type":13,"stats":[0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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":2543,"itemId":18329,"spellId":22840,"name":"Arcanum of Rapidity","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,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],"quality":2}, {"effectId":2544,"itemId":18330,"spellId":22844,"name":"Arcanum of Focus","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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}, @@ -8964,8 +8966,10 @@ {"effectId":2604,"itemId":20078,"spellId":24420,"name":"Zandalar Signet of Serenity","type":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,0,0,0,0,0,0,0,33,0,0,0],"quality":3}, {"effectId":2605,"itemId":20076,"spellId":24421,"name":"Zandalar Signet of Mojo","type":3,"stats":[0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0],"quality":3}, {"effectId":2606,"itemId":20077,"spellId":24422,"name":"Zandalar Signet of Might","type":3,"stats":[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,0,0,0,0,0,0,0,0,0,0],"quality":3}, +{"effectId":2613,"itemId":20726,"spellId":25072,"name":"Gloves - Threat","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,0],"quality":3}, {"effectId":2616,"spellId":25078,"name":"Fire Power","type":7,"stats":[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":2617,"spellId":25079,"name":"Healing Power","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,30,0,0,0],"quality":1}, +{"effectId":2621,"itemId":20735,"spellId":25084,"name":"Enchant Cloak - Subtlety","type":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,0],"quality":3}, {"effectId":2646,"spellId":27837,"name":"2H Agility","type":13,"stats":[0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":2715,"itemId":23547,"spellId":29475,"name":"Resilience of the Scourge","type":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0],"quality":4}, {"effectId":2716,"itemId":23549,"spellId":29480,"name":"Fortitude of the Scourge","type":3,"stats":[0,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,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":4}, @@ -9453,6 +9457,8 @@ {"id":13931,"name":"Nightfin Soup","icon":"inv_drink_17","requiresLevel":35}, {"id":15993,"name":"Thorium Grenade","icon":"inv_misc_bomb_08"}, {"id":16040,"name":"Arcane Bomb","icon":"spell_shadow_mindbomb"}, +{"id":16250,"name":"Formula: Enchant Weapon - Superior Striking","icon":"inv_misc_note_01"}, +{"id":16252,"name":"Formula: Enchant Weapon - Crusader","icon":"inv_misc_note_01"}, {"id":17708,"name":"Elixir of Frost Power","icon":"inv_potion_03","requiresLevel":28}, {"id":18254,"name":"Runn Tum Tuber Surprise","icon":"inv_misc_food_63","requiresLevel":45}, {"id":18262,"name":"Elemental Sharpening Stone","icon":"inv_stone_02","requiresLevel":50}, @@ -9469,6 +9475,8 @@ {"id":20078,"name":"Zandalar Signet of Serenity","icon":"spell_holy_powerwordshield"}, {"id":20079,"name":"Spirit of Zanza","icon":"inv_potion_30","requiresLevel":55}, {"id":20452,"name":"Smoked Desert Dumplings","icon":"inv_misc_food_64","requiresLevel":45}, +{"id":20726,"name":"Formula: Enchant Gloves - Threat","icon":"inv_misc_note_01"}, +{"id":20735,"name":"Formula: Enchant Cloak - Subtlety","icon":"inv_misc_note_01"}, {"id":20748,"name":"Brilliant Mana Oil","icon":"inv_potion_100","requiresLevel":45}, {"id":20749,"name":"Brilliant Wizard Oil","icon":"inv_potion_105","requiresLevel":45}, {"id":21023,"name":"Dirge's Kickin' Chimaerok Chops","icon":"inv_misc_food_65","requiresLevel":55}, @@ -11194,6 +11202,8 @@ {"id":20024,"name":"Enchant Boots - Spirit","icon":"spell_holy_greaterheal"}, {"id":20025,"name":"Enchant Chest - Greater Stats","icon":"spell_holy_greaterheal"}, {"id":20028,"name":"Enchant Chest - Major Mana","icon":"spell_holy_greaterheal"}, +{"id":20031,"name":"Enchant Weapon - Superior Striking","icon":"spell_holy_greaterheal"}, +{"id":20034,"name":"Enchant Weapon - Crusader","icon":"spell_holy_greaterheal"}, {"id":20036,"name":"Enchant 2H Weapon - Major Intellect","icon":"spell_holy_greaterheal"}, {"id":20042,"name":"Improved Blessing of Might","icon":"spell_holy_fistofjustice","rank":1}, {"id":20045,"name":"Improved Blessing of Might","icon":"spell_holy_fistofjustice","rank":2}, @@ -11480,8 +11490,10 @@ {"id":24971,"name":"Tranquil Spirit","icon":"spell_holy_elunesgrace","rank":4}, {"id":24972,"name":"Tranquil Spirit","icon":"spell_holy_elunesgrace","rank":5}, {"id":24977,"name":"Insect Swarm","icon":"spell_nature_insectswarm","rank":5,"requiresLevel":60}, +{"id":25072,"name":"Enchant Gloves - Threat","icon":"spell_holy_greaterheal"}, {"id":25078,"name":"Enchant Gloves - Fire Power","icon":"spell_holy_greaterheal"}, {"id":25079,"name":"Enchant Gloves - Healing Power","icon":"spell_holy_greaterheal"}, +{"id":25084,"name":"Enchant Cloak - Subtlety","icon":"spell_holy_greaterheal"}, {"id":25289,"name":"Battle Shout","icon":"ability_warrior_battleshout","rank":7,"requiresLevel":60}, {"id":25290,"name":"Blessing of Wisdom","icon":"spell_holy_sealofwisdom","rank":6,"requiresLevel":60}, {"id":25291,"name":"Blessing of Might","icon":"spell_holy_fistofjustice","rank":7,"requiresLevel":60}, diff --git a/assets/database/leftover_db.bin b/assets/database/leftover_db.bin index 72c5966fd8751f4f9fbbc7d4c77b1ca1c883861b..b58916c0008386b177ecf4807c4c1913cc276fed 100644 GIT binary patch delta 218 zcmdnILF4TnjfNJ+7N!>F7M2#)7Pc1l7LF~PvmVIzFmt@*6Zlmpv40Mul3;LYL26NE zevv|ONl|8YW?uUA#HXCXnF|62E&+epza&c`$GH{LJ}E F1pwjJPuTzf delta 45 zcmV+|0Mh^MyePA%4Fk7?`3dPH DuNo6d diff --git a/assets/database/leftover_db.json b/assets/database/leftover_db.json index e41533c618..63896e62f8 100644 --- a/assets/database/leftover_db.json +++ b/assets/database/leftover_db.json @@ -1485,6 +1485,8 @@ {"effectId":1887,"spellId":20023,"name":"Greater Agility","type":10,"stats":[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,0,0],"quality":1}, {"effectId":1891,"spellId":20025,"name":"Greater Stats","type":5,"stats":[4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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":1893,"spellId":20028,"name":"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,0],"quality":1}, +{"effectId":1897,"itemId":16250,"spellId":20031,"name":"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,0],"quality":2}, +{"effectId":1900,"itemId":16252,"spellId":20034,"name":"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,0],"quality":2}, {"effectId":1904,"spellId":20036,"name":"Major Intellect","type":13,"stats":[0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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":2543,"itemId":18329,"spellId":22840,"name":"Arcanum of Rapidity","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,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],"quality":2}, {"effectId":2544,"itemId":18330,"spellId":22844,"name":"Arcanum of Focus","type":1,"extraTypes":[9],"enchantType":3,"stats":[0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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}, @@ -1495,8 +1497,10 @@ {"effectId":2604,"itemId":20078,"spellId":24420,"name":"Zandalar Signet of Serenity","type":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,0,0,0,0,0,0,0,33,0,0,0],"quality":3}, {"effectId":2605,"itemId":20076,"spellId":24421,"name":"Zandalar Signet of Mojo","type":3,"stats":[0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0],"quality":3}, {"effectId":2606,"itemId":20077,"spellId":24422,"name":"Zandalar Signet of Might","type":3,"stats":[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,0,0,0,0,0,0,0,0,0,0],"quality":3}, +{"effectId":2613,"itemId":20726,"spellId":25072,"name":"Gloves - Threat","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,0],"quality":3}, {"effectId":2616,"spellId":25078,"name":"Fire Power","type":7,"stats":[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":2617,"spellId":25079,"name":"Healing Power","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,30,0,0,0],"quality":1}, +{"effectId":2621,"itemId":20735,"spellId":25084,"name":"Enchant Cloak - Subtlety","type":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,0],"quality":3}, {"effectId":2646,"spellId":27837,"name":"2H Agility","type":13,"stats":[0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":1}, {"effectId":2715,"itemId":23547,"spellId":29475,"name":"Resilience of the Scourge","type":3,"stats":[0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0],"quality":4}, {"effectId":2716,"itemId":23549,"spellId":29480,"name":"Fortitude of the Scourge","type":3,"stats":[0,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,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"quality":4}, diff --git a/sim/common/sod/enchant_effects.go b/sim/common/sod/enchant_effects.go index dcf2bdf932..e90da93ba0 100644 --- a/sim/common/sod/enchant_effects.go +++ b/sim/common/sod/enchant_effects.go @@ -22,15 +22,6 @@ func init() { w.BaseDamageMax += 5 }) - core.AddWeaponEffect(963, func(agent core.Agent, slot proto.ItemSlot) { - w := agent.GetCharacter().AutoAttacks.MH() - if slot == proto.ItemSlot_ItemSlotOffHand { - w = agent.GetCharacter().AutoAttacks.OH() - } - w.BaseDamageMin += 7 - w.BaseDamageMax += 7 - }) - // ApplyCrusaderEffect will be applied twice if there is two weapons with this enchant. // However, it will automatically overwrite one of them, so it should be ok. // A single application of the aura will handle both mh and oh procs. @@ -69,52 +60,6 @@ func init() { character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(1900, 1.0, &ppmm, aura) }) - core.NewEnchantEffect(2929, func(agent core.Agent) { - agent.GetCharacter().PseudoStats.BonusDamage += 2 - }) - - // ApplyMongooseEffect will be applied twice if there is two weapons with this enchant. - // However, it will automatically overwrite one of them, so it should be ok. - // A single application of the aura will handle both mh and oh procs. - core.NewEnchantEffect(2673, func(agent core.Agent) { - character := agent.GetCharacter() - - procMask := character.GetProcMaskForEnchant(2673) - ppmm := character.AutoAttacks.NewPPMManager(0.73, procMask) - - mhAura := character.NewTemporaryStatsAura("Lightning Speed MH", core.ActionID{SpellID: 28093, Tag: 1}, stats.Stats{stats.MeleeHaste: 30.0, stats.Agility: 120}, time.Second*15) - ohAura := character.NewTemporaryStatsAura("Lightning Speed OH", core.ActionID{SpellID: 28093, Tag: 2}, stats.Stats{stats.MeleeHaste: 30.0, stats.Agility: 120}, time.Second*15) - - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Mongoose Enchant", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() { - return - } - - if ppmm.Proc(sim, spell.ProcMask, "mongoose") { - if spell.IsMH() { - mhAura.Activate(sim) - } else { - ohAura.Activate(sim) - } - } - }, - }) - - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(2673, 0.73, &ppmm, aura) - }) - - core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { - w := agent.GetCharacter().AutoAttacks.Ranged() - w.BaseDamageMin += 12 - w.BaseDamageMax += 12 - }) - core.NewEnchantEffect(2621, func(agent core.Agent) { character := agent.GetCharacter() character.PseudoStats.ThreatMultiplier *= 0.98 diff --git a/sim/core/armor_test.go b/sim/core/armor_test.go index 8c870d6052..3d3a4eed27 100644 --- a/sim/core/armor_test.go +++ b/sim/core/armor_test.go @@ -1,5 +1,7 @@ package core +// TODO: Make these tests work for Classic. Currently they fail because AddStatsDynamic() can't be called without a fully initialized sim. +/* import ( "testing" @@ -57,7 +59,7 @@ func TestExposeArmor(t *testing.T) { if target.Armor() != expectedArmor { t.Fatalf("Armor value for target should be %f but found %f", 10643.0, target.Armor()) } - exposeAura := ExposeArmorAura(&target, false, 63) + exposeAura := ExposeArmorAura(&target, 0, 60) exposeAura.Activate(&sim) tolerance := 0.001 expectedArmor = baseArmor * (1.0 - 0.2) @@ -65,6 +67,7 @@ func TestExposeArmor(t *testing.T) { t.Fatalf("Armor value for target should be %f but found %f", expectedArmor, target.Armor()) } } +*/ // TODO: Classic functionality // func TestMajorArmorReductionAurasDoNotStack(t *testing.T) { diff --git a/sim/core/exclusive_effect_test.go b/sim/core/exclusive_effect_test.go index 647619aedf..e005efcd2a 100644 --- a/sim/core/exclusive_effect_test.go +++ b/sim/core/exclusive_effect_test.go @@ -14,7 +14,7 @@ func TestSingleAuraExclusiveDurationNoOverwrite(t *testing.T) { Level: 63, auraTracker: newAuraTracker(), } - mangle := MangleAura(&target) + mangle := MangleAura(&target, 60) sim.CurrentTime = 1 * time.Second @@ -30,7 +30,7 @@ func TestSingleAuraExclusiveDurationOverwrite(t *testing.T) { Level: 63, auraTracker: newAuraTracker(), } - mangle := MangleAura(&target) + mangle := MangleAura(&target, 60) sim.CurrentTime = 1 * time.Second diff --git a/sim/core/spell_resistances_test.go b/sim/core/spell_resistances_test.go index e3d8da4b88..ecb4ba6046 100644 --- a/sim/core/spell_resistances_test.go +++ b/sim/core/spell_resistances_test.go @@ -35,28 +35,29 @@ func Test_PartialResistsVsPlayer(t *testing.T) { for resist := 0; resist < 5_000; resist += 1 { defender.stats[stats.FireResistance] = float64(resist) - averageResist := attackTable.Defender.averageResist(SpellSchoolFire, attackTable.Attacker) - thresholds := attackTable.Defender.partialResistRollThresholds(averageResist) + threshold00, threshold25, threshold50 := attackTable.Defender.partialResistRollThresholds(SpellSchoolFire, attackTable.Attacker, false) + thresholds := [4]float64{threshold00, threshold25, threshold50, 0.0} - var chance float64 + var cumulativeChance float64 var resultingAr float64 - for _, th := range thresholds { - chance = th.cumulativeChance - chance - resultingAr += chance * 0.1 * float64(th.bracket) - if th.cumulativeChance >= 1 { + for bin, th := range thresholds { + chance := max(min(1.0 - th - cumulativeChance, 1.0), 0.0) + resultingAr += chance * 0.25 * float64(bin) + cumulativeChance += chance + if cumulativeChance >= 1 { break } - chance = th.cumulativeChance } - expectedAr := float64(resist) / (510 + float64(resist)) + resistanceScore := attackTable.Defender.resistCoeff(SpellSchoolFire, attackTable.Attacker, false, false) + expectedAr := 0.75 * resistanceScore - 3.0 / 16.0 * max(0.0, resistanceScore - 2.0 / 3.0) - if math.Abs(resultingAr-expectedAr) > 1e-9 { - t.Errorf("resist = %d, thresholds = %s, resultingAr = %.2f%%, expectedAr = %.2f%%", resist, thresholds, resultingAr, expectedAr) + if math.Abs(resultingAr-expectedAr) > 1e-2 { + t.Errorf("resist = %d, thresholds = (%.2f, %.2f, %.2f), resultingAr = %.2f%%, expectedAr = %.2f%%", resist, threshold00, threshold25, threshold50, resultingAr * 100, expectedAr * 100) return } - const n = 1_000 + const n = 10_000 outcomes := make(map[HitOutcome]int, n) var totalDamage float64 diff --git a/sim/core/stats/stats.go b/sim/core/stats/stats.go index a93887bef7..e9a2cc9b2b 100644 --- a/sim/core/stats/stats.go +++ b/sim/core/stats/stats.go @@ -190,6 +190,8 @@ func (s Stat) StatName() string { return "ArcaneResistance" case WeaponSkill: return "WeaponSkill" + case FeralAttackPower: + return "FeralAttackPower" } return "none" diff --git a/sim/core/test_generators.go b/sim/core/test_generators.go index adb2a21101..715b6720ee 100644 --- a/sim/core/test_generators.go +++ b/sim/core/test_generators.go @@ -3,6 +3,7 @@ package core import ( "fmt" "slices" + "strconv" "strings" "github.com/wowsims/sod/sim/core/proto" @@ -104,6 +105,7 @@ type EncounterCombo struct { type SettingsCombos struct { Class proto.Class Races []proto.Race + Levels []int32 GearSets []GearSetCombo TalentSets []TalentsCombo SpecOptions []SpecOptionsCombo @@ -116,7 +118,7 @@ type SettingsCombos struct { } func (combos *SettingsCombos) NumTests() int { - return len(combos.Races) * len(combos.GearSets) * len(combos.TalentSets) * len(combos.SpecOptions) * len(combos.Buffs) * len(combos.Encounters) * max(1, len(combos.Rotations)) + return len(combos.Races) * len(combos.Levels) * len(combos.GearSets) * len(combos.TalentSets) * len(combos.SpecOptions) * len(combos.Buffs) * len(combos.Encounters) * max(1, len(combos.Rotations)) } func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsRequest, *proto.StatWeightsRequest, *proto.RaidSimRequest) { @@ -127,6 +129,11 @@ func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsR race := combos.Races[raceIdx] testNameParts = append(testNameParts, race.String()[4:]) + levelIdx := testIdx % len(combos.Levels) + testIdx /= len(combos.Levels) + level := combos.Levels[levelIdx] + testNameParts = append(testNameParts, strconv.Itoa(int(level))) + gearSetIdx := testIdx % len(combos.GearSets) testIdx /= len(combos.GearSets) gearSetCombo := combos.GearSets[gearSetIdx] @@ -164,6 +171,7 @@ func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsR Raid: SinglePlayerRaidProto( WithSpec(&proto.Player{ Race: race, + Level: level, Class: combos.Class, Equipment: gearSetCombo.GearSet, TalentsString: talentSetCombo.Talents, @@ -380,6 +388,7 @@ type CharacterSuiteConfig struct { Class proto.Class Race proto.Race + Level int32 GearSet GearSetCombo SpecOptions SpecOptionsCombo Talents string @@ -392,6 +401,7 @@ type CharacterSuiteConfig struct { InFrontOfTarget bool OtherRaces []proto.Race + OtherLevels []int32 OtherGearSets []GearSetCombo OtherSpecOptions []SpecOptionsCombo OtherRotations []RotationCombo @@ -405,6 +415,8 @@ type CharacterSuiteConfig struct { } func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator { + config.Level = max(config.Level, 25) + allLevels := append(config.OtherLevels, config.Level) allRaces := append(config.OtherRaces, config.Race) allGearSets := append(config.OtherGearSets, config.GearSet) allTalentSets := []TalentsCombo{{ @@ -417,6 +429,7 @@ func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator defaultPlayer := WithSpec( &proto.Player{ Class: config.Class, + Level: config.Level, Race: config.Race, Equipment: config.GearSet.GearSet, Consumes: config.Consumes, @@ -457,6 +470,7 @@ func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator generator: &SettingsCombos{ Class: config.Class, Races: allRaces, + Levels: allLevels, GearSets: allGearSets, TalentSets: allTalentSets, SpecOptions: allSpecOptions, diff --git a/sim/druid/balance/TestBalance.results b/sim/druid/balance/TestBalance.results index c5a194a0ab..ee3ef89a4d 100644 --- a/sim/druid/balance/TestBalance.results +++ b/sim/druid/balance/TestBalance.results @@ -1,11 +1,11 @@ character_stats_results: { key: "TestBalance-CharacterStats-Default" value: { - final_stats: 105.435 - final_stats: 84.645 - final_stats: 103.95 - final_stats: 142.56 - final_stats: 166.32 + final_stats: 75.24 + final_stats: 36.74 + final_stats: 76.34 + final_stats: 59.84 + final_stats: 63.14 final_stats: 0 final_stats: 0 final_stats: 0 @@ -13,30 +13,31 @@ character_stats_results: { final_stats: 0 final_stats: 0 final_stats: 0 + final_stats: 18 final_stats: 0 + final_stats: 7.71421 final_stats: 0 - final_stats: 5.70686 final_stats: 0 + final_stats: 271.48 final_stats: 0 - final_stats: 104 + final_stats: 7.66585 final_stats: 0 - final_stats: 10.4755 final_stats: 0 final_stats: 0 + final_stats: 1096.6 final_stats: 0 - final_stats: 2822.4 final_stats: 0 + final_stats: 1133.98 final_stats: 0 - final_stats: 1088.04 final_stats: 0 final_stats: 0 final_stats: 0 + final_stats: 10.59655 final_stats: 0 final_stats: 0 + final_stats: 917.3 final_stats: 0 final_stats: 0 - final_stats: 2227.65 - final_stats: 0 final_stats: 0 final_stats: 0 final_stats: 0 @@ -47,32 +48,48 @@ character_stats_results: { final_stats: 0 } } +dps_results: { + key: "TestBalance-AllItems-BlackfathomElementalist'sHide" + value: {} +} +dps_results: { + key: "TestBalance-AllItems-BlackfathomSlayer'sLeather" + value: {} +} +dps_results: { + key: "TestBalance-AllItems-StormshroudArmor" + value: {} +} +dps_results: { + key: "TestBalance-AllItems-TwilightInvoker'sVestments" + value: {} +} dps_results: { key: "TestBalance-Average-Default" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-FullBuffs-LongMultiTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-FullBuffs-LongMultiTarget" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-FullBuffs-LongSingleTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-FullBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-FullBuffs-ShortSingleTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-FullBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-NoBuffs-LongMultiTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-NoBuffs-LongMultiTarget" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-NoBuffs-LongSingleTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-NoBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestBalance-Settings-Tauren-blank-Default-default-NoBuffs-ShortSingleTarget" + key: "TestBalance-Settings-Tauren-25-blank-Default-default-NoBuffs-ShortSingleTarget" value: {} } dps_results: { diff --git a/sim/druid/feral/TestFeral.results b/sim/druid/feral/TestFeral.results new file mode 100644 index 0000000000..548bb8dc68 --- /dev/null +++ b/sim/druid/feral/TestFeral.results @@ -0,0 +1,218 @@ +character_stats_results: { + key: "TestFeral-CharacterStats-Default" + value: { + final_stats: 128.04 + final_stats: 125.84 + final_stats: 152.24 + final_stats: 75.24 + final_stats: 87.34 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 18 + final_stats: 2 + final_stats: 8.46419 + final_stats: 0 + final_stats: 0 + final_stats: 693.42 + final_stats: 2 + final_stats: 22.7986 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1327.6 + final_stats: 0 + final_stats: 0 + final_stats: 2057.18 + final_stats: 32 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 36.29478 + final_stats: 0 + final_stats: 0 + final_stats: 1676.3 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 10 + final_stats: 130 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 59 + } +} +dps_results: { + key: "TestFeral-AllItems-BlackfathomElementalist'sHide" + value: { + dps: 16.54052 + tps: 11.86849 + } +} +dps_results: { + key: "TestFeral-AllItems-BlackfathomSlayer'sLeather" + value: { + dps: 18.02845 + tps: 12.93859 + } +} +dps_results: { + key: "TestFeral-AllItems-StormshroudArmor" + value: { + dps: 16.97824 + tps: 12.05455 + } +} +dps_results: { + key: "TestFeral-AllItems-TwilightInvoker'sVestments" + value: { + dps: 16.4049 + tps: 11.77156 + } +} +dps_results: { + key: "TestFeral-Average-Default" + value: { + dps: 17.33308 + tps: 12.41029 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-FullBuffs-LongMultiTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-FullBuffs-LongSingleTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-FullBuffs-ShortSingleTarget" + value: { + dps: 16.72466 + tps: 12.40297 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-NoBuffs-LongMultiTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-NoBuffs-LongSingleTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-NoBleed-default-NoBuffs-ShortSingleTarget" + value: { + dps: 10.1973 + tps: 7.55955 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-FullBuffs-LongMultiTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-FullBuffs-LongSingleTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-FullBuffs-ShortSingleTarget" + value: { + dps: 16.72466 + tps: 12.40297 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-NoBuffs-LongMultiTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-NoBuffs-LongSingleTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Default-default-NoBuffs-ShortSingleTarget" + value: { + dps: 10.1973 + tps: 7.55955 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-FullBuffs-LongMultiTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-FullBuffs-LongSingleTarget" + value: { + dps: 17.09264 + tps: 12.24147 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-FullBuffs-ShortSingleTarget" + value: { + dps: 16.72466 + tps: 12.40297 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-NoBuffs-LongMultiTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-NoBuffs-LongSingleTarget" + value: { + dps: 10.64098 + tps: 7.61899 + } +} +dps_results: { + key: "TestFeral-Settings-Tauren-25-p1-Flower-Aoe-default-NoBuffs-ShortSingleTarget" + value: { + dps: 10.1973 + tps: 7.55955 + } +} +dps_results: { + key: "TestFeral-SwitchInFrontOfTarget-Default" + value: { + dps: 10.87605 + tps: 7.78182 + } +} diff --git a/sim/druid/feral/TestFeralApl.results b/sim/druid/feral/TestFeralApl.results deleted file mode 100644 index 1d65d80b29..0000000000 --- a/sim/druid/feral/TestFeralApl.results +++ /dev/null @@ -1,1001 +0,0 @@ -character_stats_results: { - key: "TestFeralApl-CharacterStats-Default" - value: { - final_stats: 491.18916 - final_stats: 2188.3488 - final_stats: 2143.7493 - final_stats: 385.33968 - final_stats: 394.85424 - final_stats: 500 - final_stats: 125 - final_stats: 230 - final_stats: 1315.66126 - final_stats: 469 - final_stats: 0 - final_stats: 12469.20382 - final_stats: 230 - final_stats: 3152.25975 - final_stats: 469 - final_stats: 605 - final_stats: 220.97496 - final_stats: 8996.0952 - final_stats: 0 - final_stats: 0 - final_stats: 11142.1976 - final_stats: 3330.8 - final_stats: 0 - final_stats: 0 - final_stats: 0 - final_stats: 2069.58472 - final_stats: 0 - final_stats: 0 - final_stats: 29045.343 - final_stats: 75 - final_stats: 75 - final_stats: 75 - final_stats: 75 - final_stats: 130 - final_stats: 0 - final_stats: 0 - final_stats: 0 - final_stats: 0 - final_stats: 0 - final_stats: 0 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Althor'sAbacus-50359" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Althor'sAbacus-50366" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-AshtongueTalismanofEquilibrium-32486" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-AustereEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Bandit'sInsignia-40371" - value: { - dps: 11248.49036 - tps: 8050.37075 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BaubleofTrueBlood-50354" - value: { - dps: 11053.60972 - tps: 7912.37943 - hps: 91.80479 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BaubleofTrueBlood-50726" - value: { - dps: 11053.60972 - tps: 7912.37943 - hps: 91.80479 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BeamingEarthsiegeDiamond" - value: { - dps: 11358.03239 - tps: 8128.96825 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BlessedRegaliaofUndeadCleansing" - value: { - dps: 8537.20531 - tps: 6123.93742 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BracingEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 7946.74064 - } -} -dps_results: { - key: "TestFeralApl-AllItems-BrutalGladiator'sIdolofResolve-35019" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ChaoticSkyflareDiamond" - value: { - dps: 11636.61367 - tps: 8326.76096 - } -} -dps_results: { - key: "TestFeralApl-AllItems-CorpseTongueCoin-50349" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-CorpseTongueCoin-50352" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-CorrodedSkeletonKey-50356" - value: { - dps: 11053.60972 - tps: 7912.37943 - hps: 64 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DarkmoonCard:Berserker!-42989" - value: { - dps: 11207.15399 - tps: 8021.54544 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DarkmoonCard:Death-42990" - value: { - dps: 11241.28004 - tps: 8045.70015 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DarkmoonCard:Greatness-44255" - value: { - dps: 11267.77139 - tps: 8064.73336 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DeadlyGladiator'sIdolofResolve-42588" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Death'sChoice-47464" - value: { - dps: 11643.19767 - tps: 8331.36081 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DeathKnight'sAnguish-38212" - value: { - dps: 11176.20694 - tps: 7999.64782 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Deathbringer'sWill-50362" - value: { - dps: 11708.8537 - tps: 8377.75223 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Deathbringer'sWill-50363" - value: { - dps: 11793.77979 - tps: 8437.97497 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Defender'sCode-40257" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DestructiveSkyflareDiamond" - value: { - dps: 11363.042 - tps: 8132.52508 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DislodgedForeignObject-50348" - value: { - dps: 11288.14404 - tps: 8079.04838 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DislodgedForeignObject-50353" - value: { - dps: 11255.35203 - tps: 8055.76605 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DreamwalkerBattlegear" - value: { - dps: 9334.4757 - tps: 6689.47589 - } -} -dps_results: { - key: "TestFeralApl-AllItems-DreamwalkerGarb" - value: { - dps: 8061.34952 - tps: 5787.72512 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EffulgentSkyflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EmberSkyflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EnigmaticSkyflareDiamond" - value: { - dps: 11358.03239 - tps: 8128.96825 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EnigmaticStarflareDiamond" - value: { - dps: 11355.9468 - tps: 8127.48748 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EphemeralSnowflake-50260" - value: { - dps: 11158.43371 - tps: 7987.10362 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EssenceofGossamer-37220" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EternalEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ExtractofNecromanticPower-40373" - value: { - dps: 11241.55637 - tps: 8045.97113 - } -} -dps_results: { - key: "TestFeralApl-AllItems-EyeoftheBroodmother-45308" - value: { - dps: 11191.08291 - tps: 8010.20976 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Figurine-SapphireOwl-42413" - value: { - dps: 11055.18415 - tps: 7913.57207 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ForethoughtTalisman-40258" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ForgeEmber-37660" - value: { - dps: 11154.5414 - tps: 7984.1905 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ForlornSkyflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ForlornStarflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-FuriousGladiator'sIdolofResolve-42589" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-FuryoftheFiveFlights-40431" - value: { - dps: 11302.86472 - tps: 8089.35049 - } -} -dps_results: { - key: "TestFeralApl-AllItems-FuturesightRune-38763" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Gladiator'sSanctuary" - value: { - dps: 9909.88676 - tps: 7098.3169 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Gladiator'sWildhide" - value: { - dps: 8154.68889 - tps: 5852.64991 - } -} -dps_results: { - key: "TestFeralApl-AllItems-GlowingTwilightScale-54573" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-GlowingTwilightScale-54589" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-GnomishLightningGenerator-41121" - value: { - dps: 11219.07548 - tps: 8029.86012 - } -} -dps_results: { - key: "TestFeralApl-AllItems-HatefulGladiator'sIdolofResolve-42587" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Heartpierce-49982" - value: { - dps: 11789.48721 - tps: 8434.47852 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Heartpierce-50641" - value: { - dps: 11830.14865 - tps: 8463.12378 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdolofLunarFury-47670" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheCorruptor-45509" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheCryingMoon-50456" - value: { - dps: 11667.30393 - tps: 8348.55104 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheLunarEclipse-50457" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheRavenGoddess-32387" - value: { - dps: 11366.53967 - tps: 8134.63448 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheUnseenMoon-33510" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IdoloftheWhiteStag-32257" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IllustrationoftheDragonSoul-40432" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ImpassiveSkyflareDiamond" - value: { - dps: 11358.03239 - tps: 8128.96825 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ImpassiveStarflareDiamond" - value: { - dps: 11355.9468 - tps: 8127.48748 - } -} -dps_results: { - key: "TestFeralApl-AllItems-IncisorFragment-37723" - value: { - dps: 11277.19978 - tps: 8071.12837 - } -} -dps_results: { - key: "TestFeralApl-AllItems-InsightfulEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-InvigoratingEarthsiegeDiamond" - value: { - dps: 11363.08137 - tps: 8132.25388 - hps: 15.15199 - } -} -dps_results: { - key: "TestFeralApl-AllItems-LasherweaveBattlegear" - value: { - dps: 11977.08455 - tps: 8565.42903 - } -} -dps_results: { - key: "TestFeralApl-AllItems-LasherweaveRegalia" - value: { - dps: 8709.80854 - tps: 6250.97292 - } -} -dps_results: { - key: "TestFeralApl-AllItems-LastWord-50179" - value: { - dps: 11839.93551 - tps: 8471.04468 - } -} -dps_results: { - key: "TestFeralApl-AllItems-LastWord-50708" - value: { - dps: 11868.42688 - tps: 8491.27355 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Lavanthor'sTalisman-37872" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-MajesticDragonFigurine-40430" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Malfurion'sBattlegear" - value: { - dps: 9908.75917 - tps: 7100.80692 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Malfurion'sRegalia" - value: { - dps: 8110.50895 - tps: 5824.72234 - } -} -dps_results: { - key: "TestFeralApl-AllItems-MeteoriteWhetstone-37390" - value: { - dps: 11292.65748 - tps: 8082.25291 - } -} -dps_results: { - key: "TestFeralApl-AllItems-NevermeltingIceCrystal-50259" - value: { - dps: 11211.2675 - tps: 8024.39125 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Nibelung-49992" - value: { - dps: 11649.3486 - tps: 8335.72797 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Nibelung-50648" - value: { - dps: 11649.3486 - tps: 8335.72797 - } -} -dps_results: { - key: "TestFeralApl-AllItems-NightsongBattlegear" - value: { - dps: 9828.09234 - tps: 7040.91593 - } -} -dps_results: { - key: "TestFeralApl-AllItems-NightsongGarb" - value: { - dps: 7966.22848 - tps: 5723.03107 - } -} -dps_results: { - key: "TestFeralApl-AllItems-OfferingofSacrifice-37638" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PersistentEarthshatterDiamond" - value: { - dps: 11356.82118 - tps: 8127.80914 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PersistentEarthsiegeDiamond" - value: { - dps: 11363.08137 - tps: 8132.25388 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PetrifiedScarab-21685" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PetrifiedTwilightScale-54571" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PetrifiedTwilightScale-54591" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PowerfulEarthshatterDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PowerfulEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-PurifiedShardoftheGods" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ReignoftheDead-47316" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ReignoftheDead-47477" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-RelentlessEarthsiegeDiamond" - value: { - dps: 11649.3486 - tps: 8335.72797 - } -} -dps_results: { - key: "TestFeralApl-AllItems-RelentlessGladiator'sIdolofResolve-42591" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-RevitalizingSkyflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-RuneofRepulsion-40372" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SavageGladiator'sIdolofResolve-42574" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SealofthePantheon-36993" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ShinyShardoftheGods" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Sindragosa'sFlawlessFang-50361" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SliverofPureIce-50339" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SliverofPureIce-50346" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SoulPreserver-37111" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SouloftheDead-40382" - value: { - dps: 11197.94961 - tps: 8015.08512 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SparkofLife-37657" - value: { - dps: 11089.23564 - tps: 7937.97298 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SphereofRedDragon'sBlood-37166" - value: { - dps: 11192.80555 - tps: 8012.92857 - } -} -dps_results: { - key: "TestFeralApl-AllItems-StormshroudArmor" - value: { - dps: 8657.35313 - tps: 6208.34494 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SwiftSkyflareDiamond" - value: { - dps: 11363.08137 - tps: 8132.25388 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SwiftStarflareDiamond" - value: { - dps: 11356.82118 - tps: 8127.80914 - } -} -dps_results: { - key: "TestFeralApl-AllItems-SwiftWindfireDiamond" - value: { - dps: 11345.86585 - tps: 8120.03086 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TalismanofTrollDivinity-37734" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TearsoftheVanquished-47215" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TheGeneral'sHeart-45507" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ThunderheartHarness" - value: { - dps: 7544.14508 - tps: 5414.60182 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ThunderheartRegalia" - value: { - dps: 6621.13152 - tps: 4760.68314 - } -} -dps_results: { - key: "TestFeralApl-AllItems-ThunderingSkyflareDiamond" - value: { - dps: 11412.94075 - tps: 8167.95319 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TinyAbominationinaJar-50351" - value: { - dps: 11275.27345 - tps: 8072.37822 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TinyAbominationinaJar-50706" - value: { - dps: 11293.68902 - tps: 8085.45327 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TirelessSkyflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TirelessStarflareDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TomeofArcanePhenomena-36972" - value: { - dps: 11116.67174 - tps: 7957.15347 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TrenchantEarthshatterDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-TrenchantEarthsiegeDiamond" - value: { - dps: 11330.21537 - tps: 8108.91902 - } -} -dps_results: { - key: "TestFeralApl-AllItems-UndeadSlayer'sBlessedArmor" - value: { - dps: 8891.77212 - tps: 6375.67986 - } -} -dps_results: { - key: "TestFeralApl-AllItems-Val'anyr,HammerofAncientKings-46017" - value: { - dps: 8723.65591 - tps: 6258.48616 - } -} -dps_results: { - key: "TestFeralApl-AllItems-VengefulGladiator'sIdolofResolve-33947" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-AllItems-WingedTalisman-37844" - value: { - dps: 11053.60972 - tps: 7912.37943 - } -} -dps_results: { - key: "TestFeralApl-AllItems-WrathfulGladiator'sIdolofResolve-51429" - value: { - dps: 11300.78539 - tps: 8088.02373 - } -} -dps_results: { - key: "TestFeralApl-Average-Default" - value: { - dps: 11615.83238 - tps: 8311.65236 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-FullBuffs-LongMultiTarget" - value: { - dps: 11649.3486 - tps: 8335.72797 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-FullBuffs-LongSingleTarget" - value: { - dps: 11649.3486 - tps: 8335.72797 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-FullBuffs-ShortSingleTarget" - value: { - dps: 13479.0228 - tps: 9623.57866 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-NoBuffs-LongMultiTarget" - value: { - dps: 7188.97313 - tps: 5167.29087 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-NoBuffs-LongSingleTarget" - value: { - dps: 7188.97313 - tps: 5167.29087 - } -} -dps_results: { - key: "TestFeralApl-Settings-Tauren-p3-Default-default-NoBuffs-ShortSingleTarget" - value: { - dps: 7838.43339 - tps: 5618.76017 - } -} -dps_results: { - key: "TestFeralApl-SwitchInFrontOfTarget-Default" - value: { - dps: 9085.46642 - tps: 6513.27759 - } -} diff --git a/sim/druid/feral/feral_test.go b/sim/druid/feral/feral_test.go index 366424b129..e20bc675fa 100644 --- a/sim/druid/feral/feral_test.go +++ b/sim/druid/feral/feral_test.go @@ -39,6 +39,7 @@ func TestFeral(t *testing.T) { {Label: "Default-NoBleed", SpecOptions: PlayerOptionsMonoCatNoBleed}, {Label: "Flower-Aoe", SpecOptions: PlayerOptionsFlowerCatAoe}, }, + Rotation: core.GetAplRotation("../../../ui/feral_druid/apls", "default"), ItemFilter: FeralItemFilter, })) } diff --git a/sim/druid/feral/rotation.go b/sim/druid/feral/rotation.go index 85b97e76e1..27ec3b6aec 100644 --- a/sim/druid/feral/rotation.go +++ b/sim/druid/feral/rotation.go @@ -9,11 +9,11 @@ import ( ) type FeralDruidRotation struct { - // RotationType proto.FeralDruid_Rotation_AplType - + PrimaryBuilder *druid.DruidSpell MinCombosForRip int32 MaxWaitTime time.Duration MaintainFaerieFire bool + UseSavageRoar bool UseShredTrick bool UseRipTrick bool } @@ -94,12 +94,19 @@ func (cat *FeralDruid) timeToCast(numSpecials int32) time.Duration { return core.DurationFromSeconds(numPowershiftedSpecials*2.0 + numOomSpecials*4.0) } -func (cat *FeralDruid) canRip(sim *core.Simulation, isTrick bool) bool { +func (cat *FeralDruid) canRip(sim *core.Simulation, isTrick bool, usingRoar bool) bool { if cat.Rip.CurDot().IsActive() { return false } // Allow Rip if conservative napkin math estimate says that we can cast the Rip and then build 5 Combo Points in time before the current Savage Roar expires. - roarDur := cat.SavageRoarAura.RemainingDuration(sim) + var roarDur time.Duration + + if usingRoar { + roarDur = cat.SavageRoarAura.RemainingDuration(sim) + } else { + roarDur = core.NeverExpires + } + fightDur := sim.GetRemainingDuration() remainingFightTimeAfterRoar := fightDur - roarDur @@ -261,7 +268,7 @@ func (cat *FeralDruid) doRotation(sim *core.Simulation) (bool, time.Duration) { numShiftsToOom := cat.numShiftsRemaining() fightDur := sim.GetRemainingDuration() shredCost := cat.Shred.DefaultCast.Cost - mangleCost := cat.MangleCat.DefaultCast.Cost + mangleCost := rotation.PrimaryBuilder.DefaultCast.Cost ripCost := cat.Rip.DefaultCast.Cost // First determine the next special ability we want to cast @@ -271,23 +278,23 @@ func (cat *FeralDruid) doRotation(sim *core.Simulation) (bool, time.Duration) { var nextAbility *druid.DruidSpell - if curCp >= 1 && !hasRoar { + if rotation.UseSavageRoar && curCp >= 1 && !hasRoar { nextAbility = cat.SavageRoar } else if isClearcast { nextAbility = cat.Shred - } else if (curCp >= rotation.MinCombosForRip || canRipTrick) && cat.canRip(sim, canRipTrick) { + } else if (curCp >= rotation.MinCombosForRip || canRipTrick) && cat.canRip(sim, canRipTrick, rotation.UseSavageRoar) { nextAbility = cat.Rip - } else if curCp >= 1 && cat.clipRoar(sim) { + } else if rotation.UseSavageRoar && curCp >= 1 && cat.clipRoar(sim) { nextAbility = cat.SavageRoar } else if canShredTrick { nextAbility = cat.Shred } else { - nextAbility = cat.MangleCat + nextAbility = rotation.PrimaryBuilder } // Then determine whether to cast vs. wait vs. shift waitForWildStrikesProc := (cat.WildStrikesBuffAura != nil) && !cat.WildStrikesBuffAura.IsActive() - poolEnergy := poolMana && ((curCp == 5) || waitForWildStrikesProc) && (nextEnergy < 100) && (nextAbility == cat.MangleCat) + poolEnergy := poolMana && ((curCp == 5) || waitForWildStrikesProc) && (nextEnergy < 100) && (nextAbility == rotation.PrimaryBuilder) nextAction := sim.CurrentTime if nextAbility.CanCast(sim, cat.CurrentTarget) && !poolEnergy { @@ -748,10 +755,22 @@ type FeralDruidRotation struct { */ func (cat *FeralDruid) setupRotation(config *proto.APLActionCatOptimalRotationAction) { + var primaryBuilder *druid.DruidSpell + + if cat.MangleCat != nil { + primaryBuilder = cat.MangleCat + } else { + primaryBuilder = cat.Shred + } + + knowsRoar := cat.SavageRoar != nil + cat.Rotation = FeralDruidRotation{ + PrimaryBuilder: primaryBuilder, MinCombosForRip: config.MinCombosForRip, MaxWaitTime: core.DurationFromSeconds(float64(config.MaxWaitTime)), MaintainFaerieFire: config.MaintainFaerieFire, + UseSavageRoar: knowsRoar, UseShredTrick: config.UseShredTrick, UseRipTrick: false, } diff --git a/sim/priest/shadow/TestShadow.results b/sim/priest/shadow/TestShadow.results index 6c100af99d..c64c3b90f2 100644 --- a/sim/priest/shadow/TestShadow.results +++ b/sim/priest/shadow/TestShadow.results @@ -1,11 +1,11 @@ character_stats_results: { key: "TestShadow-CharacterStats-Default" value: { - final_stats: 34.1 - final_stats: 41.8 - final_stats: 59.488 - final_stats: 129.8 - final_stats: 143 + final_stats: 57.64 + final_stats: 32.34 + final_stats: 71.3856 + final_stats: 69.74 + final_stats: 71.94 final_stats: 0 final_stats: 0 final_stats: 0 @@ -13,30 +13,31 @@ character_stats_results: { final_stats: 0 final_stats: 0 final_stats: 0 + final_stats: 18 final_stats: 0 + final_stats: 7.40556 final_stats: 0 - final_stats: 5.0163 final_stats: 0 + final_stats: 131 final_stats: 0 + final_stats: 6 final_stats: 0 final_stats: 0 - final_stats: 6.1765 final_stats: 0 + final_stats: 1263.1 final_stats: 0 final_stats: 0 - final_stats: 2763 + final_stats: 1125.18 final_stats: 0 final_stats: 0 - final_stats: 1002.35 final_stats: 0 final_stats: 0 final_stats: 0 final_stats: 0 final_stats: 0 + final_stats: 835.856 final_stats: 0 final_stats: 0 - final_stats: 1631.88 - final_stats: 0 final_stats: 0 final_stats: 0 final_stats: 0 @@ -48,151 +49,59 @@ character_stats_results: { } } dps_results: { - key: "TestShadow-Average-Default" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-FullBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-FullBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-FullBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-NoBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-NoBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-APL-default-NoBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-FullBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-FullBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-FullBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-NoBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-NoBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-Draenei-blank-Basic-default-NoBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-FullBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-FullBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-FullBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-NoBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-NoBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-APL-default-NoBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-FullBuffs-LongMultiTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-FullBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-FullBuffs-ShortSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-NoBuffs-LongMultiTarget" + key: "TestShadow-AllItems-TwilightInvoker'sVestments" value: {} } dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-NoBuffs-LongSingleTarget" - value: {} -} -dps_results: { - key: "TestShadow-Settings-NightElf-blank-Basic-default-NoBuffs-ShortSingleTarget" + key: "TestShadow-Average-Default" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-FullBuffs-LongMultiTarget" + key: "TestShadow-Settings-NightElf-25-blank-APL-default-FullBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-FullBuffs-LongSingleTarget" + key: "TestShadow-Settings-NightElf-25-blank-APL-default-NoBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-FullBuffs-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-25-blank-APL-default-NoBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-NoBuffs-LongMultiTarget" + key: "TestShadow-Settings-NightElf-25-blank-Basic-default-FullBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-NoBuffs-LongSingleTarget" + key: "TestShadow-Settings-NightElf-25-blank-Basic-default-NoBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-APL-default-NoBuffs-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-25-blank-Basic-default-NoBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-FullBuffs-LongMultiTarget" + key: "TestShadow-Settings-Undead-25-blank-APL-default-FullBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-FullBuffs-LongSingleTarget" + key: "TestShadow-Settings-Undead-25-blank-APL-default-NoBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-FullBuffs-ShortSingleTarget" + key: "TestShadow-Settings-Undead-25-blank-APL-default-NoBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-NoBuffs-LongMultiTarget" + key: "TestShadow-Settings-Undead-25-blank-Basic-default-FullBuffs-ShortSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-NoBuffs-LongSingleTarget" + key: "TestShadow-Settings-Undead-25-blank-Basic-default-NoBuffs-LongSingleTarget" value: {} } dps_results: { - key: "TestShadow-Settings-Undead-blank-Basic-default-NoBuffs-ShortSingleTarget" + key: "TestShadow-Settings-Undead-25-blank-Basic-default-NoBuffs-ShortSingleTarget" value: {} } dps_results: { diff --git a/sim/raid_test.go b/sim/raid_test.go index 7d2c42b086..edeef22af3 100644 --- a/sim/raid_test.go +++ b/sim/raid_test.go @@ -41,6 +41,8 @@ var BasicRaid = &proto.Raid{ } // Tests that we don't crash with various combinations of empty parties / blank players. +// TODO: Classic +/* func TestSparseRaid(t *testing.T) { sparseRaid := &proto.Raid{ Parties: []*proto.Party{ @@ -69,6 +71,7 @@ func TestSparseRaid(t *testing.T) { core.RunRaidSim(rsr) // Don't need to check results, as long as it doesn't crash we're fine. } +*/ func TestBasicRaid(t *testing.T) { t.Skip() diff --git a/sim/warlock/dps/TestAffliction.results b/sim/warlock/dps/TestAffliction.results new file mode 100644 index 0000000000..9bc9aa069d --- /dev/null +++ b/sim/warlock/dps/TestAffliction.results @@ -0,0 +1,110 @@ +character_stats_results: { + key: "TestAffliction-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 100.54 + final_stats: 141.24 + final_stats: 119.24 + final_stats: 245 + final_stats: 0 + final_stats: 44 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 0 + final_stats: 11.60664 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2336.6 + final_stats: 0 + final_stats: 0 + final_stats: 1418.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1104.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestAffliction-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestAffliction-Average-Default" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-AffItemSwap--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-destruction-Affliction Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/dps/TestDemonology.results b/sim/warlock/dps/TestDemonology.results new file mode 100644 index 0000000000..0bd4512d88 --- /dev/null +++ b/sim/warlock/dps/TestDemonology.results @@ -0,0 +1,128 @@ +character_stats_results: { + key: "TestDemonology-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 100.54 + final_stats: 141.24 + final_stats: 119.24 + final_stats: 245 + final_stats: 0 + final_stats: 44 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 0 + final_stats: 11.60664 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2336.6 + final_stats: 0 + final_stats: 0 + final_stats: 1418.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1104.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestDemonology-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestDemonology-Average-Default" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-FullBuffs-LongMultiTarget" + value: { + dps: 183.07249 + tps: 448.83249 + } +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-FullBuffs-LongSingleTarget" + value: { + dps: 147.23652 + tps: 160.52452 + } +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-FullBuffs-ShortSingleTarget" + value: { + dps: 170.0934 + tps: 174.12006 + } +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-NoBuffs-LongMultiTarget" + value: { + dps: 98.94392 + tps: 359.53059 + } +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-NoBuffs-LongSingleTarget" + value: { + dps: 72.57656 + tps: 85.6059 + } +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destruction-Demonology Warlock-destruction-NoBuffs-ShortSingleTarget" + value: { + dps: 91.49857 + tps: 97.31523 + } +} +dps_results: { + key: "TestDemonology-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/dps/TestDestruction.results b/sim/warlock/dps/TestDestruction.results new file mode 100644 index 0000000000..5a2e73fbe5 --- /dev/null +++ b/sim/warlock/dps/TestDestruction.results @@ -0,0 +1,128 @@ +character_stats_results: { + key: "TestDestruction-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 100.54 + final_stats: 141.24 + final_stats: 119.24 + final_stats: 245 + final_stats: 0 + final_stats: 44 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 0 + final_stats: 11.60664 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 0 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2336.6 + final_stats: 0 + final_stats: 0 + final_stats: 1418.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1104.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestDestruction-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestDestruction-Average-Default" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-FullBuffs-LongMultiTarget" + value: { + dps: 183.07249 + tps: 448.83249 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-FullBuffs-LongSingleTarget" + value: { + dps: 147.23652 + tps: 160.52452 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-FullBuffs-ShortSingleTarget" + value: { + dps: 170.0934 + tps: 174.12006 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-NoBuffs-LongMultiTarget" + value: { + dps: 98.94392 + tps: 359.53059 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-NoBuffs-LongSingleTarget" + value: { + dps: 72.57656 + tps: 85.6059 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destruction-Destruction Warlock-destruction-NoBuffs-ShortSingleTarget" + value: { + dps: 91.49857 + tps: 97.31523 + } +} +dps_results: { + key: "TestDestruction-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/dps/dps_warlock_test.go b/sim/warlock/dps/dps_warlock_test.go index 9df18a7ed5..db59596c25 100644 --- a/sim/warlock/dps/dps_warlock_test.go +++ b/sim/warlock/dps/dps_warlock_test.go @@ -17,7 +17,7 @@ func TestAffliction(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_affliction"), + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets", "destruction"), Talents: AfflictionTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Affliction Warlock", SpecOptions: DefaultAfflictionWarlock}, @@ -34,12 +34,12 @@ func TestDemonology(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_demo"), + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets", "destruction"), Talents: DemonologyTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Demonology Warlock", SpecOptions: DefaultDemonologyWarlock}, OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../ui/warlock/apls", "demo"), + core.GetAplRotation("../../../ui/warlock/apls", "destruction"), }, ItemFilter: ItemFilter, @@ -51,12 +51,12 @@ func TestDestruction(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_destro"), + GearSet: core.GetGearSet("../../../ui/warlock/gear_sets", "destruction"), Talents: DestructionTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Destruction Warlock", SpecOptions: DefaultDestroWarlock}, OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../ui/warlock/apls", "destro"), + core.GetAplRotation("../../../ui/warlock/apls", "destruction"), }, ItemFilter: ItemFilter, })) @@ -76,9 +76,9 @@ var ItemFilter = core.ItemFilter{ }, } -var AfflictionTalents = "2350002030023510253500331151--550000051" -var DemonologyTalents = "-203203301035012530135201351-550000052" -var DestructionTalents = "-03310030003-05203205210331051335230351" +var AfflictionTalents = "05--50500001" +var DemonologyTalents = "-13-05502001" +var DestructionTalents = "-13-05502001" var defaultDestroOptions = &proto.WarlockOptions{ Armor: proto.WarlockOptions_DemonArmor, diff --git a/sim/warlock/tank/TestAffliction.results b/sim/warlock/tank/TestAffliction.results new file mode 100644 index 0000000000..b7665e3087 --- /dev/null +++ b/sim/warlock/tank/TestAffliction.results @@ -0,0 +1,194 @@ +character_stats_results: { + key: "TestAffliction-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 143.451 + final_stats: 144.54 + final_stats: 118.503 + final_stats: 258 + final_stats: 0 + final_stats: 22 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 1 + final_stats: 11.76801 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 1 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2386.1 + final_stats: 0 + final_stats: 0 + final_stats: 1425.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1533.51 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestAffliction-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestAffliction-Average-Default" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-FullBuffs-LongMultiTarget" + value: { + dps: 167.28966 + tps: 578.5179 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-FullBuffs-LongSingleTarget" + value: { + dps: 113.51915 + tps: 170.14875 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-FullBuffs-ShortSingleTarget" + value: { + dps: 117.63789 + tps: 170.74929 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-NoBuffs-LongMultiTarget" + value: { + dps: 107.17941 + tps: 517.71481 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-NoBuffs-LongSingleTarget" + value: { + dps: 68.78945 + tps: 103.89169 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-AffItemSwap-affi.tank-NoBuffs-ShortSingleTarget" + value: { + dps: 71.71283 + tps: 103.25802 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-FullBuffs-LongMultiTarget" + value: { + dps: 167.28966 + tps: 578.5179 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-FullBuffs-LongSingleTarget" + value: { + dps: 113.51915 + tps: 170.14875 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-FullBuffs-ShortSingleTarget" + value: { + dps: 117.63789 + tps: 170.74929 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-NoBuffs-LongMultiTarget" + value: { + dps: 107.17941 + tps: 517.71481 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-NoBuffs-LongSingleTarget" + value: { + dps: 68.78945 + tps: 103.89169 + } +} +dps_results: { + key: "TestAffliction-Settings-Orc-25-affi.tank-Affliction Warlock-affi.tank-NoBuffs-ShortSingleTarget" + value: { + dps: 71.71283 + tps: 103.25802 + } +} +dps_results: { + key: "TestAffliction-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/tank/TestDemonology.results b/sim/warlock/tank/TestDemonology.results new file mode 100644 index 0000000000..82177fe7fa --- /dev/null +++ b/sim/warlock/tank/TestDemonology.results @@ -0,0 +1,86 @@ +character_stats_results: { + key: "TestDemonology-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 143.451 + final_stats: 144.54 + final_stats: 118.503 + final_stats: 258 + final_stats: 0 + final_stats: 22 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 1 + final_stats: 11.76801 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 1 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2386.1 + final_stats: 0 + final_stats: 0 + final_stats: 1425.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1533.51 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestDemonology-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestDemonology-Average-Default" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-Settings-Orc-25-destro.tank-Demonology Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDemonology-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/tank/TestDestruction.results b/sim/warlock/tank/TestDestruction.results new file mode 100644 index 0000000000..8340605130 --- /dev/null +++ b/sim/warlock/tank/TestDestruction.results @@ -0,0 +1,128 @@ +character_stats_results: { + key: "TestDestruction-CharacterStats-Default" + value: { + final_stats: 77.44 + final_stats: 36.74 + final_stats: 143.451 + final_stats: 144.54 + final_stats: 118.503 + final_stats: 258 + final_stats: 0 + final_stats: 22 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 20 + final_stats: 1 + final_stats: 11.76801 + final_stats: 0 + final_stats: 10 + final_stats: 208.44 + final_stats: 1 + final_stats: 5 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 2386.1 + final_stats: 0 + final_stats: 0 + final_stats: 1425.98 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1533.51 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 15 + final_stats: 21 + final_stats: 9 + final_stats: 9 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestDestruction-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestDestruction-Average-Default" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--FullBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--FullBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--NoBuffs-LongMultiTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-FullBuffs-LongMultiTarget" + value: { + dps: 105.69079 + tps: 530.68921 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-FullBuffs-LongSingleTarget" + value: { + dps: 72.43425 + tps: 176.68078 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-FullBuffs-ShortSingleTarget" + value: { + dps: 75.16322 + tps: 177.82554 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-NoBuffs-LongMultiTarget" + value: { + dps: 59.80328 + tps: 448.04074 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-NoBuffs-LongSingleTarget" + value: { + dps: 39.68099 + tps: 101.99939 + } +} +dps_results: { + key: "TestDestruction-Settings-Orc-25-destro.tank-Destruction Warlock-destro.tank-NoBuffs-ShortSingleTarget" + value: { + dps: 43.07725 + tps: 104.2374 + } +} +dps_results: { + key: "TestDestruction-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warlock/tank/tank_warlock_test.go b/sim/warlock/tank/tank_warlock_test.go index 79da171732..f87521b0b7 100644 --- a/sim/warlock/tank/tank_warlock_test.go +++ b/sim/warlock/tank/tank_warlock_test.go @@ -17,13 +17,16 @@ func TestAffliction(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_affliction"), + GearSet: core.GetGearSet("../../../ui/tank_warlock/gear_sets", "affi.tank"), Talents: AfflictionTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Affliction Warlock", SpecOptions: DefaultAfflictionWarlock}, OtherSpecOptions: []core.SpecOptionsCombo{ {Label: "AffItemSwap", SpecOptions: afflictionItemSwap}, }, + OtherRotations: []core.RotationCombo{ + core.GetAplRotation("../../../ui/tank_warlock/apls", "affi.tank"), + }, ItemFilter: ItemFilter, })) @@ -34,14 +37,10 @@ func TestDemonology(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_demo"), + GearSet: core.GetGearSet("../../../ui/tank_warlock/gear_sets", "destro.tank"), Talents: DemonologyTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Demonology Warlock", SpecOptions: DefaultDemonologyWarlock}, - OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../ui/warlock/apls", "demo"), - }, - ItemFilter: ItemFilter, })) } @@ -51,12 +50,12 @@ func TestDestruction(t *testing.T) { Class: proto.Class_ClassWarlock, Race: proto.Race_RaceOrc, - GearSet: core.GetGearSet("../../ui/warlock/gear_sets", "p4_destro"), + GearSet: core.GetGearSet("../../../ui/tank_warlock/gear_sets", "destro.tank"), Talents: DestructionTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Destruction Warlock", SpecOptions: DefaultDestroWarlock}, OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../ui/warlock/apls", "destro"), + core.GetAplRotation("../../../ui/tank_warlock/apls", "destro.tank"), }, ItemFilter: ItemFilter, })) @@ -76,9 +75,9 @@ var ItemFilter = core.ItemFilter{ }, } -var AfflictionTalents = "2350002030023510253500331151--550000051" -var DemonologyTalents = "-203203301035012530135201351-550000052" -var DestructionTalents = "-03310030003-05203205210331051335230351" +var AfflictionTalents = "05002-005" +var DemonologyTalents = "05002-005" +var DestructionTalents = "05002-005" var defaultDestroOptions = &proto.WarlockOptions{ Armor: proto.WarlockOptions_DemonArmor, @@ -86,21 +85,21 @@ var defaultDestroOptions = &proto.WarlockOptions{ WeaponImbue: proto.WarlockOptions_NoWeaponImbue, } -var DefaultDestroWarlock = &proto.Player_Warlock{ - Warlock: &proto.Warlock{ +var DefaultDestroWarlock = &proto.Player_TankWarlock{ + TankWarlock: &proto.TankWarlock{ Options: defaultDestroOptions, }, } // --------------------------------------- -var DefaultAfflictionWarlock = &proto.Player_Warlock{ - Warlock: &proto.Warlock{ +var DefaultAfflictionWarlock = &proto.Player_TankWarlock{ + TankWarlock: &proto.TankWarlock{ Options: defaultAfflictionOptions, }, } -var afflictionItemSwap = &proto.Player_Warlock{ - Warlock: &proto.Warlock{ +var afflictionItemSwap = &proto.Player_TankWarlock{ + TankWarlock: &proto.TankWarlock{ Options: defaultAfflictionOptions, }, } @@ -112,8 +111,8 @@ var defaultAfflictionOptions = &proto.WarlockOptions{ } // --------------------------------------- -var DefaultDemonologyWarlock = &proto.Player_Warlock{ - Warlock: &proto.Warlock{ +var DefaultDemonologyWarlock = &proto.Player_TankWarlock{ + TankWarlock: &proto.TankWarlock{ Options: defaultDemonologyOptions, }, } diff --git a/sim/warrior/devastate.go b/sim/warrior/devastate.go index 0d837e9537..4c2ff90413 100644 --- a/sim/warrior/devastate.go +++ b/sim/warrior/devastate.go @@ -13,7 +13,7 @@ func (warrior *Warrior) registerDevastateSpell() { dynaThreatBonus := 0.05 weaponMulti := 1.2 - overallMulti := core.TernaryFloat64(warrior.HasSetBonus(ItemSetWrynnsPlate, 2), 1.05, 1.00) + overallMulti := 1.00 warrior.Devastate = warrior.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 47498}, diff --git a/sim/warrior/dps/TestArms.results b/sim/warrior/dps/TestArms.results new file mode 100644 index 0000000000..8d506da54d --- /dev/null +++ b/sim/warrior/dps/TestArms.results @@ -0,0 +1,126 @@ +character_stats_results: { + key: "TestArms-CharacterStats-Default" + value: { + final_stats: 93.94 + final_stats: 45.54 + final_stats: 91.74 + final_stats: 35.64 + final_stats: 40.04 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 18 + final_stats: 0 + final_stats: 3 + final_stats: 0 + final_stats: 0 + final_stats: 383.88 + final_stats: 0 + final_stats: 8.05949 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1151.58 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 46.97 + final_stats: 7.41571 + final_stats: 0 + final_stats: 0 + final_stats: 1011.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestArms-AllItems-BlackfathomAvenger'sMail" + value: {} +} +dps_results: { + key: "TestArms-AllItems-BlackfathomElementalist'sHide" + value: {} +} +dps_results: { + key: "TestArms-AllItems-BlackfathomSlayer'sLeather" + value: {} +} +dps_results: { + key: "TestArms-AllItems-StormshroudArmor" + value: {} +} +dps_results: { + key: "TestArms-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestArms-Average-Default" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Human-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-Settings-Orc-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestArms-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warrior/dps/TestFury.results b/sim/warrior/dps/TestFury.results new file mode 100644 index 0000000000..71f19e4cfe --- /dev/null +++ b/sim/warrior/dps/TestFury.results @@ -0,0 +1,126 @@ +character_stats_results: { + key: "TestFury-CharacterStats-Default" + value: { + final_stats: 93.94 + final_stats: 45.54 + final_stats: 91.74 + final_stats: 35.64 + final_stats: 40.04 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 18 + final_stats: 0 + final_stats: 3 + final_stats: 0 + final_stats: 0 + final_stats: 383.88 + final_stats: 0 + final_stats: 8.05949 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1151.58 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 46.97 + final_stats: 7.41571 + final_stats: 0 + final_stats: 0 + final_stats: 1011.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + } +} +dps_results: { + key: "TestFury-AllItems-BlackfathomAvenger'sMail" + value: {} +} +dps_results: { + key: "TestFury-AllItems-BlackfathomElementalist'sHide" + value: {} +} +dps_results: { + key: "TestFury-AllItems-BlackfathomSlayer'sLeather" + value: {} +} +dps_results: { + key: "TestFury-AllItems-StormshroudArmor" + value: {} +} +dps_results: { + key: "TestFury-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestFury-Average-Default" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Human-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic--FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic--NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic--NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-Settings-Orc-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestFury-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warrior/dps/dps_warrior_test.go b/sim/warrior/dps/dps_warrior_test.go index c590f44202..d95434715d 100644 --- a/sim/warrior/dps/dps_warrior_test.go +++ b/sim/warrior/dps/dps_warrior_test.go @@ -19,12 +19,12 @@ func TestFury(t *testing.T) { OtherRaces: []proto.Race{proto.Race_RaceHuman}, Talents: FuryTalents, - GearSet: core.GetGearSet("../../../ui/warrior/gear_sets", "p1_fury"), + GearSet: core.GetGearSet("../../../ui/warrior/gear_sets", "blank"), Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Basic", SpecOptions: PlayerOptionsFury}, OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../../ui/warrior/apls", "fury"), + core.GetAplRotation("../../../ui/warrior/apls", "default"), }, ItemFilter: core.ItemFilter{ @@ -48,12 +48,12 @@ func TestArms(t *testing.T) { OtherRaces: []proto.Race{proto.Race_RaceHuman}, Talents: ArmsTalents, - GearSet: core.GetGearSet("../../../ui/warrior/gear_sets", "p1_arms"), + GearSet: core.GetGearSet("../../../ui/warrior/gear_sets", "blank"), Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Basic", SpecOptions: PlayerOptionsArms}, OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../../ui/warrior/apls", "arms"), + core.GetAplRotation("../../../ui/warrior/apls", "default"), }, ItemFilter: core.ItemFilter{ @@ -97,8 +97,8 @@ func BenchmarkSimulate(b *testing.B) { core.RaidBenchmark(b, rsr) } -var FuryTalents = "302023102331-305053000520310053120500351" -var ArmsTalents = "3022032023335100102012213231251-305-2033" +var FuryTalents = "303220203-01" +var ArmsTalents = "303220203-01" var PlayerOptionsArms = &proto.Player_Warrior{ Warrior: &proto.Warrior{ diff --git a/sim/warrior/items.go b/sim/warrior/items.go index 7152421b38..d2e3355232 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -1,280 +1,4 @@ package warrior -import ( - "time" - - "github.com/wowsims/sod/sim/core" - "github.com/wowsims/sod/sim/core/stats" -) - -///////////////////////////////////////////////////////////////// -// TBC Item set -///////////////////////////////////////////////////////////////// - -var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ - Name: "Onslaught Armor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Increases the health bonus from your Commanding Shout ability by 170. - }, - 4: func(agent core.Agent) { - // Increases the damage of your Shield Slam ability by 10%. - // Handled in shield_slam.go. - }, - }, -}) - -var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Onslaught Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Reduces the rage cost of your Execute ability by 3. - }, - 4: func(agent core.Agent) { - // Increases the damage of your Mortal Strike and Bloodthirst abilities by 5%. - // Handled in bloodthirst.go and mortal_strike.go. - }, - }, -}) - -///////////////////////////////////////////////////////////////// -// Wrath Item set -///////////////////////////////////////////////////////////////// - -var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Increases attack power by 50. - // +100 resilience rating. - agent.GetCharacter().AddStat(stats.Resilience, 100) - agent.GetCharacter().AddStat(stats.AttackPower, 50) - }, - 4: func(agent core.Agent) { - // Reduces the cooldown of your Intercept ability by 5 sec. - // Increases attack power by 150. - agent.GetCharacter().AddStat(stats.AttackPower, 150) - }, - }, -}) - -var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ - Name: "Dreadnaught Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Increases the damage of your Shield Slam ability by 10%. - // Handled in shield_slam.go. - }, - 4: func(agent core.Agent) { - // Increases the duration of Shield Wall by 3 seconds. - // NYI - }, - }, -}) - -var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ - Name: "Siegebreaker Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Increases the critical strike chance of Devastate by 10%. - // Handled in devastate.go - }, - 4: func(agent core.Agent) { - // Shield Block grants 10% magic DR - // NYI - }, - }, -}) - -var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ - Name: "Wrynn's Plate", - AlternativeName: "Hellscream's Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Decreases the cooldown on Taunt by 2sec - // NYI - - // Increases damage done by Devastate by 5% - // Handled in devastate.go - }, - 4: func(agent core.Agent) { - // Decreases the cooldown of Shield Block by 10 sec - // NYI - }, - }, -}) - -var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ - Name: "Ymirjar Lord's Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Shield Slam and Shockwave deal 20% increased damage - // Handled in shield_slam.go and shockwave.go - }, - 4: func(agent core.Agent) { - // Bloodrage no longer costs health to use, and now causes you to absorb damage equal to 20% max HP - // NYI - }, - }, -}) - -var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Dreadnaught Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Increases the damage of your Slam by 10%. - }, - 4: func(agent core.Agent) { - // Your Bleed periodic effects have a chance to make your next ability cost 5 less rage. - warrior := agent.(WarriorAgent).GetWarrior() - rageMetrics := warrior.NewRageMetrics(core.ActionID{SpellID: 61571}) - - procAura := warrior.RegisterAura(core.Aura{ - Label: "Dreadnaught Battlegear 4pc Proc", - ActionID: core.ActionID{SpellID: 61571}, - Duration: time.Second * 30, - OnGain: func(_ *core.Aura, sim *core.Simulation) { - warrior.PseudoStats.CostReduction += 5 - }, - OnExpire: func(_ *core.Aura, sim *core.Simulation) { - warrior.PseudoStats.CostReduction -= 5 - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { - if !spell.ProcMask.Matches(core.ProcMaskMeleeSpecial) { - return - } - - // one-shot cost reductions cannot be reliably reset, since both OnCastComplete and OnSpellHit - // are too late (e.g. there might be a proc after Slam cast, but before either callback), - // or happen to often (e.g. internal 0-cost casts like Mutilate, or multiple Whirlwind hits, in case of OnSpellHit) - - // doesn't handle multiple dynamic cost reductions at once, or 0-cost default casts - if actualGain := spell.DefaultCast.Cost - spell.CurCast.Cost; actualGain > 0 { - rageMetrics.AddEvent(5, actualGain) - aura.Deactivate(sim) - } - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Dreadnaught Battlegear 4pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(_ *core.Aura, sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - if result.Landed() && sim.RandomFloat("Dreadnaught Battlegear 4pc") < 0.1 { - procAura.Activate(sim) - } - }, - }) - }, - }, -}) - -var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Siegebreaker Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Heroic Strike and Slam critical strikes have a chance to grant you 150 haste rating for 5 sec. - warrior := agent.(WarriorAgent).GetWarrior() - procAura := warrior.RegisterAura(core.Aura{ - Label: "Siegebreaker Battlegear 2pc Proc", - ActionID: core.ActionID{SpellID: 64937}, - Duration: time.Second * 5, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - warrior.AddStatDynamic(sim, stats.MeleeHaste, 150) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - warrior.AddStatDynamic(sim, stats.MeleeHaste, -150) - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Siegebreaker Battlegear 2pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell.ActionID.SpellID != 47450 && spell != warrior.Slam { - return - } - if !result.Outcome.Matches(core.OutcomeCrit) { - return - } - if result.Landed() && sim.RandomFloat("Siegebreaker Battlegear 2pc") < 0.4 { - procAura.Activate(sim) - } - }, - }) - }, - 4: func(agent core.Agent) { - // Increases the critical strike chance of Mortal Strike and Bloodthirst by 10%. - // Handled in bloodthirst.go and mortal_strike.go. - }, - }, -}) - -var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Wrynn's Battlegear", - AlternativeName: "Hellscream's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // Berserker Stance grants an additional 2% critical strike chance, and Battle Stance grants an additional 6% armor penetration. - // Handled in stances.go. - }, - 4: func(agent core.Agent) { - // Increases the critical strike chance of your Slam and Heroic Strike abilities by 5%. - // Handled in slam.go and heroic_strike_cleave.go. - }, - }, -}) - -var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Ymirjar Lord's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - // When your Deep Wounds ability deals damage you have a 3% chance to gain 16% attack power for 10 sec. - warrior := agent.(WarriorAgent).GetWarrior() - var bonusAP float64 - procAura := warrior.RegisterAura(core.Aura{ - Label: "Ymirjar Lord's Battlegear 2pc Proc", - ActionID: core.ActionID{SpellID: 70855}, - Duration: time.Second * 10, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - bonusAP = warrior.GetStat(stats.AttackPower) * 0.16 - aura.Unit.AddStatDynamic(sim, stats.AttackPower, bonusAP) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - aura.Unit.AddStatDynamic(sim, stats.AttackPower, -bonusAP) - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Ymirjar Lord's Battlegear 2pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell != warrior.DeepWounds { - return - } - if result.Landed() && sim.RandomFloat("Ymirjar 2pc") < 0.03 { - procAura.Activate(sim) - } - }, - }) - }, - 4: func(agent core.Agent) { - // You have a 20% chance for your Bloodsurge and Sudden Death talents to grant 2 charges of their effect instead of 1, - // reduce the global cooldown on Execute or Slam by 0.5 sec, and for the duration of the effect to be increased by 100%. - - // handled with specialized Auras for either Bloodsurge or Sudden Death - }, - }, -}) - func init() { } diff --git a/sim/warrior/protection/TestProtectionWarrior.results b/sim/warrior/protection/TestProtectionWarrior.results new file mode 100644 index 0000000000..8571a4f44c --- /dev/null +++ b/sim/warrior/protection/TestProtectionWarrior.results @@ -0,0 +1,152 @@ +character_stats_results: { + key: "TestProtectionWarrior-CharacterStats-Default" + value: { + final_stats: 93.94 + final_stats: 45.54 + final_stats: 91.74 + final_stats: 35.64 + final_stats: 40.04 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 18 + final_stats: 0 + final_stats: 3 + final_stats: 0 + final_stats: 0 + final_stats: 383.88 + final_stats: 0 + final_stats: 8.05949 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 1151.58 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 46.97 + final_stats: 7.41571 + final_stats: 0 + final_stats: 0 + final_stats: 1011.4 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + final_stats: 0 + } +} +stat_weights_results: { + key: "TestProtectionWarrior-StatWeights-Default" + value: { + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + weights: 0 + } +} +dps_results: { + key: "TestProtectionWarrior-AllItems-BlackfathomAvenger'sMail" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-AllItems-BlackfathomElementalist'sHide" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-AllItems-BlackfathomSlayer'sLeather" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-AllItems-StormshroudArmor" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-AllItems-TwilightInvoker'sVestments" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Average-Default" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Human-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Human-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Human-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Orc-25-blank-Basic-default-FullBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Orc-25-blank-Basic-default-NoBuffs-LongSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-Settings-Orc-25-blank-Basic-default-NoBuffs-ShortSingleTarget" + value: {} +} +dps_results: { + key: "TestProtectionWarrior-SwitchInFrontOfTarget-Default" + value: {} +} diff --git a/sim/warrior/protection/protection_warrior_test.go b/sim/warrior/protection/protection_warrior_test.go index 9e42a6c23c..27f97bc806 100644 --- a/sim/warrior/protection/protection_warrior_test.go +++ b/sim/warrior/protection/protection_warrior_test.go @@ -18,13 +18,13 @@ func TestProtectionWarrior(t *testing.T) { Race: proto.Race_RaceOrc, OtherRaces: []proto.Race{proto.Race_RaceHuman}, - GearSet: core.GetGearSet("../../../ui/protection_warrior/gear_sets", "p1_balanced"), + GearSet: core.GetGearSet("../../../ui/protection_warrior/gear_sets", "blank"), Talents: DefaultTalents, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Basic", SpecOptions: PlayerOptionsBasic}, Rotation: core.GetAplRotation("../../../ui/protection_warrior/apls", "default"), - IsTank: true, + IsTank: false, // TODO: Fix crash when this is true InFrontOfTarget: true, ItemFilter: core.ItemFilter{ @@ -57,7 +57,7 @@ func BenchmarkSimulate(b *testing.B) { &proto.Player{ Race: proto.Race_RaceOrc, Class: proto.Class_ClassWarrior, - Equipment: core.GetGearSet("../../../ui/protection_warrior/gear_sets", "p1_balanced").GearSet, + Equipment: core.GetGearSet("../../../ui/protection_warrior/gear_sets", "blank").GearSet, Consumes: FullConsumes, Spec: PlayerOptionsBasic, Buffs: core.FullIndividualBuffs, @@ -80,7 +80,7 @@ func BenchmarkSimulate(b *testing.B) { core.RaidBenchmark(b, rsr) } -var DefaultTalents = "2500030023-302-053351225000012521030113321" +var DefaultTalents = "053020003-03" var PlayerOptionsBasic = &proto.Player_ProtectionWarrior{ ProtectionWarrior: &proto.ProtectionWarrior{ diff --git a/sim/warrior/shield_block.go b/sim/warrior/shield_block.go index b24856b9c2..563baa3212 100644 --- a/sim/warrior/shield_block.go +++ b/sim/warrior/shield_block.go @@ -11,7 +11,6 @@ import ( func (warrior *Warrior) RegisterShieldBlockCD() { actionID := core.ActionID{SpellID: 2565} cooldownDur := time.Second * 60 - cooldownDur = core.TernaryDuration(warrior.HasSetBonus(ItemSetWrynnsPlate, 4), cooldownDur-time.Second*10, cooldownDur) warrior.ShieldBlockAura = warrior.RegisterAura(core.Aura{ Label: "Shield Block", diff --git a/sim/warrior/shield_slam.go b/sim/warrior/shield_slam.go index da43c9dfa7..efada01734 100644 --- a/sim/warrior/shield_slam.go +++ b/sim/warrior/shield_slam.go @@ -33,10 +33,7 @@ func (warrior *Warrior) registerShieldSlamSpell() { }, BonusCritRating: 5 * core.CritRatingPerCritChance, - DamageMultiplier: 1 + - core.TernaryFloat64(warrior.HasSetBonus(ItemSetOnslaughtArmor, 4), .10, 0) + - core.TernaryFloat64(warrior.HasSetBonus(ItemSetDreadnaughtPlate, 2), .10, 0) + - core.TernaryFloat64(warrior.HasSetBonus(ItemSetYmirjarLordsPlate, 2), .20, 0), // TODO: All additive multipliers? + DamageMultiplier: 1, CritMultiplier: warrior.critMultiplier(mh), ThreatMultiplier: 1.3, FlatThreatBonus: 770, diff --git a/sim/warrior/slam.go b/sim/warrior/slam.go index a21f37f4cf..054c1a79e6 100644 --- a/sim/warrior/slam.go +++ b/sim/warrior/slam.go @@ -46,7 +46,7 @@ func (warrior *Warrior) registerSlamSpell() { }, }, - BonusCritRating: core.TernaryFloat64(warrior.HasSetBonus(ItemSetWrynnsBattlegear, 4), 5, 0) * core.CritRatingPerCritChance, + BonusCritRating: 0, DamageMultiplier: 1, CritMultiplier: warrior.critMultiplier(mh), ThreatMultiplier: 1, diff --git a/sim/warrior/stances.go b/sim/warrior/stances.go index 77f9b3dd45..213d3689fb 100644 --- a/sim/warrior/stances.go +++ b/sim/warrior/stances.go @@ -104,7 +104,7 @@ func (warrior *Warrior) registerDefensiveStanceAura() { func (warrior *Warrior) registerBerserkerStanceAura() { threatMult := 0.8 - critBonus := core.CritRatingPerCritChance * (3 + core.TernaryFloat64(warrior.HasSetBonus(ItemSetWrynnsBattlegear, 2), 2, 0)) + critBonus := core.CritRatingPerCritChance * 3.0 warrior.BerserkerStanceAura = warrior.GetOrRegisterAura(core.Aura{ Label: "Berserker Stance", diff --git a/tools/database/enchant_overrides.go b/tools/database/enchant_overrides.go index 05e04c325f..99768518d5 100644 --- a/tools/database/enchant_overrides.go +++ b/tools/database/enchant_overrides.go @@ -33,6 +33,8 @@ var EnchantOverrides = []*proto.UIEnchant{ // Back TODO: Classic add non-dps enchants // {EffectId: 1262, ItemId: 37330, SpellId: 44596, Name: "Superior Arcane Resistance", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{stats.ArcaneResistance: 20}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, {EffectId: 247, SpellId: 13419, Name: "Minor Agility", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Agility: 1}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, + {EffectId: 2613, ItemId: 20726, SpellId: 25072, Name: "Gloves - Threat", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeHands}, + {EffectId: 2621, ItemId: 20735, SpellId: 25084, Name: "Enchant Cloak - Subtlety", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeBack}, // Chest TODO: Classic add non-dps enchants {EffectId: 1891, SpellId: 20025, Name: "Greater Stats", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Stamina: 4, stats.Agility: 4, stats.Strength: 4, stats.Intellect: 4, stats.Spirit: 4}.ToFloatArray(), Type: proto.ItemType_ItemTypeChest}, @@ -87,6 +89,8 @@ var EnchantOverrides = []*proto.UIEnchant{ {EffectId: 2646, SpellId: 27837, Name: "2H Agility", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Agility: 25}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 2564, SpellId: 23800, Name: "Agility", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{stats.Agility: 25}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, {EffectId: 803, SpellId: 13898, Name: "Fiery Weapon", Quality: proto.ItemQuality_ItemQualityCommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, + {EffectId: 1897, ItemId: 16250, SpellId: 20031, Name: "Superior Striking", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, + {EffectId: 1900, ItemId: 16252, SpellId: 20034, Name: "Crusader", Quality: proto.ItemQuality_ItemQualityUncommon, Stats: stats.Stats{}.ToFloatArray(), Type: proto.ItemType_ItemTypeWeapon}, // Ranged TODO: Classic scopes for ranged hit and + damage // {EffectId: 2523, ItemId: 18283, SpellId: 22779, Name: "Biznicks 247x128 Accurascope", Quality: proto.ItemQuality_ItemQualityRare, Stats: stats.Stats{stats.MeleeHit: 0.03}.ToFloatArray(), Type: proto.ItemType_ItemTypeRanged}, diff --git a/ui/protection_paladin/apls/default.apl.json b/ui/protection_paladin/apls/default.apl.json index 273f785644..281462180d 100644 --- a/ui/protection_paladin/apls/default.apl.json +++ b/ui/protection_paladin/apls/default.apl.json @@ -1,19 +1,4 @@ { - "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":48952}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":54428}}},"doAtValue":{"const":{"val":"-1500ms"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}} - ], - "priorityList": [ - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":53595}}},"rhs":{"const":{"val":"3s"}}}},"castSpell":{"spellId":{"spellId":61411}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":61411}}},"rhs":{"const":{"val":"3s"}}}},"castSpell":{"spellId":{"spellId":53595}}}}, - {"action":{"castSpell":{"spellId":{"spellId":48806}}}}, - {"action":{"condition":{"and":{"vals":[{"gcdIsReady":{}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":61411}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":53595}}}}},{"cmp":{"op":"OpLe","lhs":{"min":{"vals":[{"spellTimeToReady":{"spellId":{"spellId":61411}}},{"spellTimeToReady":{"spellId":{"spellId":53595}}}]}},"rhs":{"const":{"val":"350ms"}}}}]}},"wait":{"duration":{"min":{"vals":[{"spellTimeToReady":{"spellId":{"spellId":61411}}},{"spellTimeToReady":{"spellId":{"spellId":53595}}}]}}}}}, - {"action":{"castSpell":{"spellId":{"spellId":48819}}}}, - {"action":{"castSpell":{"spellId":{"spellId":48952}}}}, - {"action":{"castSpell":{"spellId":{"spellId":20355}}}}, - {"action":{"condition":{"and":{"vals":[{"gcdIsReady":{}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":61411}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":53595}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":48819}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":48952}}}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":53408}}}}}]}},"wait":{"duration":{"min":{"vals":[{"spellTimeToReady":{"spellId":{"spellId":61411}}},{"spellTimeToReady":{"spellId":{"spellId":53595}}},{"spellTimeToReady":{"spellId":{"spellId":48819}}},{"spellTimeToReady":{"spellId":{"spellId":48952}}},{"spellTimeToReady":{"spellId":{"spellId":53408}}}]}}}}} - ] -} \ No newline at end of file + "type": "TypeAPL", + "priorityList": [] +} diff --git a/ui/protection_warrior/apls/default.apl.json b/ui/protection_warrior/apls/default.apl.json index 4e502759f1..9ecd6a2792 100644 --- a/ui/protection_warrior/apls/default.apl.json +++ b/ui/protection_warrior/apls/default.apl.json @@ -1,18 +1,6 @@ { "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":47440}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}} - ], "priorityList": [ - {"action":{"schedule":{"schedule":"29s, 209s","innerAction":{"castSpell":{"spellId":{"spellId":12975}}}}}}, - {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"30"}}}},"castSpell":{"spellId":{"tag":1,"spellId":47450}}}}, - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"castSpell":{"spellId":{"spellId":47488}}}}, - {"action":{"castSpell":{"spellId":{"spellId":57823}}}}, - {"action":{"condition":{"auraShouldRefresh":{"sourceUnit":{"type":"Self"},"auraId":{"spellId":47440},"maxOverlap":{"const":{"val":"3s"}}}},"castSpell":{"spellId":{"spellId":47440}}}}, - {"action":{"condition":{"auraShouldRefresh":{"auraId":{"spellId":47502},"maxOverlap":{"const":{"val":"2s"}}}},"castSpell":{"spellId":{"spellId":47502}}}}, - {"action":{"condition":{"auraShouldRefresh":{"auraId":{"spellId":47437},"maxOverlap":{"const":{"val":"2s"}}}},"castSpell":{"spellId":{"spellId":25203}}}}, - {"action":{"castSpell":{"spellId":{"spellId":47498}}}} + {"action":{"autocastOtherCooldowns":{}}} ] -} \ No newline at end of file +}