Hekili Priority Helper

Hekili Priority Helper

44M Downloads

[REC] Alternative Blood Death Knight APLs for Dragonflight

johnnylam88 opened this issue ยท 9 comments

commented

Before You Begin

  • I confirm that I have downloaded the latest version of the addon.
  • I am not playing on a private server.
  • I checked for an existing, open ticket for this issue and was not able to find one.
  • I edited the title of this issue (above) so that it describes the issue I am reporting.
  • I am reporting an issue with the default priority included with the specialization (imported or edited priorities are not supported).

Describe the Issue

The default Blood DK APL is based on the one included with SimulationCraft. However, that rotation is not the one used in practice by Blood DKs in Dragonflight. There are two rotations which have been advanced on the Acherus Death Knight class Discord server. One is the Icy Veins/Wowhead BDK guide by Mandl and Panthea, and the other is from the Advanced BDK Mythic+ guide by Kyrasis.

How to Reproduce

  1. Enter retail as a Blood Death Knight.
  2. Execute the recommendations of the default Blood DK APL.
  3. See that they differ from the Icy Veins BDK guide.

Snapshot (Link)

none

Raidbots Sim Report (Link)

No response

Additional Information

No response

Contact Information

No response

commented

I don't mind including them, tbh. I just need to include short explanations of why you'd pick one over another and why they don't become the defaults.

commented

I've decided it's easier to distribute these alternative "feelycraft" APLs through a separate plugin addon for Hekili, so I will close this issue.

commented

It would be useful to have these two APLs as non-default Action Packs for Blood Death Knight and allow the Hekili user to choose to make one of the active.

commented

APL based on Icy Veins BDK guide by Mandl and Panthea:

# Pre-cast Death and Decay to put a rune on cooldown if capping on runes.
actions.precombat+=/death_and_decay,if=!death_and_decay.ticking|rune.time_to_6<gcd

# Interrupt.
actions+=/mind_freeze
# Interrupt.
actions+=/strangulate
# Dump Runic Power with Death Strike when above 75 RP (bank 2 Death Strike).
actions+=/variable,name=death_strike_dump_value,value=75
# Death Strike below 70% health.
actions+=/variable,name=death_strike_health_pct_threshold,value=70
# Use a Potion during Dancing Rune Weapon.
actions+=/potion,if=buff.dancing_rune_weapon.up
# Call the trinkets action list.
actions+=/call_action_list,name=trinkets
# Use Icebound Fortitude if you're taking sufficient damage and you don't have Dancing Rune Weapon or Vampiric Blood up.
actions+=/icebound_fortitude,if=tanking&incoming_damage_5s>=ibf_damage&!(buff.dancing_rune_weapon.up|buff.vampiric_blood.up)
# Use Vampiric Blood if you're taking sufficient damage and you don't have Dancing Rune Weapon, Icebound Fortitude, Vampiric Blood, or Vampiric Strength up.
actions+=/vampiric_blood,if=tanking&incoming_damage_5s>=vb_damage&!(buff.dancing_rune_weapon.up|buff.icebound_fortitude.up|buff.vampiric_blood.up|buff.vampiric_strength.up)
# Use Rune Tap if you're taking sufficient damage and you don't have Dancing Rune Weapon, Vampiric Blood, or Icebound Fortitude up.
actions+=/rune_tap,if=tanking&incoming_damage_5s>=rt_damage&!(buff.dancing_rune_weapon.up|buff.vampiric_blood.up|buff.icebound_fortitude.up)
# Use Death Strike if you're below the Death Strike health percent threshold.
actions+=/death_strike,if=health.pct<variable.death_strike_health_pct_threshold
# Use Death's Caress if Bone Shield is not up.
actions+=/deaths_caress,if=!buff.bone_shield.up
# Use Death Strike if the bossfight is about to end.
actions+=/death_strike,if=boss&fight_remains<10
# Use Blooddrinker if Dancing Rune Weapon is not up.
actions+=/blooddrinker,if=!buff.dancing_rune_weapon.up
# Call the racials action list.
actions+=/call_action_list,name=racials
# Use Sacrificial Pact if Dancing Rune Weapon is not active and the Ghoul is about to expire or the bossfight is about to end.
actions+=/sacrificial_pact,if=!buff.dancing_rune_weapon.up&(pet.ghoul.remains<2|boss&fight_remains<gcd)
# Use Blood Tap if you have 2 or fewer runes, you won't reach 4 charges within the global cooldown, and you're about to cap charges, or if you will not reach 3 runes within global cooldown.
actions+=/blood_tap,if=(rune<=2&rune.time_to_4>gcd&charges_fractional>=1.8)|rune.time_to_3>gcd
# Use Gorefiend's Grasp if Tightening Grasp is talented.
actions+=/gorefiends_grasp,if=talent.tightening_grasp.enabled
# Use Empower Rune Weapon if you have 6 or fewer runes and you're not about to cap Runic Power.
actions+=/empower_rune_weapon,if=rune<6&runic_power.deficit>5
# Use Abomination Limb on cooldown.
actions+=/abomination_limb
# Raise Dead if it's off cooldown.
actions+=/raise_dead
# Use the drw_up action list if Dancing Rune Weapon is active.
actions+=/run_action_list,name=drw_up,strict=1,if=buff.dancing_rune_weapon.up
# Call the standard action list (which will not be used if Dancing Rune Weapon is active).
actions+=/call_action_list,name=standard

