You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
def->add_action( "invoke_external_buff,name=power_infusion,if=buff.bs_inc.up|!talent.berserk_heart_of_the_lion","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>." );
def->add_action( "rake,if=time<1&buff.prowl.up|talent.killing_strikes&(buff.prowl.up|buff.shadowmeld.up)&combo_points=5","rake on pull, also rake at the start of a dungeon pull to get into combat with killing strikes" );
def->add_action( "adaptive_swarm,target_if=dot.adaptive_swarm_damage.stack<3&(!dot.adaptive_swarm_damage.ticking|dot.adaptive_swarm_damage.remains<2),if=!action.adaptive_swarm_damage.in_flight&(spell_targets=1|!talent.unbridled_swarm)&(dot.rip.ticking|hero_tree.druid_of_the_claw)","TODO: maybe nerf this since the sim seems to be netting more uptime than real-life players" );
27
27
def->add_action( "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","TODO: simplify the targeting logic. Realistically its just being sent at a target with 2 or fewer stacks. The current line is too much overhead." );
28
28
def->add_action( "variable,name=need_bt,value=talent.bloodtalons&buff.bloodtalons.stack<=1","variable that tells us when we want to prioritize proccing bt, currently thats at 0 or 1 stack of bloodtalons" );
29
+
def->add_action( "cancel_buff,name=apex_predators_craving,if=buff.bs_inc.up&talent.saber_jaws","is this cringe? yes it is. Complain on the forums" );
def->add_action( "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)","limit how often we check what rips new pandemic'd duration would be." );
32
33
def->add_action( "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)","with rip and tear, as wildstalker, we do 3cp rips" );
def->add_action( "tigers_fury,if=(!cooldown.bs_inc.remains|cooldown.bs_inc.remains>20)","if we cant do anything else, then sure, tigers fury early" );
41
+
def->add_action( "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)","if we cant do anything else, then sure, tigers fury early" );
aoe_builder->add_action( "thrash_cat,target_if=max:time_to_die,if=refreshable&!talent.thrashing_claws&!(variable.need_bt&buff.bt_thrash.up)&remains<time_to_die","maintain thrash highest prio" );
42
-
aoe_builder->add_action( "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))","avoid capping brs charges. Also send brutal slashes/ws swipe in aoe, even if we need to proc bloodtalons, during berserk." );
aoe_builder->add_action( "swipe_cat,if=time_to_die<4|(talent.wild_slashes&spell_targets.swipe_cat>4&!(variable.need_bt&buff.bt_swipe.up))","with wild slashes we swipe at 5+ targets over raking/moonfire" );
aoe_builder->add_action( "thrash_cat,target_if=max:time_to_die,if=refreshable&!talent.thrashing_claws&remains<time_to_die","maintain thrash highest prio" );
45
+
aoe_builder->add_action( "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)","During berserk, in aoe, we ignore bloodtalons in order to cast more brutal slashes/wild slashes swipes" );
46
+
aoe_builder->add_action( "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))","TODO: recheck this line" );
47
+
aoe_builder->add_action( "swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>=5&!(variable.need_bt&buff.bt_swipe.up)","with wild slashes we swipe at 5+ targets over raking/moonfire" );
48
+
aoe_builder->add_action( "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","TODO: update/check new meld/prowl logic for aoe" );
49
+
aoe_builder->add_action( "prowl,if=buff.bs_inc.remains<1&!buff.shadowmeld.up&(fight_style.dungeonroute|fight_style.dungeonslice)","we use prowl here just to trigger killing strikes combat reset" );
50
+
aoe_builder->add_action( "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)","in dungeon sims, in non-boss combat, we want to save shadowmeld until we can use it to trigger a killing strikes reset" );
aoe_builder->add_action( "swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>2&!(variable.need_bt&buff.bt_swipe.up)","at 3t with wild slashes, swipe is better than moonfiring/st rake" );
49
-
aoe_builder->add_action( "rake,target_if=max:dot.rake.ticking,if=!dot.rake.ticking&hero_tree.wildstalker","if wildstalker make sure you have at least one rake up" );
50
-
aoe_builder->add_action( "moonfire_cat,target_if=refreshable,if=!(variable.need_bt&buff.bt_moonfire.up)&!buff.clearcasting.at_max_stacks","li moonfire is better than non-dcr rake in aoe if we already have 1 rake" );
aoe_builder->add_action( "swipe_cat,if=talent.wild_slashes&spell_targets.swipe_cat>=3&!(variable.need_bt&buff.bt_swipe.up)","at 3t with wild slashes, swipe is better than moonfiring/st rake" );
53
+
aoe_builder->add_action( "rake,target_if=max:dot.rake.ticking,if=!dot.rake.ticking&hero_tree.wildstalker","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" );
54
+
aoe_builder->add_action( "moonfire_cat,target_if=refreshable,if=!(variable.need_bt&buff.bt_moonfire.up)&!buff.clearcasting.at_max_stacks","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" );
builder->add_action( "shadowmeld,if=!variable.stealth_bonus&(prev_gcd.1.ferocious_bite|prev_gcd.1.rip)&buff.bs_inc.up","TODO: with incarnation and dungeonslice/dungeonroute, we almost certainly want to split meld use away from prowl use to take advantage of Killing Strikes" );
builder->add_action( "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)","freely upgrade rakes unless you're dotc inside berserk-- in which case only upgrade to stealth rakes" );
cooldown->add_action( "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)","always line up convoke with berserk if you can" );
100
101
101
-
finisher->add_action( "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)))","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." );
102
-
finisher->add_action( "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)","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" );
103
-
finisher->add_action( "call_action_list,name=aoe_builder,if=hero_tree.druid_of_the_claw&buff.bs_inc.up&!buff.ravage.up&spell_targets>=2","only bite with ravage in aoe with berserk" );
102
+
finisher->add_action( "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)","primal wrath in pandemic during berserk, or with 6.5s left outside berserk" );
103
+
finisher->add_action( "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)","rip instead in single target" );
104
+
finisher->add_action( "call_action_list,name=aoe_builder,if=hero_tree.druid_of_the_claw&buff.bs_inc.up&!buff.ravage.up&spell_targets>=2","only bite with ravage in aoe during berserk" );
105
+
finisher->add_action( "pool_resource,for_next=1","bite > clip pw if pw isnt talented / its single target / sub-7 targets + vine up / sub 8 targets + ravage up / rampant talented" );
106
+
finisher->add_action( "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)","low energy bite during berserk/wildstalker aoe" );
finisher->add_action( "primal_wrath,if=spell_targets.primal_wrath>1","primal wrath fallback (2+ targets, no vine or 7+ targets, wildstalker, no rampant)" );
108
110
109
111
cd_variable->add_action( "variable,name=convokeCountRemaining,value=floor(((fight_remains-variable.convoke_cd)%cooldown.convoke_the_spirits.duration)+(fight_remains>cooldown.convoke_the_spirits.remains))","TLDR, maximize number of cooldown overlaps whilst minimizing number of casts lost." );
0 commit comments