1. #1

    Does anyone have code to calculate monk Expel Harm vs Jab?

    Hey. I'd like to smarten up the recommendations around Expel Harm in code I am writing, and ideally I would like to have it be aware of the amount of damage the player must have to make this efficient compared to plain ol' Jab. The trivial cases are obviously trivial, so I only want to do, basically, "is this going to inflict around the average damage of Jab on my enemy" calculations here, and if the player has more hurt than that, expel.

  2. #2
    If you're only concerned whether it would accomplish more damage than Jab, you just need to see if the player is missing 3x the health compared to Jab's damage output. In my BM gear, Expel Harm does an average of 4309.8 damage (1/3 of its healing) with 0 resolve. Jab does an average of 2378.5.

    If I'm missing 7135.5 health, then Expel Harm is damage neutral vs. Jab. Arguably, you don't want to waste Expel Harm when you could get more healing out of it (although there's a tradeoff, if you save it so long that you wasted an opportunity to use it twice), but 7k health is almost nothing -- you're almost always missing some health if you're actively tanking something.

    As far as getting the Expel Harm numbers, I'd probably take the easy way out and just parse the ability tooltip to grab the numbers, rather than bothering to calculate it out. If you're also trying to avoid wasting EH overheals, then you'd probably also want to get the current Resolve multiplier from the buff and multiply accordingly.
    Author, Hekili, a priority helper addon.

  3. #3
    did this weakaura ever happen i would like to see it in use

  4. #4
    Quote Originally Posted by Hekili View Post
    If you're only concerned whether it would accomplish more damage than Jab, you just need to see if the player is missing 3x the health compared to Jab's damage output. In my BM gear, Expel Harm does an average of 4309.8 damage (1/3 of its healing) with 0 resolve. Jab does an average of 2378.5.

    If I'm missing 7135.5 health, then Expel Harm is damage neutral vs. Jab. Arguably, you don't want to waste Expel Harm when you could get more healing out of it (although there's a tradeoff, if you save it so long that you wasted an opportunity to use it twice), but 7k health is almost nothing -- you're almost always missing some health if you're actively tanking something.

    As far as getting the Expel Harm numbers, I'd probably take the easy way out and just parse the ability tooltip to grab the numbers, rather than bothering to calculate it out. If you're also trying to avoid wasting EH overheals, then you'd probably also want to get the current Resolve multiplier from the buff and multiply accordingly.
    Yeah, the basic math is pretty easy. This is much more interesting for WW monks than BM monks, of course, because DPS are much less frequently down health, unlike tanks. (I have not dug into MW yet, but I suspect none of this applies there anyhow.)

    Have you done any performance testing on tooltip scraping like that? I should probably just do my own, but I'm so lazy ^W^W spending more time on other parts of the rotation support code.

    - - - Updated - - -

    Quote Originally Posted by mac72 View Post
    did this weakaura ever happen i would like to see it in use
    It's been literally 12 hours, so it hasn't happened yet, but I'll probably do tooltip scraping performance testing tonight, and then implement it.

    I'm doing this for an addon, though, not to build a WeakAura. (...or, more pedantically, I do not intend to distribute the addon I build this for as a WeakAura.)

  5. #5
    Quote Originally Posted by SlippyCheeze View Post
    Have you done any performance testing on tooltip scraping like that? I should probably just do my own, but I'm so lazy ^W^W spending more time on other parts of the rotation support code.
    I used tooltip scraping for checking weapon imbues on my addon during MoP, and let it run far more frequently than it needed to without having adverse effects on performance. Now, I only use it for grabbing weapon speeds after a PLAYER_EQUIPMENT_CHANGED event, since weapon imbues are no longer a thing.

    If you're that worried about performance, you could cache the numbers and then throttle future scrapes to X per GCD. Or only after there's been a relevant UNIT_HEALTH/UNIT_AURA event involving the player.
    Author, Hekili, a priority helper addon.

  6. #6
    Quote Originally Posted by Hekili View Post
    I used tooltip scraping for checking weapon imbues on my addon during MoP, and let it run far more frequently than it needed to without having adverse effects on performance. Now, I only use it for grabbing weapon speeds after a PLAYER_EQUIPMENT_CHANGED event, since weapon imbues are no longer a thing.

    If you're that worried about performance, you could cache the numbers and then throttle future scrapes to X per GCD. Or only after there's been a relevant UNIT_HEALTH/UNIT_AURA event involving the player.
    TBH, I was vaguely worried it could, eg, block waiting on server RTT or something random like that, which means that it might be fine for me at my 30ms-or-so latency, but suddenly blow up at random for an Australian user at 180-210ms.

    I probably shouldn't have been, because Blizzard can't update tooltips except during a client patch, which means that the data has to reside locally on the client and my worst case is a local disk RTT, but I never claimed to be smart.

  7. #7
    Jab and Expel Harm both use normalized monk strike damage, so fortunately you don't have to parse both tooltips all the time; just parse them both at startup and figure out the ratio, then parse only one when you need updated numbers. Current data from wowhead says that Jab does 1.38 * strike damage, while EH heals for 7.5 * strike and then does 1/3 of the effective healing as damage.

    Note of course that you can't get combo breaker procs from EH. So you have to treat Jab as if it does an extra 8% of the damage of BoK and TP, which with current numbers is worth another 0.9056 * strike, ie. puts Jab at 2.2856 vs. 2.5 for EH.

    So with the simplest model and current numbers, they're pretty much the same damage already. At best you'll get 9% more average damage by using EH, but Jab's such a small part of your total DPS anyway that it'll likely make <1% of a difference to your total DPS at the end of the day. So personally I'd suggest treating EH as a way to stay alive without hurting your DPS, instead of a way to do extra damage. Just put in something simple like "if under 50% HP, use EH instead of Jab" and otherwise don't worry about getting it exactly right, imo, because there are a couple more wrinkles from a theoretical perspective that are going to make the exact math a lot more complicated.

    First is crit and multistrike. If you crit or MS a jab you'll always get the full damage, but for expel to be guaranteed to not overheal you need to be down enough health for a full EH crit plus two multistrike crits, ie. 3.2x the base EH healing. If you're down less health than that, you'll have to figure out the chances of all combinations of crit/noncrit with 0/1/2 multistrikes, figure out how much damage would be lost to overheal in each case, then get the weighted average.

    The other complication is Chi Explosion, which... I don't want to try and deal with all the possibilities on that, but assuming you're casting chex at 3 chi, you can probably treat CB:chex as 2/3 of (300% AP + 1 TEB).

    (For BrM there's a third wrinkle: Resolve increases the effective healing of EH, which also boosts its damage.)
    Last edited by Rockets; 2015-04-13 at 07:32 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •