About Hekili

Hello everyone! Version 7.2.0.x has been released for Legion. Please report any issues you experience via the CurseForge Ticket system. I do not receive notifications about comments posted below.

What is Hekili?

Hekili is a priority helper addon that can make recommendations several steps into the future. It works by collecting information about the game's current state, using a SimulationCraft-like action priority list (APL) to recommend the next ability to use, then modifying the game state and making the next prediction.

* Feral Druid support is paused and has no default action lists at this time. I can't continue work until I unlock my Druid with a L100 token, which is not my highest priority at the moment.

The action lists are visible in-game, accessible via /hekili > Action Lists. The default action lists tend to be imported directly from SimulationCraft, with a few custom tweaks to allow for special Class Settings to be integrated. (You can see the Class Settings through the /hekili interface as well.)

Action lists are presented when attached to a display. You can have an unlimited number of displays, though the addon comes pre-loaded with two displays. Through the /hekili interface, you can customize these defaults.

Specialization Primary - With the default settings loaded, the primary display will automatically present the next four recommended abilities with consideration for the number of enemies. This display reacts to the Current Mode option found in /hekili > Toggles. The default behavior reflects a Current Mode set to "Auto." If the Current Mode is set to "Single Target" then the primary display will show recommendations based on the assumption that there is only 1 target in range of your abilities.

Specialization AOE - With the default settings loaded, the AOE display will be hidden. This is because the Specialization Primary display automatically adjusts to Single Target vs. AOE when /hekili > Toggles > Current Mode is set to "Auto." The AOE display would be redundant under those circumstances. However, when the Current Mode is set to "Single Target", the Specialization Primary display will only show Single Target. This display then appears to provide you recommendations assuming there are 3 or more targets.

Getting Started

Alternate Customization

Example:

Above is the default Enhancement Primary display. The Current Mode is set to Auto, so this display will automatically adjust to the number of enemies that are detected by the addon.

This shows both displays, because Current Mode is set to Single Target, forcing the Primary display to pretend there is only 1 target no matter how many are detected. Under those circumstances, the AOE display appears to give you these alternate recommendations.

Note on 'Current Mode' Setting

In the vast majority of cases, the Current Mode: Auto setting will be optimal. However, sometimes there are special mechanics in a fight that involve wanting to focus on one enemy at a time rather than maximizing DPS across multiple targets. In this case, it can be helpful to force both displays to be shown. You can set a keybinding to toggle this setting while in-combat. Bind a key for Mode Switch under /hekili > Toggles.

The Mode Switch is sensitive to two factors: the Switch Type and the Current Mode.

2. If Switch Type is "Manual", then pressing your Mode Switch key will toggle between Single Target (forcing 1 target regardless of count) and AOE (forcing the addon to believe there is a minimum of 3 targets). This impacts your Specialization Primary displays only.

Other Customization

You are able to customize displays further. You can change the direction of your recommendation queues, modify its alignment, turn on Blizzard's overlay glow for the first recommendation icon in your display. You can specify that up to 10 icons are shown (more recommendations equals more processing power, though!), change the spacing, the zoom, the primary and queued icon sizes. You can specify the font and font sizes. You can specify that some additional information should appear on the base of the primary icon. You can use SpellFlash if you have that addon loaded as well.

You can use the Masque icon to apply a custom style to your displays.

You can specify visibility in PvE and PvP settings with custom alpha/transparency settings for each. You can specify special Conditions using the SimulationCraft-like syntax used in the Action Lists (this is how the Specialization AOE displays are scripted to see if your Current Mode is "Single Target").

A display like the above can be created by going to /hekili > Displays > Specialization Primary > UI and Style and adjusting the following:

1. Set Icons Shown to 2.

2. Set Queued Icon Size to 30.

A display like the above can be created by going to /hekili > Displays > Specialization Primary > UI and Style and adjusting the following:

1. Set Icons Shown to 5.

2. Set Queue Direction to Up.

3. Set Queued Icon Size to 30.

A display like the above can be created by going to /hekili > Displays > Specialization Primary > UI and Style and adjusting the following:

