diff --git a/engine/class_modules/apl/apl_demon_hunter.cpp b/engine/class_modules/apl/apl_demon_hunter.cpp index 1df33376d34..6055b70f025 100644 --- a/engine/class_modules/apl/apl_demon_hunter.cpp +++ b/engine/class_modules/apl/apl_demon_hunter.cpp @@ -288,7 +288,7 @@ void havoc( player_t* p ) fs_fel_barrage->add_action( "felblade,if=buff.inertia_trigger.up&buff.fel_barrage.up" ); fs_fel_barrage->add_action( "fel_rush,if=buff.unbound_chaos.up&fury>20&buff.fel_barrage.up" ); fs_fel_barrage->add_action( "sigil_of_flame,if=fury.deficit>40&buff.fel_barrage.up&(!talent.student_of_suffering|cooldown.eye_beam.remains>30)" ); - fs_fel_barrage->add_action( "sigil_of_doom,if=fury.deficit>40&buff.fel_barrage.up" ); + fs_fel_barrage->add_action( "sigil_of_flame,if=fury.deficit>40&buff.fel_barrage.up" ); fs_fel_barrage->add_action( "felblade,if=buff.fel_barrage.up&fury.deficit>40&action.felblade.cooldown_react" ); fs_fel_barrage->add_action( "death_sweep,if=fury-variable.gcd_drain-35>0&(buff.fel_barrage.remains<3|variable.generator_up|fury>80|variable.fury_gen>18)" ); fs_fel_barrage->add_action( "glaive_tempest,if=fury-variable.gcd_drain-30>0&(buff.fel_barrage.remains<3|variable.generator_up|fury>80|variable.fury_gen>18)" ); @@ -301,7 +301,7 @@ void havoc( player_t* p ) fs_fel_barrage->add_action( "demons_bite" ); fs_meta->add_action( "death_sweep,if=buff.metamorphosis.remainsadd_action( "sigil_of_doom,if=talent.student_of_suffering&buff.demonsurge_sigil_of_doom.down&debuff.essence_break.down&(talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max+talent.inertia&(cooldown.vengeful_retreat.remains<=gcd|buff.initiative.up)+gcd.max*(cooldown.eye_beam.remains<=gcd.max))|(!talent.essence_break&(cooldown.eye_beam.remains>=10|cooldown.eye_beam.remains<=gcd.max))))" ); + fs_meta->add_action( "sigil_of_flame,if=talent.student_of_suffering&buff.demonsurge_sigil_of_doom.down&debuff.essence_break.down&(talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max+talent.inertia&(cooldown.vengeful_retreat.remains<=gcd|buff.initiative.up)+gcd.max*(cooldown.eye_beam.remains<=gcd.max))|(!talent.essence_break&(cooldown.eye_beam.remains>=10|cooldown.eye_beam.remains<=gcd.max))))" ); fs_meta->add_action( "vengeful_retreat,use_off_gcd=1,if=talent.initiative&(gcd.remains<0.3|talent.inertia&cooldown.eye_beam.remains>gcd.remains&(buff.cycle_of_hatred.stack=2|buff.cycle_of_hatred.stack=3))&(cooldown.metamorphosis.remains&(buff.demonsurge_annihilation.down&buff.demonsurge_death_sweep.down)|talent.restless_hunter&(!hero_tree.felscarred|buff.demonsurge_annihilation.down))&(!talent.inertia&buff.unbound_chaos.down|buff.inertia_trigger.down)&(!talent.essence_break|cooldown.essence_break.remains>18|cooldown.essence_break.remains<=gcd.remains+talent.inertia*1.5&(!talent.student_of_suffering|(buff.student_of_suffering.up|cooldown.sigil_of_flame.remains>5)))&(cooldown.eye_beam.remains>5|cooldown.eye_beam.remains<=gcd.remains|cooldown.eye_beam.up)" ); fs_meta->add_action( "death_sweep,if=hero_tree.felscarred&talent.essence_break&buff.demonsurge_death_sweep.up&(buff.inertia.up&(cooldown.essence_break.remains>buff.inertia.remains|!talent.essence_break)|cooldown.metamorphosis.remains<=5&buff.inertia_trigger.down|buff.inertia.up&buff.demonsurge_abyssal_gaze.up)|talent.inertia&buff.inertia_trigger.down&cooldown.vengeful_retreat.remains>=gcd.max&buff.inertia.down", "actions.fs_meta+=/felblade,if=talent.inertia&buff.inertia_trigger.up&cooldown.essence_break.remains<=1&hero_tree.aldrachi_reaver&cooldown.blade_dance.remains<=gcd.max*2&cooldown.metamorphosis.remains<=gcd.max*3 actions.fs_meta+=/felblade,if=talent.inertia&buff.inertia_trigger.up&debuff.essence_break.down&buff.demonsurge_hardcast.up&buff.demonsurge.stack=0&buff.demonsurge_death_sweep.up actions.fs_meta+=/fel_rush,if=talent.inertia&buff.inertia_trigger.up&debuff.essence_break.down&buff.demonsurge_hardcast.up&buff.demonsurge.stack=0&buff.demonsurge_death_sweep.up&cooldown.felblade.remains actions.fs_meta+=/fel_rush,if=talent.inertia&buff.inertia_trigger.up&cooldown.essence_break.remains<=1&hero_tree.aldrachi_reaver&cooldown.blade_dance.remains<=gcd.max*2&cooldown.metamorphosis.remains<=gcd.max*3 actions.fs_meta+=/essence_break,if=fury>=30&talent.restless_hunter&cooldown.metamorphosis.up&(talent.inertia&buff.inertia.up|!talent.inertia)&cooldown.blade_dance.remains<=gcd.max&(hero_tree.felscarred&buff.demonsurge_annihilation.down|hero_tree.aldrachi_reaver)" ); fs_meta->add_action( "annihilation,if=buff.metamorphosis.remainsadd_action( "fel_rush,if=buff.inertia_trigger.up&talent.inertia&debuff.essence_break.down&cooldown.metamorphosis.remains&(!hero_tree.felscarred|cooldown.eye_beam.remains)&(active_enemies>2|hero_tree.felscarred)&(cooldown.felblade.remains&cooldown.essence_break.remains<=0.6)" ); fs_meta->add_action( "immolation_aura,if=charges=2&(active_enemies>1|talent.a_fire_inside&talent.isolated_prey)&debuff.essence_break.down", "|cooldown.felblade.remains&buff.metamorphosis.remains<=5.6-talent.shattered_destiny*gcd.max*2) actions.fs_meta+=/felblade,if=buff.inertia_trigger.up&talent.inertia&debuff.essence_break.down&cooldown.metamorphosis.remains&(!hero_tree.felscarred|cooldown.eye_beam.remains&(!buff.demonsurge_hardcast.up|cooldown.essence_break.remains<=0.5)|buff.demonsurge_hardcast.up&cooldown.eye_beam.remains<=0.6) actions.fs_meta+=/fel_rush,if=buff.inertia_trigger.up&talent.inertia&debuff.essence_break.down&cooldown.metamorphosis.remains&(!hero_tree.felscarred|cooldown.eye_beam.remains&(!buff.demonsurge_hardcast.up|cooldown.essence_break.remains<=0.5)|buff.demonsurge_hardcast.up&cooldown.eye_beam.remains<=gcd.max)&(active_enemies>2|hero_tree.felscarred)&cooldown.felblade.remains actions.fs_meta+=/felblade,if=buff.inertia_trigger.up&talent.inertia&debuff.essence_break.down&cooldown.blade_dance.remains2|hero_tree.felscarred)" ); fs_meta->add_action( "annihilation,if=buff.inner_demon.up&cooldown.blade_dance.remains&(cooldown.eye_beam.remainsadd_action( "essence_break,if=fury>20&(cooldown.metamorphosis.remains>10|cooldown.blade_dance.remains=gcd.max*3|!talent.inertia)&buff.out_of_range.remains4)&(!hero_tree.felscarred|active_enemies>1|cooldown.metamorphosis.remains>5&cooldown.eye_beam.remains)&(!buff.cycle_of_hatred.stack=3|buff.initiative.up|!talent.initiative|!talent.cycle_of_hatred)|fight_remains<5", "actions.fs_meta+=/sigil_of_doom,if=debuff.essence_break.down&(buff.demonsurge_sigil_of_doom.up&cooldown.blade_dance.remains|talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max*3&(!talent.inertia|buff.inertia_trigger.up))|(!talent.essence_break&(cooldown.eye_beam.remains>=30|cooldown.eye_beam.remains<=gcd.max))))" ); - fs_meta->add_action( "sigil_of_doom,if=cooldown.blade_dance.remains&debuff.essence_break.down&(cooldown.eye_beam.remains>=20|cooldown.eye_beam.remains<=gcd.max)&(!talent.student_of_suffering|buff.demonsurge_sigil_of_doom.up)" ); + fs_meta->add_action( "essence_break,if=fury>20&(cooldown.metamorphosis.remains>10|cooldown.blade_dance.remains=gcd.max*3|!talent.inertia)&buff.out_of_range.remains4)&(!hero_tree.felscarred|active_enemies>1|cooldown.metamorphosis.remains>5&cooldown.eye_beam.remains)&(!buff.cycle_of_hatred.stack=3|buff.initiative.up|!talent.initiative|!talent.cycle_of_hatred)|fight_remains<5", "actions.fs_meta+=/sigil_of_flame,if=debuff.essence_break.down&(buff.demonsurge_sigil_of_doom.up&cooldown.blade_dance.remains|talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max*3&(!talent.inertia|buff.inertia_trigger.up))|(!talent.essence_break&(cooldown.eye_beam.remains>=30|cooldown.eye_beam.remains<=gcd.max))))" ); + fs_meta->add_action( "sigil_of_flame,if=cooldown.blade_dance.remains&debuff.essence_break.down&(cooldown.eye_beam.remains>=20|cooldown.eye_beam.remains<=gcd.max)&(!talent.student_of_suffering|buff.demonsurge_sigil_of_doom.up)" ); fs_meta->add_action( "immolation_aura,if=buff.demonsurge.up&debuff.essence_break.down&buff.demonsurge_consuming_fire.up&cooldown.blade_dance.remains>=gcd.max&cooldown.eye_beam.remains>=gcd.max&fury.deficit>10+variable.fury_gen" ); fs_meta->add_action( "eye_beam,if=debuff.essence_break.down&buff.inner_demon.down" ); fs_meta->add_action( "abyssal_gaze,if=debuff.essence_break.down&buff.inner_demon.down&(buff.cycle_of_hatred.stack<4|cooldown.essence_break.remains>=20-gcd.max*talent.student_of_suffering|cooldown.sigil_of_flame.remains&talent.student_of_suffering|cooldown.essence_break.remains<=gcd.max)" ); @@ -335,7 +335,7 @@ void havoc( player_t* p ) fs_opener->add_action( "essence_break,if=buff.metamorphosis.up&(!talent.inertia|buff.inertia.up)&buff.inner_demon.down&buff.demonsurge_annihilation.down" ); fs_opener->add_action( "vengeful_retreat,use_off_gcd=1,if=talent.initiative&time>4&buff.metamorphosis.up&(!talent.inertia|buff.inertia_trigger.down)&talent.essence_break&buff.inner_demon.down&(buff.initiative.down|gcd.remains<0.1)&cooldown.blade_dance.remains" ); fs_opener->add_action( "felblade,if=talent.inertia&buff.inertia_trigger.up&hero_tree.felscarred&debuff.essence_break.down&talent.essence_break&cooldown.metamorphosis.remains&active_enemies<=2&cooldown.sigil_of_flame.remains", "actions.fs_opener+=/felblade,if=!talent.inertia&active_enemies=1&buff.unbound_chaos.up&buff.initiative.up&debuff.essence_break.down" ); - fs_opener->add_action( "sigil_of_doom,if=(buff.inner_demon.down|buff.out_of_range.up)&debuff.essence_break.down", "actions.fs_opener+=/immolation_aura,if=hero_tree.felscarred&charges=2&buff.student_of_suffering.up&talent.a_fire_inside&cooldown.sigil_of_flame.remains&debuff.essence_break.down actions.fs_opener+=/immolation_aura,if=hero_tree.felscarred&debuff.essence_break.down&talent.a_fire_inside&buff.metamorphosis.remains&charges=2 actions.fs_opener+=/felblade,if=buff.inertia_trigger.up&talent.inertia&talent.restless_hunter&cooldown.essence_break.up&cooldown.metamorphosis.up&(buff.demonsurge_annihilation.down|hero_tree.aldrachi_reaver)&buff.metamorphosis.up&cooldown.blade_dance.remains<=gcd.max actions.fs_opener+=/fel_rush,if=buff.inertia_trigger.up&talent.inertia&talent.restless_hunter&cooldown.essence_break.up&cooldown.metamorphosis.up&(buff.demonsurge_annihilation.down|hero_tree.aldrachi_reaver)&buff.metamorphosis.up&cooldown.blade_dance.remains<=gcd.max actions.fs_opener+=/felblade,if=talent.inertia&buff.inertia_trigger.up&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5))&debuff.essence_break.down actions.fs_opener+=/fel_rush,if=talent.inertia&buff.unbound_chaos.up&talent.a_fire_inside&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5|charges=2&buff.unbound_chaos.down))&debuff.essence_break.down actions.fs_opener+=/the_hunt,if=(buff.metamorphosis.up&hero_tree.aldrachi_reaver&talent.shattered_destiny|!talent.shattered_destiny&hero_tree.aldrachi_reaver|hero_tree.felscarred)&(!talent.initiative|talent.inertia|buff.initiative.up|time>5)" ); + fs_opener->add_action( "sigil_of_flame,if=(buff.inner_demon.down|buff.out_of_range.up)&debuff.essence_break.down", "actions.fs_opener+=/immolation_aura,if=hero_tree.felscarred&charges=2&buff.student_of_suffering.up&talent.a_fire_inside&cooldown.sigil_of_flame.remains&debuff.essence_break.down actions.fs_opener+=/immolation_aura,if=hero_tree.felscarred&debuff.essence_break.down&talent.a_fire_inside&buff.metamorphosis.remains&charges=2 actions.fs_opener+=/felblade,if=buff.inertia_trigger.up&talent.inertia&talent.restless_hunter&cooldown.essence_break.up&cooldown.metamorphosis.up&(buff.demonsurge_annihilation.down|hero_tree.aldrachi_reaver)&buff.metamorphosis.up&cooldown.blade_dance.remains<=gcd.max actions.fs_opener+=/fel_rush,if=buff.inertia_trigger.up&talent.inertia&talent.restless_hunter&cooldown.essence_break.up&cooldown.metamorphosis.up&(buff.demonsurge_annihilation.down|hero_tree.aldrachi_reaver)&buff.metamorphosis.up&cooldown.blade_dance.remains<=gcd.max actions.fs_opener+=/felblade,if=talent.inertia&buff.inertia_trigger.up&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5))&debuff.essence_break.down actions.fs_opener+=/fel_rush,if=talent.inertia&buff.unbound_chaos.up&talent.a_fire_inside&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5|charges=2&buff.unbound_chaos.down))&debuff.essence_break.down actions.fs_opener+=/the_hunt,if=(buff.metamorphosis.up&hero_tree.aldrachi_reaver&talent.shattered_destiny|!talent.shattered_destiny&hero_tree.aldrachi_reaver|hero_tree.felscarred)&(!talent.initiative|talent.inertia|buff.initiative.up|time>5)" ); fs_opener->add_action( "annihilation,if=(buff.inner_demon.up|buff.demonsurge_annihilation.up)&(cooldown.metamorphosis.up|!talent.essence_break&cooldown.blade_dance.remains)" ); fs_opener->add_action( "death_sweep,if=hero_tree.felscarred&buff.demonsurge_death_sweep.up&!talent.restless_hunter" ); fs_opener->add_action( "annihilation,if=hero_tree.felscarred&buff.demonsurge_annihilation.up&(!talent.essence_break|buff.inner_demon.up)" ); @@ -458,8 +458,8 @@ void vengeance( player_t* p ) externals->add_action( "invoke_external_buff,name=symbol_of_hope" ); externals->add_action( "invoke_external_buff,name=power_infusion" ); - fel_dev->add_action( "spirit_burst,if=buff.demonsurge_spirit_burst.up&(variable.can_spburst|soul_fragments>=4|(buff.metamorphosis.remains<(gcd.max*2)))" ); - fel_dev->add_action( "soul_sunder,if=buff.demonsurge_soul_sunder.up&(!buff.demonsurge_spirit_burst.up|(buff.metamorphosis.remains<(gcd.max*2)))" ); + fel_dev->add_action( "spirit_bomb,if=buff.demonsurge_spirit_burst.up&(variable.can_spburst|soul_fragments>=4|(buff.metamorphosis.remains<(gcd.max*2)))" ); + fel_dev->add_action( "soul_cleave,if=buff.demonsurge_soul_sunder.up&(!buff.demonsurge_spirit_burst.up|(buff.metamorphosis.remains<(gcd.max*2)))" ); fel_dev->add_action( "sigil_of_spite,if=(!talent.cycle_of_binding|(cooldown.sigil_of_spite.duration<(cooldown.metamorphosis.remains+18)))&(soul_fragments.total<=2&buff.demonsurge_spirit_burst.up)" ); fel_dev->add_action( "soul_carver,if=soul_fragments.total<=2&!prev_gcd.1.sigil_of_spite&buff.demonsurge_spirit_burst.up" ); fel_dev->add_action( "fracture,if=soul_fragments.total<=2&buff.demonsurge_spirit_burst.up" ); @@ -528,16 +528,14 @@ void vengeance( player_t* p ) fs->add_action( "felblade,if=((cooldown.sigil_of_spite.remainsadd_action( "soul_carver,if=(!talent.fiery_demise|talent.fiery_demise&dot.fiery_brand.ticking)&((!talent.spirit_bomb|variable.single_target)|(talent.spirit_bomb&!prev_gcd.1.sigil_of_spite&((soul_fragments.total+3<=5&fury>=40)|(soul_fragments.total=0&fury>=15))))" ); fs->add_action( "sigil_of_spite,if=(!talent.cycle_of_binding|(cooldown.sigil_of_spite.duration<(cooldown.metamorphosis.remains+18)))&(!talent.spirit_bomb|(fury>=80&(variable.can_spbomb|variable.can_spbomb_soon))|(soul_fragments.total<=(2-talent.soul_sigils.rank)))" ); - fs->add_action( "spirit_burst,if=variable.can_spburst&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); + fs->add_action( "spirit_bomb,if=variable.can_spburst&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); fs->add_action( "spirit_bomb,if=variable.can_spbomb&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); - fs->add_action( "soul_sunder,if=variable.single_target&!variable.dont_soul_cleave" ); fs->add_action( "soul_cleave,if=variable.single_target&!variable.dont_soul_cleave" ); - fs->add_action( "spirit_burst,if=variable.can_spburst&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); + fs->add_action( "spirit_bomb,if=variable.can_spburst&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); fs->add_action( "spirit_bomb,if=variable.can_spbomb&!(cooldown.fel_devastation.remains<(gcd.max*3))" ); fs->add_action( "felblade,if=((fury<40&((buff.metamorphosis.up&(variable.can_spburst|variable.can_spburst_soon))|(!buff.metamorphosis.up&(variable.can_spbomb|variable.can_spbomb_soon)))))" ); fs->add_action( "fracture,if=((fury<40&((buff.metamorphosis.up&(variable.can_spburst|variable.can_spburst_soon))|(!buff.metamorphosis.up&(variable.can_spbomb|variable.can_spbomb_soon))))|(buff.metamorphosis.up&variable.can_spburst_one_gcd)|(!buff.metamorphosis.up&variable.can_spbomb_one_gcd))" ); fs->add_action( "felblade,if=fury.deficit>=40" ); - fs->add_action( "soul_sunder,if=!variable.dont_soul_cleave" ); fs->add_action( "soul_cleave,if=!variable.dont_soul_cleave" ); fs->add_action( "fracture" ); fs->add_action( "throw_glaive" ); @@ -559,27 +557,27 @@ void vengeance( player_t* p ) metamorphosis->add_action( "fel_desolation,if=buff.metamorphosis.remains<(gcd.max*3)" ); metamorphosis->add_action( "felblade,if=fury<50&(buff.metamorphosis.remains<(gcd.max*3))&cooldown.fel_desolation.up" ); metamorphosis->add_action( "fracture,if=fury<50&!cooldown.felblade.up&(buff.metamorphosis.remains<(gcd.max*3))&cooldown.fel_desolation.up" ); - metamorphosis->add_action( "sigil_of_doom,if=talent.illuminated_sigils&talent.cycle_of_binding&charges=max_charges" ); + metamorphosis->add_action( "sigil_of_flame,if=talent.illuminated_sigils&talent.cycle_of_binding&charges=max_charges" ); metamorphosis->add_action( "immolation_aura" ); - metamorphosis->add_action( "sigil_of_doom,if=!talent.student_of_suffering&(talent.ascending_flame|(!talent.ascending_flame&!prev_gcd.1.sigil_of_doom&(dot.sigil_of_doom.remains<(4-talent.quickened_sigils))))" ); - metamorphosis->add_action( "sigil_of_doom,if=talent.student_of_suffering&!prev_gcd.1.sigil_of_flame&!prev_gcd.1.sigil_of_doom&(buff.student_of_suffering.remains<(4-talent.quickened_sigils))" ); - metamorphosis->add_action( "sigil_of_doom,if=buff.metamorphosis.remains<((2-talent.quickened_sigils)+(charges*gcd.max))" ); + metamorphosis->add_action( "sigil_of_flame,if=!talent.student_of_suffering&(talent.ascending_flame|(!talent.ascending_flame&!prev_gcd.1.sigil_of_flame&(dot.sigil_of_doom.remains<(4-talent.quickened_sigils))))" ); + metamorphosis->add_action( "sigil_of_flame,if=talent.student_of_suffering&!prev_gcd.1.sigil_of_flame&!prev_gcd.1.sigil_of_flame&(buff.student_of_suffering.remains<(4-talent.quickened_sigils))" ); + metamorphosis->add_action( "sigil_of_flame,if=buff.metamorphosis.remains<((2-talent.quickened_sigils)+(charges*gcd.max))" ); metamorphosis->add_action( "fel_desolation,if=soul_fragments<=3&(soul_fragments.inactive>=2|prev_gcd.1.sigil_of_spite)" ); metamorphosis->add_action( "felblade,if=((cooldown.sigil_of_spite.remainsadd_action( "soul_carver,if=(!talent.spirit_bomb|(variable.single_target&!buff.demonsurge_spirit_burst.up))|(((soul_fragments.total+3)<=6)&fury>=40&!prev_gcd.1.sigil_of_spite)" ); metamorphosis->add_action( "sigil_of_spite,if=!talent.spirit_bomb|(fury>=80&(variable.can_spburst|variable.can_spburst_soon))|(soul_fragments.total<=(2-talent.soul_sigils.rank))" ); - metamorphosis->add_action( "spirit_burst,if=variable.can_spburst&buff.demonsurge_spirit_burst.up" ); + metamorphosis->add_action( "spirit_bomb,if=variable.can_spburst&buff.demonsurge_spirit_burst.up" ); metamorphosis->add_action( "fel_desolation" ); metamorphosis->add_action( "the_hunt" ); - metamorphosis->add_action( "soul_sunder,if=buff.demonsurge_soul_sunder.up&!buff.demonsurge_spirit_burst.up&!variable.can_spburst_one_gcd" ); - metamorphosis->add_action( "spirit_burst,if=variable.can_spburst&(talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)&buff.metamorphosis.remains>(gcd.max*2)" ); + metamorphosis->add_action( "soul_cleave,if=buff.demonsurge_soul_sunder.up&!buff.demonsurge_spirit_burst.up&!variable.can_spburst_one_gcd" ); + metamorphosis->add_action( "spirit_bomb,if=variable.can_spburst&(talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)&buff.metamorphosis.remains>(gcd.max*2)" ); metamorphosis->add_action( "felblade,if=fury<40&(variable.can_spburst|variable.can_spburst_soon)&(buff.demonsurge_spirit_burst.up|talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)" ); metamorphosis->add_action( "fracture,if=fury<40&(variable.can_spburst|variable.can_spburst_soon|variable.can_spburst_one_gcd)&(buff.demonsurge_spirit_burst.up|talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)" ); metamorphosis->add_action( "fracture,if=variable.can_spburst_one_gcd&(buff.demonsurge_spirit_burst.up|variable.big_aoe)&!prev_gcd.1.fracture" ); - metamorphosis->add_action( "soul_sunder,if=variable.single_target&!variable.dont_soul_cleave" ); - metamorphosis->add_action( "spirit_burst,if=variable.can_spburst&buff.metamorphosis.remains>(gcd.max*2)" ); + metamorphosis->add_action( "soul_cleave,if=variable.single_target&!variable.dont_soul_cleave" ); + metamorphosis->add_action( "spirit_bomb,if=variable.can_spburst&buff.metamorphosis.remains>(gcd.max*2)" ); metamorphosis->add_action( "felblade,if=fury.deficit>=40" ); - metamorphosis->add_action( "soul_sunder,if=!variable.dont_soul_cleave&!(variable.big_aoe&(variable.can_spburst|variable.can_spburst_soon))" ); + metamorphosis->add_action( "soul_cleave,if=!variable.dont_soul_cleave&!(variable.big_aoe&(variable.can_spburst|variable.can_spburst_soon))" ); metamorphosis->add_action( "felblade" ); metamorphosis->add_action( "fracture,if=!prev_gcd.1.fracture" ); diff --git a/engine/class_modules/apl/demon_hunter/havoc.simc b/engine/class_modules/apl/demon_hunter/havoc.simc index 10c6318cf7a..782d562d8a1 100644 --- a/engine/class_modules/apl/demon_hunter/havoc.simc +++ b/engine/class_modules/apl/demon_hunter/havoc.simc @@ -267,7 +267,7 @@ actions.fs_fel_barrage+=/fel_barrage,if=fury>100&(raid_event.adds.in>90|raid_eve actions.fs_fel_barrage+=/felblade,if=buff.inertia_trigger.up&buff.fel_barrage.up actions.fs_fel_barrage+=/fel_rush,if=buff.unbound_chaos.up&fury>20&buff.fel_barrage.up actions.fs_fel_barrage+=/sigil_of_flame,if=fury.deficit>40&buff.fel_barrage.up&(!talent.student_of_suffering|cooldown.eye_beam.remains>30) -actions.fs_fel_barrage+=/sigil_of_doom,if=fury.deficit>40&buff.fel_barrage.up +actions.fs_fel_barrage+=/sigil_of_flame,if=fury.deficit>40&buff.fel_barrage.up actions.fs_fel_barrage+=/felblade,if=buff.fel_barrage.up&fury.deficit>40&action.felblade.cooldown_react actions.fs_fel_barrage+=/death_sweep,if=fury-variable.gcd_drain-35>0&(buff.fel_barrage.remains<3|variable.generator_up|fury>80|variable.fury_gen>18) actions.fs_fel_barrage+=/glaive_tempest,if=fury-variable.gcd_drain-30>0&(buff.fel_barrage.remains<3|variable.generator_up|fury>80|variable.fury_gen>18) @@ -280,7 +280,7 @@ actions.fs_fel_barrage+=/chaos_strike,if=fury-variable.gcd_drain-40>20&(cooldown actions.fs_fel_barrage+=/demons_bite actions.fs_meta=death_sweep,if=buff.metamorphosis.remains30-gcd.max|cooldown.essence_break.remains<=gcd.max+talent.inertia&(cooldown.vengeful_retreat.remains<=gcd|buff.initiative.up)+gcd.max*(cooldown.eye_beam.remains<=gcd.max))|(!talent.essence_break&(cooldown.eye_beam.remains>=10|cooldown.eye_beam.remains<=gcd.max)))) +actions.fs_meta+=/sigil_of_flame,if=talent.student_of_suffering&buff.demonsurge_sigil_of_doom.down&debuff.essence_break.down&(talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max+talent.inertia&(cooldown.vengeful_retreat.remains<=gcd|buff.initiative.up)+gcd.max*(cooldown.eye_beam.remains<=gcd.max))|(!talent.essence_break&(cooldown.eye_beam.remains>=10|cooldown.eye_beam.remains<=gcd.max)))) actions.fs_meta+=/vengeful_retreat,use_off_gcd=1,if=talent.initiative&(gcd.remains<0.3|talent.inertia&cooldown.eye_beam.remains>gcd.remains&(buff.cycle_of_hatred.stack=2|buff.cycle_of_hatred.stack=3))&(cooldown.metamorphosis.remains&(buff.demonsurge_annihilation.down&buff.demonsurge_death_sweep.down)|talent.restless_hunter&(!hero_tree.felscarred|buff.demonsurge_annihilation.down))&(!talent.inertia&buff.unbound_chaos.down|buff.inertia_trigger.down)&(!talent.essence_break|cooldown.essence_break.remains>18|cooldown.essence_break.remains<=gcd.remains+talent.inertia*1.5&(!talent.student_of_suffering|(buff.student_of_suffering.up|cooldown.sigil_of_flame.remains>5)))&(cooldown.eye_beam.remains>5|cooldown.eye_beam.remains<=gcd.remains|cooldown.eye_beam.up) #actions.fs_meta+=/felblade,if=talent.inertia&buff.inertia_trigger.up&cooldown.essence_break.remains<=1&hero_tree.aldrachi_reaver&cooldown.blade_dance.remains<=gcd.max*2&cooldown.metamorphosis.remains<=gcd.max*3 #actions.fs_meta+=/felblade,if=talent.inertia&buff.inertia_trigger.up&debuff.essence_break.down&buff.demonsurge_hardcast.up&buff.demonsurge.stack=0&buff.demonsurge_death_sweep.up @@ -299,9 +299,9 @@ actions.fs_meta+=/fel_rush,if=buff.inertia_trigger.up&talent.inertia&debuff.esse #actions.fs_meta+=/fel_rush,if=buff.inertia_trigger.up&talent.inertia&debuff.essence_break.down&cooldown.blade_dance.remains2|hero_tree.felscarred) actions.fs_meta+=/immolation_aura,if=charges=2&(active_enemies>1|talent.a_fire_inside&talent.isolated_prey)&debuff.essence_break.down actions.fs_meta+=/annihilation,if=buff.inner_demon.up&cooldown.blade_dance.remains&(cooldown.eye_beam.remains30-gcd.max|cooldown.essence_break.remains<=gcd.max*3&(!talent.inertia|buff.inertia_trigger.up))|(!talent.essence_break&(cooldown.eye_beam.remains>=30|cooldown.eye_beam.remains<=gcd.max)))) +#actions.fs_meta+=/sigil_of_flame,if=debuff.essence_break.down&(buff.demonsurge_sigil_of_doom.up&cooldown.blade_dance.remains|talent.student_of_suffering&((talent.essence_break&cooldown.essence_break.remains>30-gcd.max|cooldown.essence_break.remains<=gcd.max*3&(!talent.inertia|buff.inertia_trigger.up))|(!talent.essence_break&(cooldown.eye_beam.remains>=30|cooldown.eye_beam.remains<=gcd.max)))) actions.fs_meta+=/essence_break,if=fury>20&(cooldown.metamorphosis.remains>10|cooldown.blade_dance.remains=gcd.max*3|!talent.inertia)&buff.out_of_range.remains4)&(!hero_tree.felscarred|active_enemies>1|cooldown.metamorphosis.remains>5&cooldown.eye_beam.remains)&(!buff.cycle_of_hatred.stack=3|buff.initiative.up|!talent.initiative|!talent.cycle_of_hatred)|fight_remains<5 -actions.fs_meta+=/sigil_of_doom,if=cooldown.blade_dance.remains&debuff.essence_break.down&(cooldown.eye_beam.remains>=20|cooldown.eye_beam.remains<=gcd.max)&(!talent.student_of_suffering|buff.demonsurge_sigil_of_doom.up) +actions.fs_meta+=/sigil_of_flame,if=cooldown.blade_dance.remains&debuff.essence_break.down&(cooldown.eye_beam.remains>=20|cooldown.eye_beam.remains<=gcd.max)&(!talent.student_of_suffering|buff.demonsurge_sigil_of_doom.up) actions.fs_meta+=/immolation_aura,if=buff.demonsurge.up&debuff.essence_break.down&buff.demonsurge_consuming_fire.up&cooldown.blade_dance.remains>=gcd.max&cooldown.eye_beam.remains>=gcd.max&fury.deficit>10+variable.fury_gen actions.fs_meta+=/eye_beam,if=debuff.essence_break.down&buff.inner_demon.down actions.fs_meta+=/abyssal_gaze,if=debuff.essence_break.down&buff.inner_demon.down&(buff.cycle_of_hatred.stack<4|cooldown.essence_break.remains>=20-gcd.max*talent.student_of_suffering|cooldown.sigil_of_flame.remains&talent.student_of_suffering|cooldown.essence_break.remains<=gcd.max) @@ -336,7 +336,7 @@ actions.fs_opener+=/felblade,if=talent.inertia&buff.inertia_trigger.up&hero_tree #actions.fs_opener+=/felblade,if=talent.inertia&buff.inertia_trigger.up&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5))&debuff.essence_break.down #actions.fs_opener+=/fel_rush,if=talent.inertia&buff.unbound_chaos.up&talent.a_fire_inside&(buff.inertia.down&buff.metamorphosis.up&!hero_tree.felscarred|hero_tree.felscarred&(buff.metamorphosis.down&charges>1|prev_gcd.1.eye_beam|buff.demonsurge.stack>=5|charges=2&buff.unbound_chaos.down))&debuff.essence_break.down #actions.fs_opener+=/the_hunt,if=(buff.metamorphosis.up&hero_tree.aldrachi_reaver&talent.shattered_destiny|!talent.shattered_destiny&hero_tree.aldrachi_reaver|hero_tree.felscarred)&(!talent.initiative|talent.inertia|buff.initiative.up|time>5) -actions.fs_opener+=/sigil_of_doom,if=(buff.inner_demon.down|buff.out_of_range.up)&debuff.essence_break.down +actions.fs_opener+=/sigil_of_flame,if=(buff.inner_demon.down|buff.out_of_range.up)&debuff.essence_break.down actions.fs_opener+=/annihilation,if=(buff.inner_demon.up|buff.demonsurge_annihilation.up)&(cooldown.metamorphosis.up|!talent.essence_break&cooldown.blade_dance.remains) actions.fs_opener+=/death_sweep,if=hero_tree.felscarred&buff.demonsurge_death_sweep.up&!talent.restless_hunter actions.fs_opener+=/annihilation,if=hero_tree.felscarred&buff.demonsurge_annihilation.up&(!talent.essence_break|buff.inner_demon.up) diff --git a/engine/class_modules/apl/demon_hunter/vengeance.simc b/engine/class_modules/apl/demon_hunter/vengeance.simc index f20bf0de1c4..7fd78493868 100644 --- a/engine/class_modules/apl/demon_hunter/vengeance.simc +++ b/engine/class_modules/apl/demon_hunter/vengeance.simc @@ -86,8 +86,8 @@ actions.ar_execute+=/fel_devastation actions.externals=invoke_external_buff,name=symbol_of_hope actions.externals+=/invoke_external_buff,name=power_infusion -actions.fel_dev=spirit_burst,if=buff.demonsurge_spirit_burst.up&(variable.can_spburst|soul_fragments>=4|(buff.metamorphosis.remains<(gcd.max*2))) -actions.fel_dev+=/soul_sunder,if=buff.demonsurge_soul_sunder.up&(!buff.demonsurge_spirit_burst.up|(buff.metamorphosis.remains<(gcd.max*2))) +actions.fel_dev=spirit_bomb,if=buff.demonsurge_spirit_burst.up&(variable.can_spburst|soul_fragments>=4|(buff.metamorphosis.remains<(gcd.max*2))) +actions.fel_dev+=/soul_cleave,if=buff.demonsurge_soul_sunder.up&(!buff.demonsurge_spirit_burst.up|(buff.metamorphosis.remains<(gcd.max*2))) actions.fel_dev+=/sigil_of_spite,if=(!talent.cycle_of_binding|(cooldown.sigil_of_spite.duration<(cooldown.metamorphosis.remains+18)))&(soul_fragments.total<=2&buff.demonsurge_spirit_burst.up) actions.fel_dev+=/soul_carver,if=soul_fragments.total<=2&!prev_gcd.1.sigil_of_spite&buff.demonsurge_spirit_burst.up actions.fel_dev+=/fracture,if=soul_fragments.total<=2&buff.demonsurge_spirit_burst.up @@ -156,16 +156,14 @@ actions.fs+=/the_hunt actions.fs+=/felblade,if=((cooldown.sigil_of_spite.remains=40)|(soul_fragments.total=0&fury>=15)))) actions.fs+=/sigil_of_spite,if=(!talent.cycle_of_binding|(cooldown.sigil_of_spite.duration<(cooldown.metamorphosis.remains+18)))&(!talent.spirit_bomb|(fury>=80&(variable.can_spbomb|variable.can_spbomb_soon))|(soul_fragments.total<=(2-talent.soul_sigils.rank))) -actions.fs+=/spirit_burst,if=variable.can_spburst&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3)) +actions.fs+=/spirit_bomb,if=variable.can_spburst&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3)) actions.fs+=/spirit_bomb,if=variable.can_spbomb&talent.fiery_demise&dot.fiery_brand.ticking&!(cooldown.fel_devastation.remains<(gcd.max*3)) -actions.fs+=/soul_sunder,if=variable.single_target&!variable.dont_soul_cleave actions.fs+=/soul_cleave,if=variable.single_target&!variable.dont_soul_cleave -actions.fs+=/spirit_burst,if=variable.can_spburst&!(cooldown.fel_devastation.remains<(gcd.max*3)) +actions.fs+=/spirit_bomb,if=variable.can_spburst&!(cooldown.fel_devastation.remains<(gcd.max*3)) actions.fs+=/spirit_bomb,if=variable.can_spbomb&!(cooldown.fel_devastation.remains<(gcd.max*3)) actions.fs+=/felblade,if=((fury<40&((buff.metamorphosis.up&(variable.can_spburst|variable.can_spburst_soon))|(!buff.metamorphosis.up&(variable.can_spbomb|variable.can_spbomb_soon))))) actions.fs+=/fracture,if=((fury<40&((buff.metamorphosis.up&(variable.can_spburst|variable.can_spburst_soon))|(!buff.metamorphosis.up&(variable.can_spbomb|variable.can_spbomb_soon))))|(buff.metamorphosis.up&variable.can_spburst_one_gcd)|(!buff.metamorphosis.up&variable.can_spbomb_one_gcd)) actions.fs+=/felblade,if=fury.deficit>=40 -actions.fs+=/soul_sunder,if=!variable.dont_soul_cleave actions.fs+=/soul_cleave,if=!variable.dont_soul_cleave actions.fs+=/fracture actions.fs+=/throw_glaive @@ -187,27 +185,27 @@ actions.metamorphosis=call_action_list,name=externals actions.metamorphosis+=/fel_desolation,if=buff.metamorphosis.remains<(gcd.max*3) actions.metamorphosis+=/felblade,if=fury<50&(buff.metamorphosis.remains<(gcd.max*3))&cooldown.fel_desolation.up actions.metamorphosis+=/fracture,if=fury<50&!cooldown.felblade.up&(buff.metamorphosis.remains<(gcd.max*3))&cooldown.fel_desolation.up -actions.metamorphosis+=/sigil_of_doom,if=talent.illuminated_sigils&talent.cycle_of_binding&charges=max_charges +actions.metamorphosis+=/sigil_of_flame,if=talent.illuminated_sigils&talent.cycle_of_binding&charges=max_charges actions.metamorphosis+=/immolation_aura -actions.metamorphosis+=/sigil_of_doom,if=!talent.student_of_suffering&(talent.ascending_flame|(!talent.ascending_flame&!prev_gcd.1.sigil_of_doom&(dot.sigil_of_doom.remains<(4-talent.quickened_sigils)))) -actions.metamorphosis+=/sigil_of_doom,if=talent.student_of_suffering&!prev_gcd.1.sigil_of_flame&!prev_gcd.1.sigil_of_doom&(buff.student_of_suffering.remains<(4-talent.quickened_sigils)) -actions.metamorphosis+=/sigil_of_doom,if=buff.metamorphosis.remains<((2-talent.quickened_sigils)+(charges*gcd.max)) +actions.metamorphosis+=/sigil_of_flame,if=!talent.student_of_suffering&(talent.ascending_flame|(!talent.ascending_flame&!prev_gcd.1.sigil_of_flame&(dot.sigil_of_doom.remains<(4-talent.quickened_sigils)))) +actions.metamorphosis+=/sigil_of_flame,if=talent.student_of_suffering&!prev_gcd.1.sigil_of_flame&!prev_gcd.1.sigil_of_flame&(buff.student_of_suffering.remains<(4-talent.quickened_sigils)) +actions.metamorphosis+=/sigil_of_flame,if=buff.metamorphosis.remains<((2-talent.quickened_sigils)+(charges*gcd.max)) actions.metamorphosis+=/fel_desolation,if=soul_fragments<=3&(soul_fragments.inactive>=2|prev_gcd.1.sigil_of_spite) actions.metamorphosis+=/felblade,if=((cooldown.sigil_of_spite.remains=40&!prev_gcd.1.sigil_of_spite) actions.metamorphosis+=/sigil_of_spite,if=!talent.spirit_bomb|(fury>=80&(variable.can_spburst|variable.can_spburst_soon))|(soul_fragments.total<=(2-talent.soul_sigils.rank)) -actions.metamorphosis+=/spirit_burst,if=variable.can_spburst&buff.demonsurge_spirit_burst.up +actions.metamorphosis+=/spirit_bomb,if=variable.can_spburst&buff.demonsurge_spirit_burst.up actions.metamorphosis+=/fel_desolation actions.metamorphosis+=/the_hunt -actions.metamorphosis+=/soul_sunder,if=buff.demonsurge_soul_sunder.up&!buff.demonsurge_spirit_burst.up&!variable.can_spburst_one_gcd -actions.metamorphosis+=/spirit_burst,if=variable.can_spburst&(talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)&buff.metamorphosis.remains>(gcd.max*2) +actions.metamorphosis+=/soul_cleave,if=buff.demonsurge_soul_sunder.up&!buff.demonsurge_spirit_burst.up&!variable.can_spburst_one_gcd +actions.metamorphosis+=/spirit_bomb,if=variable.can_spburst&(talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe)&buff.metamorphosis.remains>(gcd.max*2) actions.metamorphosis+=/felblade,if=fury<40&(variable.can_spburst|variable.can_spburst_soon)&(buff.demonsurge_spirit_burst.up|talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe) actions.metamorphosis+=/fracture,if=fury<40&(variable.can_spburst|variable.can_spburst_soon|variable.can_spburst_one_gcd)&(buff.demonsurge_spirit_burst.up|talent.fiery_demise&dot.fiery_brand.ticking|variable.big_aoe) actions.metamorphosis+=/fracture,if=variable.can_spburst_one_gcd&(buff.demonsurge_spirit_burst.up|variable.big_aoe)&!prev_gcd.1.fracture -actions.metamorphosis+=/soul_sunder,if=variable.single_target&!variable.dont_soul_cleave -actions.metamorphosis+=/spirit_burst,if=variable.can_spburst&buff.metamorphosis.remains>(gcd.max*2) +actions.metamorphosis+=/soul_cleave,if=variable.single_target&!variable.dont_soul_cleave +actions.metamorphosis+=/spirit_bomb,if=variable.can_spburst&buff.metamorphosis.remains>(gcd.max*2) actions.metamorphosis+=/felblade,if=fury.deficit>=40 -actions.metamorphosis+=/soul_sunder,if=!variable.dont_soul_cleave&!(variable.big_aoe&(variable.can_spburst|variable.can_spburst_soon)) +actions.metamorphosis+=/soul_cleave,if=!variable.dont_soul_cleave&!(variable.big_aoe&(variable.can_spburst|variable.can_spburst_soon)) actions.metamorphosis+=/felblade actions.metamorphosis+=/fracture,if=!prev_gcd.1.fracture diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index 97edb7cc89a..8da670712c6 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -3649,48 +3649,61 @@ struct sigil_of_flame_base_t : public demon_hunter_spell_t } }; +struct sigil_of_doom_t : public demonsurge_trigger_t +{ + sigil_of_doom_t( demon_hunter_t* p ) : base_t( "sigil_of_doom", p, p->hero_spec.sigil_of_doom, "" ) + { + if ( p->hero_spec.sigil_of_doom_damage->ok() ) + { + sigil = p->get_background_action( "sigil_of_doom_damage", ground_aoe_duration ); + sigil->stats = stats; + } + + // Add damage modifiers in sigil_of_doom_damage_t, not here. + } +}; + struct sigil_of_flame_t : public sigil_of_flame_base_t { + sigil_of_doom_t* sigil_of_doom; + double sigil_of_doom_cost; + sigil_of_flame_t( demon_hunter_t* p, util::string_view options_str ) - : sigil_of_flame_base_t( "sigil_of_flame", p, p->spell.sigil_of_flame, options_str ) + : sigil_of_flame_base_t( "sigil_of_flame", p, p->spell.sigil_of_flame, options_str ), + sigil_of_doom( nullptr ), + sigil_of_doom_cost( 0 ) { sigil = p->get_background_action( "sigil_of_flame_damage", ground_aoe_duration ); sigil->stats = stats; + if ( p->talent.felscarred.demonic_intensity->ok() ) + { + sigil_of_doom = new sigil_of_doom_t( p ); + sigil_of_doom_cost = sigil_of_doom->data().cost( POWER_FURY ); + add_child( sigil_of_doom ); + } // Add damage modifiers in sigil_of_flame_damage_t, not here. } - bool ready() override + double cost() const override { if ( p()->buff.demonsurge_hardcast->check() ) { - return false; + return sigil_of_doom_cost; } - return sigil_of_flame_base_t::ready(); + return base_costs[ POWER_FURY ]; } -}; -struct sigil_of_doom_t : public demonsurge_trigger_t -{ - sigil_of_doom_t( demon_hunter_t* p, util::string_view options_str ) - : base_t( "sigil_of_doom", p, p->hero_spec.sigil_of_doom, options_str ) + void execute() override { - if ( p->hero_spec.sigil_of_doom_damage->ok() ) + if ( p()->buff.demonsurge_hardcast->check() ) { - sigil = p->get_background_action( "sigil_of_doom_damage", ground_aoe_duration ); - sigil->stats = stats; + sigil_of_doom->execute_on_target( target ); + stats->add_execute( 0_ms, target ); + return; } - // Add damage modifiers in sigil_of_doom_damage_t, not here. - } - - bool ready() override - { - if ( !p()->buff.demonsurge_hardcast->check() ) - { - return false; - } - return base_t::ready(); + sigil_of_flame_base_t::execute(); } }; @@ -4451,35 +4464,48 @@ struct spirit_bomb_base_t : public demon_hunter_spell_t struct spirit_burst_t : public demonsurge_trigger_t { - spirit_burst_t( demon_hunter_t* p, util::string_view options_str ) - : base_t( "spirit_burst", p, p->hero_spec.spirit_burst, options_str ) + spirit_burst_t( demon_hunter_t* p ) : base_t( "spirit_burst", p, p->hero_spec.spirit_burst, "" ) { } +}; - bool ready() override +struct spirit_bomb_t : public spirit_bomb_base_t +{ + spirit_burst_t* spirit_burst; + double spirit_burst_cost; + + spirit_bomb_t( demon_hunter_t* p, util::string_view options_str ) + : spirit_bomb_base_t( "spirit_bomb", p, p->talent.vengeance.spirit_bomb, options_str ), + spirit_burst( nullptr ), + spirit_burst_cost( 0 ) { - if ( !p()->buff.demonsurge_demonic->check() ) + if ( p->talent.felscarred.demonsurge->ok() ) { - return false; + spirit_burst = new spirit_burst_t( p ); + spirit_burst_cost = spirit_burst->data().cost( POWER_FURY ); + add_child( spirit_burst ); } - return spirit_bomb_base_t::ready(); } -}; -struct spirit_bomb_t : public spirit_bomb_base_t -{ - spirit_bomb_t( demon_hunter_t* p, util::string_view options_str ) - : spirit_bomb_base_t( "spirit_bomb", p, p->talent.vengeance.spirit_bomb, options_str ) + double cost() const override { + if ( p()->buff.demonsurge_demonic->check() ) + { + return spirit_burst_cost; + } + return base_costs[ POWER_FURY ]; } - bool ready() override + void execute() override { if ( p()->buff.demonsurge_demonic->check() ) { - return false; + spirit_burst->execute_on_target( target ); + stats->add_execute( 0_ms, target ); + return; } - return spirit_bomb_base_t::ready(); + + spirit_bomb_base_t::execute(); } }; @@ -6289,35 +6315,48 @@ struct soul_cleave_base_t struct soul_sunder_t : public demonsurge_trigger_t { - soul_sunder_t( demon_hunter_t* p, util::string_view options_str ) - : base_t( "soul_sunder", p, p->hero_spec.soul_sunder, options_str ) + soul_sunder_t( demon_hunter_t* p ) : base_t( "soul_sunder", p, p->hero_spec.soul_sunder, "" ) { } +}; - bool ready() override +struct soul_cleave_t : public soul_cleave_base_t +{ + soul_sunder_t* soul_sunder; + double soul_sunder_cost; + + soul_cleave_t( demon_hunter_t* p, util::string_view options_str ) + : soul_cleave_base_t( "soul_cleave", p, p->spec.soul_cleave, options_str ), + soul_sunder( nullptr ), + soul_sunder_cost( 0 ) { - if ( !p()->buff.demonsurge_demonic->check() ) + if ( p->talent.felscarred.demonsurge->ok() ) { - return false; + soul_sunder = new soul_sunder_t( p ); + soul_sunder_cost = soul_sunder->data().cost( POWER_FURY ); + add_child( soul_sunder ); } - return base_t::ready(); } -}; -struct soul_cleave_t : public soul_cleave_base_t -{ - soul_cleave_t( demon_hunter_t* p, util::string_view options_str ) - : soul_cleave_base_t( "soul_cleave", p, p->spec.soul_cleave, options_str ) + double cost() const override { + if ( p()->buff.demonsurge_demonic->check() ) + { + return soul_sunder_cost; + } + return base_costs[ POWER_FURY ]; } - bool ready() override + void execute() override { if ( p()->buff.demonsurge_demonic->check() ) { - return false; + soul_sunder->execute_on_target( target ); + stats->add_execute( 0_ms, target ); + return; } - return soul_cleave_base_t::ready(); + + soul_cleave_base_t::execute(); } }; @@ -6708,6 +6747,7 @@ struct soul_carver_t : public demon_hunter_attack_t : demon_hunter_attack_t( "soul_carver", p, p->talent.vengeance.soul_carver, options_str ) { impact_action = p->get_background_action( "soul_carver_oh" ); + add_child( impact_action ); } void impact( action_state_t* s ) override @@ -7661,12 +7701,8 @@ action_t* demon_hunter_t::create_action( util::string_view name, util::string_vi return new pick_up_fragment_t( this, options_str ); if ( name == "sigil_of_flame" ) return new sigil_of_flame_t( this, options_str ); - if ( name == "sigil_of_doom" ) - return new sigil_of_doom_t( this, options_str ); if ( name == "spirit_bomb" ) return new spirit_bomb_t( this, options_str ); - if ( name == "spirit_burst" ) - return new spirit_burst_t( this, options_str ); if ( name == "sigil_of_spite" ) return new sigil_of_spite_t( this, options_str ); if ( name == "the_hunt" ) @@ -7704,8 +7740,6 @@ action_t* demon_hunter_t::create_action( util::string_view name, util::string_vi return new shear_t( this, options_str ); if ( name == "soul_cleave" ) return new soul_cleave_t( this, options_str ); - if ( name == "soul_sunder" ) - return new soul_sunder_t( this, options_str ); if ( name == "throw_glaive" ) return new throw_glaive_t( "throw_glaive", this, options_str ); if ( name == "vengeful_retreat" )