Hekili Priority Helper

Hekili Priority Helper

44M Downloads

[REC] Ret Paladin recommends Final Reckoning with talented Divine Auxiliary even with >2 Holy Power

ashotinthelight opened this issue ยท 7 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

I have Divine Auxiliary talented. That implies that if I have 3 or more Holy Power, Final Reckoning (and Execution Sentence) will waste Holy Power generation.

How to Reproduce

  1. Enter the game as a Retribution Paladin
  2. Take the Divine Auxiliary, Final Reckoning (or Execution Sentence) talent (reporting for FR, but same issue with ES)
  3. Beat up a dummy.
  4. See that Final Reckoning is recommended when over 2 Holy Power
    Hekili-FinalReckoning-Criteria

Snapshot (Link)

https://pastebin.com/Dau99f1w

Raidbots Sim Report (Link)

https://www.raidbots.com/simbot/report/sjhDBnyQa25CWiDokaHBeo

Additional Information

No response

Contact Information

Discord: oort.mccloud GitHub: ashotinthelight

commented

Changing:

holy_power>=2&talent.divine_auxiliary

to

holy_power<=2&talent.divine_auxiliary

on line

actions.cooldowns+=/final_reckoning,

seemed to solve the problem, but introduced a new one of Final Reckoning not being in the initial cooldown block (first builder to get the damage bonus active). I'm not going to try to decipher the complex logic here, but wanted to see if that was a simple fix (it's not).

Also don't see anything in the Final Reckoning logic similar to the time_to_die check on Execution Sentence for Executioner's Will, though EW also changed FR's duration.

I think moving Final Reckoning up so it's directly above/below the mutually exclusive Execution Sentence and changing the holy_power>=2 to <=2 may be enough, plus adding the Executioner's Will qualifier.

commented

Now trying to figure out why Wake of Ashes is recommended before Final Reckoning. Paused display shows old logic holy_power>=2... which confuses me, and I verified my change was there to the profile. But the display also shows slightly different code syntax: "talent.divine_auxiliary.enabled" not "talent.divine_auxiliary". I'm not going to spelunk the LUA to see if the pop-up is decompiled on the fly. Just commenting here because I kept poking at it.

commented

Did you sim your changes to see if they are more performant? Sometimes, you waste resources because the alternative is worse.

commented

I don't know how to get my sim to reflect a change in whether or not I use Final Reckoning with 3+ Holy Power.

I can try comparing on a dummy. Though it really does look like a bug/typo. I can't think of why the recommendation would be to only use Final Reckoning (or Execution Sentence) at holy_power >= 2 since it has equal or more value in the rotation at 0 holy_power.

Also noteworthy is that in the generators ruleset, Wake of Ashes is limited to holy_power <= 2 (as is Divine Toll) and Blade of Justice is limited to holy_power <=3. None of them will push holy_power over 5 when used.

As for the issue from the comment that I didn't include in the report comments, the sim linked above used Final Reckoning as the opening +3 Holy Power ability even though it was an ST sim of an AE build, suggesting that it's efficient even at its worst.

I have to say, the deeper I get into Hekili, the more and more impressed I am. It's a helluva mod.

commented

https://github.com/simulationcraft/simc/wiki/ActionLists

It's nearly the same, syntax-wise, as the revisions you're trying to make here. Here's an example where I changed FR to be used at less than 3 Holy Power:

image

https://www.raidbots.com/simbot/report/bcAFhovcSgtRiChnLkd5gS

Here's the profile used:

paladin="Lumenati"
source=default
spec=retribution
level=70
race=lightforged_draenei
role=attack
position=back
professions=blacksmithing=105/mining=100
talents=BYEAAAAAAAAAAAAAAAAAAAAAAAAAAQAACtSrk0KFJpIJpEJAAAAAAQEkkQgEEpEhkQaploRCQio0oBAA

# Default consumables
potion=elemental_potion_of_ultimate_power_3
flask=iced_phial_of_corrupting_rage_3
food=fated_fortune_cookie
augmentation=draconic_augment_rune
temporary_enchant=main_hand:howling_rune_3

# This default action priority list is automatically created based on your character.
# It is a attempt to provide you with a action list that is both simple and practicable,
# while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
# Feel free to edit, adapt and improve it to your own needs.
# SimulationCraft is always looking for updates and improvements to the default action lists.

# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat=flask
actions.precombat+=/food
actions.precombat+=/augmentation
# Snapshot raid buffed stats before combat begins and pre-potting is done.
actions.precombat+=/snapshot_stats
actions.precombat+=/shield_of_vengeance
actions.precombat+=/variable,name=trinket_1_buffs,value=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
actions.precombat+=/variable,name=trinket_2_buffs,value=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
actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.crusade.duration=0|cooldown.crusade.duration%%trinket.1.cooldown.duration=0|trinket.1.cooldown.duration%%cooldown.avenging_wrath.duration=0|cooldown.avenging_wrath.duration%%trinket.1.cooldown.duration=0)
actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.crusade.duration=0|cooldown.crusade.duration%%trinket.2.cooldown.duration=0|trinket.2.cooldown.duration%%cooldown.avenging_wrath.duration=0|cooldown.avenging_wrath.duration%%trinket.2.cooldown.duration=0)
actions.precombat+=/variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((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))

# Executed every time the actor is available.
actions=auto_attack
actions+=/rebuke
actions+=/call_action_list,name=cooldowns
actions+=/call_action_list,name=generators

actions.cooldowns=potion,if=buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10|fight_remains<25
actions.cooldowns+=/invoke_external_buff,name=power_infusion,if=buff.avenging_wrath.up|buff.crusade.up
actions.cooldowns+=/lights_judgment,if=spell_targets.lights_judgment>=2|!raid_event.adds.exists|raid_event.adds.in>75|raid_event.adds.up
actions.cooldowns+=/fireblood,if=buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10
actions.cooldowns+=/use_item,name=algethar_puzzle_box,if=(cooldown.avenging_wrath.remains<5&!talent.crusade|cooldown.crusade.remains<5&talent.crusade)&(holy_power>=4&time<5|holy_power>=3&time>5)
actions.cooldowns+=/use_item,slot=trinket1,if=(buff.avenging_wrath.up&cooldown.avenging_wrath.remains>40|buff.crusade.up&buff.crusade.stack=10)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains
actions.cooldowns+=/use_item,slot=trinket2,if=(buff.avenging_wrath.up&cooldown.avenging_wrath.remains>40|buff.crusade.up&buff.crusade.stack=10)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains
actions.cooldowns+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&(trinket.2.cooldown.remains|!variable.trinket_2_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
actions.cooldowns+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(trinket.1.cooldown.remains|!variable.trinket_1_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
actions.cooldowns+=/use_item,name=shadowed_razing_annihilator,if=(trinket.2.cooldown.remains|!variable.trinket_2_buffs)&(trinket.2.cooldown.remains|!variable.trinket_2_buffs)
actions.cooldowns+=/shield_of_vengeance,if=fight_remains>15&(!talent.execution_sentence|!debuff.execution_sentence.up)
actions.cooldowns+=/execution_sentence,if=(!buff.crusade.up&cooldown.crusade.remains>15|buff.crusade.stack=10|cooldown.avenging_wrath.remains<0.75|cooldown.avenging_wrath.remains>15)&(holy_power>=4&time<5|holy_power>=3&time>5|holy_power>=2&talent.divine_auxiliary)&(target.time_to_die>8&!talent.executioners_will|target.time_to_die>12)
actions.cooldowns+=/avenging_wrath,if=holy_power>=4&time<5|holy_power>=3&time>5|holy_power>=2&talent.divine_auxiliary&(cooldown.execution_sentence.remains=0|cooldown.final_reckoning.remains=0)
actions.cooldowns+=/crusade,if=holy_power>=5&time<5|holy_power>=3&time>5
actions.cooldowns+=/final_reckoning,if=(holy_power>=4&time<8|holy_power>=3&time>=8|holy_power>=2&talent.divine_auxiliary)&(cooldown.avenging_wrath.remains>10|cooldown.crusade.remains&(!buff.crusade.up|buff.crusade.stack>=10))&(time_to_hpg>0|holy_power=5|holy_power>=2&talent.divine_auxiliary)&(!raid_event.adds.exists|raid_event.adds.up|raid_event.adds.in>40)

actions.finishers=variable,name=ds_castable,value=(spell_targets.divine_storm>=3|spell_targets.divine_storm>=2&!talent.divine_arbiter|buff.empyrean_power.up)&!buff.empyrean_legacy.up&!(buff.divine_arbiter.up&buff.divine_arbiter.stack>24)
actions.finishers+=/divine_storm,if=variable.ds_castable&(!talent.crusade|cooldown.crusade.remains>gcd*3|buff.crusade.up&buff.crusade.stack<10)
actions.finishers+=/justicars_vengeance,if=!talent.crusade|cooldown.crusade.remains>gcd*3|buff.crusade.up&buff.crusade.stack<10
actions.finishers+=/templars_verdict,if=!talent.crusade|cooldown.crusade.remains>gcd*3|buff.crusade.up&buff.crusade.stack<10

actions.generators=call_action_list,name=finishers,if=holy_power=5|buff.echoes_of_wrath.up&set_bonus.tier31_4pc&talent.crusading_strikes|(debuff.judgment.up|holy_power=4)&buff.divine_resonance.up&!set_bonus.tier31_2pc
actions.generators+=/wake_of_ashes,if=holy_power<=2&(cooldown.avenging_wrath.remains|cooldown.crusade.remains)&(!talent.execution_sentence|cooldown.execution_sentence.remains>4|target.time_to_die<8)&(!raid_event.adds.exists|raid_event.adds.in>20|raid_event.adds.up)
actions.generators+=/blade_of_justice,if=!dot.expurgation.ticking&set_bonus.tier31_2pc
actions.generators+=/divine_toll,if=holy_power<=2&(!raid_event.adds.exists|raid_event.adds.in>30|raid_event.adds.up)&(cooldown.avenging_wrath.remains>15|cooldown.crusade.remains>15|fight_remains<8)
actions.generators+=/judgment,if=dot.expurgation.ticking&!buff.echoes_of_wrath.up&set_bonus.tier31_2pc
actions.generators+=/call_action_list,name=finishers,if=holy_power>=3&buff.crusade.up&buff.crusade.stack<10
actions.generators+=/templar_slash,if=buff.templar_strikes.remains<gcd&spell_targets.divine_storm>=2
actions.generators+=/blade_of_justice,if=(holy_power<=3|!talent.holy_blade)&(spell_targets.divine_storm>=2&!talent.crusading_strikes|spell_targets.divine_storm>=4)
actions.generators+=/hammer_of_wrath,if=(spell_targets.divine_storm<2|!talent.blessed_champion|set_bonus.tier30_4pc)&(holy_power<=3|target.health.pct>20|!talent.vanguards_momentum)
actions.generators+=/templar_slash,if=buff.templar_strikes.remains<gcd
actions.generators+=/judgment,if=!debuff.judgment.up&(holy_power<=3|!talent.boundless_judgment)
actions.generators+=/blade_of_justice,if=holy_power<=3|!talent.holy_blade
actions.generators+=/call_action_list,name=finishers,if=(target.health.pct<=20|buff.avenging_wrath.up|buff.crusade.up|buff.empyrean_power.up)
actions.generators+=/consecration,if=!consecration.up&spell_targets.divine_storm>=2
actions.generators+=/divine_hammer,if=spell_targets.divine_storm>=2
actions.generators+=/crusader_strike,if=cooldown.crusader_strike.charges_fractional>=1.75&(holy_power<=2|holy_power<=3&cooldown.blade_of_justice.remains>gcd*2|holy_power=4&cooldown.blade_of_justice.remains>gcd*2&cooldown.judgment.remains>gcd*2)
actions.generators+=/call_action_list,name=finishers
actions.generators+=/templar_slash
actions.generators+=/templar_strike
actions.generators+=/judgment,if=holy_power<=3|!talent.boundless_judgment
actions.generators+=/hammer_of_wrath,if=holy_power<=3|target.health.pct>20|!talent.vanguards_momentum
actions.generators+=/crusader_strike
actions.generators+=/arcane_torrent
actions.generators+=/consecration
actions.generators+=/divine_hammer

head=heartfire_sentinels_forgehelm,id=202452,bonus_id=6652/9229/9409/9333/1494/8767/9413,gem_id=192932
neck=cold_crisp_collar,id=210379,bonus_id=6652/9477/8782/9555/1481/8767,gem_id=192932/192932/192932
shoulders=arctic_wardens_shoulderplates,id=210365,bonus_id=9506/6652/9559/1494/8767
back=arctic_wardens_cloak,id=210408,bonus_id=9506/6652/9557/1488/8767,enchant_id=6592
chest=heartfire_sentinels_brigandine,id=202455,bonus_id=9543/9231/1507,enchant_id=6622
tabard=guild_tabard,id=5976
wrists=agonizing_manacles,id=207150,bonus_id=6652/9600/9505/7979/9561/1488/8767
hands=heartfire_sentinels_protectors,id=202453,bonus_id=6652/9230/9409/9333/1488/8767
waist=recycled_golemskin_waistguard,id=204400,bonus_id=6652/9414/9226/9219/9409/9333/1488/8767,enchant_id=6904
legs=heartfire_sentinels_faulds,id=202451,bonus_id=6652/9543/8096/9228/1507,enchant_id=6830
feet=sanctum_guards_forgewalkers,id=204430,bonus_id=9409/6652/9226/9219/9333/1494/8767,enchant_id=6613
finger1=tormentors_siphoning_signet,id=204466,bonus_id=6652/9409/9333/1491/8767/9413,gem_id=192932,enchant_id=6568
finger2=entropic_convergence_loop,id=202572,bonus_id=9409/6652/9415/9333/1494/8767,enchant_id=6562
trinket1=elementium_pocket_anvil,id=202617,bonus_id=9409/6652/9333/1494/8767
trinket2=ominous_chromatic_essence,id=203729,bonus_id=9409/6652/9333/1491/8767
main_hand=ashkandur_fall_of_the_brotherhood,id=202606,bonus_id=6652/9409/9333/8159/1485/8767,enchant_id=6643

# Gear Summary
# gear_ilvl=444.00
# gear_strength=6466
# gear_stamina=23570
# gear_crit_rating=3022
# gear_haste_rating=3806
# gear_mastery_rating=3367
# gear_versatility_rating=2040
# gear_avoidance_rating=125
# gear_armor=8464
# set_bonus=tier30_2pc=1
# set_bonus=tier30_4pc=1



copy=LessThan3
actions.cooldowns=potion,if=buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10|fight_remains<25
actions.cooldowns+=/invoke_external_buff,name=power_infusion,if=buff.avenging_wrath.up|buff.crusade.up
actions.cooldowns+=/lights_judgment,if=spell_targets.lights_judgment>=2|!raid_event.adds.exists|raid_event.adds.in>75|raid_event.adds.up
actions.cooldowns+=/fireblood,if=buff.avenging_wrath.up|buff.crusade.up&buff.crusade.stack=10
actions.cooldowns+=/use_item,name=algethar_puzzle_box,if=(cooldown.avenging_wrath.remains<5&!talent.crusade|cooldown.crusade.remains<5&talent.crusade)&(holy_power>=4&time<5|holy_power>=3&time>5)
actions.cooldowns+=/use_item,slot=trinket1,if=(buff.avenging_wrath.up&cooldown.avenging_wrath.remains>40|buff.crusade.up&buff.crusade.stack=10)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1)|trinket.1.proc.any_dps.duration>=fight_remains
actions.cooldowns+=/use_item,slot=trinket2,if=(buff.avenging_wrath.up&cooldown.avenging_wrath.remains>40|buff.crusade.up&buff.crusade.stack=10)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2)|trinket.2.proc.any_dps.duration>=fight_remains
actions.cooldowns+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&(trinket.2.cooldown.remains|!variable.trinket_2_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
actions.cooldowns+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(trinket.1.cooldown.remains|!variable.trinket_1_buffs|!buff.crusade.up&cooldown.crusade.remains>20|!buff.avenging_wrath.up&cooldown.avenging_wrath.remains>20)
actions.cooldowns+=/use_item,name=shadowed_razing_annihilator,if=(trinket.2.cooldown.remains|!variable.trinket_2_buffs)&(trinket.2.cooldown.remains|!variable.trinket_2_buffs)
actions.cooldowns+=/shield_of_vengeance,if=fight_remains>15&(!talent.execution_sentence|!debuff.execution_sentence.up)
actions.cooldowns+=/execution_sentence,if=(!buff.crusade.up&cooldown.crusade.remains>15|buff.crusade.stack=10|cooldown.avenging_wrath.remains<0.75|cooldown.avenging_wrath.remains>15)&(holy_power>=4&time<5|holy_power>=3&time>5|holy_power>=2&talent.divine_auxiliary)&(target.time_to_die>8&!talent.executioners_will|target.time_to_die>12)
actions.cooldowns+=/avenging_wrath,if=holy_power>=4&time<5|holy_power>=3&time>5|holy_power>=2&talent.divine_auxiliary&(cooldown.execution_sentence.remains=0|cooldown.final_reckoning.remains=0)
actions.cooldowns+=/crusade,if=holy_power>=5&time<5|holy_power>=3&time>5
actions.cooldowns+=/final_reckoning,if=(holy_power>=4&time<8|holy_power>=3&time>=8|holy_power>=2&talent.divine_auxiliary)&(cooldown.avenging_wrath.remains>10|cooldown.crusade.remains&(!buff.crusade.up|buff.crusade.stack>=10))&(time_to_hpg>0|holy_power=5|holy_power<=2&talent.divine_auxiliary)&(!raid_event.adds.exists|raid_event.adds.up|raid_event.adds.in>40)

I made another edit where we require HoPo = 5 without Divine Auxiliary, and allow usage at any HoPo with Divine Auxiliary. This ends up matching the DPS output.

image

https://www.raidbots.com/simbot/report/ai92ioFj9s9qyPjYt93pmb

It's not particularly intuitive as to why, but opportunity cost is often hard to anticipate. At the end, there's really no significant difference in HoPo overflow between these revisions.

commented

I really should go back to the start and sim with Execution Sentence and in my ST build. FR on an ST sim is likely going to produce sub-optimal results.

And since I am having trouble sleeping tonight, I may as well do that now.

I had no idea the profile listed in the mod was a copy/paste of the raidbots profile.

I'll try to reproduce your efforts and will reply with an update. I also added a patreon a couple of days ago.

commented

Final Reckoning isn't even showing up for me. I used to be able to add it through a tab with a bunch of other cooldowns, but that tab has since been removed from Hekili's settings.