Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Effective healing and absorptions #192

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Sundava
Copy link
Contributor

@Sundava Sundava commented Feb 23, 2022

A bit hacking for my taste, but it works.

I've tried to avoid recalculating rhealing_effective and rabsorb_healing for each row, so it's calculated once on each update instead.

As always, only FR and EN are properly localized.

For #191

I haven't tested it in-game yet, I'd hold until merging (I'm not sure how it will work with partially absorbed shields)

@Sundava Sundava changed the title feat: Effective healing and absorptions [WIP] feat: Effective healing and absorptions Feb 23, 2022
@Sundava Sundava marked this pull request as draft February 23, 2022 15:08
@Sundava Sundava marked this pull request as ready for review February 25, 2022 21:31
@Sundava
Copy link
Contributor Author

Sundava commented Feb 25, 2022

It is functional, even though the Absorbed Healing column includes overshields.
I'm not really happy about that, but I suspect it's a FFXIV ACT Plugin issue and not something I can fix on my end
(Appart from parsing each log line, but that would basically be reimplementing FFLogs of ACT_Plugin)

I'm marking this a ready for review/merge, and I'll try to account for overshielding if I find a solution later

@Sundava Sundava changed the title [WIP] feat: Effective healing and absorptions feat: Effective healing and absorptions Mar 1, 2022
let player = data.Combatant[i];
let effective = parseInt(player.healed) - parseInt(player.overHeal);
// Inject the calculated effective healing into the player data, while we're at it
player.effective_healing = effective;
Copy link
Owner

@hibiyasleep hibiyasleep Mar 3, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO actually, the term 'effective healing' should not be a main metric to compare between healers within party. I'm not saying including absorbs & shields is bad, but excluding overheals are.

Let's imagine a full party with WHM & AST that both healers are never talked & both doing almost max effort they can normally do.
On next raidwide AoE, someone needed to heal this or we all gonna die. WHM prepares Plenary Indulgence + Afflatus Rapture both has no casting, AST prepares Stellar Explosion + Horoscope Helios also almost instant both are.
So the AoE came, that two healers activates their skills in same time. who achieved lower Overheals, who made more Effective Heals? if WHM's 100ms faster, can we blame AST as 'they did nothing'? no.
(I made WHM & AST as example as they're what I main, but if we think of SGE, my friends are shouting 'I should do a heal to fill my MP', despite I can't know their truth as I never been SGE.)

Overheal is the problem of Negotiation in most cases, it doesn't mean they're underskilled.
and as Effective Healing excludes Overheal completely, so we need to think more on this topic.

ps: Ikegami already adds their shield on their gauge in naïve and implictly.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the overhealing generated for this kind of specific moments would even out over the course of a fight, but I haven't healed in raids so I might be wrong.

I agree that overhealing is a normal part of healing, and you can't compare healers based this metric. Likewise,hps alone is not a good indicator of healer performance.
I think it's up to the user to understand and combine several metrics to evaluate performance (And in that case, more available metrics is better).
Plus, we already provide the overhealing %, so it's just a quick math for the user to calculate effective healing himself.

I wouldn't add it to the default columns, but I don't see the harm in having them available if someone wants them.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Providing effective/absorbed value is absolutely does not matter, and it should be, but using it as single main metric (so removing instead of adding overheal) would be problematic as it hides before decision.

Actual solution should be create 'unified healing gauge' as like other overlays do, but this is quite a headache for current codebase...
image
We would just add this for now & replace with this somewhen soon as possible.

effective_pct: {
v: (_, players, encounter) => {
// Calculated and injected during Data.update()
return Math.round(_.effective_healing / encounter.rhealing_effective * 100)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'calculateMax' exists for preventing render functions from require whole encounter data. if there's additional column which requires whole encounter access, please move into Data.get().

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to clarify, you mean I should calculate that value in Data.get() and and store it directly in the player object ?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, I would prefer that way, but it's ok to keep if current approach is better (sorry, i'm confused of my old current codebase)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants