@@ -21,12 +21,13 @@ actions.precombat+=/variable,name=easy_swipe,op=reset
2121actions.precombat+=/prowl,if=!buff.prowl.up
2222
2323# Executed every time the actor is available.
24- actions=prowl,if=buff.bs_inc.down&!buff.prowl.up
24+ actions=prowl,if=buff.bs_inc.down&!buff.prowl.up&!buff.shadowmeld.up
2525actions+=/cat_form,if=!buff.cat_form.up&!talent.fluid_form
2626# Line up <a href='https://www.wowhead.com/spell=10060/power-infusion'>Power Infusion</a> with <a href='https://www.wowhead.com/spell=106951/berserk'>Berserk</a>.
2727actions+=/invoke_external_buff,name=power_infusion,if=buff.bs_inc.up|!talent.berserk_heart_of_the_lion
2828actions+=/auto_attack,if=!buff.prowl.up&!buff.shadowmeld.up
29- actions+=/rake,if=time<1&buff.prowl.up
29+ # rake on pull, also rake at the start of a dungeon pull to get into combat with killing strikes
30+ actions+=/rake,if=time<1&buff.prowl.up|talent.killing_strikes&(buff.prowl.up|buff.shadowmeld.up)&combo_points=5
3031actions+=/tigers_fury,target_if=max:time_to_die,if=(hero_tree.wildstalker&(!talent.bloodtalons|buff.bloodtalons.up)&dot.rip.refreshable&combo_points>=3&talent.rip_and_tear|combo_points=5)&(fight_remains<=15|cooldown.bs_inc.remains>20&target.time_to_die>5|cooldown.bs_inc.ready&target.time_to_die>12|target.time_to_die=fight_remains)
3132actions+=/natures_vigil,if=spell_targets.swipe_cat>0&variable.regrowth
3233actions+=/renewal,if=spell_targets.swipe_cat>0&variable.regrowth
@@ -36,56 +37,61 @@ actions+=/adaptive_swarm,target_if=dot.adaptive_swarm_damage.stack<3&(!dot.adapt
3637actions+=/adaptive_swarm,target_if=max:(1+dot.adaptive_swarm_damage.stack)*dot.adaptive_swarm_damage.stack<3*time_to_die,if=buff.cat_form.up&dot.adaptive_swarm_damage.stack<3&talent.unbridled_swarm.enabled&spell_targets.swipe_cat>1&dot.rip.ticking
3738# variable that tells us when we want to prioritize proccing bt, currently thats at 0 or 1 stack of bloodtalons
3839actions+=/variable,name=need_bt,value=talent.bloodtalons&buff.bloodtalons.stack<=1
40+ # is this cringe? yes it is. Complain on the forums
41+ actions+=/cancel_buff,name=apex_predators_craving,if=buff.bs_inc.up&talent.saber_jaws
3942actions+=/ferocious_bite,if=buff.apex_predators_craving.up&!(variable.need_bt&active_bt_triggers=2)&(!buff.bs_inc.up|buff.ravage.up)
4043actions+=/call_action_list,name=cooldown,if=dot.rip.ticking
4144# limit how often we check what rips new pandemic'd duration would be.
4245actions+=/call_action_list,name=rip_variable,if=talent.rip_and_tear&spell_targets=1&hero_tree.wildstalker&buff.tigers_fury.up&!buff.bs_inc.up&(buff.bloodtalons.up|!talent.bloodtalons)
4346# with rip and tear, as wildstalker, we do 3cp rips
4447actions+=/rip,if=talent.rip_and_tear&spell_targets=1&hero_tree.wildstalker&buff.tigers_fury.up&!buff.bs_inc.up&(buff.bloodtalons.up|!talent.bloodtalons)&(combo_points>=3&refreshable&cooldown.tigers_fury.remains>25|buff.tigers_fury.remains<5&variable.rip_duration>cooldown.tigers_fury.remains&cooldown.tigers_fury.remains>=dot.rip.remains)
45- actions+=/call_action_list,name=builder,if=(buff.bs_inc.up&!buff.ravage.up&!buff.coiled_to_spring.up&hero_tree.druid_of_the_claw&talent.coiled_to_spring&spell_targets<=2)|buff.bloodtalons.stack=0&active_bt_triggers=2
48+ actions+=/variable,name=stealth_bonus,value=buff.sudden_ambush.up|buff.prowl.up|buff.shadowmeld.up
49+ actions+=/call_action_list,name=builder,if=(buff.bs_inc.up&!buff.ravage.up&!buff.coiled_to_spring.up&hero_tree.druid_of_the_claw&talent.coiled_to_spring&spell_targets<=2)|spell_targets=1&buff.bloodtalons.stack=0&active_bt_triggers=2
50+ actions+=/call_action_list,name=aoe_builder,if=spell_targets>=2&buff.bloodtalons.stack=0&active_bt_triggers=2
4651actions+=/wait,sec=!cooldown.tigers_fury.remains,if=combo_points=5&cooldown.tigers_fury.remains<3&spell_targets=1
4752actions+=/call_action_list,name=finisher,if=combo_points=5
4853actions+=/call_action_list,name=builder,if=spell_targets.swipe_cat=1&combo_points<5
4954actions+=/call_action_list,name=aoe_builder,if=spell_targets.swipe_cat>=2&combo_points<5
5055# if we cant do anything else, then sure, tigers fury early
51- actions+=/tigers_fury,if=(!cooldown.bs_inc.remains|cooldown.bs_inc.remains>20)
56+ actions+=/tigers_fury,if=(!cooldown.bs_inc.remains|cooldown.bs_inc.remains>20)&(fight_remains<=15|cooldown.bs_inc.remains>20&target.time_to_die>5|cooldown.bs_inc.ready&target.time_to_die>12|target.time_to_die=fight_remains)
5257actions+=/regrowth,if=buff.predatory_swiftness.up&variable.regrowth
5358
5459# maintain thrash highest prio
55- actions.aoe_builder=thrash_cat,target_if=max:time_to_die,if=refreshable&!talent.thrashing_claws&!(variable.need_bt&buff.bt_thrash.up)&remains<time_to_die
56- # avoid capping brs charges. Also send brutal slashes/ws swipe in aoe, even if we need to proc bloodtalons, during berserk.
57- actions.aoe_builder+=/brutal_slash,target_if=min:time_to_die,if=(cooldown.brutal_slash.full_recharge_time<4|time_to_die<4|raid_event.adds.remains<4|(buff.bs_inc.up&spell_targets>=3-hero_tree.druid_of_the_claw))&!(variable.need_bt&buff.bt_swipe.up&(buff.bs_inc.down|spell_targets<3-hero_tree.druid_of_the_claw))
58- actions.aoe_builder+=/swipe_cat,target_if=min:time_to_die,if=talent.wild_slashes&(time_to_die<4|raid_event.adds.remains<4|buff.bs_inc.up&spell_targets>=3-hero_tree.druid_of_the_claw)&!(variable.need_bt&buff.bt_swipe.up&(buff.bs_inc.down|spell_targets<3-hero_tree.druid_of_the_claw))
60+ actions.aoe_builder=thrash_cat,target_if=max:time_to_die,if=refreshable&!talent.thrashing_claws&remains<time_to_die
61+ # During berserk, in aoe, we ignore bloodtalons in order to cast more brutal slashes/wild slashes swipes
62+ actions.aoe_builder+=/brutal_slash,target_if=min:time_to_die,if=(buff.bloodtalons.stack>0|!active_bt_triggers=2)&buff.bs_inc.up&spell_targets.brutal_slash>=3-hero_tree.druid_of_the_claw|!(variable.need_bt&buff.bt_swipe.up)&(cooldown.brutal_slash.full_recharge_time<4|time_to_die<4|raid_event.adds.remains<4)
63+ # TODO: recheck this line
64+ actions.aoe_builder+=/swipe_cat,target_if=min:time_to_die,if=talent.wild_slashes&((buff.bloodtalons.stack>0|!active_bt_triggers=2)&buff.bs_inc.up&spell_targets.swipe_cat>=3-hero_tree.druid_of_the_claw|!(variable.need_bt&buff.bt_swipe.up)&(time_to_die<4|raid_event.adds.remains<4))
5965# with wild slashes we swipe at 5+ targets over raking/moonfire
60- actions.aoe_builder+=/swipe_cat,if=time_to_die<4|(talent.wild_slashes&spell_targets.swipe_cat>4&!(variable.need_bt&buff.bt_swipe.up))
66+ actions.aoe_builder+=/swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>=5&!(variable.need_bt&buff.bt_swipe.up)
67+ # TODO: update/check new meld/prowl logic for aoe
6168actions.aoe_builder+=/prowl,target_if=dot.rake.refreshable|dot.rake.pmultiplier<1.4,if=!(variable.need_bt&buff.bt_rake.up)&action.rake.ready&gcd.remains=0&!buff.sudden_ambush.up&!buff.clearcasting.at_max_stacks
62- actions.aoe_builder+=/shadowmeld,target_if=dot.rake.refreshable|dot.rake.pmultiplier<1.4,if=!(variable.need_bt&buff.bt_rake.up)&action.rake.ready&!buff.sudden_ambush.up&!buff.prowl.up&!buff.clearcasting.at_max_stacks
69+ # we use prowl here just to trigger killing strikes combat reset
70+ actions.aoe_builder+=/prowl,if=buff.bs_inc.remains<1&!buff.shadowmeld.up&(fight_style.dungeonroute|fight_style.dungeonslice)
71+ # in dungeon sims, in non-boss combat, we want to save shadowmeld until we can use it to trigger a killing strikes reset
72+ actions.aoe_builder+=/shadowmeld,target_if=dot.rake.refreshable|dot.rake.pmultiplier<1.4,if=(!(variable.need_bt&buff.bt_rake.up)&action.rake.ready&!variable.stealth_bonus&!buff.clearcasting.at_max_stacks)&(!fight_style.dungeonroute&!fight_style.dungeonslice|!buff.killing_strikes_combat.up&!buff.incarnation_avatar_of_ashamane.up)
6373# dcr rake > moonfire
6474actions.aoe_builder+=/rake,target_if=refreshable,if=talent.doubleclawed_rake&!(variable.need_bt&buff.bt_rake.up)&!buff.clearcasting.at_max_stacks
6575# at 3t with wild slashes, swipe is better than moonfiring/st rake
66- actions.aoe_builder+=/swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>2 &!(variable.need_bt&buff.bt_swipe.up)
67- # if wildstalker make sure you have at least one rake up
76+ actions.aoe_builder+=/swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>=3 &!(variable.need_bt&buff.bt_swipe.up)
77+ # if wildstalker make sure you have at least one rake up TODO: check if this should be higher priority, or rake count should be higher
6878actions.aoe_builder+=/rake,target_if=max:dot.rake.ticking,if=!dot.rake.ticking&hero_tree.wildstalker
69- # li moonfire is better than non-dcr rake in aoe if we already have 1 rake
79+ # li moonfire is better than non-dcr rake in aoe if we already have 1 rake TODO: see if this is still true with real vines implementation
7080actions.aoe_builder+=/moonfire_cat,target_if=refreshable,if=!(variable.need_bt&buff.bt_moonfire.up)&!buff.clearcasting.at_max_stacks
71- actions.aoe_builder+=/rake,target_if=refreshable,if=!(variable.need_bt&buff.bt_rake.up)&!buff.clearcasting.at_max_stacks
7281# fillers
7382actions.aoe_builder+=/brutal_slash,if=!(variable.need_bt&buff.bt_swipe.up)
7483actions.aoe_builder+=/swipe_cat,if=!(variable.need_bt&buff.bt_swipe.up)
75- actions.aoe_builder+=/shred,if=!buff.sudden_ambush.up&!variable.easy_swipe&!(variable.need_bt&buff.bt_shred.up)
76- actions.aoe_builder+=/thrash_cat,if=!talent.thrashing_claws&!(variable.need_bt&buff.bt_thrash.up)
84+ actions.aoe_builder+=/rake,target_if=refreshable,if=!(variable.need_bt&buff.bt_rake.up)
85+ actions.aoe_builder+=/thrash_cat,if=!(variable.need_bt&buff.bt_thrash.up)&spell_targets>=3
86+ actions.aoe_builder+=/shred,if=!(variable.need_bt&buff.bt_shred.up)
7787# fallback bt actions
78- actions.aoe_builder+=/rake,target_if=max:ticks_gained_on_refresh, if=talent.doubleclawed_rake&buff.sudden_ambush.up& variable.need_bt&buff.bt_rake.down
88+ actions.aoe_builder+=/thrash_cat, if=!( variable.need_bt&buff.bt_thrash.up)
7989actions.aoe_builder+=/moonfire_cat,target_if=max:ticks_gained_on_refresh,if=variable.need_bt&buff.bt_moonfire.down
80- actions.aoe_builder+=/rake,target_if=max:ticks_gained_on_refresh,if=buff.sudden_ambush.up&variable.need_bt&buff.bt_rake.down
8190actions.aoe_builder+=/shred,if=variable.need_bt&buff.bt_shred.down&!variable.easy_swipe
8291actions.aoe_builder+=/rake,target_if=pmultiplier<1.6,if=variable.need_bt&buff.bt_rake.down
83- actions.aoe_builder+=/thrash_cat,if=variable.need_bt&buff.bt_thrash.down
8492
85- actions.builder=variable,name=stealth_bonus,value=buff.sudden_ambush.up|buff.prowl.up|buff.shadowmeld.up
86- actions.builder+=/prowl,if=!variable.stealth_bonus&(prev_gcd.1.ferocious_bite|prev_gcd.1.rip)
87- # TODO: with incarnation and dungeonslice/dungeonroute, we almost certainly want to split meld use away from prowl use to take advantage of Killing Strikes
88- actions.builder+=/shadowmeld,if=!variable.stealth_bonus&(prev_gcd.1.ferocious_bite|prev_gcd.1.rip)&buff.bs_inc.up
93+ actions.builder=prowl,if=!variable.stealth_bonus&(prev_gcd.1.ferocious_bite|prev_gcd.1.rip|prev_gcd.1.primal_wrath)
94+ actions.builder+=/shadowmeld,if=!variable.stealth_bonus&(prev_gcd.1.ferocious_bite|prev_gcd.1.rip|prev_gcd.1.primal_wrath)&buff.bs_inc.up
8995# freely upgrade rakes unless you're dotc inside berserk-- in which case only upgrade to stealth rakes
9096actions.builder+=/rake,if=(refreshable&persistent_multiplier>=pmultiplier|remains<2|persistent_multiplier>pmultiplier)&!(variable.need_bt&buff.bt_rake.up)&(hero_tree.wildstalker|!buff.bs_inc.up|variable.stealth_bonus)
9197actions.builder+=/shred,if=variable.stealth_bonus&buff.bs_inc.up
@@ -165,16 +171,20 @@ actions.cooldown+=/feral_frenzy,if=combo_points<=1+buff.bs_inc.up
165171# always line up convoke with berserk if you can
166172actions.cooldown+=/convoke_the_spirits,if=fight_remains<5|buff.bs_inc.up&buff.bs_inc.remains<5-talent.ashamanes_guidance|buff.tigers_fury.up&!variable.holdConvoke&(combo_points<=4|buff.bs_inc.up&combo_points<=3)
167173
168- # maintain/upgrade pws, if we have 6.5+s left on pw, we will instead bite if we have rampant ferocity talented. Without rampant, we will bite a vined target with 6 or fewer targets. If we have Ravage, we use specifically Ravage at 7 or fewer targets.
169- actions.finisher=primal_wrath,target_if=max :dot.bloodseeker_vines .ticking,if=spell_targets.primal_wrath>1&(( dot.primal_wrath.remains<6.5&!buff.bs_inc.up|dot.primal_wrath.refreshable)|(!talent.rampant_ferocity.enabled&(spell_targets.primal_wrath>1&!dot.bloodseeker_vines.ticking&!buff.ravage.up|spell_targets.primal_wrath>6+talent.ravage)) )
170- # rip if single target or pw isnt up. Rip with bloodtalons if talented. If tigers fury will be up before rip falls off, then delay refresh
174+ # primal wrath in pandemic during berserk, or with 6.5s left outside berserk
175+ actions.finisher=primal_wrath,target_if=min :dot.primal_wrath .ticking,if=spell_targets.primal_wrath>1&(dot.primal_wrath.remains<6.5&!buff.bs_inc.up|dot.primal_wrath.refreshable)
176+ # rip instead in single target
171177actions.finisher+=/rip,target_if=refreshable,if=(!talent.primal_wrath|spell_targets=1)&(buff.bloodtalons.up|!talent.bloodtalons)&(buff.tigers_fury.up|dot.rip.remains<cooldown.tigers_fury.remains)&(remains<fight_remains|remains<4&buff.ravage.up)
172- # only bite with ravage in aoe with berserk
178+ # only bite with ravage in aoe during berserk
173179actions.finisher+=/call_action_list,name=aoe_builder,if=hero_tree.druid_of_the_claw&buff.bs_inc.up&!buff.ravage.up&spell_targets>=2
180+ # bite > clip pw if pw isnt talented / its single target / sub-7 targets + vine up / sub 8 targets + ravage up / rampant talented
174181actions.finisher+=/pool_resource,for_next=1
175- actions.finisher+=/ferocious_bite,target_if=max:dot.bloodseeker_vines.ticking,if=buff.bs_inc.up|spell_targets>1&hero_tree.wildstalker
182+ # low energy bite during berserk/wildstalker aoe
183+ actions.finisher+=/ferocious_bite,target_if=max:dot.bloodseeker_vines.ticking,if=(hero_tree.wildstalker&spell_targets>1|buff.bs_inc.up)&(spell_targets=1|!talent.primal_wrath|talent.rampant_ferocity|buff.ravage.up|dot.bloodseeker_vines.ticking&spell_targets<7)
176184actions.finisher+=/pool_resource,for_next=1
177- actions.finisher+=/ferocious_bite,max_energy=1,target_if=max:dot.bloodseeker_vines.ticking,if=!buff.bs_inc.up
185+ actions.finisher+=/ferocious_bite,max_energy=1,if=(!talent.primal_wrath|spell_targets=1|talent.rampant_ferocity|buff.ravage.up)
186+ # primal wrath fallback (2+ targets, no vine or 7+ targets, wildstalker, no rampant)
187+ actions.finisher+=/primal_wrath,if=spell_targets.primal_wrath>1
178188
179189# what rips new duration would be if applied in current state
180190actions.rip_variable=variable,name=rip_duration,value=((4+(4*combo_points))*(1-(0.2*talent.circle_of_life_and_death))*(1+(0.25*talent.veinripper)))+(variable.rip_max_pandemic_duration>?dot.rip.remains)
0 commit comments