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.

142 lines
14 KiB

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
# Executed every time the actor is available.
actions+=/prowl,if=(buff.bs_inc.down|time=0)&!buff.prowl.up
actions+=/cat_form,if=!buff.cat_form.up
## <a href='https://www.wowhead.com/spell=10060/power-infusion'>Power Infusion</a> does not line up very well with <a href='https://www.wowhead.com/spell=106951/berserk'>Berserk</a> nor <a href='https://www.wowhead.com/spell=102543/incarnation-avatar-of-ashamane'>Incarnation</a> and <a href='https://www.wowhead.com/spell=323764/convoke-the-spirits?spellModifier=768'>Convoke</a> doesn't benefit much from haste.
## 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)))
## These are handled in Feral spec options instead.
## actions+=/variable,name=zerk_biteweave,op=reset
## actions+=/variable,name=lazy_swipe,op=reset
## actions+=/variable,name=regrowth,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,if=time>0
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+=/adaptive_swarm,cycle_targets=1,if=((!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2)&(dot.adaptive_swarm_damage.stack<3)&!action.adaptive_swarm_damage.in_flight&!action.adaptive_swarm.in_flight)&target.time_to_die>5&!(variable.need_bt&active_bt_triggers=2)&(!talent.unbridled_swarm.enabled|spell_targets.swipe_cat=1)
# in reality, with unbridled talented adaptive swarm should be targeting allies out of combat, and often in single target too. This isn't supported by simc at time of writing though, so will have to settle with just this
actions+=/adaptive_swarm,cycle_targets=1,if=dot.adaptive_swarm_damage.stack<3&talent.unbridled_swarm.enabled&spell_targets.swipe_cat>1&!(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_max<gcd.max
# its acceptable to proc bt when at 4cps in single target for a small gain (0.1-0.2% with t30 4p)
actions+=/call_action_list,name=finisher,if=combo_points=5|combo_points=4&!(buff.bloodtalons.stack<=1&active_bt_triggers=2&spell_targets.swipe_cat=1)
actions+=/call_action_list,name=bloodtalons,if=variable.need_bt&!buff.bs_inc.up&combo_points<5
actions+=/call_action_list,name=aoe_builder,strict=1,if=spell_targets.swipe_cat>1&talent.primal_wrath.enabled
actions+=/call_action_list,name=builder,if=!buff.bs_inc.up&combo_points<5
actions+=/regrowth,if=energy<20&buff.predatory_swiftness.up&!buff.clearcasting.up&variable.regrowth
# 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&!(variable.lazy_swipe&talent.wild_slashes)
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|(!debuff.dire_fixation.up&talent.dire_fixation.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&!(variable.lazy_swipe&talent.wild_slashes)
actions.bloodtalons+=/thrash_cat,if=buff.bt_thrash.down
# this line is for the lazy-swipe build only, basically the idea is to only use swipe thrash and rake in aoe. This just finds the best reapplication if you really need 3rd builder for bt
actions.bloodtalons+=/rake,cycle_targets=1,if=buff.bt_rake.down&variable.lazy_swipe&talent.wild_slashes
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&(debuff.dire_fixation.up|!talent.dire_fixation.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+=/use_item,name=mirror_of_fractured_tomorrows|irideus_fragment,if=!variable.align_3minutes|buff.bs_inc.up|(variable.lastconvoke&!variable.lastzerk&cooldown.convoke_the_spirits.remains=0)
actions.cooldown+=/potion,if=buff.bs_inc.up|boss&fight_remains<32|(boss&fight_remains<cooldown.bs_inc.remains&variable.lastconvoke&cooldown.convoke_the_spirits.remains<10)
actions.cooldown+=/convoke_the_spirits,if=target.time_to_die>5|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.swipe_cat>4&!talent.rampant_ferocity.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