actions.precombat+=/summon_pet,if=!talent.lone_wolf actions.precombat+=/salvo,precast_time=10 actions.precombat+=/use_item,name=algethar_puzzle_box # Precast Aimed Shot on one or two targets unless we could cleave it with Volley on two targets. actions.precombat+=/aimed_shot,if=active_enemies<3&(!talent.volley|active_enemies<2) actions.precombat+=/wailing_arrow,if=active_enemies>2|!talent.steady_focus # Precast Steady Shot on two targets if we are saving Aimed Shot to cleave with Volley, otherwise on three or more targets. actions.precombat+=/steady_shot,if=active_enemies>2|talent.volley&active_enemies=2 actions=counter_shot actions+=/tranquilizing_shot # Determine if it is a good time to use Trueshot. Raid event optimization takes priority so usage is saved for multiple targets as long as it won't delay over half its duration. Otherwise allow for small delays to line up buff effect trinkets, and when using Bullseye, delay the last usage of the fight for max stacks. actions+=/variable,name=trueshot_ready,value=cooldown.trueshot.ready&(active_enemies=1&(!talent.bullseye|fight_remains>cooldown.trueshot.duration_guess+buff.trueshot.duration%2|buff.bullseye.stack=buff.bullseye.max_stack)&(!trinket.1.has_use_buff|trinket.1.cooldown.remains>30|trinket.1.cooldown.ready)&(!trinket.2.has_use_buff|trinket.2.cooldown.remains>30|trinket.2.cooldown.ready)|active_enemies>1|fight_remains<25) actions+=/call_action_list,name=cds actions+=/call_action_list,name=trinkets actions+=/call_action_list,name=st,strict=1,if=active_enemies<3|!talent.trick_shots actions+=/call_action_list,name=trickshots,strict=1,if=active_enemies>2 actions.cds+=/berserking,if=boss&fight_remains<13 actions.cds+=/blood_fury,if=buff.trueshot.up|cooldown.trueshot.remains>30|boss&fight_remains<16 actions.cds+=/ancestral_call,if=buff.trueshot.up|cooldown.trueshot.remains>30|boss&fight_remains<16 actions.cds+=/fireblood,if=buff.trueshot.up|cooldown.trueshot.remains>30|boss&fight_remains<9 actions.cds+=/lights_judgment,if=buff.trueshot.down actions.cds+=/potion,if=buff.trueshot.up&(buff.bloodlust.up|target.health.pct<20)|boss&fight_remains<26 actions.cds+=/salvo,if=active_enemies>2|cooldown.volley.remains<10 actions.st+=/steady_shot,if=talent.steady_focus&(steady_focus_count&buff.steady_focus.remains<5|buff.steady_focus.down&!buff.trueshot.up) actions.st+=/aimed_shot,if=buff.trueshot.up&full_recharge_time1 actions.st+=/rapid_fire,if=talent.surging_shots actions.st+=/kill_shot actions.st+=/trueshot,if=variable.trueshot_ready&(buff.trueshot.down|buff.trueshot.remains<5) # Trigger Salvo if Volley isn't being used to trigger it. actions.st+=/multishot,if=buff.salvo.up&!talent.volley # With Serpentstalker's Trickery target the lowest remaining Serpent Sting. Without Chimaera Shot don't overwrite Precise Shots unless either Trueshot is active or Aimed Shot would cap before its next cast. On two targets with Chimaera Shot don't overwrite Precise Shots unless the target is within Careful Aim range in addition to either Trueshot being active or Aimed Shot capping before its next cast. Overwrite freely if it can cleave. actions.st+=/aimed_shot,cycle_targets=1,if=talent.serpentstalkers_trickery&(buff.precise_shots.down|(buff.trueshot.up|full_recharge_timeexecute_time&active_enemies>1) # Without Serpentstalker's Trickery, target the highest Latent Poison stack. Same rules as the previous line. actions.st+=/aimed_shot,cycle_targets=1,if=buff.precise_shots.down|(buff.trueshot.up|full_recharge_timeexecute_time&active_enemies>1 actions.st+=/volley actions.st+=/rapid_fire actions.st+=/wailing_arrow,if=buff.trueshot.down actions.st+=/kill_command,if=buff.trueshot.down actions.st+=/chimaera_shot,if=buff.precise_shots.up|focus>cost+action.aimed_shot.cost actions.st+=/arcane_shot,if=buff.precise_shots.up|focus>cost+action.aimed_shot.cost actions.st+=/bag_of_tricks,if=buff.trueshot.down actions.st+=/steady_shot actions.trickshots+=/steady_shot,if=talent.steady_focus&steady_focus_count&buff.steady_focus.remains<8 actions.trickshots+=/kill_shot,if=buff.razor_fragments.up actions.trickshots+=/explosive_shot actions.trickshots+=/death_chakram actions.trickshots+=/stampede actions.trickshots+=/wailing_arrow actions.trickshots+=/serpent_sting,cycle_targets=1,if=refreshable&talent.hydras_bite&!talent.serpentstalkers_trickery actions.trickshots+=/barrage,if=active_enemies>7 actions.trickshots+=/volley actions.trickshots+=/trueshot actions.trickshots+=/rapid_fire,if=buff.trick_shots.remains>=execute_time&talent.surging_shots # For Serpentstalker's Trickery, target the lowest remaining Serpent Sting. Generally only cast if it would cleave with Trick Shots. Don't overwrite Precise Shots unless Trueshot is up or Aimed Shot would cap otherwise. actions.trickshots+=/aimed_shot,cycle_targets=1,if=talent.serpentstalkers_trickery&(buff.trick_shots.remains>=execute_time&(buff.precise_shots.down|buff.trueshot.up|full_recharge_time=execute_time&(buff.precise_shots.down|buff.trueshot.up|full_recharge_time=execute_time actions.trickshots+=/chimaera_shot,if=buff.trick_shots.up&buff.precise_shots.up&focus>cost+action.aimed_shot.cost&active_enemies<4 actions.trickshots+=/multishot,if=buff.trick_shots.down|(buff.precise_shots.up|buff.bulletstorm.stack=10)&focus>cost+action.aimed_shot.cost # Only use baseline Serpent Sting as a filler in cleave if it's the only source of applying Latent Poison. actions.trickshots+=/serpent_sting,cycle_targets=1,if=refreshable&talent.poison_injection&!talent.serpentstalkers_trickery actions.trickshots+=/steel_trap,if=buff.trueshot.down actions.trickshots+=/kill_shot,if=focus>cost+action.aimed_shot.cost actions.trickshots+=/multishot,if=focus>cost+action.aimed_shot.cost actions.trickshots+=/bag_of_tricks,if=buff.trueshot.down actions.trickshots+=/steady_shot # Signals that cooldowns are active or ready to activate that is desirable to sync a buff effect with. actions.trinkets+=/variable,name=sync_ready,value=variable.trueshot_ready # Signals that the cooldowns that are desirable to sync a buff with are active. actions.trinkets+=/variable,name=sync_active,value=buff.trueshot.up # The amount of time until the cooldowns will be ready that are desirable to sync a buff effect with. actions.trinkets+=/variable,name=sync_remains,value=cooldown.trueshot.remains # Determine the stronger trinket to sync with cooldowns. In descending priority: buff effects > damage effects, longer > shorter cooldowns, longer > shorter cast times. actions.trinkets+=/variable,name=trinket_1_stronger,value=!trinket.2.has_cooldown|trinket.1.has_use_buff&(!trinket.2.has_use_buff|trinket.2.cooldown.durationtrinket.1.cooldown.duration%2|trinket.2.has_use_buff&trinket.2.cooldown.remains>variable.sync_remains-15&trinket.2.cooldown.remains-5fight_remains)|variable.trinket_2_stronger&(trinket.2.cooldown.remains&(trinket.2.cooldown.remains-5=20|trinket.2.cooldown.remains-5>=variable.sync_remains&(variable.sync_remains>trinket.1.cooldown.duration%2|boss&trinket.1.cooldown.durationfight_remains)))|trinket.2.cooldown.ready&variable.sync_remains>20&variable.sync_remains20|trinket.2.cooldown.remains>20)))|target.time_to_die<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.sync_ready&(variable.trinket_2_stronger|trinket.1.cooldown.remains)|!variable.sync_ready&(variable.trinket_2_stronger&(variable.sync_remains>trinket.2.cooldown.duration%2|trinket.1.has_use_buff&trinket.1.cooldown.remains>variable.sync_remains-15&trinket.1.cooldown.remains-5fight_remains)|variable.trinket_1_stronger&(trinket.1.cooldown.remains&(trinket.1.cooldown.remains-5=20|trinket.1.cooldown.remains-5>=variable.sync_remains&(variable.sync_remains>trinket.2.cooldown.duration%2|boss&trinket.2.cooldown.durationfight_remains)))|trinket.1.cooldown.ready&variable.sync_remains>20&variable.sync_remains20|trinket.1.cooldown.remains>20)))|target.time_to_die<25&(variable.trinket_2_stronger|trinket.1.cooldown.remains)