# Cast Marrowrend as one of the last three GCDs of Dancing Rune Weapon.
actions.drw_up+=/marrowrend,if=buff.dancing_rune_weapon.remains<(3*gcd.max)&buff.bone_shield.remains<(buff.bone_shield.duration-3*gcd.max)
actions.drw_up+=/death_and_decay,if=!death_and_decay.ticking
actions.drw_up+=/soul_reaper,if=active_enemies=1&target.time_to_pct_35<5&target.time_to_die>(dot.soul_reaper.remains+5)
actions.drw_up+=/soul_reaper,cycle_targets=1,if=target.time_to_pct_35<5&active_enemies>=2&target.time_to_die>(dot.soul_reaper.remains+5)
actions.drw_up+=/marrowrend,if=buff.bone_shield.stack<2
actions.drw_up+=/tombstone,if=buff.bone_shield.stack>6&(!talent.shattering_bone|death_and_decay.ticking)&cooldown.dancing_rune_weapon.remains>20
actions.drw_up+=/death_strike,if=runic_power>variable.death_strike_dump_value|(talent.icy_talons&buff.icy_talons.remains<gcd)
actions.drw_up+=/blood_boil,if=charges_fractional>=1.8
actions.drw_up+=/heart_strike,if=rune.time_to_3<gcd
actions.drw_up+=/consumption

actions.racials=blood_fury,if=cooldown.dancing_rune_weapon.ready&(!cooldown.blooddrinker.ready|!talent.blooddrinker.enabled)
actions.racials+=/berserking
actions.racials+=/arcane_pulse,if=active_enemies>=2|rune<1&runic_power.deficit>60
actions.racials+=/lights_judgment,if=buff.unholy_strength.up
actions.racials+=/ancestral_call
#actions.racials+=/fireblood
actions.racials+=/bag_of_tricks
#actions.racials+=/arcane_torrent,if=runic_power.deficit>20

