FFXIVAPP / ffxivapp-plugin-parse

Visit us on Discord! https://discord.gg/aCzSANp
https://xivapp.com
MIT License
6 stars 12 forks source link

LB dmg attributed to the wrong player. #1

Open ghost opened 10 years ago

ghost commented 10 years ago

Hey, I turned off the option to account LB DMG but somehow FFXIAPP still accounts the damage from time to time. Also when it happens it seem to give this extra damage to the wrong player.

I can send the log if needed.

Icehunter commented 10 years ago

I have limit breaks (english) here: https://github.com/Icehunter/ffxivapp-plugin-parse/blob/master/FFXIVAPP.Plugin.Parse/Models/LimitBreaks.cs#L108

Is the limit break that's getting through in that list/misspelled?

On ever damage that's given to a player I use this function:

public static bool IsLimit(string action)
{
        return LimitBreakSkills.Any(lb => String.Equals(lb, action, Constants.InvariantComparer));
}

And this check:

if ((LimitBreaks.IsLimit(line.Action)) && Settings.Default.IgnoreLimitBreaks)
{
        return;
}

I personally haven't had that happen so I'll have to try and reproduce this issue myself :) Is there any common thing you noticed between them all?

ghost commented 10 years ago

The name of the limit break ability doesn't show up, it's the dmg that's being counted as the damage of some other ability. Like in this case it was counted as bloodletter damage and jumped the BRD dps to something quite ridiculous. Sorry I should have been clearer about it. And so far I've only seen it happen during Leviathan extreme. Also, the text in the log doesn't show it as being bloodletter damage. It shows the correct bloodletter damage, then 2 or 3 lines later the caster LB damage. It's like FFXIVAPP skipped lines when it did its parse work. here screens of log loaded the app post fight. 2014_05_18_19 43 31_ 2014_05_18_19 47

Icehunter commented 10 years ago

It doesn't actually skip lines but what it does do is store the last action/name of a person who did a damage ability and also healing.

Like this:

if (isHealingSkill)
{
        _lastActionPartyHealingFrom = action;
        _lastNamePartyHealingFrom = line.Source;
}
else
{
        _lastActionPartyFrom = action;
        _lastNamePartyFrom = line.Source;
}

That being said what I think is happening here is a member uses a limit break and it gets stored but before the damage shows up in the log another member uses a ability then the last action/person is X; and the damage that comes in gets assigned.

I used to have a filter setup for damage > 2500 would also be ignored but that missed some fire III's from BLM. I'll have to think about this unless someone looking at the code can come up with a solution before me :)

ghost commented 10 years ago

Maybe enforce AOE and non AOE abilities to avoid such problem.

the pt had 2 brd and the log looks pretty much like this:

  1. Player1 casts meteor
  2. Mobs1 takes 10000 dmg
  3. mobs1 use XYZ ability
  4. Player2 takes X dmg
  5. Player3 use bloodletter
  6. Mobs2 takes 230 dmg <- correct bloodletter dmg
  7. mobs2 takes 10000 dmg <-- other meteor dmg counted as bloodletter [...skipping healer abillities]
  8. player4 use venomous bite
  9. mob2 takes x dmg
  10. mobs2 suffer from venomous bite effect
  11. mobs2 takes 10000 dmg <- other meteor dmg still counted as bloodletter but not venomous bite?
Icehunter commented 10 years ago

I could add some logic that if skill.aoe === true then add damage to the last person that did something.

It would have to be matchable to the healing LB's as well I would assume. When I get some time together I will have a look at this :)

Icehunter commented 10 years ago

Haven't forgotten... just been working a lot at my day job. I will be looking at this ASAP.

ghost commented 10 years ago

lol np. I quit playing a while back and I dunno when I'll play again, so I won't be of any help if it still behave this way. Sorry :(