From 3dbbed8e9adc436fc0b8524b1a7c42eb014c9c32 Mon Sep 17 00:00:00 2001 From: Tom Herbert <18316812+taherbert@users.noreply.github.com> Date: Mon, 12 Oct 2026 19:30:32 -0700 Subject: [PATCH] --- .../apl/demon_hunter/devourer.simc | 218 +++++++----------- 1 file changed, 79 insertions(+), 139 deletions(-) diff --git a/engine/class_modules/apl/demon_hunter/devourer.simc b/engine/class_modules/apl/demon_hunter/devourer.simc index 745f56aa971..902a5fca857 100644 --- a/engine/class_modules/apl/demon_hunter/devourer.simc +++ b/engine/class_modules/apl/demon_hunter/devourer.simc @@ -1,163 +1,103 @@ actions.precombat=snapshot_stats actions.precombat+=/variable,name=trinket_1_buffs,value=trinket.1.has_buff.intellect|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit actions.precombat+=/variable,name=trinket_2_buffs,value=trinket.2.has_buff.intellect|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit -actions.precombat+=/variable,name=trinket_1_manual,value=trinket.1.is.font_of_venomous_rage -actions.precombat+=/variable,name=trinket_2_manual,value=trinket.2.is.font_of_venomous_rage -actions.precombat+=/variable,name=trinket_1_ogcd_cast,value=0 -actions.precombat+=/variable,name=trinket_2_ogcd_cast,value=0 -actions.precombat+=/variable,name=trinket_1_exclude,value=0 -actions.precombat+=/variable,name=trinket_2_exclude,value=0 actions.precombat+=/variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((trinket.2.proc.any_dps.duration)*trinket.2.proc.any_dps.default_value)>((trinket.1.proc.any_dps.duration)*trinket.1.proc.any_dps.default_value) actions.precombat+=/variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl actions.precombat+=/arcane_torrent actions.precombat+=/soul_immolation actions.precombat+=/consume -actions=call_action_list,name=variables +actions=retarget,target_if=max:target.time_to_die,line_cd=0.25 +actions+=/call_action_list,name=variables actions+=/call_action_list,name=cooldowns -actions+=/run_action_list,name=annihilator_melee,if=hero_tree.annihilator&talent.the_hunt -actions+=/run_action_list,name=annihilator_ranged,if=hero_tree.annihilator -actions+=/run_action_list,name=voidscarred_ranged,if=hero_tree.voidscarred&!talent.the_hunt -actions+=/run_action_list,name=voidscarred_melee,if=hero_tree.voidscarred&talent.the_hunt +actions+=/call_action_list,name=reaps,if=target.time_to_die<=4&action.reap.souls_consumed>=1&!buff.soulburst.up +actions+=/run_action_list,name=annihilator,if=hero_tree.annihilator +actions+=/run_action_list,name=voidscarred,if=hero_tree.voidscarred -actions.annihilator_ranged=pick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.6,if=!buff.metamorphosis.up&!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-1-(active_enemies>1) -actions.annihilator_ranged+=/pick_up_fragment,use_off_gcd=1,if=buff.metamorphosis.up&cooldown.reap.remains&soul_fragments+buff.collapsing_star_stacking.stack>=30&fury1&!buff.eradicate.up -actions.annihilator_ranged+=/collapsing_star,if=active_enemies>1&buff.collapsing_star_stacking.stack>=30 -actions.annihilator_ranged+=/call_action_list,name=reaps,if=active_enemies=1&!buff.metamorphosis.up&action.reap.souls_consumed>=4&variable.wont_drop_meta -actions.annihilator_ranged+=/collapsing_star,if=active_enemies=1 -actions.annihilator_ranged+=/call_action_list,name=reaps,if=active_enemies=1&action.reap.souls_consumed>=4 -actions.annihilator_ranged+=/call_action_list,name=reaps,if=fight_remains<=6&action.reap.souls_consumed>=1 -actions.annihilator_ranged+=/call_action_list,name=reaps,if=active_enemies>1&buff.eradicate.up&action.reap.souls_consumed>=4+6*buff.moment_of_craving.up -actions.annihilator_ranged+=/void_ray,if=!buff.eradicate.up|!buff.moment_of_craving.up|!set_bonus.midnight_season_2_4pc -actions.annihilator_ranged+=/call_action_list,name=reaps,if=(!buff.eradicate.up|active_enemies=1)&(buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3) -actions.annihilator_ranged+=/call_action_list,name=reaps,if=buff.metamorphosis.up&talent.collapsing_star&buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&variable.wont_overcap_cstar&void_metamorphosis_base_drain_ps>35&action.reap.souls_consumed>=4&variable.wont_drop_meta -actions.annihilator_ranged+=/soul_immolation,if=active_dot.soul_immolation=0&(!buff.metamorphosis.up|fury1|buff.moment_of_craving.up|cooldown.void_ray.remains>6) -actions.annihilator_melee+=/devour,if=buff.soulburst.up -actions.annihilator_melee+=/consume,if=buff.soulburst.up -actions.annihilator_melee+=/void_ray,if=talent.eradicate&active_enemies>1&!buff.eradicate.up -actions.annihilator_melee+=/collapsing_star,if=active_enemies=1&(apex.1|buff.dark_matter.up|talent.star_fragments) -actions.annihilator_melee+=/the_hunt,if=buff.metamorphosis.up -actions.annihilator_melee+=/hungering_slash,if=!buff.metamorphosis.up&soul_fragments<=8 -actions.annihilator_melee+=/reapers_toll,if=!buff.metamorphosis.up&soul_fragments<=8 -actions.annihilator_melee+=/vengeful_retreat,if=talent.devourers_bite&buff.voidstep.up -actions.annihilator_melee+=/hungering_slash,if=active_enemies>1 -actions.annihilator_melee+=/reapers_toll,if=talent.devourers_bite&(buff.voidsurge_reapers_toll.up|active_enemies>1) -actions.annihilator_melee+=/voidblade,if=buff.metamorphosis.up -actions.annihilator_melee+=/voidblade,if=!buff.metamorphosis.up&(active_enemies=1|!talent.eradicate&active_enemies<4) -actions.annihilator_melee+=/call_action_list,name=reaps,if=active_enemies=1&action.reap.souls_consumed>=4 -actions.annihilator_melee+=/call_action_list,name=reaps,if=!talent.eradicate&(active_enemies>1&variable.wont_overcap_cstar&set_bonus.midnight_season_2_4pc&(buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3)) -actions.annihilator_melee+=/call_action_list,name=reaps,if=action.reap.souls_consumed>=4&active_enemies<5&(active_enemies>1|!buff.metamorphosis.up|buff.moment_of_craving.up|buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30|void_metamorphosis_base_drain_ps>35) -actions.annihilator_melee+=/call_action_list,name=reaps,if=fight_remains<=6&action.reap.souls_consumed>=1 -actions.annihilator_melee+=/call_action_list,name=reaps,if=talent.eradicate&active_enemies>1&buff.eradicate.up&action.reap.souls_consumed>=1 -actions.annihilator_melee+=/void_ray,if=!buff.eradicate.up|!buff.moment_of_craving.up|set_bonus.midnight_season_2_4pc -actions.annihilator_melee+=/collapsing_star,if=active_enemies>1 -actions.annihilator_melee+=/call_action_list,name=reaps,if=buff.eradicate.up&active_enemies>1&action.reap.souls_consumed>=4+6*buff.moment_of_craving.up -actions.annihilator_melee+=/call_action_list,name=reaps,if=!talent.eradicate&(active_enemies>1&!buff.metamorphosis.up&buff.moment_of_craving.up&talent.voidfall&(buff.voidfall_building.react<2|variable.ray_after_reap)) -actions.annihilator_melee+=/call_action_list,name=reaps,if=!talent.eradicate&(active_enemies>1&(buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3)) -actions.annihilator_melee+=/call_action_list,name=reaps,if=active_enemies>1&buff.metamorphosis.up&talent.collapsing_star&(active_enemies>1|apex.1|buff.dark_matter.up|talent.star_fragments)&buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&variable.wont_overcap_cstar&void_metamorphosis_base_drain_ps>35 -actions.annihilator_melee+=/soul_immolation,if=active_dot.soul_immolation=0&(!buff.metamorphosis.up|fury=30&buff.collapsing_star_stacking.stack<30) +actions.annihilator_meta+=/devour,if=buff.soulburst.up&active_enemies=1 +actions.annihilator_meta+=/the_hunt,if=talent.devourers_bite +actions.annihilator_meta+=/voidblade,if=talent.devourers_bite&active_enemies<=3 +actions.annihilator_meta+=/collapsing_star,if=fight_remains<10 +actions.annihilator_meta+=/void_ray,if=talent.eradicate&active_enemies>1&!buff.eradicate.up +actions.annihilator_meta+=/collapsing_star,if=active_enemies>1|cooldown.void_ray.remains +actions.annihilator_meta+=/call_action_list,name=reaps,if=(active_enemies=1|buff.eradicate.up)&action.reap.souls_consumed>=4 +actions.annihilator_meta+=/call_action_list,name=reaps,if=!talent.eradicate&buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&action.reap.souls_consumed>=4 +actions.annihilator_meta+=/void_ray,if=active_enemies>1|talent.eradicate|fury>=100|fury<55 +actions.annihilator_meta+=/call_action_list,name=reaps,if=variable.voidfall_dump +actions.annihilator_meta+=/call_action_list,name=reaps,if=buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30&action.reap.souls_consumed>=4&fight_remains<45 +actions.annihilator_meta+=/soul_immolation,if=active_dot.soul_immolation=0&fury=35 -actions.voidscarred_ranged+=/call_action_list,name=reaps,if=action.reap.souls_consumed>=4 -actions.voidscarred_ranged+=/call_action_list,name=reaps,if=fight_remains<=6&action.reap.souls_consumed>=1 -actions.voidscarred_ranged+=/void_ray,if=!buff.eradicate.up|!buff.moment_of_craving.up|set_bonus.midnight_season_2_4pc -actions.voidscarred_ranged+=/collapsing_star,if=active_enemies>1 -actions.voidscarred_ranged+=/vengeful_retreat,if=buff.voidstep.up -actions.voidscarred_ranged+=/reapers_toll,if=buff.voidsurge_reapers_toll.up -actions.voidscarred_ranged+=/pierce_the_veil,if=buff.voidsurge_pierce_the_veil.up -actions.voidscarred_ranged+=/soul_immolation,if=active_dot.soul_immolation=0&(!buff.metamorphosis.up|fury=buff.void_metamorphosis_stack.max_stack-2 +actions.annihilator_out+=/voidblade,if=talent.devourers_bite&active_enemies<=3&buff.void_metamorphosis_stack.at_max_stacks +actions.annihilator_out+=/metamorphosis +actions.annihilator_out+=/consume,if=buff.soulburst.up +actions.annihilator_out+=/call_action_list,name=reaps,if=(active_enemies=1|buff.eradicate.up)&action.reap.souls_consumed>=4 +actions.annihilator_out+=/call_action_list,name=reaps,if=!talent.eradicate&action.reap.souls_consumed>=8 +actions.annihilator_out+=/void_ray +actions.annihilator_out+=/call_action_list,name=reaps,if=variable.voidfall_dump +actions.annihilator_out+=/soul_immolation,if=active_dot.soul_immolation=0&(active_enemies>1|talent.eradicate) +actions.annihilator_out+=/consume -actions.voidscarred_melee=run_action_list,name=vsm_st,if=active_enemies=1 -actions.voidscarred_melee+=/run_action_list,name=vsm_meta,if=buff.metamorphosis.up -actions.voidscarred_melee+=/run_action_list,name=vsm_out +actions.voidscarred=run_action_list,name=voidscarred_meta,if=buff.metamorphosis.up +actions.voidscarred+=/run_action_list,name=voidscarred_out -actions.vsm_st=pick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.75,if=!buff.metamorphosis.up&!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-1 -actions.vsm_st+=/soul_immolation,if=active_dot.soul_immolation=0&fury=buff.void_metamorphosis_stack.max_stack-1&soul_fragments>=1 -actions.vsm_st+=/hungering_slash -actions.vsm_st+=/reapers_toll,if=soul_fragments<=8 -actions.vsm_st+=/vengeful_retreat,if=buff.voidstep.up -actions.vsm_st+=/pierce_the_veil -actions.vsm_st+=/call_action_list,name=reaps,if=action.reap.souls_consumed>=4 -actions.vsm_st+=/predators_wake -actions.vsm_st+=/void_ray,if=!buff.eradicate.up|!buff.moment_of_craving.up|set_bonus.midnight_season_2_4pc -actions.vsm_st+=/soul_immolation,if=active_dot.soul_immolation=0&!buff.metamorphosis.up -actions.vsm_st+=/devour -actions.vsm_st+=/consume +actions.voidscarred_meta=pick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.35,if=cooldown.void_ray.remains1|fury<30) +actions.voidscarred_meta+=/reapers_toll,if=active_enemies>1&buff.hungering_slash.remains3&fury=4+4*(active_enemies>1&buff.eradicate.up)&!buff.soulburst.up +actions.voidscarred_meta+=/void_ray +actions.voidscarred_meta+=/soul_immolation,if=active_dot.soul_immolation=0&fury=2&active_dot.soul_immolation=0&fury<=gcd.max*(void_metamorphosis_base_drain_ps-6)-6 -actions.vsm_meta+=/pick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.35,if=variable.void_ray_count=1&cooldown.void_ray.remains=2 -actions.vsm_meta+=/vengeful_retreat,use_off_gcd=1,if=buff.voidstep.up -actions.vsm_meta+=/void_ray,if=variable.void_ray_count=0&!talent.eradicate -actions.vsm_meta+=/eradicate,if=(buff.moment_of_craving.remains=8&!buff.soulburst.up -actions.vsm_meta+=/cull,if=action.reap.souls_consumed>=4&!buff.soulburst.up -actions.vsm_meta+=/void_ray -actions.vsm_meta+=/soul_immolation,if=active_dot.soul_immolation=0&fury<=gcd.max*(void_metamorphosis_base_drain_ps-6)-6&cooldown.void_ray.remains>gcd.max -actions.vsm_meta+=/devour,if=fury=buff.void_metamorphosis_stack.max_stack-3 +actions.voidscarred_out+=/wait,sec=0.05,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-1&(active_enemies=1&soul_fragments>=1|active_enemies>1&time-action.pick_up_fragment.last_used<1.5) +actions.voidscarred_out+=/vengeful_retreat,use_off_gcd=1,if=buff.voidstep.up +actions.voidscarred_out+=/consume,if=buff.soulburst.up&(active_enemies=1|talent.eradicate|buff.soulburst.remains1|!talent.the_hunt|!cooldown.the_hunt.ready) +actions.voidscarred_out+=/metamorphosis,if=buff.eradicate.up|!talent.eradicate|active_enemies=1|fight_remains<15 +actions.voidscarred_out+=/void_ray,if=talent.eradicate&active_enemies>1&!buff.eradicate.up +actions.voidscarred_out+=/call_action_list,name=reaps,if=fury<100&fury+4*action.reap.souls_consumed+10*talent.scythes_embrace>=100&action.reap.souls_consumed>=1&!buff.soulburst.up +actions.voidscarred_out+=/hungering_slash +actions.voidscarred_out+=/soul_immolation,if=active_enemies>1&active_dot.soul_immolation=0 +actions.voidscarred_out+=/call_action_list,name=reaps,if=action.reap.souls_consumed>=4+4*(active_enemies>1&buff.eradicate.up)&!buff.soulburst.up +actions.voidscarred_out+=/void_ray +actions.voidscarred_out+=/soul_immolation,if=active_enemies=1&active_dot.soul_immolation=0 +actions.voidscarred_out+=/consume -actions.vsm_out=pick_up_fragment,mode=nearest,type=all,use_off_gcd=1,line_cd=0.3,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-3 -actions.vsm_out+=/wait,sec=0.05,if=!buff.void_metamorphosis_stack.at_max_stacks&buff.void_metamorphosis_stack.stack>=buff.void_metamorphosis_stack.max_stack-1&time-action.pick_up_fragment.last_used<1.5 -actions.vsm_out+=/vengeful_retreat,use_off_gcd=1,if=buff.voidstep.up -actions.vsm_out+=/voidblade,if=prev_gcd.1.void_ray -actions.vsm_out+=/metamorphosis,if=buff.eradicate.up|!talent.eradicate|fight_remains<15 -actions.vsm_out+=/the_hunt -actions.vsm_out+=/consume,if=buff.soulburst.up&buff.soulburst.remains=4&!buff.soulburst.up -actions.vsm_out+=/eradicate,if=action.reap.souls_consumed>=4&!buff.soulburst.up -actions.vsm_out+=/void_ray -actions.vsm_out+=/consume +actions.voidscarred_hunt_entry=voidblade,if=cooldown.the_hunt.ready +actions.voidscarred_hunt_entry+=/vengeful_retreat,if=cooldown.the_hunt.ready +actions.voidscarred_hunt_entry+=/the_hunt,if=buff.vengeful_retreat_movement.up -actions.variables=variable,name=wont_overcap_cstar,op=set,value=!buff.metamorphosis.up|((buff.collapsing_star_stacking.stack+action.reap.souls_consumed)<=buff.collapsing_star_stacking.max_stack|!(talent.collapsing_star&(active_enemies>1|apex.1|buff.dark_matter.up|talent.star_fragments))) -actions.variables+=/variable,name=wont_drop_meta,op=set,value=!buff.metamorphosis.up|!buff.moment_of_craving.up|(fury>void_metamorphosis_base_drain_ps+4*action.reap.souls_consumed+10*talent.scythes_embrace&buff.collapsing_star_stacking.stack+action.reap.souls_consumed>=30|!(talent.collapsing_star&(active_enemies>1|apex.1|buff.dark_matter.up|talent.star_fragments))) -actions.variables+=/variable,name=ray_after_reap,op=set,value=fury+4*action.reap.souls_consumed+10*talent.scythes_embrace>=100 -actions.variables+=/variable,name=void_ray_count,op=reset,if=!buff.metamorphosis.up -actions.variables+=/variable,name=void_ray_count,op=add,value=1,if=buff.metamorphosis.up&action.void_ray.last_used>variable.last_ray_mark -actions.variables+=/variable,name=last_ray_mark,op=set,value=action.void_ray.last_used +actions.variables=variable,name=voidfall_dump,op=set,value=!buff.eradicate.up&(buff.voidfall_spending.stack>=3&prev_gcd.1.void_ray|buff.voidfall_spending.react>=3) +actions.variables+=/variable,name=no_ray_this_window,op=set,value=action.void_ray.last_used=fight_remains|fight_remains<=trinket.1.buff.any_dps.duration -actions.cooldowns+=/use_item,slot=trinket2,if=buff.metamorphosis.up&(variable.void_ray_count=0|hero_tree.annihilator)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2|variable.trinket_1_exclude)&!variable.trinket_2_manual|trinket.2.proc.any_dps.duration>=fight_remains|fight_remains<=trinket.2.buff.any_dps.duration -actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&gcd.remains>0.1 -actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&gcd.remains>0.1 -actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket1,if=trinket.1.is.font_of_venomous_rage&!buff.metamorphosis.up&buff.rolling_torment.up&gcd.remains>0.1 -actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket2,if=trinket.2.is.font_of_venomous_rage&!buff.metamorphosis.up&buff.rolling_torment.up&gcd.remains>0.1 -actions.cooldowns+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&!variable.trinket_1_ogcd_cast -actions.cooldowns+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&!variable.trinket_2_ogcd_cast +actions.cooldowns+=/use_item,slot=trinket1,if=buff.metamorphosis.up&(variable.no_ray_this_window|hero_tree.annihilator)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains|fight_remains<=trinket.1.buff.any_dps.duration +actions.cooldowns+=/use_item,slot=trinket2,if=buff.metamorphosis.up&(variable.no_ray_this_window|hero_tree.annihilator)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains|fight_remains<=trinket.2.buff.any_dps.duration +actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.cooldown.duration=0)&gcd.remains>0.1 +actions.cooldowns+=/use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.cooldown.duration=0)&gcd.remains>0.1 +actions.cooldowns+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.cooldown.duration=0) +actions.cooldowns+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.cooldown.duration=0) actions.reaps=eradicate actions.reaps+=/cull