actions.standard+=/marrowrend,if=buff.bone_shield.remains<3
actions.standard+=/death_and_decay,if=!death_and_decay.ticking
actions.standard+=/soul_reaper,if=active_enemies=1&target.time_to_pct_35<5&target.time_to_die>(dot.soul_reaper.remains+5)
actions.standard+=/soul_reaper,cycle_targets=1,if=target.time_to_pct_35<5&active_enemies>=2&target.time_to_die>(dot.soul_reaper.remains+5)
# Maintain yourself at 5+ Bone Shield charges. You can drop yourself to around 3 right before Dancing Rune Weapon becomes usable again.
actions.standard+=/variable,name=bone_shield_refresh_value,value=5,op=setif,condition=!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>10,value_else=(2.8+cooldown.dancing_rune_weapon.remains*3%10)
actions.standard+=/marrowrend,if=buff.bone_shield.stack<variable.bone_shield_refresh_value
actions.standard+=/deaths_caress,if=buff.bone_shield.stack<variable.bone_shield_refresh_value
actions.standard+=/dancing_rune_weapon,if=!buff.dancing_rune_weapon.up
actions.standard+=/tombstone,if=buff.bone_shield.stack>6&(!talent.shattering_bone|death_and_decay.ticking)&(!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>20)
actions.standard+=/death_strike,if=runic_power>variable.death_strike_dump_value|(talent.icy_talons&buff.icy_talons.remains<gcd)
actions.standard+=/blood_boil,if=charges_fractional>=1.8
actions.standard+=/heart_strike,if=rune.time_to_3<gcd
actions.standard+=/consumption

# Trinkets
actions.trinkets+=/use_item,name=fyralath_the_dreamrender,if=dot.mark_of_fyralath.ticking
# Prioritize damage dealing on use trinkets over trinkets that give buffs
actions.trinkets+=/variable,name=trinket_1_buffs,value=trinket.1.has_use_buff|(trinket.1.has_buff.strength|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit)|trinket.1.is.mirror_of_fractured_tomorrows
actions.trinkets+=/variable,name=trinket_2_buffs,value=trinket.2.has_use_buff|(trinket.2.has_buff.strength|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit)|trinket.2.is.mirror_of_fractured_tomorrows
actions.trinkets+=/variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell|trinket.1.is.whispering_incarnate_icon
actions.trinkets+=/variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell|trinket.2.is.whispering_incarnate_icon
actions.trinkets+=/variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl|variable.trinket_1_buffs
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|!trinket.2.has_cooldown)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|!trinket.1.has_cooldown)
actions.trinkets+=/use_items,use_off_gcd=1,if=(variable.trinket_1_buffs|trinket.1.cooldown.remains)&(variable.trinket_2_buffs|trinket.2.cooldown.remains)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=variable.trinket_1_buffs&(buff.dancing_rune_weapon.up|!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>20)&(variable.trinket_2_exclude|trinket.2.cooldown.remains|!trinket.2.has_cooldown|variable.trinket_2_buffs)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=variable.trinket_2_buffs&(buff.dancing_rune_weapon.up|!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>20)&(variable.trinket_1_exclude|trinket.1.cooldown.remains|!trinket.1.has_cooldown|variable.trinket_1_buffs)
actions.trinkets+=/use_item,use_off_gcd=1,slot=main_hand,if=!equipped.fyralath_the_dreamrender&(!variable.trinket_1_buffs|trinket.1.cooldown.remains)&(!variable.trinket_2_buffs|trinket.2.cooldown.remains)
commented

APL based on BDK guide by Kyrasis:

# Pre-cast Death and Decay to put a rune on cooldown if capping on runes.
actions.precombat+=/death_and_decay,if=!death_and_decay.ticking|rune.time_to_6<gcd

