actions.precombat+=/mark_of_the_wild,if=buff.prowl.down actions.precombat+=/use_item,name=algethar_puzzle_box actions.precombat+=/heart_of_the_wild,if=buff.any_form.up&buff.cat_form.down actions.precombat+=/prowl actions.precombat+=/cat_form actions+=/skull_bash actions+=/soothe actions+=/prowl,if=buff.bs_inc.down&!buff.prowl.up actions+=/cat_form,if=!buff.cat_form.up ## berserk and power infusion cds dont line up very well, so we are better off just sending on cooldown ## actions+=/invoke_external_buff,name=power_infusion actions+=/variable,name=need_bt,value=talent.bloodtalons.enabled&buff.bloodtalons.stack<2 actions+=/variable,name=align_3minutes,value=spell_targets.swipe_cat=1 actions+=/variable,name=lastconvoke,value=fight_remains>cooldown.convoke_the_spirits.remains+3&((talent.ashamanes_guidance.enabled&fight_remains<(cooldown.convoke_the_spirits.remains+60))|(!talent.ashamanes_guidance.enabled&fight_remains<(cooldown.convoke_the_spirits.remains+120))) actions+=/variable,name=lastzerk,value=fight_remains>(30+(cooldown.bs_inc.remains%1.6))&((talent.berserk_heart_of_the_lion.enabled&fight_remains<(90+(cooldown.bs_inc.remains%1.6)))|(!talent.berserk_heart_of_the_lion.enabled&fight_remains<(180+cooldown.bs_inc.remains))) actions+=/variable,name=zerk_biteweave,op=reset actions+=/tigers_fury,if=!talent.convoke_the_spirits.enabled&(!buff.tigers_fury.up|energy.deficit>65) actions+=/tigers_fury,if=talent.convoke_the_spirits.enabled&(!variable.lastconvoke|(variable.lastconvoke&!buff.tigers_fury.up)) actions+=/rake,cycle_targets=1,if=1.4*persistent_multiplier>dot.rake.pmultiplier&(buff.prowl.up|buff.shadowmeld.up) actions+=/natures_vigil actions+=/adaptive_swarm,cycle_targets=1,if=((!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2)&(dot.adaptive_swarm_damage.stack<3|!dot.adaptive_swarm_heal.stack>1)&!action.adaptive_swarm_heal.in_flight&!action.adaptive_swarm_damage.in_flight&!action.adaptive_swarm.in_flight)&target.time_to_die>5|active_enemies>2&!dot.adaptive_swarm_damage.ticking&energy<35&target.time_to_die>5&!(variable.need_bt&active_bt_triggers=2) actions+=/call_action_list,name=cooldown actions+=/feral_frenzy,cycle_targets=1,if=combo_points<2|combo_points<3&buff.bs_inc.up actions+=/ferocious_bite,cycle_targets=1,if=buff.apex_predators_craving.up&(spell_targets.swipe_cat=1|!talent.primal_wrath.enabled|!buff.sabertooth.up)&!(variable.need_bt&active_bt_triggers=2) actions+=/call_action_list,name=berserk,strict=1,if=buff.bs_inc.remains>gcd.remains actions+=/wait,sec=combo_points.time_to_max,if=combo_points=4&buff.predator_revealed.react&energy.deficit>40&spell_targets.swipe_cat=1&combo_points.time_to_max1&talent.primal_wrath.enabled actions+=/call_action_list,name=builder,if=combo_points<5&!buff.bs_inc.up # avoid capping brs charges, and in the event of adds, offload charges within reason actions.aoe_builder+=/brutal_slash,cycle_targets=1,if=cooldown.brutal_slash.full_recharge_time<4|target.time_to_die<5 actions.aoe_builder+=/thrash_cat,if=refreshable&(buff.clearcasting.react|(spell_targets.thrash_cat>10|(spell_targets.thrash_cat>5&!talent.double_clawed_rake.enabled))&!talent.thrashing_claws) actions.aoe_builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up # this line checks if theres an upgradeable rake actions.aoe_builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&dot.rake.pmultiplier<1.4&!buff.prowl.up&!buff.apex_predators_craving.up # not a perfect solution, but it checks lowest dot for pandemic/stealth snapshot first actions.aoe_builder+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier # and if lowest dot is fine, it checks the remaining dots and targets a mob without stealth snapshot (not necessarily 2nd lowest) actions.aoe_builder+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier|refreshable actions.aoe_builder+=/thrash_cat,if=refreshable actions.aoe_builder+=/brutal_slash actions.aoe_builder+=/moonfire_cat,cycle_targets=1,if=refreshable&spell_targets.swipe_cat<5 actions.aoe_builder+=/swipe_cat actions.aoe_builder+=/moonfire_cat,cycle_targets=1,if=refreshable # if we have brs and nothing better to cast, check if thrash DD beats shred (or if SA is up) actions.aoe_builder+=/shred,cycle_targets=1,if=action.shred.damage>action.thrash_cat.damage&!buff.sudden_ambush.up actions.aoe_builder+=/thrash_cat actions.berserk+=/ferocious_bite,cycle_targets=1,if=combo_points=5&dot.rip.remains>8&variable.zerk_biteweave&spell_targets.swipe_cat>1 # proc bt if 0/1 stack if 5/6 combo points actions.berserk+=/call_action_list,name=finisher,if=combo_points=5&!(buff.overflowing_power.stack<=1&active_bt_triggers=2&buff.bloodtalons.stack<=1) # its currently a gain to just contiuously try to proc bt in aoe actions.berserk+=/call_action_list,name=bloodtalons,strict=1,if=spell_targets.swipe_cat>1 # go into stealth to buff rake snapshot-- feral frenzy line is to eliminate an edge case involving ff being casted instead due to higher prio actions.berserk+=/prowl,if=!(buff.bt_rake.up&active_bt_triggers=2)&(action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.shadowmeld.up&cooldown.feral_frenzy.remains<44&!buff.apex_predators_craving.up) actions.berserk+=/shadowmeld,if=!(buff.bt_rake.up&active_bt_triggers=2)&action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up actions.berserk+=/rake,if=!(buff.bt_rake.up&active_bt_triggers=2)&(refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&!dot.rake.refreshable)) # in single target, you just proc bt when an opportunity arises actions.berserk+=/shred,if=active_bt_triggers=2&buff.bt_shred.down actions.berserk+=/brutal_slash,if=active_bt_triggers=2&buff.bt_brutal_slash.down actions.berserk+=/moonfire_cat,if=active_bt_triggers=2&buff.bt_moonfire.down actions.berserk+=/thrash_cat,if=active_bt_triggers=2&buff.bt_thrash.down&!talent.thrashing_claws&variable.need_bt&(refreshable|talent.brutal_slash.enabled) actions.berserk+=/moonfire_cat,if=refreshable # don't overcap brs charges, but keep it available for bt actions.berserk+=/brutal_slash,if=cooldown.brutal_slash.charges>1 actions.berserk+=/shred actions.berserk_builders+=/rake,cycle_targets=1,if=refreshable actions.berserk_builders+=/swipe_cat,if=spell_targets.swipe_cat>1 actions.berserk_builders+=/brutal_slash,if=active_bt_triggers=2&buff.bt_brutal_slash.down actions.berserk_builders+=/shred actions.bloodtalons+=/brutal_slash,if=(cooldown.brutal_slash.full_recharge_time<4|target.time_to_die<5)&(buff.bt_brutal_slash.down&(buff.bs_inc.up|variable.need_bt)) actions.bloodtalons+=/prowl,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.shadowmeld.up&buff.bt_rake.down&!buff.prowl.up&!buff.apex_predators_craving.up actions.bloodtalons+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&buff.bt_rake.down&cooldown.feral_frenzy.remains<44&!buff.apex_predators_craving.up actions.bloodtalons+=/rake,cycle_targets=1,if=(refreshable|buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier)&buff.bt_rake.down actions.bloodtalons+=/rake,cycle_targets=1,if=buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&buff.bt_rake.down actions.bloodtalons+=/shred,if=buff.bt_shred.down&buff.clearcasting.react&spell_targets.swipe_cat=1 actions.bloodtalons+=/thrash_cat,cycle_targets=1,if=refreshable&buff.bt_thrash.down&buff.clearcasting.react&spell_targets.swipe_cat=1&!talent.thrashing_claws.enabled actions.bloodtalons+=/brutal_slash,if=buff.bt_brutal_slash.down actions.bloodtalons+=/moonfire_cat,if=refreshable&buff.bt_moonfire.down&spell_targets.swipe_cat=1 actions.bloodtalons+=/thrash_cat,cycle_targets=1,if=refreshable&buff.bt_thrash.down&!talent.thrashing_claws.enabled actions.bloodtalons+=/shred,if=buff.bt_shred.down&spell_targets.swipe_cat=1&!talent.wild_slashes.enabled actions.bloodtalons+=/swipe_cat,if=buff.bt_swipe.down&talent.wild_slashes.enabled actions.bloodtalons+=/moonfire_cat,cycle_targets=1,max_cycle_targets=3,if=buff.bt_moonfire.down&spell_targets.swipe_cat<5 actions.bloodtalons+=/swipe_cat,if=buff.bt_swipe.down actions.bloodtalons+=/moonfire_cat,cycle_targets=1,if=buff.bt_moonfire.down # If we have BrS and nothing better to cast, check if shred beats thrash DD (or if SA is up) actions.bloodtalons+=/shred,cycle_targets=1,if=action.shred.damage>action.thrash_cat.damage&buff.bt_shred.down&!buff.sudden_ambush.up actions.bloodtalons+=/thrash_cat,if=buff.bt_thrash.down actions.builder+=/run_action_list,name=clearcasting,strict=1,if=buff.clearcasting.react actions.builder+=/brutal_slash,if=cooldown.brutal_slash.full_recharge_time<4 ## TODO: edit this to use wait instead; stop pooling if we can use a clearcasting proc ## actions.builder+=/pool_resource,if=!action.rake.ready&(dot.rake.refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&dot.rake.remains>6))&!buff.clearcasting.react actions.builder+=/shadowmeld,if=action.rake.ready&!buff.sudden_ambush.up&(dot.rake.refreshable|dot.rake.pmultiplier<1.4)&!buff.prowl.up&!buff.apex_predators_craving.up actions.builder+=/rake,if=refreshable|(buff.sudden_ambush.up&persistent_multiplier>dot.rake.pmultiplier&dot.rake.remains>6) ## repeating here is necessary, otherwise moonfire will occassionally be casted instead ## actions.builder+=/run_action_list,name=clearcasting,strict=1,if=buff.clearcasting.react actions.builder+=/moonfire_cat,cycle_targets=1,if=refreshable actions.builder+=/thrash_cat,cycle_targets=1,if=refreshable&!talent.thrashing_claws.enabled actions.builder+=/brutal_slash actions.builder+=/swipe_cat,if=spell_targets.swipe_cat>1|talent.wild_slashes.enabled actions.builder+=/shred actions.clearcasting+=/thrash_cat,if=refreshable&!talent.thrashing_claws.enabled actions.clearcasting+=/swipe_cat,if=spell_targets.swipe_cat>1 actions.clearcasting+=/brutal_slash,if=spell_targets.brutal_slash>2 actions.clearcasting+=/shred actions.cooldown+=/use_item,name=algethar_puzzle_box,if=boss&fight_remains<35|(!variable.align_3minutes) actions.cooldown+=/use_item,name=algethar_puzzle_box,if=variable.align_3minutes&(cooldown.bs_inc.remains<3&(!variable.lastzerk|!variable.lastconvoke|(variable.lastconvoke&cooldown.convoke_the_spirits.remains<13))) actions.cooldown+=/incarnation,if=boss|fight_remains>25 actions.cooldown+=/berserk,if=fight_remains>18|boss&(!variable.lastzerk|fight_remains<23|variable.lastzerk&!variable.lastconvoke|variable.lastconvoke&cooldown.convoke_the_spirits.remains<10) actions.cooldown+=/berserking,if=!variable.align_3minutes|buff.bs_inc.up actions.cooldown+=/potion,if=buff.bs_inc.up|boss&fight_remains<32|(boss&fight_remains5|boss&(fight_remains<5|dot.rip.remains>5&buff.tigers_fury.up&(combo_points<2|buff.bs_inc.up&combo_points=2)&(!variable.lastconvoke|!variable.lastzerk|buff.bs_inc.up)) actions.cooldown+=/use_item,name=manic_grieftorch,cycle_targets=1,if=energy.deficit>40 actions.cooldown+=/use_items actions.finisher+=/primal_wrath,if=(!funneling&(dot.primal_wrath.refreshable&!talent.circle_of_life_and_death.enabled)|dot.primal_wrath.remains<6|talent.tear_open_wounds.enabled)&spell_targets.primal_wrath>1&talent.primal_wrath.enabled actions.finisher+=/rip,cycle_targets=1,if=refreshable&target.time_to_die>settings.rip_duration actions.finisher+=/pool_resource,for_next=1,if=!action.tigers_fury.ready&buff.apex_predators_craving.down actions.finisher+=/ferocious_bite,max_energy=1,cycle_targets=1,if=buff.apex_predators_craving.down&(!buff.bs_inc.up|(buff.bs_inc.up&!talent.soul_of_the_forest.enabled)) actions.finisher+=/ferocious_bite,cycle_targets=1,if=(buff.bs_inc.up&talent.soul_of_the_forest.enabled)|buff.apex_predators_craving.up actions.owlweaving+=/sunfire,line_cd=4*gcd