1. Set Icons Shown to 1.

(Hey, that looks a lot like a single-icon priority helper WeakAura!)

Troubleshooting

1. There's nothing showing!

A. Did you use this addon before Legion? You may have old, incompatible data in your profile. Go to /hekili > Profiles and click Reset Profile to start from scratch. You may want to reload your UI at that point as well.

2. There's still nothing showing!

A. /hekili > General: Make sure Enabled is checked. If it's not checked, the addon may have detected an error and shut itself off. If that is the case, use an addon like BugSack/BugGrabber to collect any error messages and submit it via the ticket tracker (linked above). If the addon is enabled and nothing is showing, check your displays. /hekili > Displays > Specialization Primary and Specialization AOE: Make sure Enabled is checked. If your issue is with one of the default displays, you can reload the display with the Reload Display button at the bottom and see if it is restored.

Fix rune regen model, again... Unholy thought it always started with 6 runes, leading to never casting Dark Transformation...

Update DK APLs, 7.3 value tweaks. Update Shaman APLs, remove "crash ST" option since it doesn't matter with current APL. Re-un-re-un-re-un-re-undo the change that advances the clock to the GCD if the GCD is active. Don't recalculate stuff in forecastResources() that doesn't need to be recalculated.

Events: Will only update recommendations for 1 display per frame at maximum. Cycles so that one particular display isn't repeatedly updated while others are ignored.

Importer: Will automatically replace debuff.judgment.up with judgment_override on imports to allow usage of the Retribution class option.

Scripts: Adding flagging for time-sensitive scripts. Will use this later to avoid retesting criteria that isn't time-sensitive (i.e., talent.X.enabled) vs. stuff that is time-sensitive (buff.X.up).

More on Resource Modeling: The addon will now update resource forecasts when resources are spent or gained, and only update the resources that were changed (via spendResources(), spend(), or gain()). This is a lot more efficient than remodeling resources every time the engine steps forward in time (which happens multiple times per icon displayed).

Shaman: Added APL tweaks and class setting to allow Doom Winds to desynchronize from Ascendance when cooldowns are turned off.

Added baseline support for a number of trinkets.

They are accessible via the "Usable Items" action (which will try each support trinket, with settings available through /hekili). They can also be added manually to action lists (i.e., "Kil'jaeden's Burning Wish" is a supported action).

DeathKnight: Add Blighted Rune Weapon. Monk: Add Pressure Point from WW T20. Shaman: Add setting for saving Crash Lightning stacks (will want to adjust this on a per-fight basis). Add 'Strike' as an alias for 'Stormstrike' for simc compatibility. Warrior: Commit contributed Warrior updates. Core: Commit hybrid prediction system; tries to find a recommendation for now. If there's no recommendation right now, uses the iterative system to take steps forward in time to see if that changes. If that finds nothing, uses the recommendation it came up with for later. Hekili: Load library or other addon stubs as needed instead of keeping them in a library table. Scripts: Fix infinite loop when cleaning up =/== assignment/comparison operators. Ready scripts round up to 2 decimals again... State: Abilities that are disabled by a toggle or otherwise not known will no longer have a false cooldown of 1 hour. Need to decide what to do for synchronized abilities (i.e., Doom Winds will be held until Ascendance is up, just following default SimC APL). Stop losing track of memory by wiping the forecast table, we just ignore extra tables at this point.

Classes.lua - Do a better job of labeling resources/modeling/resources. - Preliminary support for the legendary talent rings, not able to test personally at this time. - Support some more on-use trinkets (have to manually add to your APLs, unfortunately).

- prevent infinite loop in modelResources() - workaround for Windstrike CD (it can end up about a hundredth of a second greater than GCD, leading to two lower priority abilities woven in instead of alternating Windstrikes). Better fix is pending. - prevent bug that allowed lower priority abilities to sometimes sneak through. Sneaky abilities.

Engine now crawls through slices of time instead of attempting to project ready times. The former method was inconsistent with SimulationCraft *AND* could fail due to ability criteria timing (i.e., if the conditions were buff.X.remains &lt; 3, then the timing for that ability could be much later).

