PunishXIV / Avarice

Positional feedback with pixel perfect rear/flank tracking, range indicators, and more.
https://puni.sh/plugin/Avarice
BSD 3-Clause "New" or "Revised" License
22 stars 15 forks source link

Ninja positional feedback broken #16

Open Soren-png opened 2 months ago

Soren-png commented 2 months ago

As title says, the positional feedback doesn't seem to be working for ninjas specifically. Regardless of angle, both it's rear and flank register as failed

kaedys commented 1 month ago

Poking in to say that this is broken for Reaper as well, and the new Executioner upgrades (Executioner's Gibbet (ID 36970), Executioner's Gallows (ID 36971)) aren't counted at all.

SilvaLau commented 1 month ago

I was just testing this for the first time today on Samurai, and no matter what I do, it registers as Positional MISS. Made me wonder for a minute if I have been playing my melee job wrong this whole time... Came to the forum to find out why.

masanbol commented 1 month ago

Monk is also broken - safe to say this plugin is nonfunctional at the moment

NjalTheKnut commented 2 weeks ago

I am having this issue only with NIN, though I have not tested extensively with other classes/jobs.

For me, only the Armor Crush feedback is broken, as Aeolian edge still functions correctly. Armor crush always displays failure visually yet seems to have the correct sound...maybe. I will see if I can discern more closely the sound it gives off to identify if it is merely a visual VFX issue or a logic hiccup someplace. It could be that the action ID has changed, and thus is defaulting to the initialized value of "false" for success.

Update: I confirmed online that according to the community pages, the ID has not changed. I will verify this in-game if and when I can.

That said, it does seem like the issue lies in the logic of that specific ability, and not the serving of the VFX, as some abilities, (i.e. Aeolian Edge) do still function normally. Perhaps it is just flanking maneuvers?

I see a potential logic bottleneck starting at line 290 in Util.cs if that helps. Nevermind, that's for anticipation wedges, not feedback vfx.

The place I think may be more relevant to check is line 26 in Memory.cs

Update: Lines 36, 40, and 41 of Memory.cs seem especially relevant.

I just tested and opened the log window to see what filtering to Avarice showed, and it seems there is a null parameter exception when calling CallStatic on RemoveVfx in VfxEditorManager.cs

I suspect perhaps it cannot find something when calling that function, and the correct VFX is shown for failure simply because it is the default initialized state.

I am not sure if this is related to the version of vfxedit I have installed, or not.

image

Seems to me like line 27 could be relevant here, though being unfamiliar with the code history I'm hesitant to try changing it myself for personal curiosity testing. My suggestion is to perhaps see if it will help changing the empty brackets out for null, if that won't break it. I think that could be the problem there, based on the errors I got each time I executed a positional in-game.

Update: Found out I can copy logs from the xllog window, which I will paste below.

14:05:51.199 | ERR | [Avarice] Object reference not set to an instance of an object.
14:05:51.209 | ERR | [Avarice]    at ECommons.Reflection.ReflectionHelper.CallStatic(Object obj, String type, String name, Object[] values) in D:\VS\Avarice\ECommons\ECommons\Reflection\ReflectionHelper\CallStatic.cs:line 20
       at Avarice.VfxEditorManager.RemoveVfx() in D:\VS\Avarice\Avarice\VfxEditorManager.cs:line 26
14:05:58.324 | ERR | [Avarice] Object reference not set to an instance of an object.
14:05:58.324 | ERR | [Avarice]    at ECommons.Reflection.ReflectionHelper.CallStatic(Object obj, String type, String name, Object[] values) in D:\VS\Avarice\ECommons\ECommons\Reflection\ReflectionHelper\CallStatic.cs:line 20
       at Avarice.VfxEditorManager.RemoveVfx() in D:\VS\Avarice\Avarice\VfxEditorManager.cs:line 26

So, TLDR, it appears there may be two issues at play here, one for the error I observed in the logs, and one for the specific ability, though whether they are related is possible, yet unclear how. The error appears whenever I use either Aeolian Edge or Armor Crush, but the symbol rendered is wrong on just the Armor Crush.

Update: It seems the method Remove does not exist in the Spawn.VfxSpawn file of VFXEditor. Clear and InteropRemoved do though, and there is a Remove function elsewhere, in the Node specific functions. Perhaps it is necessary to just switch either the function or its namespace to get the error to go away. Not sure that will impact the false failures, though they are somehow correlating based on my observations while testing.

Update: The error disappears in the log when using a local edited copy of the plugin with Clear used in place of Remove. The incorrect symbol is still displayed for Armor Crush, however. I suspect it may be tied to the CSV file for positionals, and some value being parsed incorrectly from that.

Using some debug output from another plugin called Damage Info, the percentages appear to be different for both Aeolian Edge and Armor Crush from those stored in the latest data.csv, so perhaps that may be an indication some things in the spreadsheet are amiss, or something it is compared to will be found as a factor. Hopefully these observations help.

It should be noted that Damage Info is also reporting the Armor Crush as a failure, so this may be an issue with a common dependency.