# Interrupt.
actions+=/mind_freeze
# Interrupt.
actions+=/strangulate
# Dump Runic Power with Death Strike when above 105 RP (bank 3 Death Strike).
actions+=/variable,name=death_strike_dump_amount,value=105
# Death Strike below 70% health.
actions+=/variable,name=death_strike_health_pct_threshold,value=70
# Use a Potion during Dancing Rune Weapon.
actions+=/potion,if=buff.dancing_rune_weapon.up
# Call the trinkets action list.
actions+=/call_action_list,name=trinkets
# Use Icebound Fortitude if you're taking sufficient damage and you don't have Dancing Rune Weapon or Vampiric Blood up.
actions+=/icebound_fortitude,if=tanking&incoming_damage_5s>=ibf_damage&!(buff.dancing_rune_weapon.up|buff.vampiric_blood.up)
# Use Vampiric Blood if you're taking sufficient damage and you don't have Dancing Rune Weapon, Icebound Fortitude, Vampiric Blood, or Vampiric Strength up.
actions+=/vampiric_blood,if=tanking&incoming_damage_5s>=vb_damage&!(buff.dancing_rune_weapon.up|buff.icebound_fortitude.up|buff.vampiric_blood.up|buff.vampiric_strength.up)
# Use Rune Tap if you're taking sufficient damage and you don't have Dancing Rune Weapon, Vampiric Blood, or Icebound Fortitude up.
actions+=/rune_tap,if=tanking&incoming_damage_5s>=rt_damage&!(buff.dancing_rune_weapon.up|buff.vampiric_blood.up|buff.icebound_fortitude.up)
# Use Death Strike if you're below the Death Strike health percent threshold.
actions+=/death_strike,if=health.pct<variable.death_strike_health_pct_threshold
# Use Death's Caress if Bone Shield is not up.
actions+=/deaths_caress,if=!buff.bone_shield.up
# Use Death Strike if the bossfight is about to end.
actions+=/death_strike,if=boss&fight_remains<10
# Use Blooddrinker if Dancing Rune Weapon is not up.
actions+=/blooddrinker,if=!buff.dancing_rune_weapon.up
# Call the racials action list.
actions+=/call_action_list,name=racials
# Use Sacrificial Pact if Dancing Rune Weapon is not active and the Ghoul is about to expire or the bossfight is about to end.
actions+=/sacrificial_pact,if=!buff.dancing_rune_weapon.up&(pet.ghoul.remains<2|boss&fight_remains<gcd)
# Use Blood Tap if you have 2 or fewer runes, you won't reach 4 charges within the global cooldown, and you're about to cap charges, or if you will not reach 3 runes within global cooldown.
actions+=/blood_tap,if=(rune<=2&rune.time_to_4>gcd&charges_fractional>=1.8)|rune.time_to_3>gcd
# Use Gorefiend's Grasp if Tightening Grasp is talented.
actions+=/gorefiends_grasp,if=talent.tightening_grasp.enabled
# Use Empower Rune Weapon if you have 6 or fewer runes and you're not about to cap Runic Power.
actions+=/empower_rune_weapon,if=rune<6&runic_power.deficit>5
# Use Abomination Limb on cooldown.
actions+=/abomination_limb
# Use Dancing Rune Weapon if it is not already active.
actions+=/dancing_rune_weapon,if=!buff.dancing_rune_weapon.up
# Raise Dead if it's off cooldown.
actions+=/raise_dead
# Call the standard action list.
actions+=/call_action_list,name=standard

actions.racials=blood_fury,if=cooldown.dancing_rune_weapon.ready&(!cooldown.blooddrinker.ready|!talent.blooddrinker.enabled)
actions.racials+=/berserking
actions.racials+=/arcane_pulse,if=active_enemies>=2|rune<1&runic_power.deficit>60
actions.racials+=/lights_judgment,if=buff.unholy_strength.up
actions.racials+=/ancestral_call
#actions.racials+=/fireblood
actions.racials+=/bag_of_tricks
#actions.racials+=/arcane_torrent,if=runic_power.deficit>20