Core: Cache known/ready/usable criteria to reduce CPU load in each cycle. Addon will give up after 50 iterations through an APL (that's around 1s + 10 GCDs). Delay text only shows tenths of a second at &lt; 1s remaining.

Events: Updates Per Second is 0.25s baseline, w/ auto-updates based on events.

Targets: Nameplate checks will also check boss1 - boss5 in case a huge boss has a nameplate that goes off the screen. Preliminary support for storing permanent modifiers on auras (for Feral Druids, mainly).

Core: + Fixed texture cache for Windstrike, Stormstrike. + Adjusted linear time stepping for new engine. + Show delay timers for Death Knights; don't use CD wheel for abilities that don't have real CDs (should make Frost DK less silly when Hungering Rune Weapon is up).

Scripts: + Fix conversion of "!0&gt;1" to "not (0&gt;1)" as "not 0&gt;1" is "false&gt;1" which is a mismatch.

General ------- + Trying out a new time-slice based engine instead of the projection-based system. The projection-based system has required too many special accommodations (time scripts, hidden retesting, etc.). The major difference is that the addon will try to see what to recommend now, and if it doesn't find something, it will just step forward a bit in time and try again. This is more like SimulationCraft, which tests for an action and waits 0.1 seconds if no action is available. The addon takes a first 0.1s step and if it doesn't find anything there, it starts looking at every quarter-GCD for a recommendation until it finds one or runs out of time trying. Work in progress.

+ The remnants of a new resource modeling system has been added, but will likely be removed again soon. It was build for the projection system which is no longer used.

Classes ------- + Qualify some auras as "incapacitates" so that the addon will assume you can't use abilities during that time frame. (And by some, I mean only Draught of Souls for now.)

Paladin ------- + Guarantee that Liadrin's grants you the first Holy Power from AW/Crusade.

Warlock ------- + Rebuilt Soul Shard model; they don't regenerate in any way that we are concerned with.

Scripts ------- + Legend has it that C++ "!0&gt;1" and Lua "not 0 &gt; 1" are not equivalent. Fix up auto-conversion to make the addon use "not ( 0 &gt; 1 )" where applicable.

State ----- + Lots of resource modeling nonsense still in here. + Support 'in_flight' check (if an ability has been cast before the addon simulation, but hasn't hit).

+ If checked, the use_latency flag will require Judgment to remain up for at least latency x 2 before recommending spenders. + Updated APLs to use judgment_override again, which includes the use_latency behavior above.

Support unstable_afflictions table (like buff.active_uas, but not a fake buff...).

+ unstable_afflictions.stack will return the # of active UAs on the target. + Importer should convert the above. + Importer should also convert 'use_item,name=X' to use ability 'X' if the ability exists.

+ Warlock (Affliction) module started by UnleashedD3. + Added a feature to tell the addon to break a cast/channel -- the addon won't assume you're planning to complete every 6 second channel and will instead show you what to do at the next GCD. + The feature above is specifically for Drain Soul -- addon will show you what to do at next GCD. Will iterate on this. o Also, working on keybindings again, please disregard keybind weirdness.

+ Block bad regen values for resources that don't regen. + Fix swing-based resource regen. o WiP: use_item support, not ready for primetime. + For modifiers, if the value doesn't resolve to an actual value, the value will be stored as a string. So name=blah will first try to assign the value of blah to args.name, but if that is nil, it will store the strong "blah" in args.name. Because.

+ Used the tweaked importer to try SimC's Elemental APLs instead of my handwritten versions from SEL. Will see how that goes. + Aura Info can actually be shown on displays now. Added Buff/Debuff Remaining Time as an option.

o Tweaked the aura counting code to leave auras alone since debuffs won't actually "tick" to keep themselves off the clock. May be adverse impacts... + Added customization options for Show Aura Info consistent with the other Extras. + Quick and dirty fix for Snapshots doing duplicate string replacements (i.e., 'buff.X.duration' and 'duration' in the same script). + Buffs/debuffs will grab info from the class aura table if it exists, so that we anticipate 'duration' information for auras we know about.

+ Added checklist of abilities one can use to exclude abilities from your displays. This is done on a per-profile basis for now, but could conceivably be done per-display if needed.

+ Added 'active_mongoose_fury' which compares buff.mongoose_fury.remains &gt; latency * 2 -- this hopefully makes the addon slightly less likely to recommend another Mongoose Bite when Mongoose Fury is falling off faster than you can realistically react. APL will be updated to use this.

o Delay keybind overrides until out of combat, if needed. o Fix typo 'csating' -&gt; 'casting'. + Added DH traits and legendary effects (very few, really). + Change 'variable' or "Store Value" actions to just grab the result from the action list, instead of snapshotting it. o Do a better job of grabbing keybinds for abilities that shift between forms. + Create some really, really ugly string manipulation code to simplify importing the DH Havoc APL directly from SimulationCraft. + target.distance will now return the average of the minimum and maximum range estimates. + target.exists is now a valid check. + target.in_range is now a valid check, will check on a per-ability basis or default to true. + cooldown.X.adjusted_remains added, simply returns the 'remains' value.

+ Added LibDataBroker and LibDBIcon to support a minimap icon, some quick setting adjustment w/o keybindings. + Brought the Monk and Hunter modules into the addon. + Iterated on Demon Hunter support. + Debug setting is no longer needed. When you pause, debug info is collected for one cycle and then shut off again. + Put Custom Toggles back in.

? Still trying to figure out when to rescrape keybindings to most-efficiently catch when abilities change due to a form change.

+ SEL and SimC Elemental APLs will default to the Ascendance APL when you aren't 110 yet (so that you at least get *something*).

3. Added 'variable' (a.k.a. Store Value) support like SimC. Specify a value name "taco" and the conditions are stored in it. Other actions can use value.taco to retrieve that. SimC does stuff with this. Just embrace it.

4. Action Lists can no longer be disabled because wtf is the point of disabling an action list?

+ The addon will now try to learn about buffs that aren't manually entered into the addon. + The addon will now cache aura information instead of grabbing it fresh from the API every update cycle. + The addon will now throttle itself to 1 update/second outside of combat, unless something relevant happens (target change, buffs/debuffs drop/refresh, you cast something...).

Shaman: + Added duration info to several auras. + Corrected Stormbringer ID. + Removed the special logic for Spiritual Journey, since the game handles it well-enough without workarounds. + Added Lightning Rod as a target-cycling aura when it is talented (this means that using cycle_targets for Lightning Bolt/Chain Lightning should work at least a little better until I suppose the target_if syntax). + Imported the newer SimC APLs for Elemental and made adjustments accordingly.

+ Added a system to force one-time changes to displays/profiles/action-lists. This enables me to fix settings without pushing people to reset their whole profiles. Example usage here will be that I'm going to turn off 'Debug' mode because it uses a lot of CPU for folks who aren't actually debugging. o Added Spell ID for Lashing Flames because duhhh.

+ Added simplified Mode Visibility to displays. This basically makes it easier to quickly decide whether a display is a "Primary" or "AOE" display (like how I make them) with regard to both target detection and visibility. This includes a fix that makes it so the two-display, ST/AOE mode only happens under the right circumstances. Your experience with the addon may change. + Refinements made to which events are tracked and which force updates. + Minor tweaks to default Paladin/Shaman displays.

+ When I screw things up, I can set up one-time profile patches now. The addon will now make a good faith effort to fix up your APL hooks under the new system. Once. + Forcing Debug mode off one time only. Shouldn't have it on by default. + Really, really don't do unnecessary data crunching with Debug mode off. + More tweaks to forced addon updates based on events.

o When an action list's criteria is checked, it will not use padded criteria (i.e., recheck in 0.1s, half-GCD, etc.) because this has caused the addon to test inferior action lists before their criteria are met (blocking higher priority lists). o Added 0.05s of padding to regenerated resource prediction time. Wew lads!