@@ -229,11 +229,12 @@ void frost( player_t* p )
229
229
precombat->add_action ( " variable,name=rw_buffs,value=talent.gathering_storm|talent.biting_cold" );
230
230
precombat->add_action ( " variable,name=breath_rp_cost,value=dbc.power.9067.cost_per_tick%10" );
231
231
precombat->add_action ( " variable,name=static_rime_buffs,value=talent.rage_of_the_frozen_champion|talent.icebreaker|talent.bind_in_darkness" );
232
- precombat->add_action ( " variable,name=breath_rp_threshold,default=50 ,op=reset" , " APL Variable Option: How much Runic Power to pool before casting Breath of Sindragosa" );
232
+ precombat->add_action ( " variable,name=breath_rp_threshold,default=60 ,op=reset" , " APL Variable Option: How much Runic Power to pool before casting Breath of Sindragosa" );
233
233
precombat->add_action ( " variable,name=erw_breath_rp_trigger,default=70,op=reset" , " APL Variable Option: Used with erw_breath_rune_trigger to determine when resources are low enough to use Empower Rune Weapon" );
234
234
precombat->add_action ( " variable,name=erw_breath_rune_trigger,default=3,op=reset" , " APL Variable Option: Used with erw_breath_rp_trigger to determine when resources are low enough to use Empower Rune Weapon" );
235
235
precombat->add_action ( " variable,name=oblit_rune_pooling,default=4,op=reset" , " APL Variable Option: How many Runes the APL will try to pool for Pillar of Frost with Obliteration. It is not a guarantee, just a goal." );
236
236
precombat->add_action ( " variable,name=breath_rime_rp_threshold,default=60,op=reset" , " APL Variable Option: Amount of Runic Power pooled during Breath of Sindragosa to be able to use Rime" );
237
+ precombat->add_action ( " variable,name=st_dnd,default=1,op=reset" , " APL Variable Option: Skip single target Death and Decay use" );
237
238
238
239
default_->add_action ( " auto_attack" );
239
240
default_->add_action ( " call_action_list,name=variables" , " Choose Action list to run" );
@@ -247,7 +248,7 @@ void frost( player_t* p )
247
248
default_->add_action ( " call_action_list,name=aoe,if=active_enemies>=2" );
248
249
default_->add_action ( " call_action_list,name=single_target,if=active_enemies=1" );
249
250
250
- aoe->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.down )*5),if=buff.killing_machine.react&talent.cleaving_strikes&buff.death_and_decay.up" , " AoE Action List" );
251
+ aoe->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.up )*5),if=buff.killing_machine.react&talent.cleaving_strikes&buff.death_and_decay.up" , " AoE Action List" );
251
252
aoe->add_action ( " frost_strike,target_if=max:((talent.shattering_blade&debuff.razorice.stack=5)*5)+(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=!variable.pooling_runic_power&debuff.razorice.stack=5&talent.shattering_blade&(talent.shattered_frost|active_enemies<4)" );
252
253
aoe->add_action ( " howling_blast,if=buff.rime.react" );
253
254
aoe->add_action ( " glacial_advance,target_if=max:(debuff.razorice.stack),if=!variable.pooling_runic_power&(variable.ga_priority|debuff.razorice.stack<5)" );
@@ -257,13 +258,11 @@ void frost( player_t* p )
257
258
aoe->add_action ( " arcane_torrent,if=runic_power.deficit>25" );
258
259
aoe->add_action ( " abomination_limb" );
259
260
260
- breath->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.down )*5),if=buff.killing_machine.react=2 " , " Breath Active Rotation" );
261
- breath->add_action ( " howling_blast,if=(variable.rime_buffs|!buff.killing_machine.react&buff.pillar_of_frost.up&talent.obliteration&!buff.bonegrinder_frost.up )&runic_power>(variable.breath_rime_rp_threshold-(talent.rage_of_the_frozen_champion*(dbc.effect.842306.base_value%10)))|!dot.frost_fever.ticking" );
261
+ breath->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.up )*5),if=buff.killing_machine.react&buff.pillar_of_frost.up " , " Breath Active Rotation" );
262
+ breath->add_action ( " howling_blast,if=(variable.rime_buffs|!buff.killing_machine.react&buff.pillar_of_frost.up&talent.obliteration)&runic_power>(variable.breath_rime_rp_threshold-(talent.rage_of_the_frozen_champion*(dbc.effect.842306.base_value%10)))|!dot.frost_fever.ticking" );
262
263
breath->add_action ( " horn_of_winter,if=rune<2&runic_power.deficit>30&(!buff.empower_rune_weapon.up|runic_power<variable.breath_rp_cost*2*gcd.max)" );
263
- breath->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.down )*5),if=buff.killing_machine.react|runic_power.deficit>20" );
264
+ breath->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.up )*5),if=buff.killing_machine.react|runic_power.deficit>20" );
264
265
breath->add_action ( " soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_pct_0>5&active_enemies<=1&rune>2" );
265
- breath->add_action ( " remorseless_winter,if=variable.breath_dying" );
266
- breath->add_action ( " death_and_decay,if=!death_and_decay.ticking&(variable.st_planning&talent.unholy_ground&runic_power.deficit>=10&!talent.obliteration|variable.breath_dying)" );
267
266
breath->add_action ( " howling_blast,if=variable.breath_dying" );
268
267
breath->add_action ( " arcane_torrent,if=runic_power<60" );
269
268
breath->add_action ( " howling_blast,if=buff.rime.react" );
@@ -283,16 +282,16 @@ void frost( player_t* p )
283
282
cooldowns->add_action ( " pillar_of_frost,if=talent.obliteration&!talent.breath_of_sindragosa&(!hero_tree.deathbringer|(rune>=2|(rune>=1&cooldown.empower_rune_weapon.ready)))&variable.sending_cds|fight_remains<20" );
284
283
cooldowns->add_action ( " pillar_of_frost,if=talent.breath_of_sindragosa&variable.sending_cds&(cooldown.breath_of_sindragosa.remains>10|!variable.use_breath)&buff.unleashed_frenzy.up&(!hero_tree.deathbringer|rune>1)" );
285
284
cooldowns->add_action ( " pillar_of_frost,if=!talent.obliteration&!talent.breath_of_sindragosa&variable.sending_cds" );
286
- cooldowns->add_action ( " breath_of_sindragosa,use_off_gcd=1,if=!buff.breath_of_sindragosa.up&runic_power>variable.breath_rp_threshold&(rune<2|runic_power>80)&(cooldown.pillar_of_frost.ready &variable.use_breath|fight_remains<30)|(time<10&rune<1)" );
287
- cooldowns->add_action ( " reapers_mark,target_if=first:debuff.reapers_mark_debuff.down,if=buff.pillar_of_frost.up|cooldown.pillar_of_frost.remains>5" );
285
+ cooldowns->add_action ( " breath_of_sindragosa,use_off_gcd=1,if=!buff.breath_of_sindragosa.up&runic_power>= variable.breath_rp_threshold&(rune<2|runic_power>80)&(cooldown.pillar_of_frost.remains<gcd.max &variable.use_breath|fight_remains<30)|(time<10&rune<= 1)" );
286
+ cooldowns->add_action ( " reapers_mark,target_if=first:debuff.reapers_mark_debuff.down,if=buff.pillar_of_frost.up|cooldown.pillar_of_frost.remains>5|fight_remains<20 " );
288
287
cooldowns->add_action ( " frostwyrms_fury,if=hero_tree.rider_of_the_apocalypse&talent.apocalypse_now&variable.sending_cds&(!talent.breath_of_sindragosa&buff.pillar_of_frost.up|buff.breath_of_sindragosa.up)|fight_remains<20" );
289
288
cooldowns->add_action ( " frostwyrms_fury,if=!talent.apocalypse_now&active_enemies=1&(talent.pillar_of_frost&buff.pillar_of_frost.up&!talent.obliteration|!talent.pillar_of_frost)&(!raid_event.adds.exists|raid_event.adds.in>cooldown.frostwyrms_fury.duration+raid_event.adds.duration)&variable.fwf_buffs|fight_remains<3" );
290
289
cooldowns->add_action ( " frostwyrms_fury,if=!talent.apocalypse_now&active_enemies>=2&(talent.pillar_of_frost&buff.pillar_of_frost.up|raid_event.adds.exists&raid_event.adds.up&raid_event.adds.in<cooldown.pillar_of_frost.remains-raid_event.adds.in-raid_event.adds.duration)&variable.fwf_buffs" );
291
290
cooldowns->add_action ( " frostwyrms_fury,if=!talent.apocalypse_now&talent.obliteration&(talent.pillar_of_frost&buff.pillar_of_frost.up&!main_hand.2h|!buff.pillar_of_frost.up&main_hand.2h&cooldown.pillar_of_frost.remains|!talent.pillar_of_frost)&variable.fwf_buffs&(!raid_event.adds.exists|raid_event.adds.in>cooldown.frostwyrms_fury.duration+raid_event.adds.duration)" );
292
291
cooldowns->add_action ( " raise_dead,use_off_gcd=1" );
293
292
cooldowns->add_action ( " soul_reaper,if=talent.reaper_of_souls&buff.reaper_of_souls.up&buff.killing_machine.react<2" );
294
293
cooldowns->add_action ( " frostscythe,if=!buff.killing_machine.react&!buff.pillar_of_frost.up" );
295
- cooldowns->add_action ( " any_dnd,if=hero_tree.deathbringer&!buff.death_and_decay.up&variable.st_planning&cooldown.reapers_mark.remains<gcd.max*2" );
294
+ cooldowns->add_action ( " any_dnd,if=hero_tree.deathbringer&!buff.death_and_decay.up&variable.st_planning&cooldown.reapers_mark.remains<gcd.max*2&talent.unholy_ground&variable.st_dnd " );
296
295
cooldowns->add_action ( " any_dnd,if=!buff.death_and_decay.up&(raid_event.adds.remains>5|!raid_event.adds.exists&active_enemies>1)&(buff.pillar_of_frost.up&buff.killing_machine.react&(talent.enduring_strength|buff.pillar_of_frost.remains>5))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2)" );
297
296
cooldowns->add_action ( " any_dnd,if=!buff.death_and_decay.up&(raid_event.adds.remains>5|!raid_event.adds.exists&active_enemies>1)&(!buff.pillar_of_frost.up&(cooldown.death_and_decay.charges=2&cooldown.pillar_of_frost.remains))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2)" );
298
297
cooldowns->add_action ( " any_dnd,if=!buff.death_and_decay.up&(raid_event.adds.remains>5|!raid_event.adds.exists&active_enemies>1)&(!buff.pillar_of_frost.up&(cooldown.death_and_decay.charges=1&cooldown.pillar_of_frost.remains>(cooldown.death_and_decay.duration-(cooldown.death_and_decay.duration*(cooldown.death_and_decay.charges_fractional%%1)))))&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2)" );
@@ -303,7 +302,7 @@ void frost( player_t* p )
303
302
high_prio_actions->add_action ( " antimagic_shell,if=runic_power.deficit>40&death_knight.first_ams_cast<time&(!talent.breath_of_sindragosa|talent.breath_of_sindragosa&variable.true_breath_cooldown>cooldown.antimagic_shell.duration)" );
304
303
high_prio_actions->add_action ( " howling_blast,if=!dot.frost_fever.ticking&active_enemies>=2&(!talent.breath_of_sindragosa|!buff.breath_of_sindragosa.up)&(!talent.obliteration|talent.wither_away|talent.obliteration&(!cooldown.pillar_of_frost.ready|buff.pillar_of_frost.up&!buff.killing_machine.react))" , " Maintain Frost Fever, Icy Talons and Unleashed Frenzy" );
305
304
306
- obliteration->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.down )*5),if=buff.killing_machine.react&(buff.exterminate.up|fight_remains<gcd*2)" , " Obliteration Active Rotation" );
305
+ obliteration->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice+((hero_tree.deathbringer&debuff.reapers_mark_debuff.up )*5),if=buff.killing_machine.react&(buff.exterminate.up|fight_remains<gcd*2)" , " Obliteration Active Rotation" );
307
306
obliteration->add_action ( " frost_strike,target_if=max:((talent.shattering_blade&debuff.razorice.stack=5)*5)+(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=debuff.razorice.stack=5&talent.shattering_blade&talent.a_feast_of_souls&buff.a_feast_of_souls.up" );
308
307
obliteration->add_action ( " soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_pct_0>5&active_enemies<=1&rune>2&!buff.killing_machine.react" );
309
308
obliteration->add_action ( " obliterate,target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice,if=buff.killing_machine.react" );
@@ -332,12 +331,13 @@ void frost( player_t* p )
332
331
single_target->add_action ( " frost_strike,if=debuff.razorice.stack=5&talent.shattering_blade" );
333
332
single_target->add_action ( " soul_reaper,if=fight_remains>5&target.time_to_pct_35<5&target.time_to_pct_0>5&!buff.killing_machine.react" );
334
333
single_target->add_action ( " obliterate,if=buff.killing_machine.react&rune>3" );
334
+ single_target->add_action ( " obliterate,if=variable.pooling_runic_power&runic_power.deficit>=20" );
335
335
single_target->add_action ( " howling_blast,if=buff.rime.react" );
336
336
single_target->add_action ( " frost_strike,if=!variable.pooling_runic_power&runic_power.deficit<=30" );
337
- single_target->add_action ( " obliterate,if=cooldown.pillar_of_frost.remains>4*gcd.max|buff.gathering_storm.up " );
337
+ single_target->add_action ( " obliterate,if=!variable.pooling_runes " );
338
338
single_target->add_action ( " horn_of_winter,if=rune<2&runic_power.deficit>25&(!talent.breath_of_sindragosa|variable.true_breath_cooldown>cooldown.horn_of_winter.duration-15)" );
339
339
single_target->add_action ( " arcane_torrent,if=!talent.breath_of_sindragosa&runic_power.deficit>20" );
340
- single_target->add_action ( " frost_strike" );
340
+ single_target->add_action ( " frost_strike,if=!variable.pooling_runic_power " );
341
341
single_target->add_action ( " abomination_limb" );
342
342
343
343
trinkets->add_action ( " use_item,use_off_gcd=1,name=treacherous_transmitter,if=cooldown.pillar_of_frost.remains<6&variable.sending_cds&(variable.trinket_1_buffs&variable.trinket_2_buffs|!talent.breath_of_sindragosa|cooldown.breath_of_sindragosa.remains<6)|fight_remains<30" , " Trinkets" );
@@ -357,10 +357,10 @@ void frost( player_t* p )
357
357
variables->add_action ( " variable,name=rime_buffs,value=buff.rime.react&(variable.static_rime_buffs|talent.avalanche&!talent.arctic_assault&debuff.razorice.stack<5)" );
358
358
variables->add_action ( " variable,name=rp_buffs,value=talent.unleashed_frenzy&(buff.unleashed_frenzy.remains<gcd.max*3|buff.unleashed_frenzy.stack<3)|talent.icy_talons&(buff.icy_talons.remains<gcd.max*3|buff.icy_talons.stack<(3+(2*talent.smothering_offense)))" );
359
359
variables->add_action ( " variable,name=cooldown_check,value=(!talent.breath_of_sindragosa|buff.breath_of_sindragosa.up)&(talent.pillar_of_frost&buff.pillar_of_frost.up&(talent.obliteration&buff.pillar_of_frost.remains>10|!talent.obliteration)|!talent.pillar_of_frost&buff.empower_rune_weapon.up|!talent.pillar_of_frost&!talent.empower_rune_weapon|active_enemies>=2&buff.pillar_of_frost.up)" );
360
- variables->add_action ( " variable,name=true_breath_cooldown,op=setif,value=cooldown.breath_of_sindragosa.remains,value_else=cooldown.pillar_of_frost.remains,condition=cooldown.breath_of_sindragosa.remains>cooldown.pillar_of_frost.remains" );
361
- variables->add_action ( " variable,name=oblit_pooling_time,op=setif,value=((cooldown.pillar_of_frost.remains+1)%gcd.max)%(( rune+1)*((runic_power+5)))*100 ,value_else=3 ,condition=rune<variable.oblit_rune_pooling&cooldown.pillar_of_frost.remains<10" , " Formulaic approach to determine the time before these abilities come off cooldown that the simulation should star to pool resources. Capped at 15s in the run_action_list call." );
360
+ variables->add_action ( " variable,name=true_breath_cooldown,op=setif,value=cooldown.breath_of_sindragosa.remains,value_else=cooldown.pillar_of_frost.remains,condition=cooldown.breath_of_sindragosa.remains>cooldown.pillar_of_frost.remains" , " Breath and Pillar are desynced with Icecap, so return whichever has the longer cooldown to track when Breath will be used next " );
361
+ variables->add_action ( " variable,name=oblit_pooling_time,op=setif,value=((cooldown.pillar_of_frost.remains+1)%gcd.max)%(rune+1)*6 ,value_else=5 ,condition=rune<variable.oblit_rune_pooling&cooldown.pillar_of_frost.remains<10" , " Formulaic approach to determine the time before these abilities come off cooldown that the simulation should star to pool resources. Capped at 15s in the run_action_list call." );
362
362
variables->add_action ( " variable,name=breath_pooling_time,op=setif,value=((variable.true_breath_cooldown+1)%gcd.max)%((rune+1)*(runic_power+20))*100,value_else=0,condition=runic_power.deficit>10&variable.true_breath_cooldown<10" );
363
- variables->add_action ( " variable,name=pooling_runes,value=rune<variable.oblit_rune_pooling&talent.obliteration&(!talent.breath_of_sindragosa|variable.true_breath_cooldown)& cooldown.pillar_of_frost.remains<variable.oblit_pooling_time" );
363
+ variables->add_action ( " variable,name=pooling_runes,value=rune<variable.oblit_rune_pooling&talent.obliteration&cooldown.pillar_of_frost.remains<variable.oblit_pooling_time" );
364
364
variables->add_action ( " variable,name=pooling_runic_power,value=talent.breath_of_sindragosa&(variable.true_breath_cooldown<variable.breath_pooling_time|fight_remains<30&!cooldown.breath_of_sindragosa.remains)" );
365
365
variables->add_action ( " variable,name=ga_priority,value=(!talent.shattered_frost&talent.shattering_blade&active_enemies>=4)|(!talent.shattered_frost&!talent.shattering_blade&active_enemies>=2)" );
366
366
variables->add_action ( " variable,name=breath_dying,value=runic_power<variable.breath_rp_cost*2*gcd.max&rune.time_to_2>runic_power%variable.breath_rp_cost" );
0 commit comments