actions.standard+=/marrowrend,if=buff.bone_shield.remains<5|buff.bone_shield.stack<3
actions.standard+=/blood_boil,if=!dot.blood_plague.ticking
actions.standard+=/death_strike,if=runic_power>(variable.death_strike_dump_amount-(buff.dancing_rune_weapon.up*20))
actions.standard+=/soul_reaper,if=active_enemies=1&target.time_to_pct_35<5&target.time_to_die>(dot.soul_reaper.remains+5)
actions.standard+=/soul_reaper,cycle_targets=1,if=target.time_to_pct_35<5&active_enemies>=2&target.time_to_die>(dot.soul_reaper.remains+5)
actions.standard+=/variable,name=bone_shield_refresh_value,value=8,op=setif,condition=(!talent.insatiable_blade|(!buff.dancing_rune_weapon.up&cooldown.dancing_rune_weapon.remains>60))&(!talent.abomination_limb|(!buff.abomination_limb.up&cooldown.abomination_limb.remains>20),value_else=6
actions.standard+=/marrowrend,if=buff.bone_shield.stack<variable.bone_shield_refresh_value
actions.standard+=/tombstone,if=buff.bone_shield.stack>6&(!talent.shattering_bone|death_and_decay.ticking)&(!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>15)
actions.standard+=/death_and_decay,if=!death_and_decay.ticking
actions.standard+=/heart_strike,if=rune.time_to_3<gcd
actions.standard+=/blood_boil,if=charges_fractional>=1.8&buff.hemostasis.stack<5
actions.standard+=/heart_strike,if=rune>=3|(buff.bone_shield.stack>=6&buff.bone_shield.remains>4.5)
actions.standard+=/blood_boil,if=charges_fractional>=1.8|buff.hemostatis.stack<5
actions.standard+=/consumption
actions.standard+=/deaths_caress,if=buff.bone_shield.stack<9

# Trinkets
actions.trinkets+=/use_item,name=fyralath_the_dreamrender,if=dot.mark_of_fyralath.ticking
# Prioritize damage dealing on use trinkets over trinkets that give buffs
actions.trinkets+=/variable,name=trinket_1_buffs,value=trinket.1.has_use_buff|(trinket.1.has_buff.strength|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit)|trinket.1.is.mirror_of_fractured_tomorrows
actions.trinkets+=/variable,name=trinket_2_buffs,value=trinket.2.has_use_buff|(trinket.2.has_buff.strength|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit)|trinket.2.is.mirror_of_fractured_tomorrows
actions.trinkets+=/variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell|trinket.1.is.whispering_incarnate_icon
actions.trinkets+=/variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell|trinket.2.is.whispering_incarnate_icon
actions.trinkets+=/variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_2_buffs&trinket.2.ilvl>=trinket.1.ilvl|variable.trinket_1_buffs
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|!trinket.2.has_cooldown)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|!trinket.1.has_cooldown)
actions.trinkets+=/use_items,use_off_gcd=1,if=(variable.trinket_1_buffs|trinket.1.cooldown.remains)&(variable.trinket_2_buffs|trinket.2.cooldown.remains)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=variable.trinket_1_buffs&(buff.dancing_rune_weapon.up|!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>20)&(variable.trinket_2_exclude|trinket.2.cooldown.remains|!trinket.2.has_cooldown|variable.trinket_2_buffs)
actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=variable.trinket_2_buffs&(buff.dancing_rune_weapon.up|!talent.dancing_rune_weapon|cooldown.dancing_rune_weapon.remains>20)&(variable.trinket_1_exclude|trinket.1.cooldown.remains|!trinket.1.has_cooldown|variable.trinket_1_buffs)
actions.trinkets+=/use_item,use_off_gcd=1,slot=main_hand,if=!equipped.fyralath_the_dreamrender&(!variable.trinket_1_buffs|trinket.1.cooldown.remains)&(!variable.trinket_2_buffs|trinket.2.cooldown.remains)
commented

The APLs in the comments above were generated with minimum diffs from the default APL in mind. However, they both have the covenent abilities removed as they are no longer relevant for Dragonflight.

commented

What sim testing has been done for their performance? Why isn't SimC updated to use one of these?

These are not sim-tested for highest DPS like the SimC profiles are. These are just the rotations recommended by the two guides referenced above for their blend of mitigation as well as damage.

commented

What sim testing has been done for their performance? Why isn't SimC updated to use one of these?

commented

These APLs are also more relevant for Mythic+ content as they put a strong emphasis on survival that is missing from the SimC APL.