ArtOfShred / LuiExtended

Lui Extended addon for ESO
http://www.esoui.com/downloads/fileinfo.php?id=818
Other
36 stars 21 forks source link

Fix Negate Behavior in CC Tracker #267

Closed ACastanza closed 8 months ago

ACastanza commented 9 months ago

Fix Issue #266

One issue was that Ability ID 47158 which the script was using for NEGATE_MAGIC_ID doesn't actually have an abilityName (anymore?) in game, it returned a nil when I tested it. So abilityName == GetAbilityName(NEGATE_MAGIC_ID) was never matching on anything to catch other Negate Magic effects like the new ones in Endless Archive. Additionally, the NPC Guards Negate in Cyrodiil only pops in the CC tracker for 650 ms (its hitValue) and then disappears because it doesn't tick, even if you stand it in for its entire duration. This would appear to be a longstanding issue with the CC tracker and not a recent change. This possibly also affects the Absorption Field (healing) morph of negate, but I didn't confirm before working on a fix. Because the Suppression field morph ticks every second it wasn't affected by this bug.

This new version uses the game's ACTION_RESULT_SILENCED effect to track Negate. While this does appear to be effective at detecting all Negates, both old and new (like the new ones in Endless Archive), for some reason the Lightning and Resto Heavy Attack channels also initiate with ACTION_RESULT_SILENCED (bafflingly), so there is an additional filter to ensure that the incoming ability matches one of the Negate types.

Finally, to handle the fact that Negate sends a tick value of <=~1 second regardless of whether it ticks to refresh the effect or not, I've set Negate to a fixed 20 second duration, and in order to prevent the game's incorrect hitValues from removing it early. 20 seconds reflects the max duration of the player negate. It is possible this might change in the future, but if you're going to stand in a negate continuously for longer than 20 seconds, there isn't any amount of code that can help you. Finally, to prevent this new duration from keeping the alert active regardless of if the negate has ended or not, I've duplicated the queue functionality used for Fears to also handle removing the negate effect when you actually leave the negate.

I can't guarantee that there aren't any other unexpected interactions here with other portions of the CC tracker, but in my testing negates are now reliably detected, and the alert pop responds dynamically, and appropriately when either standing in a negate for its full duration, or when moving into or out of a negate, or when killing the caster causes the negate to end early.

ACastanza commented 8 months ago

Ok, so, @DakJaniels, this fixed the guard negates but there seems to be an issue with some player negates that I need to pin down and fix.