• 0

    posted a message on Grid — compact party/raid unit frames
    I was experiencing some framerate issues in 25-man raids that I think were related to the way that the duration status code was creating and deleting a possibly large number of tables every second and then suffering when the garbage collector was run.

    I committed some changes to the implementation of the duration status code in Statuses\GridStatusAuras.lua. It now uses a resource pool that maintains a pool of tables that are used for the duration statuses. This avoids the GC issue and also bounds to number of tables created to just the number of duration statuses times the largest raid size. The pool is emptied (tables are released) when the module is Reset(), i.e., whenever you see a loading screen.

    It seems to have solved the framerate issues I was seeing in-game. If I have made any errors, please let me know.
    Posted in: Grid & Grid2
  • 0

    posted a message on Grid — compact party/raid unit frames
    Okay, I will continue to update the patch against the Grid trunk and to refine the changes over time. According to this thread on WowAce.com, it is poor practice to create and destroy many tables per UNIT_AURA refresh, so I will modify the patch to avoid this churn.

    Thank you for your time and attention.
    Posted in: Grid & Grid2
  • 0

    posted a message on Grid — compact party/raid unit frames
    I humbly request a review of the changes in ticket #421 to allow the buff/debuff statuses to also show duration and stack count. I've improved the initial patch I'd proposed but without any feedback, so I'm not sure if this is something worth pursuing either because the changes don't fit into the authors' vision for Grid or if the changes are poorly executed.
    Posted in: Grid & Grid2
  • 0

    posted a message on Grid — compact party/raid unit frames
    The "show duration" status option for Grid causes the icon to show a sweep animation, but there is no text timer overlay on the icon. To get the text overlay on the center icon indicator, you will need to install the GridCooldownText addon.
    Posted in: Grid & Grid2
  • 0

    posted a message on UNIT_AURA on aura refresh?
    Is UNIT_AURA guaranteed to fire if an existing buff, e.g. a HoT, on a unit is refreshed? Or does it only fire if a buff/debuff is added or removed?
    Posted in: Lua Code Discussion
  • 0

    posted a message on Grid — compact party/raid unit frames
    I have some modifications for the GridStatusAuras module that add the ability to independently map the duration and the stack count of buffs/debuffs onto the text and color statuses. The changes aren't too extensive (they are mostly code additions that are independent of the existing code), but I'm unsure how to submit the modifications.

    I took a look at existing tickets for Grid and found 209 - Support for # of charges of a buff. The commentary on the ticket was instructive so I took a different approach.

    For each aura tracked by GridStatusAuras, there are two new suboptions to manage settings for a duration status and a stack count status. For the duration status, there are 2 threshold settings and 3 colors. When duration is mapped onto the color status, then the status changes colors depending on which threshold the remaining duration is under. Similarly for the stack count status, which when mapped onto the color status will change colors depending on which threshold the stack count is under.

    If any of the aura statuses map duration onto either text or color, then a repeating timer is set up to refresh the Grid units based on a settable refresh interval. If duration isn't used for any aura that's currently active on Grid units, then the timer is removed. Each aura status has a refresh interval setting, and the smallest interval used by active auras on the Grid units is chosen for the repeating timer.

    The main purpose of the changes is to allow tracking of HoT and debuff timers using Grid text indicators. For most simple HoTs, just mapping duration to the text status is sufficient, but something like Lifebloom can have the duration mapped to text and stack count mapped to color to display both pieces of information on the same indicator. For buffs with charges, e.g. shaman shields, the stack count can be mapped to both the text and color statuses so that a warning color is used when a minimum threshold, e.g. 1 charge remaining, is reached.
    Posted in: Grid & Grid2
  • 0

    posted a message on LibHealComm-4.0
    BTW, if the resto shaman 4pc T10 HoT is too difficult to track in the library, it's perfectly alright. I can still at least check for the aura and duration in Grid to know whether it's active. The existing HoT support is pretty fantastic -- I can't describe how awesome it feels to know the HoT healing that is ticking away on a heal target and be able to prioritize around the information.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-4.0
    I'll give an example and leave it to you to decide if it's worthwhile to support this HoT in LHC. Suppose I spam Chain Heal on a tank, which is a pretty common function of a resto shaman in raids. Suppose I crit every 4-5 seconds on the tank, which is a fairly conservative estimate in the current gear levels. Then the HoT will tick once between each refresh of the HoT, and will grow with each refresh. If h is the amount added to the pool per crit, p(n) is the size of the pool at the nth crit, and t(n) is the tick size after the nth crit, then we have:

    p(0) = 0
    t(0) = 0
    p(n+1) = p(n) - t(n) + h
    t(n+1) = 1/3 * p(n+1)
    


    This can be simplified to show that:

    t(n+1) = (2*t(n) + 1)/3 * h
    


    So, t(n) is asymptotic toward h as n increases.

    If we crit for 10k with Chain Heal (also very conservative in current gear levels), then over a long fight, we're averaging a 2500 tick every 4-5 seconds over the course of the fight.

    Really interesting stuff happens if we crit several times between ticks, because the pool grows without releasing any heals until we have 3 seconds without a crit. So if we crit three times between ticks for 10k on a tank, that adds 7500 to the pool, so the next tick might be for 4k before degrading over time toward that 2500 asymptotic value.

    Of course, Chain Heal actually heals up to 4 targets, and puts a HoT on each target that it crits on, so it acts like a very beefed-up Earthliving HoT on multiple targets. It ends up being a very significant amount of healing over the course of a fight.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-4.0
    Is it possible to add support for the resto shaman 4pc T10 bonus? This HoT can be quite substantial if there are multiple crits by Chain Heal on the same target. There is a recent change in patch 3.3.3 that will simplify checking for this HoT (to be called Chained Heal). There is a fairly clear post that describes the mechanics of this HoT over at Vixsyn's blog.

    Another way to understand the way this bonus works is as follows:
    • The healing from the HoT comes from a pool (per target) that starts at zero.
    • Each time Chain Heal crits on a target, the pool grows by 25% of the crit heal and any existing HoT buff is refreshed to 9 seconds.
    • The HoT ticks for 1/3 of the pool's size at 3, 6 and 9 seconds.
    • Each HoT tick removes that amount of healing from the pool.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-4.0
    Quote from Shadowed
    Tidal Force isn't that bad to support since it's one buff, maybe later I'll go through and calculate more of the talents and item sets for crit but I'd rather get hot support/clean up code/etc first before something that doesn't occur normally and only for two of the four healing classes.


    Totally agreed... HoT support would be much more useful than crit heals in terms of figuring out heal targets.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-4.0
    Quote from Shadowed
    4) Support for buffs/item sets that modify crit is something I'm not sure if I want to do yet, nobody is really going to hit 100% crit without a fight like Loatheb or Divine Favor from normal buff/talents.


    Shaman have a similar talent/spell called Tidal Force that gives 60/40/20% crit buff to the next three HW/LHW/CH spells.

    Raid-buffed, it's likely that the first HW/LHW/CH cast with the 60% buff will be 100% crit, then after that, LHW will likely crit on the remaining 40% and 20% crit buffs.

    True, probably only Paladins and Shaman ever hit 100% on a spell for non-Loatheb fights, but it does happen, and it makes a difference in choosing heal targets when you see a heal will land for 15k instead of 10k.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-3.0 Official Thread
    Quote from xbeeps
    3) I will keep maintaining LHC-3.0, but no further development will be made to it, except for normal maintenance (patch breakage, spell updates, etc.), in the period until it is fully replaced by LHC-4.0.


    I'd like to at least get Beacon of Light support into LHC-3 before the feature-freeze. I will pass on trying to support Glyph of Healing Wave since it would require changes to the API to support these kinds of partial heals.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-3.0 Official Thread
    I just noticed some noise on the shaman forums that the Glyph of Lesser Healing Wave will boost LHW healing by 20% regardless of whose Earth Shield is on the target. I'm going to test this later today and update LHC-3 on the trunk if it turns out to be true.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-3.0 Official Thread
    Ah, I understand now. GetNumPartyMembers() didn't do what I had expected, but reading the documentation for it I see it now.
    Posted in: Libraries
  • 0

    posted a message on LibHealComm-3.0 Official Thread
    I'm trying to understand something in the code snippet below from r51 in the section dealing with Party heals (to cover Prayer of Healing). Why does playerName need to be explicitly added to CastInfoHealingTargetNames? Does the loop that follows not add it already?

        CastInfoHealingTargetNames = {SentTargetName};
        if (InRaid) then
            ...
        elseif (InParty and UnitInParty(SentTargetName)) then
            if (playerName ~= SentTargetName) then
                tinsert(CastInfoHealingTargetNames, playerName);
            end
            for i = 1, GetNumPartyMembers() do
                local name = unitFullName("party" .. i);
                if (name and (name ~= SentTargetName) and (UnitIsVisible(name))) then
                    tinsert(CastInfoHealingTargetNames, name);
                end
            end
        end
    
    Posted in: Libraries
  • To post a comment, please or register a new account.