You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
9.9 KiB

## Upstream: https://github.com/simulationcraft/simc/blob/thewarwithin/ActionPriorityLists/default/hunter_beast_mastery.simc
## SimulationCraft Commit Sync: 07fcac7
## Date: 2025-10-01
actions.precombat+=/summon_pet
# Determine the stronger trinket to sync with cooldowns. In descending priority: buff effects > damage effects, longer > shorter cooldowns, longer > shorter cast times. Special case to consider Mirror of Fractured Tomorrows weaker than other buff effects since its power is split between the dmg effect and the buff effect.
actions.precombat+=/variable,name=trinket_1_stronger,value=!trinket.2.has_cooldown|trinket.1.has_use_buff&(!trinket.2.has_use_buff|!trinket.1.is.mirror_of_fractured_tomorrows&(trinket.2.is.mirror_of_fractured_tomorrows|trinket.2.cooldown.duration<trinket.1.cooldown.duration|trinket.2.cast_time<trinket.1.cast_time|trinket.2.cast_time=trinket.1.cast_time&trinket.2.cooldown.duration=trinket.1.cooldown.duration))|!trinket.1.has_use_buff&(!trinket.2.has_use_buff&(trinket.2.cooldown.duration<trinket.1.cooldown.duration|trinket.2.cast_time<trinket.1.cast_time|trinket.2.cast_time=trinket.1.cast_time&trinket.2.cooldown.duration=trinket.1.cooldown.duration))
actions.precombat+=/variable,name=trinket_2_stronger,value=!variable.trinket_1_stronger
## [Syrif] - Addon-specific variable to make double stampede interactions more readable. Version as-written from SimC didn't evaluate correctly.
# If the natural summon CD is longer than this, we won't get 2 stampedes /w Season 3 tier set
actions.precombat+=/variable,name=double_stampede,value=buff.lead_from_the_front.duration*(1+(1/(2*gcd)))
## [Syrif] - Lets users choose whether to follow guide behaviour or sim behaviour
actions.precombat+=/barbed_shot,if=settings.barbed_shot_opener
actions+=/counter_shot
actions+=/tranquilizing_shot
actions+=/mend_pet,if=pet.health_pct<pet_healing
actions+=/hunters_mark,if=(settings.mark_any|target.is_boss)&active_dot.hunters_mark=0&target.time_to_pct_80>20
actions+=/call_action_list,name=cds
actions+=/call_action_list,name=trinkets
actions+=/call_action_list,name=drst,if=talent.black_arrow&(active_enemies<2|!talent.beast_cleave&active_enemies<3)
actions+=/call_action_list,name=drcleave,if=talent.black_arrow&(active_enemies>2|talent.beast_cleave&active_enemies>1)
actions+=/call_action_list,name=st,if=!talent.black_arrow&(active_enemies<2|!talent.beast_cleave&active_enemies<3)
actions+=/call_action_list,name=cleave,if=!talent.black_arrow&(active_enemies>2|talent.beast_cleave&active_enemies>1)
## actions.cds+=/invoke_external_buff,name=power_infusion,if=buff.call_of_the_wild.up|talent.bloodshed&(prev_gcd.1.bloodshed)|!talent.call_of_the_wild&(buff.bestial_wrath.up|cooldown.bestial_wrath.remains<30)|fight_remains<16
actions.cds+=/berserking,if=buff.call_of_the_wild.up|!talent.call_of_the_wild&buff.bestial_wrath.up|boss&fight_remains<13
actions.cds+=/blood_fury,if=buff.call_of_the_wild.up|!talent.call_of_the_wild&buff.bestial_wrath.up|boss&fight_remains<16
actions.cds+=/ancestral_call,if=buff.call_of_the_wild.up|!talent.call_of_the_wild&buff.bestial_wrath.up|boss&fight_remains<16
actions.cds+=/fireblood,if=buff.call_of_the_wild.up|!talent.call_of_the_wild&buff.bestial_wrath.up|boss&fight_remains<9
actions.cds+=/potion,if=buff.call_of_the_wild.up|!talent.call_of_the_wild&buff.bestial_wrath.up|boss&fight_remains<31
## [Syrif] - Modified to import better, and be more readable.
## actions.cleave=bestial_wrath,if=buff.howl_of_the_pack_leader_cooldown.remains-buff.lead_from_the_front.duration<buff.lead_from_the_front.duration%gcd*0.5|!set_bonus.tww3_4pc|talent.multishot
actions.cleave+=/bestial_wrath,if=buff.howl_of_the_pack_leader_cooldown.remains<variable.double_stampede|!set_bonus.tww3_4pc|talent.multishot
actions.cleave+=/barbed_shot,cycle_targets=1,if=full_recharge_time<gcd|charges_fractional>=cooldown.kill_command.charges_fractional|talent.call_of_the_wild&cooldown.call_of_the_wild.ready|howl_summon.ready&full_recharge_time<8
actions.cleave+=/bloodshed
actions.cleave+=/multishot,if=pet.main.buff.beast_cleave.down&(!talent.bloody_frenzy|cooldown.call_of_the_wild.remains)
actions.cleave+=/call_of_the_wild
actions.cleave+=/explosive_shot,if=talent.thundering_hooves
actions.cleave+=/kill_command
actions.cleave+=/cobra_shot,if=focus.time_to_max<gcd*2|buff.hogstrider.stack>3|!talent.multishot
actions.drcleave+=/kill_shot
actions.drcleave+=/bestial_wrath,if=cooldown.call_of_the_wild.remains>20|!talent.call_of_the_wild
actions.drcleave+=/barbed_shot,cycle_targets=1,if=full_recharge_time<gcd|buff.thrill_of_the_hunt.remains<1.5*gcd
actions.drcleave+=/bloodshed
actions.drcleave+=/multishot,if=pet.main.buff.beast_cleave.down&(!talent.bloody_frenzy|cooldown.call_of_the_wild.remains)
actions.drcleave+=/call_of_the_wild
actions.drcleave+=/explosive_shot,if=talent.thundering_hooves
actions.drcleave+=/kill_command,if=buff.withering_fire.tick_time_remains>gcd&buff.withering_fire.tick_time_remains<3|buff.withering_fire.down
actions.drcleave+=/barbed_shot,cycle_targets=1,if=buff.withering_fire.tick_time_remains>0.5&buff.withering_fire.tick_time_remains<3|buff.withering_fire.down
actions.drcleave+=/cobra_shot,if=buff.withering_fire.down&focus.time_to_max<gcd*2
actions.drcleave+=/explosive_shot
actions.drst+=/kill_shot
actions.drst+=/bestial_wrath,if=cooldown.call_of_the_wild.remains>30|!talent.call_of_the_wild|fight_remains<cooldown.call_of_the_wild.remains
actions.drst+=/bloodshed
actions.drst+=/call_of_the_wild
actions.drst+=/kill_command,if=buff.withering_fire.tick_time_remains>gcd&buff.withering_fire.tick_time_remains<3|buff.withering_fire.down
actions.drst+=/barbed_shot,cycle_targets=1,if=buff.withering_fire.tick_time_remains>0.5&buff.withering_fire.tick_time_remains<3|buff.withering_fire.down
actions.drst+=/cobra_shot,if=buff.withering_fire.down
## [Syrif] - Modified to import better, and be more readable.
## actions.st=bestial_wrath,if=buff.howl_of_the_pack_leader_cooldown.remains-buff.lead_from_the_front.duration<buff.lead_from_the_front.duration%gcd*0.5|!set_bonus.tww3_4pc
actions.st+=/bestial_wrath,if=buff.howl_of_the_pack_leader_cooldown.remains<variable.double_stampede|!set_bonus.tww3_4pc
actions.st+=/barbed_shot,cycle_targets=1,if=full_recharge_time<gcd
actions.st+=/call_of_the_wild
actions.st+=/bloodshed
actions.st+=/kill_command,if=charges_fractional>=cooldown.barbed_shot.charges_fractional&!(buff.lead_from_the_front.remains>gcd&buff.lead_from_the_front.remains<gcd*2&!howl_summon.ready&full_recharge_time>gcd)
actions.st+=/barbed_shot,cycle_targets=1
actions.st+=/cobra_shot
actions.trinkets+=/variable,name=buff_sync_ready,value=talent.call_of_the_wild&(prev_gcd.1.call_of_the_wild)|talent.bloodshed&(prev_gcd.1.bloodshed)|(!talent.call_of_the_wild&!talent.bloodshed)&(buff.bestial_wrath.up|cooldown.bestial_wrath.remains_guess<5)
actions.trinkets+=/variable,name=buff_sync_remains,op=setif,value=cooldown.bestial_wrath.remains_guess,value_else=cooldown.call_of_the_wild.remains|cooldown.bloodshed.remains,condition=!talent.call_of_the_wild&!talent.bloodshed
actions.trinkets+=/variable,name=buff_sync_active,value=talent.call_of_the_wild&buff.call_of_the_wild.up|talent.bloodshed&prev_gcd.1.bloodshed|(!talent.call_of_the_wild&!talent.bloodshed)&buff.bestial_wrath.up
actions.trinkets+=/variable,name=damage_sync_active,value=1
actions.trinkets+=/variable,name=damage_sync_remains,value=0
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=trinket.1.has_use_buff&(variable.buff_sync_ready&(variable.trinket_1_stronger|trinket.2.cooldown.remains)|!variable.buff_sync_ready&(variable.trinket_1_stronger&(variable.buff_sync_remains>trinket.1.cooldown.duration%3&boss&fight_remains>trinket.1.cooldown.duration+20|trinket.2.has_use_buff&trinket.2.cooldown.remains>variable.buff_sync_remains-15&trinket.2.cooldown.remains-5<variable.buff_sync_remains&variable.buff_sync_remains+45>fight_remains&boss)|variable.trinket_2_stronger&(trinket.2.cooldown.remains&(trinket.2.cooldown.remains-5<variable.buff_sync_remains&variable.buff_sync_remains>=20|trinket.2.cooldown.remains-5>=variable.buff_sync_remains&(variable.buff_sync_remains>trinket.1.cooldown.duration%3|trinket.1.cooldown.duration<fight_remains&boss&(variable.buff_sync_remains+trinket.1.cooldown.duration>fight_remains)))|trinket.2.cooldown.ready&variable.buff_sync_remains>20&variable.buff_sync_remains<trinket.2.cooldown.duration%3)))|!trinket.1.has_use_buff&(trinket.1.cast_time=0|!variable.buff_sync_active)&(!trinket.2.has_use_buff&(variable.trinket_1_stronger|trinket.2.cooldown.remains)|trinket.2.has_use_buff&(!variable.buff_sync_active&variable.buff_sync_remains>20|trinket.2.cooldown.remains>20))|boss&fight_remains<25&(variable.trinket_1_stronger|trinket.2.cooldown.remains)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=trinket.2.has_use_buff&(variable.buff_sync_ready&(variable.trinket_2_stronger|trinket.1.cooldown.remains)|!variable.buff_sync_ready&(variable.trinket_2_stronger&(variable.buff_sync_remains>trinket.2.cooldown.duration%3&boss&fight_remains>trinket.2.cooldown.duration+20|trinket.1.has_use_buff&trinket.1.cooldown.remains>variable.buff_sync_remains-15&trinket.1.cooldown.remains-5<variable.buff_sync_remains&variable.buff_sync_remains+45>fight_remains&boss)|variable.trinket_1_stronger&(trinket.1.cooldown.remains&(trinket.1.cooldown.remains-5<variable.buff_sync_remains&variable.buff_sync_remains>=20|trinket.1.cooldown.remains-5>=variable.buff_sync_remains&(variable.buff_sync_remains>trinket.2.cooldown.duration%3|trinket.2.cooldown.duration<fight_remains&boss&(variable.buff_sync_remains+trinket.2.cooldown.duration>fight_remains)))|trinket.1.cooldown.ready&variable.buff_sync_remains>20&variable.buff_sync_remains<trinket.1.cooldown.duration%3)))|!trinket.2.has_use_buff&(trinket.2.cast_time=0|!variable.buff_sync_active)&(!trinket.1.has_use_buff&(variable.trinket_2_stronger|trinket.1.cooldown.remains)|trinket.1.has_use_buff&(!variable.buff_sync_active&variable.buff_sync_remains>20|trinket.1.cooldown.remains>20))|boss&fight_remains<25&(variable.trinket_2_stronger|trinket.1.cooldown.remains)