# Evaluates a trinkets cooldown, divided by pillar of frost, empower rune weapon, or breath of sindragosa's cooldown. If it's value has no remainder return 1, else return 0.5. actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=trinket.1.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.1.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.1.cooldown.duration=0)) actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=trinket.2.has_use_buff&(talent.pillar_of_frost&!talent.breath_of_sindragosa&(trinket.2.cooldown.duration%%cooldown.pillar_of_frost.duration=0)|talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.duration%%trinket.2.cooldown.duration=0)) # Estimates a trinkets value by comparing the cooldown of the trinket, divided by the duration of the buff it provides. Has a strength modifier to give a higher priority to strength trinkets, as well as a modifier for if a trinket will or will not sync with cooldowns. actions.precombat+=/variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!trinket.1.has_use_buff&trinket.2.has_use_buff|trinket.2.has_use_buff&((trinket.2.cooldown.duration%trinket.2.proc.any_dps.duration)*(1.5+trinket.2.has_buff.strength)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%trinket.1.proc.any_dps.duration)*(1.5+trinket.1.has_buff.strength)*(variable.trinket_1_sync)) actions.precombat+=/variable,name=rw_buffs,value=talent.gathering_storm|talent.everfrost|talent.biting_cold actions.precombat+=/variable,name=2h_check,value=main_hand.2h&talent.might_of_the_frozen_wastes # Interrupt actions+=/mind_freeze actions+=/strangulate # Prevent specified trinkets being used with automatic lines actions+=/variable,name=specified_trinket,value= actions+=/variable,name=st_planning,value=active_enemies=1&(raid_event.adds.in>15|!raid_event.adds.exists) actions+=/variable,name=adds_remain,value=active_enemies>=2&(!raid_event.adds.exists|raid_event.adds.exists&raid_event.adds.remains>5) actions+=/variable,name=rime_buffs,value=buff.rime.react&(talent.rage_of_the_frozen_champion|talent.avalanche|talent.icebreaker) actions+=/variable,name=rp_buffs,value=talent.unleashed_frenzy&(buff.unleashed_frenzy.remains=3)&(!talent.improved_obliterate&!talent.frigid_executioner&!talent.frostreaper&!talent.might_of_the_frozen_wastes|!talent.cleaving_strikes|talent.cleaving_strikes&(active_enemies>6|!death_and_decay.ticking&active_enemies>3)) # 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. actions+=/variable,name=oblit_pooling_time,op=setif,value=((cooldown.pillar_of_frost.remains_expected+1)%gcd)%((rune+3)*(runic_power+5))*100,value_else=gcd*2,condition=runic_power<35&rune<2&cooldown.pillar_of_frost.remains_expected<10 actions+=/variable,name=breath_pooling_time,op=setif,value=((cooldown.breath_of_sindragosa.remains+1)%gcd)%((rune+1)*(runic_power+20))*100,value_else=gcd*2,condition=runic_power.deficit>10&cooldown.breath_of_sindragosa.remains<10 actions+=/variable,name=pooling_runes,value=talent.obliteration&cooldown.pillar_of_frost.remains_expected=2&(!talent.obliteration|talent.obliteration&(!buff.pillar_of_frost.up|buff.pillar_of_frost.up&!buff.killing_machine.react)) actions+=/glacial_advance,if=active_enemies>=2&variable.rp_buffs&talent.obliteration&talent.breath_of_sindragosa&!buff.pillar_of_frost.up&!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains>variable.breath_pooling_time actions+=/glacial_advance,if=active_enemies>=2&variable.rp_buffs&talent.breath_of_sindragosa&!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains>variable.breath_pooling_time actions+=/glacial_advance,if=active_enemies>=2&variable.rp_buffs&!talent.breath_of_sindragosa&talent.obliteration&!buff.pillar_of_frost.up actions+=/frost_strike,if=active_enemies=1&variable.rp_buffs&talent.obliteration&talent.breath_of_sindragosa&!buff.pillar_of_frost.up&!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains>variable.breath_pooling_time actions+=/frost_strike,if=active_enemies=1&variable.rp_buffs&talent.breath_of_sindragosa&!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains>variable.breath_pooling_time actions+=/frost_strike,if=active_enemies=1&variable.rp_buffs&!talent.breath_of_sindragosa&talent.obliteration&!buff.pillar_of_frost.up actions+=/remorseless_winter,if=!talent.breath_of_sindragosa&!talent.obliteration&variable.rw_buffs actions+=/remorseless_winter,if=talent.obliteration&active_enemies>=3&variable.adds_remain # Choose Action list to run actions+=/call_action_list,name=trinkets actions+=/call_action_list,name=cooldowns actions+=/call_action_list,name=racials actions+=/call_action_list,name=covenants actions+=/call_action_list,name=cold_heart,if=talent.cold_heart&(!buff.killing_machine.up|talent.breath_of_sindragosa)&((debuff.razorice.stack=5|!death_knight.runeforge.razorice&!talent.glacial_advance&!talent.avalanche)|fight_remains<=gcd) actions+=/run_action_list,name=breath_oblit,if=buff.breath_of_sindragosa.up&talent.obliteration&buff.pillar_of_frost.up actions+=/run_action_list,name=breath,if=buff.breath_of_sindragosa.up&(!talent.obliteration|talent.obliteration&!buff.pillar_of_frost.up) actions+=/run_action_list,name=obliteration,if=talent.obliteration&buff.pillar_of_frost.up&!buff.breath_of_sindragosa.up actions+=/call_action_list,name=aoe,if=active_enemies>=2 actions+=/call_action_list,name=single_target,if=active_enemies=1 # AoE Action List actions.aoe=remorseless_winter actions.aoe+=/howling_blast,if=buff.rime.react|!dot.frost_fever.ticking actions.aoe+=/glacial_advance,if=!variable.pooling_runic_power&variable.rp_buffs actions.aoe+=/obliterate,if=buff.killing_machine.react&talent.cleaving_strikes&death_and_decay.ticking&!variable.frostscythe_priority actions.aoe+=/glacial_advance,if=!variable.pooling_runic_power actions.aoe+=/frostscythe,if=variable.frostscythe_priority actions.aoe+=/obliterate,if=!variable.frostscythe_priority actions.aoe+=/frost_strike,if=!variable.pooling_runic_power&!talent.glacial_advance actions.aoe+=/horn_of_winter,if=rune<2&runic_power.deficit>25 actions.aoe+=/arcane_torrent,if=runic_power.deficit>25 # Breath Active Rotation actions.breath=remorseless_winter,if=variable.rw_buffs&variable.adds_remain actions.breath+=/howling_blast,if=variable.rime_buffs&runic_power>(45-talent.rage_of_the_frozen_champion*8) actions.breath+=/horn_of_winter,if=rune<2&runic_power.deficit>25 actions.breath+=/obliterate,cycle_targets=1,if=buff.killing_machine.react&!variable.frostscythe_priority actions.breath+=/frostscythe,if=buff.killing_machine.react&variable.frostscythe_priority actions.breath+=/frostscythe,if=variable.frostscythe_priority&runic_power>45 actions.breath+=/obliterate,cycle_targets=1,if=runic_power.deficit>40|buff.pillar_of_frost.up&runic_power.deficit>15 actions.breath+=/death_and_decay,if=!death_and_decay.ticking&(runic_power<32&rune.time_to_2>runic_power%16) actions.breath+=/remorseless_winter,if=runic_power<32&rune.time_to_2>runic_power%16 actions.breath+=/howling_blast,if=runic_power<32&rune.time_to_2>runic_power%16 actions.breath+=/obliterate,cycle_targets=1,if=runic_power.deficit>25 actions.breath+=/howling_blast,if=buff.rime.react actions.breath+=/arcane_torrent,if=runic_power<60 # Breath & Obliteration Active Rotation actions.breath_oblit=frostscythe,if=buff.killing_machine.up&variable.frostscythe_priority actions.breath_oblit+=/obliterate,cycle_targets=1,if=buff.killing_machine.up actions.breath_oblit+=/howling_blast,if=buff.rime.react actions.breath_oblit+=/howling_blast,if=!buff.killing_machine.up actions.breath_oblit+=/horn_of_winter,if=runic_power.deficit>25 actions.breath_oblit+=/arcane_torrent,if=runic_power.deficit>20 # Cold Heart actions.cold_heart=chains_of_ice,if=fight_remains=4|variable.twohand_check&buff.cold_heart.stack>8)|buff.killing_machine.up&(!variable.twohand_check&buff.cold_heart.stack>8|variable.twohand_check&buff.cold_heart.stack>10)) actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&buff.pillar_of_frost.up&buff.cold_heart.stack>=10&(buff.pillar_of_frost.remains15&(buff.cold_heart.stack>=10&buff.unholy_strength.up|buff.cold_heart.stack>=13) actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&!death_knight.runeforge.fallen_crusader&buff.cold_heart.stack>=10&!buff.pillar_of_frost.up&cooldown.pillar_of_frost.remains>20 actions.cold_heart+=/chains_of_ice,if=talent.obliteration&!buff.pillar_of_frost.up&(buff.cold_heart.stack>=14&(buff.unholy_strength.up|buff.chaos_bane.up)|buff.cold_heart.stack>=19|cooldown.pillar_of_frost.remains<3&buff.cold_heart.stack>=14) # Cooldowns actions.cooldowns=potion,if=variable.cooldown_check|fight_remains<25 actions.cooldowns+=/empower_rune_weapon,if=talent.obliteration&!buff.empower_rune_weapon.up&rune<6&(cooldown.pillar_of_frost.remains<7&(variable.adds_remain|variable.st_planning)|buff.pillar_of_frost.up)|fight_remains<20 actions.cooldowns+=/empower_rune_weapon,use_off_gcd=1,if=buff.breath_of_sindragosa.up&talent.breath_of_sindragosa&!buff.empower_rune_weapon.up&(runic_power<70&rune<3|time<10) actions.cooldowns+=/empower_rune_weapon,use_off_gcd=1,if=!talent.breath_of_sindragosa&!talent.obliteration&!buff.empower_rune_weapon.up&rune<5&(cooldown.pillar_of_frost.remains_expected<7|buff.pillar_of_frost.up|!talent.pillar_of_frost) actions.cooldowns+=/abomination_limb_talent,if=talent.obliteration&!buff.pillar_of_frost.up&(variable.adds_remain|variable.st_planning)|fight_remains<12 actions.cooldowns+=/abomination_limb_talent,if=talent.breath_of_sindragosa&(variable.adds_remain|variable.st_planning) actions.cooldowns+=/abomination_limb_talent,if=!talent.breath_of_sindragosa&!talent.obliteration&(variable.adds_remain|variable.st_planning) actions.cooldowns+=/chill_streak,if=active_enemies>=2&(!death_and_decay.ticking&talent.cleaving_strikes|!talent.cleaving_strikes|active_enemies<=5) actions.cooldowns+=/pillar_of_frost,if=talent.obliteration&(variable.adds_remain|variable.st_planning)&(buff.empower_rune_weapon.up|cooldown.empower_rune_weapon.remains)|fight_remains<12 actions.cooldowns+=/pillar_of_frost,if=talent.breath_of_sindragosa&(variable.adds_remain|variable.st_planning)&(!talent.icecap&runic_power>70|talent.icecap&cooldown.breath_of_sindragosa.remains) actions.cooldowns+=/pillar_of_frost,if=talent.icecap&!talent.obliteration&!talent.breath_of_sindragosa&(variable.adds_remain|variable.st_planning) actions.cooldowns+=/breath_of_sindragosa,if=runic_power>60&(variable.adds_remain|variable.st_planning)|fight_remains<30 actions.cooldowns+=/frostwyrms_fury,if=active_enemies=1&(talent.pillar_of_frost&buff.pillar_of_frost.remains15+raid_event.adds.duration|talent.absolute_zero&raid_event.adds.in>15+raid_event.adds.duration))|fight_remains<3 actions.cooldowns+=/frostwyrms_fury,if=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_expected-raid_event.adds.in-raid_event.adds.duration)&(buff.pillar_of_frost.remains5&target.time_to_pct_35<5&active_enemies<=2&(buff.breath_of_sindragosa.up&runic_power>40|!buff.breath_of_sindragosa.up&!talent.obliteration|talent.obliteration&!buff.pillar_of_frost.up) actions.cooldowns+=/sacrificial_pact,if=!talent.glacial_advance&!buff.breath_of_sindragosa.up&pet.ghoul.remains3 actions.cooldowns+=/any_dnd,if=!death_and_decay.ticking&variable.adds_remain&(buff.pillar_of_frost.up&buff.pillar_of_frost.remains>5|!buff.pillar_of_frost.up)&(active_enemies>5|talent.cleaving_strikes&active_enemies>=2) # Covenant Abilities actions.covenants=deaths_due,if=(variable.rw_buffs&cooldown.remorseless_winter.remains|!variable.rw_buffs)&(!talent.obliteration|talent.obliteration&active_enemies>=2&cooldown.pillar_of_frost.remains|active_enemies=1)&(variable.st_planning|variable.adds_remain) actions.covenants+=/swarming_mist,if=runic_power.deficit>13&cooldown.pillar_of_frost.remains<3&!talent.breath_of_sindragosa&variable.st_planning actions.covenants+=/swarming_mist,if=!talent.breath_of_sindragosa&variable.adds_remain actions.covenants+=/swarming_mist,if=talent.breath_of_sindragosa&(buff.breath_of_sindragosa.up&(variable.st_planning&runic_power.deficit>40|variable.adds_remain&runic_power.deficit>60|variable.adds_remain&raid_event.adds.remains<9&raid_event.adds.exists)|!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains) actions.covenants+=/abomination_limb_covenant,if=cooldown.pillar_of_frost.remains65&cooldown.breath_of_sindragosa.remains<2|!talent.breath_of_sindragosa) actions.covenants+=/abomination_limb_covenant,if=variable.adds_remain actions.covenants+=/shackle_the_unworthy,if=variable.st_planning&(cooldown.pillar_of_frost.remains<3|talent.icecap) actions.covenants+=/shackle_the_unworthy,if=variable.adds_remain actions.covenants+=/fleshcraft,if=!buff.pillar_of_frost.up&(soulbind.pustule_eruption|soulbind.volatile_solvent&!buff.volatile_solvent_humanoid.up),interrupt_immediate=1,interrupt_global=1,interrupt_if=soulbind.volatile_solvent # Obliteration Active Rotation actions.obliteration=remorseless_winter,if=active_enemies>3 actions.obliteration+=/obliterate,cycle_targets=1,if=buff.killing_machine.react&!variable.frostscythe_priority actions.obliteration+=/frostscythe,if=buff.killing_machine.react&variable.frostscythe_priority actions.obliteration+=/howling_blast,if=!dot.frost_fever.ticking&!buff.killing_machine.react|!buff.killing_machine.react&buff.rime.react actions.obliteration+=/frost_strike,cycle_targets=1,if=!buff.killing_machine.react&variable.rp_buffs&!variable.pooling_runic_power&(!talent.glacial_advance|active_enemies=1) actions.obliteration+=/howling_blast,if=buff.rime.react&buff.killing_machine.react actions.obliteration+=/glacial_advance,if=!variable.pooling_runic_power&variable.rp_buffs&!buff.killing_machine.react&active_enemies>=2 actions.obliteration+=/frost_strike,cycle_targets=1,if=!buff.killing_machine.react&!variable.pooling_runic_power&(!talent.glacial_advance|active_enemies=1) actions.obliteration+=/howling_blast,if=!buff.killing_machine.react&runic_power<25 actions.obliteration+=/arcane_torrent,if=rune<1&runic_power<25 actions.obliteration+=/glacial_advance,if=!variable.pooling_runic_power&active_enemies>=2 actions.obliteration+=/frost_strike,cycle_targets=1,if=!variable.pooling_runic_power&(!talent.glacial_advance|active_enemies=1) actions.obliteration+=/howling_blast,if=buff.rime.react actions.obliteration+=/obliterate,cycle_targets=1 # Racial Abilities actions.racials=blood_fury,if=variable.cooldown_check actions.racials+=/berserking,if=variable.cooldown_check actions.racials+=/arcane_pulse,if=variable.cooldown_check actions.racials+=/lights_judgment,if=variable.cooldown_check actions.racials+=/ancestral_call,if=variable.cooldown_check actions.racials+=/fireblood,if=variable.cooldown_check actions.racials+=/bag_of_tricks,if=talent.obliteration&!buff.pillar_of_frost.up&buff.unholy_strength.up actions.racials+=/bag_of_tricks,if=!talent.obliteration&buff.pillar_of_frost.up&(buff.unholy_strength.up&buff.unholy_strength.remains25&talent.obliteration&talent.breath_of_sindragosa actions.single_target+=/frost_strike,if=!variable.pooling_runic_power&(variable.rp_buffs|runic_power.deficit<25) actions.single_target+=/howling_blast,if=variable.rime_buffs actions.single_target+=/glacial_advance,if=!variable.pooling_runic_power&!death_knight.runeforge.razorice&(debuff.razorice.stack<5|debuff.razorice.remains25 actions.single_target+=/arcane_torrent,if=runic_power.deficit>20 actions.single_target+=/frost_strike,if=!variable.pooling_runic_power actions.trinkets=use_item,name=gavel_of_the_first_arbiter # Trinkets The trinket with the highest estimated value, will be used first and paired with Pillar of Frost. actions.trinkets+=/use_item,slot=trinket1,if=(buff.pillar_of_frost.up|buff.breath_of_sindragosa.up)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains actions.trinkets+=/use_item,slot=trinket2,if=(buff.pillar_of_frost.up|buff.breath_of_sindragosa.up)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains # If only one on use trinket provides a buff, use the other on cooldown. Or if neither trinket provides a buff, use both on cooldown. actions.trinkets+=/use_item,slot=trinket1,if=(!trinket.1.has_use_buff&(trinket.2.cooldown.remains|!trinket.2.has_use_buff)|talent.pillar_of_frost&cooldown.pillar_of_frost.remains>20|!talent.pillar_of_frost) actions.trinkets+=/use_item,slot=trinket2,if=(!trinket.2.has_use_buff&(trinket.1.cooldown.remains|!trinket.1.has_use_buff)|talent.pillar_of_frost&cooldown.pillar_of_frost.remains>20|!talent.pillar_of_frost)