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.
184 lines
18 KiB
184 lines
18 KiB
## Death Knight Frost
|
|
## November 13, 2021
|
|
|
|
## Changes
|
|
## - Removed last-second usage of Chains of Ice as it doesn't play well in practice.
|
|
## - Don't channel Fleshcraft during Breath of Sindragosa.
|
|
|
|
# Evaluates a trinkets cooldown, divided by pillar of frost 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.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)|talent.icecap)
|
|
actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=trinket.2.has_use_buff&(!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)|talent.icecap)
|
|
# 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.buff_duration)*(1.5+trinket.2.has_buff.strength)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%trinket.1.buff_duration)*(1.5+trinket.1.has_buff.strength)*(variable.trinket_1_sync))
|
|
actions.precombat+=/variable,name=rw_buffs,value=talent.gathering_storm|conduit.everfrost|runeforge.biting_cold
|
|
actions.precombat+=/fleshcraft
|
|
|
|
## Executed every time the actor is available.
|
|
actions=mind_freeze
|
|
# Prevent specified trinkets being used with automatic lines
|
|
actions+=/variable,name=specified_trinket,value=(equipped.inscrutable_quantum_device&cooldown.inscrutable_quantum_device.ready)
|
|
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|fight_remains>10))
|
|
actions+=/variable,name=rotfc_rime,value=buff.rime.up&(!runeforge.rage_of_the_frozen_champion|runeforge.rage_of_the_frozen_champion&runic_power.deficit>8)
|
|
actions+=/variable,name=frost_strike_conduits,value=conduit.eradicating_blow&buff.eradicating_blow.stack=2|conduit.unleashed_frenzy&buff.unleashed_frenzy.remains<(gcd*2)
|
|
actions+=/variable,name=deaths_due_active,value=death_and_decay.ticking&covenant.night_fae
|
|
# Apply Frost Fever, maintain Icy Talons and keep Remorseless Winter rolling
|
|
actions+=/remorseless_winter,if=conduit.everfrost&talent.gathering_storm&!talent.obliteration&cooldown.pillar_of_frost.remains
|
|
actions+=/howling_blast,cycle_targets=1,if=dot.frost_fever.refreshable&(talent.icecap|!buff.breath_of_sindragosa.up&talent.breath_of_sindragosa|talent.obliteration&cooldown.pillar_of_frost.remains&!buff.killing_machine.up)
|
|
actions+=/glacial_advance,if=buff.icy_talons.remains<=gcd&talent.icy_talons&spell_targets.glacial_advance>=2&(talent.icecap|talent.breath_of_sindragosa&cooldown.breath_of_sindragosa.remains>15|talent.obliteration&!buff.pillar_of_frost.up)
|
|
actions+=/frost_strike,if=buff.icy_talons.remains<=gcd&talent.icy_talons&(talent.icecap|talent.breath_of_sindragosa&!buff.breath_of_sindragosa.up&cooldown.breath_of_sindragosa.remains>10|talent.obliteration&!buff.pillar_of_frost.up)
|
|
# Choose Action list to run
|
|
actions+=/call_action_list,name=covenants
|
|
actions+=/call_action_list,name=racials
|
|
actions+=/call_action_list,name=trinkets
|
|
actions+=/call_action_list,name=cooldowns
|
|
actions+=/call_action_list,name=cold_heart,strict=1,if=talent.cold_heart&(!buff.killing_machine.up|talent.breath_of_sindragosa)&(debuff.razorice.stack=5|!death_knight.runeforge.razorice)
|
|
actions+=/run_action_list,name=bos_ticking,strict=1,if=buff.breath_of_sindragosa.up
|
|
actions+=/run_action_list,name=bos_pooling,if=talent.breath_of_sindragosa&(cooldown.breath_of_sindragosa.remains<10)&(raid_event.adds.in>25|!raid_event.adds.exists|cooldown.pillar_of_frost.remains<10&raid_event.adds.exists&raid_event.adds.in<10)
|
|
actions+=/run_action_list,name=obliteration,strict=1,if=buff.pillar_of_frost.up&talent.obliteration
|
|
actions+=/run_action_list,name=obliteration_pooling,if=talent.obliteration&cooldown.pillar_of_frost.remains<10&(variable.st_planning|raid_event.adds.exists&raid_event.adds.in<10|!raid_event.adds.exists)
|
|
actions+=/run_action_list,name=aoe,strict=1,if=active_enemies>=2
|
|
actions+=/call_action_list,name=standard
|
|
|
|
# AoE Rotation
|
|
actions.aoe=remorseless_winter
|
|
actions.aoe+=/glacial_advance,if=talent.frostscythe
|
|
actions.aoe+=/frostscythe,if=buff.killing_machine.react&!variable.deaths_due_active
|
|
actions.aoe+=/howling_blast,if=variable.rotfc_rime&talent.avalanche
|
|
actions.aoe+=/glacial_advance,if=!buff.rime.up&active_enemies<=3|active_enemies>3
|
|
# Formulaic approach to create a pseudo priority target list for applying razorice in aoe
|
|
actions.aoe+=/frost_strike,cycle_targets=1,if=cooldown.remorseless_winter.remains<=2*gcd&talent.gathering_storm
|
|
actions.aoe+=/howling_blast,if=variable.rotfc_rime
|
|
actions.aoe+=/frostscythe,if=buff.gathering_storm.up&active_enemies>2&!variable.deaths_due_active
|
|
actions.aoe+=/obliterate,if=variable.deaths_due_active&buff.deaths_due.stack<4|buff.gathering_storm.up
|
|
actions.aoe+=/frost_strike,cycle_targets=1,if=runic_power.deficit<(15+talent.runic_attenuation*5)
|
|
actions.aoe+=/frostscythe,if=!variable.deaths_due_active
|
|
actions.aoe+=/obliterate,cycle_targets=1,if=runic_power.deficit>(25+talent.runic_attenuation*5)
|
|
actions.aoe+=/glacial_advance
|
|
actions.aoe+=/frostscythe
|
|
actions.aoe+=/frost_strike,cycle_targets=1
|
|
actions.aoe+=/horn_of_winter
|
|
actions.aoe+=/arcane_torrent
|
|
|
|
# Breath of Sindragosa pooling rotation : starts 10s before BoS is available
|
|
actions.bos_pooling=remorseless_winter,if=active_enemies>=2|variable.rw_buffs
|
|
actions.bos_pooling+=/obliterate,cycle_targets=1,if=buff.killing_machine.react&cooldown.pillar_of_frost.remains>3
|
|
actions.bos_pooling+=/howling_blast,if=variable.rotfc_rime
|
|
actions.bos_pooling+=/frostscythe,if=buff.killing_machine.react&runic_power.deficit>(15+talent.runic_attenuation*5)&spell_targets.frostscythe>2&!variable.deaths_due_active
|
|
actions.bos_pooling+=/frostscythe,if=runic_power.deficit>=(35+talent.runic_attenuation*5)&spell_targets.frostscythe>2&!variable.deaths_due_active
|
|
## 'target_if=max:(debuff.razorice.stack+1)%(debuff.razorice.remains+1)*death_knight.runeforge.razorice' Repeats a lot, this is intended to target the highest priority enemy with an ability that will apply razorice if runeforged. That being an enemy with 0 stacks, or an enemy that the debuff will soon expire on.
|
|
actions.bos_pooling+=/obliterate,cycle_targets=1,if=runic_power.deficit>=25
|
|
actions.bos_pooling+=/glacial_advance,if=runic_power.deficit<20&spell_targets.glacial_advance>=2&cooldown.pillar_of_frost.remains>5
|
|
actions.bos_pooling+=/frost_strike,cycle_targets=1,if=runic_power.deficit<20&cooldown.pillar_of_frost.remains>5
|
|
actions.bos_pooling+=/glacial_advance,if=cooldown.pillar_of_frost.remains>rune.time_to_4&runic_power.deficit<40&spell_targets.glacial_advance>=2
|
|
actions.bos_pooling+=/frost_strike,cycle_targets=1,if=cooldown.pillar_of_frost.remains>rune.time_to_4&runic_power.deficit<40
|
|
|
|
# Breath of Sindragosa Active Rotation
|
|
actions.bos_ticking=obliterate,cycle_targets=1,if=runic_power.deficit>=(45+talent.runic_attenuation*5)
|
|
actions.bos_ticking+=/remorseless_winter,if=variable.rw_buffs|active_enemies>=2|runic_power<32
|
|
actions.bos_ticking+=/death_and_decay,if=runic_power<32
|
|
actions.bos_ticking+=/howling_blast,if=variable.rotfc_rime&(runic_power.deficit<55|rune.time_to_3<=gcd|runeforge.rage_of_the_frozen_champion|spell_targets.howling_blast>=2|buff.rime.remains<3)|runic_power<32
|
|
actions.bos_ticking+=/frostscythe,if=buff.killing_machine.up&spell_targets.frostscythe>2&!variable.deaths_due_active
|
|
actions.bos_ticking+=/obliterate,cycle_targets=1,if=buff.killing_machine.react
|
|
actions.bos_ticking+=/horn_of_winter,if=runic_power.deficit>=40&rune.time_to_3>gcd
|
|
actions.bos_ticking+=/frostscythe,if=spell_targets.frostscythe>2&!variable.deaths_due_active
|
|
actions.bos_ticking+=/obliterate,cycle_targets=1,if=runic_power.deficit>25|rune.time_to_3<gcd
|
|
actions.bos_ticking+=/howling_blast,if=variable.rotfc_rime
|
|
actions.bos_ticking+=/arcane_torrent,if=runic_power.deficit>50
|
|
|
|
## Cold Heart Conditions
|
|
## actions.cold_heart=chains_of_ice,if=fight_remains<gcd&(rune<2|!buff.killing_machine.up&(!main_hand.2h&buff.cold_heart.stack>=4+runeforge.koltiras_favor|main_hand.2h&buff.cold_heart.stack>8+runeforge.koltiras_favor)|buff.killing_machine.up&(!main_hand.2h&buff.cold_heart.stack>8+runeforge.koltiras_favor|main_hand.2h&buff.cold_heart.stack>10+runeforge.koltiras_favor))
|
|
# Use during Pillar with Icecap/Breath
|
|
actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&buff.pillar_of_frost.up&buff.cold_heart.stack>=10&(buff.pillar_of_frost.remains<gcd*(1+cooldown.frostwyrms_fury.ready)|buff.unholy_strength.remains<gcd|buff.chaos_bane.remains<gcd)
|
|
# Outside of Pillar useage with Icecap/Breath
|
|
actions.cold_heart+=/chains_of_ice,if=!talent.obliteration&death_knight.runeforge.fallen_crusader&!buff.pillar_of_frost.up&cooldown.pillar_of_frost.remains>15&(buff.cold_heart.stack>=10&(buff.unholy_strength.up|buff.chaos_bane.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
|
|
# Prevent Cold Heart overcapping during pillar
|
|
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)
|
|
|
|
# Potion
|
|
actions.cooldowns=potion,if=buff.pillar_of_frost.up
|
|
# Cooldowns
|
|
actions.cooldowns+=/empower_rune_weapon,if=talent.obliteration&rune<6&(variable.st_planning|variable.adds_remain)&(cooldown.pillar_of_frost.remains<5&(cooldown.fleshcraft.remains>5&soulbind.pustule_eruption|!soulbind.pustule_eruption)|buff.pillar_of_frost.up)|boss&fight_remains<20
|
|
actions.cooldowns+=/empower_rune_weapon,if=talent.breath_of_sindragosa&runic_power.deficit>30&rune.time_to_5>gcd&(buff.breath_of_sindragosa.up|fight_remains<20)
|
|
actions.cooldowns+=/empower_rune_weapon,if=talent.icecap
|
|
actions.cooldowns+=/pillar_of_frost,if=talent.breath_of_sindragosa&(variable.st_planning|variable.adds_remain)&(cooldown.breath_of_sindragosa.remains|cooldown.breath_of_sindragosa.ready&runic_power.deficit<50)
|
|
actions.cooldowns+=/pillar_of_frost,if=talent.icecap&!buff.pillar_of_frost.up
|
|
actions.cooldowns+=/pillar_of_frost,if=talent.obliteration&runic_power>=25&(variable.st_planning|variable.adds_remain)&(talent.gathering_storm.enabled&buff.remorseless_winter.up|!talent.gathering_storm.enabled)
|
|
actions.cooldowns+=/breath_of_sindragosa,if=buff.pillar_of_frost.up
|
|
actions.cooldowns+=/frostwyrms_fury,if=active_enemies=1&buff.pillar_of_frost.remains<gcd&buff.pillar_of_frost.up&!talent.obliteration&(!raid_event.adds.exists|raid_event.adds.in>30)|fight_remains<3
|
|
actions.cooldowns+=/frostwyrms_fury,if=active_enemies>=2&(buff.pillar_of_frost.up|raid_event.adds.exists&raid_event.adds.in>cooldown.pillar_of_frost.remains+7)&(buff.pillar_of_frost.remains<gcd|raid_event.adds.exists&raid_event.adds.remains<gcd)
|
|
actions.cooldowns+=/frostwyrms_fury,if=talent.obliteration&buff.pillar_of_frost.up&((buff.pillar_of_frost.remains<gcd|buff.unholy_strength.up&buff.unholy_strength.remains<gcd)&(debuff.razorice.stack=5|!death_knight.runeforge.razorice))
|
|
actions.cooldowns+=/hypothermic_presence,if=talent.breath_of_sindragosa&runic_power.deficit>40&rune<=3&(buff.breath_of_sindragosa.up|cooldown.breath_of_sindragosa.remains>40)|!talent.breath_of_sindragosa&runic_power.deficit>=25
|
|
actions.cooldowns+=/raise_dead,if=cooldown.pillar_of_frost.remains<=5
|
|
actions.cooldowns+=/sacrificial_pact,if=active_enemies>=2&(fight_remains<3|!buff.breath_of_sindragosa.up&(pet.ghoul.remains<gcd|raid_event.adds.exists&raid_event.adds.remains<3&raid_event.adds.in>pet.ghoul.remains))
|
|
actions.cooldowns+=/death_and_decay,if=active_enemies>5|runeforge.phearomones
|
|
|
|
# Covenant Abilities
|
|
actions.covenants=deaths_due,if=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,if=cooldown.pillar_of_frost.remains<3&variable.st_planning&(talent.breath_of_sindragosa&runic_power.deficit<60&cooldown.breath_of_sindragosa.remains<2|!talent.breath_of_sindragosa)
|
|
actions.covenants+=/abomination_limb,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&!buff.breath_of_sindragosa.up&(soulbind.pustule_eruption|soulbind.volatile_solvent),interrupt_immediate=1,interrupt_global=1,interrupt_if=soulbind.volatile_solvent
|
|
|
|
# Obliteration rotation
|
|
actions.obliteration=remorseless_winter,if=active_enemies>=3&variable.rw_buffs
|
|
actions.obliteration+=/howling_blast,if=!buff.killing_machine.up&rune>=3&(buff.rime.remains<3&buff.rime.up|active_dot.frost_fever<active_enemies)
|
|
actions.obliteration+=/glacial_advance,if=!buff.killing_machine.up&spell_targets.glacial_advance>=2|!buff.killing_machine.up&(debuff.razorice.stack<5|debuff.razorice.remains<gcd*4)
|
|
actions.obliteration+=/frostscythe,if=buff.killing_machine.react&spell_targets.frostscythe>2&!variable.deaths_due_active
|
|
actions.obliteration+=/obliterate,cycle_targets=1,if=buff.killing_machine.react
|
|
actions.obliteration+=/frost_strike,if=active_enemies=1&variable.frost_strike_conduits
|
|
actions.obliteration+=/howling_blast,if=variable.rotfc_rime&spell_targets.howling_blast>=2
|
|
actions.obliteration+=/glacial_advance,if=spell_targets.glacial_advance>=2
|
|
actions.obliteration+=/frost_strike,cycle_targets=1,if=!talent.avalanche&!buff.killing_machine.up|talent.avalanche&!variable.rotfc_rime|variable.rotfc_rime&rune.time_to_2>=gcd
|
|
actions.obliteration+=/howling_blast,if=variable.rotfc_rime
|
|
actions.obliteration+=/obliterate,cycle_targets=1
|
|
|
|
# Pooling For Obliteration: Starts 10 seconds before Pillar of Frost comes off CD
|
|
actions.obliteration_pooling=remorseless_winter,if=variable.rw_buffs|active_enemies>=2
|
|
actions.obliteration_pooling+=/glacial_advance,if=spell_targets.glacial_advance>=2&talent.frostscythe
|
|
actions.obliteration_pooling+=/frostscythe,if=buff.killing_machine.react&active_enemies>2&!variable.deaths_due_active
|
|
actions.obliteration_pooling+=/obliterate,cycle_targets=1,if=buff.killing_machine.react
|
|
actions.obliteration_pooling+=/frost_strike,if=active_enemies=1&variable.frost_strike_conduits
|
|
actions.obliteration_pooling+=/obliterate,cycle_targets=1,if=buff.killing_machine.react
|
|
actions.obliteration_pooling+=/howling_blast,if=variable.rotfc_rime
|
|
actions.obliteration_pooling+=/glacial_advance,if=spell_targets.glacial_advance>=2&runic_power.deficit<60
|
|
actions.obliteration_pooling+=/frost_strike,cycle_targets=1,if=runic_power.deficit<70
|
|
actions.obliteration_pooling+=/obliterate,cycle_targets=1,if=rune>=3
|
|
actions.obliteration_pooling+=/frostscythe,if=active_enemies>=4&!variable.deaths_due_active
|
|
|
|
# Racial Abilities
|
|
actions.racials=blood_fury,if=buff.pillar_of_frost.up
|
|
actions.racials+=/berserking,if=buff.pillar_of_frost.up
|
|
actions.racials+=/arcane_pulse,if=(!buff.pillar_of_frost.up&active_enemies>=2)|!buff.pillar_of_frost.up&(rune.deficit>=5&runic_power.deficit>=60)
|
|
actions.racials+=/lights_judgment,if=buff.pillar_of_frost.up
|
|
actions.racials+=/ancestral_call,if=buff.pillar_of_frost.up&buff.empower_rune_weapon.up
|
|
actions.racials+=/fireblood,if=buff.pillar_of_frost.remains<=8&buff.pillar_of_frost.up&buff.empower_rune_weapon.up
|
|
actions.racials+=/bag_of_tricks,if=buff.pillar_of_frost.up&active_enemies=1&(buff.pillar_of_frost.remains<5&talent.cold_heart.enabled|!talent.cold_heart.enabled&buff.pillar_of_frost.remains<3)
|
|
|
|
# Standard single-target rotation
|
|
actions.standard=remorseless_winter,if=variable.rw_buffs
|
|
actions.standard+=/obliterate,if=buff.killing_machine.react
|
|
actions.standard+=/howling_blast,if=variable.rotfc_rime&buff.rime.remains<3
|
|
actions.standard+=/frost_strike,if=variable.frost_strike_conduits
|
|
actions.standard+=/glacial_advance,if=!death_knight.runeforge.razorice&(debuff.razorice.stack<5|debuff.razorice.remains<gcd*4)
|
|
actions.standard+=/frost_strike,if=cooldown.remorseless_winter.remains<=2*gcd&talent.gathering_storm
|
|
actions.standard+=/howling_blast,if=variable.rotfc_rime
|
|
actions.standard+=/frost_strike,if=runic_power.deficit<(15+talent.runic_attenuation*5)
|
|
actions.standard+=/obliterate,if=!buff.frozen_pulse.up&talent.frozen_pulse|variable.deaths_due_active&buff.deaths_due.stack<4|talent.gathering_storm&buff.remorseless_winter.up|runic_power.deficit>(25+talent.runic_attenuation*5)
|
|
actions.standard+=/frost_strike
|
|
actions.standard+=/horn_of_winter
|
|
actions.standard+=/arcane_torrent
|
|
|
|
# Trinkets
|
|
actions.trinkets=inscrutable_quantum_device,if=buff.pillar_of_frost.up|target.time_to_pct_20<5|boss&fight_remains<21
|
|
# The trinket with the highest estimated value, will be used first and paired with Pillar of Frost.
|
|
actions.trinkets+=/trinket1,if=!variable.specified_trinket&buff.pillar_of_frost.up&(!talent.icecap|talent.icecap&buff.pillar_of_frost.remains>=10)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.buff_duration>=fight_remains
|
|
actions.trinkets+=/trinket2,if=!variable.specified_trinket&buff.pillar_of_frost.up&(!talent.icecap|talent.icecap&buff.pillar_of_frost.remains>=10)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.buff_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+=/trinket1,if=!trinket.1.has_use_buff&(trinket.2.cooldown.remains|!trinket.2.has_use_buff)|cooldown.pillar_of_frost.remains>20
|
|
actions.trinkets+=/trinket2,if=!trinket.2.has_use_buff&(trinket.1.cooldown.remains|!trinket.1.has_use_buff)|cooldown.pillar_of_frost.remains>20
|