brittyazel / Neuron

A full-featured World of Warcraft action bar and interface replacement addon
https://www.curseforge.com/wow/addons/neuron
MIT License
31 stars 21 forks source link

Toon profiles aren't always loading correctly #265

Closed raysmith59 closed 5 years ago

raysmith59 commented 5 years ago

Some of my toons only get partial buttons when I log into them, I have to go into and out of config mode for the rest of the buttons to load. All profiles were re-created after the database work stopped so there shouldn't be any legacy profile issues.

brittyazel commented 5 years ago

hrm. Are the buttons loaded but just not visible? I'm wondering if it's a visibility thing or an actual button loading bug. Nothing has changed with how the DB works since 1.0 so this is definitely something that should be fixed with code, no worries. Can you take a screenshot when you first load in and then after your fix to get them to show so I can see?

Also, is this every time, or just some of the time?

raysmith59 commented 5 years ago

If I had to guess, when it happens the buttons that show are likely the ones that were added in when I first created the profile, the missing ones were likely added in later. If there's any sort of indication in the profile of when buttons were added the issue could be with that. This could also explain why some of my toons aren't impacted, they may have been fully populated the first time rather than in phases.

The buttons are missing, not hidden... clicking where they'd be does nothing (tested with a missing mount button on my priest).

It happens consistently for impacted toons but not all toons are impacted. My monk on load: image

After going into and out of config mode: image

My priest before and after: image

image

brittyazel commented 5 years ago

Cool thanks I'll play around and try to replicate it. When did this start happening?

brittyazel commented 5 years ago

Can you enable show grid on the affected bars and try logging in? I'm interested to see if you have show grid on if the buttons are still hidden

brittyazel commented 5 years ago

When I say "hidden" BTW I mean in the add-on sense, which means they're physically absent from the screen. Not hidden in the classical sense meaning invisible. In add-on speak :Hide and :Show are functions

raysmith59 commented 5 years ago

Your theory is good, when grid is enabled the buttons show on login but when grid is disabled the issue comes back.

In terms of when it started, recently... within the past few releases. I haven't been playing all that much lately but probably within the past 4-7 days.

brittyazel commented 5 years ago

Ok cool, I was hoping that would be the case. I think I know where to look for the bug

brittyazel commented 5 years ago

Hrm, ok I can't replicate this just by changing the grid showing. Do you have any other visibility settings on it that differ from the defaults?

raysmith59 commented 5 years ago

For what it's worth, it isn't only happening on login, I noticed today that it also happens after a loading screen.

Here are my settings, I've never paid much attention to defaults so not sure what might be different if anything: image

brittyazel commented 5 years ago

Can you screenshot the bar states tab as well. I want to create a bar exactly as you have it

raysmith59 commented 5 years ago

Nothing special there but here you go.

image

brittyazel commented 5 years ago

I may have fixed this. Can you please test out MASTER and let me know what you think?

raysmith59 commented 5 years ago

No change that I can see, unfortunately.

I've also noticed another symptom (pre-existing, still happening in master) that I think is related, toons impacted by this issue have issues moving buttons around (I always have them locked; unlock using shift). Trying to drag a button while some are missing will cause the button being moved to disappear; at that point the missing buttons show up. However, moving buttons at that point doesn't work as it should (shift-drag, release, done), when impacted moving a button requires shift-drag, release, then click on the location I want it to go; and even that only works sometimes.

(I don't have a theory on what's going on so I'm hoping the more info, the better, no matter how minor it may be)

brittyazel commented 5 years ago

Lol oh man this is just getting even more puzzling...

Can you try going to a toon you don't play often and making a brand new profile to see if we can replicate the same issue. No matter what I do I can't manufacture the problem you're having, so I'm shooting in the dark

raysmith59 commented 5 years ago

I just came up with a theory... I have 3 impacted toons and 3 that are fine. The 3 that are fine are all using the first spec in the list (Assassination, Beast Master and Balance), the 3 that are impacted aren't (Shadow, Protection (pally) and Windwalker). When I set up the new default profile that I use to build the others from, I used a lowbie rogue that didn't have a spec yet (level 1). I wonder if that's the quirk. I'll test your theory but I'd love confirmation that someone else is experiencing what I am so could you try this as well? Shouldn't take more than a few minutes.

brittyazel commented 5 years ago

I'll try this when I get home. Thanks for the step by step

raysmith59 commented 5 years ago

In a really quick test I created a new default profile on a L100 shadow priest and copied it over to a max-level frost mage and it seems okay.

I'm starting to think it's a profile corruption due to creating it on a L1 toon, I'm trying to compare a good vs a bad one but man, that's an ugly file to try and parse by eye...

raysmith59 commented 5 years ago

This may or may not be useful but I'm noticing that my paladin (who I've only set up protection and ret bars for, so specs 2 and 3) has what looks to be a full complement of monk abilities (Brewmaster) in homestate 1... example for my 1 button:

        ["ActionBar"] = {
            {
                ["buttons"] = {
                    {
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "tiger palm",
                                ["macro_Icon"] = 606551,
                                ["macro_Text"] = "#autowrite\n/cast tiger palm()",
                                ["macro_Name"] = "Tiger Palm",
                            },
                        }, -- [1]
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "avenger's shield",
                                ["macro_Icon"] = 135874,
                                ["macro_Text"] = "#autowrite\n/cast avenger's shield()",
                                ["macro_Name"] = "Avenger's Shield",
                            },
                        }, -- [2]
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "crusader strike",
                                ["macro_Icon"] = 135891,
                                ["macro_Text"] = "#autowrite\n/cast crusader strike()",
                                ["macro_Name"] = "Crusader Strike",
                            },
                        }, -- [3]
                        ["keys"] = {
                            ["hotKeyText"] = ":1:",
                            ["hotKeyLock"] = true,
                            ["hotKeys"] = ":1:",
                        },
                        ["config"] = {
                            ["date"] = "01/22/19 17:15:50",
                        },
                    }, -- [1]
brittyazel commented 5 years ago

Weird...did you copy the spec from a monk initially? Each profile should be entirely separate from one another without any cross-talk, so the only way a monk ability ended up on a pally is if it was copied from a profile

raysmith59 commented 5 years ago

I can't see how, would have been created straight from the L1 rogue profile that was created although I'm going to check a different toon as well to confirm; it feels like cross-talk to me, possibly from caching.

(in that vein, why does every profile seem to have a full cache of every ability whether it's used by the specific class or not? Just curious...)

Long story short, I used to create a lot of toons and I kept accidentally tainting my default profiles with class-specific stuff which is how I got into the habit of using L1 toons to create the defaults, less chance of that type of thing happening.

So, curious fact. I set up a preliminary Disc profile on my priest, it seems to be working correctly. When I switched him back to Shadow the bars stayed in Disc until I did the config toggle. When I logged out and back in (still Shadow), it's coming up as Disc until I do the config toggle. So, does seem to be some sort of issue with a lack of first spec profile being set up. Maybe. Gah.

I still need to do more testing, my pally might be more instructive.

raysmith59 commented 5 years ago

Hold off on doing anything with this, I'm going to test a theory and it'll take a bit of time to confirm.

raysmith59 commented 5 years ago

Alright, let's leave the stuff above for reference if it comes in handy but otherwise let's start over here. My guess is that something changed since I created the previous default profile, hopefully with this info you'll be able to confirm.

All testing here done with the latest Master that you asked me to test.

When I look at the buttons for a problematic profile I'm seeing that the ones that don't show up only have a numeric value representing the non-1 spec, for instance:

                    {
                        [3] = {
                            ["homestate"] = {
                                ["macro_Auto"] = "invoke xuen, the white tiger",
                                ["macro_Icon"] = 620832,
                                ["macro_Text"] = "/cast invoke xuen, the white tiger()\n/use 13",
                                ["macro_Name"] = "Invoke Xuen, the White Tiger",
                            },
                        },
                        ["config"] = {
                            ["date"] = "01/22/19 20:14:43",
                        },
                    }, -- [5]

That button does NOT show up when I'm in spec 3 (Windwalker).

If I go to spec 1 and add a spell to the same button that's causing me problems in WW, the button DOES show up in Windwalker. I've done that here, note that there's no [1] analog here to the [3] for WW:

                    {
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "leg sweep",
                                ["macro_Icon"] = 642414,
                                ["macro_Text"] = "#autowrite\n/cast Leg Sweep()",
                                ["macro_Name"] = "Leg Sweep",
                            },
                        }, -- [1]
                        [3] = {
                            ["homestate"] = {
                                ["macro_Auto"] = "storm, earth, and fire",
                                ["macro_Icon"] = 136038,
                                ["macro_Text"] = "#autowrite\n/cast storm, earth, and fire()",
                                ["macro_Name"] = "Storm, Earth, and Fire",
                            },
                        },
                        ["config"] = {
                            ["date"] = "01/22/19 20:14:43",
                        },
                    }, -- [4]

Now, when I look at an equivalent scenario with a newly created default profile, it looks like this when I only have an ability for Fury (spec 2):

                    {
                        nil, -- [1]
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "battle shout",
                                ["macro_Name"] = "Battle Shout",
                                ["macro_Text"] = "#autowrite\n/cast Battle Shout()",
                                ["macro_Icon"] = 132333,
                            },
                        }, -- [2]
                        ["config"] = {
                            ["date"] = "01/22/19 20:44:20",
                        },
                    }, -- [1]

So in this case, it's populating a nil for spec 1; yet, it's still not working, when I log into that toon I don't see Battle Shout until I toggle config mode.

In this case when I add a spell to the same button in Arms it looks like:

                ["buttons"] = {
                    {
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "berserker rage",
                                ["macro_Name"] = "Berserker Rage",
                                ["macro_Text"] = "#autowrite\n/cast Berserker Rage()",
                                ["macro_Icon"] = 136009,
                            },
                        }, -- [1]
                        {
                            ["homestate"] = {
                                ["macro_Auto"] = "battle shout",
                                ["macro_Name"] = "Battle Shout",
                                ["macro_Text"] = "#autowrite\n/cast Battle Shout()",
                                ["macro_Icon"] = 132333,
                            },
                        }, -- [2]
                        ["config"] = {
                            ["date"] = "01/22/19 20:52:35",
                        },
                    }, -- [1]

To test a theory, I tried fixing the problematic monk button by manually altering the LUA code to:

                    {
                        [1] = {
                            ["homestate"] = {
                                ["macro_Auto"] = "leg sweep",
                                ["macro_Icon"] = 642414,
                                ["macro_Text"] = "#autowrite\n/cast Leg Sweep()",
                                ["macro_Name"] = "Leg Sweep",
                            },
                        }, -- [1]
                        [2] = {
                            ["homestate"] = {
                                ["macro_Auto"] = "leg sweep",
                                ["macro_Icon"] = 642414,
                                ["macro_Text"] = "#autowrite\n/cast Leg Sweep()",
                                ["macro_Name"] = "Leg Sweep",
                            },
                        },
                        [3] = {
                            ["homestate"] = {
                                ["macro_Auto"] = "storm, earth, and fire",
                                ["macro_Icon"] = 136038,
                                ["macro_Text"] = "#autowrite\n/cast storm, earth, and fire()",
                                ["macro_Name"] = "Storm, Earth, and Fire",
                            },
                        },
                        ["config"] = {
                            ["date"] = "01/22/19 20:25:03",
                        },
                    }, -- [4]

This worked**... so apparently the "[3] = {" style is kind of supported although I'm not sure why that would have changed recently; I deleted the Neuron.LUA and backup files once you confirmed there wouldn't be more database changes so nothing in my profiles should pre-date the latest database.

** Well, it worked for that toon but then I started running into issues on other toons (my druid's spells were constantly flipping between in range and out of range even when I was 5yds from a mob, for instance) so I think I broke the profile doing that test. I restored a backup after that. :)

So, there appear to be two different issues:

1) The "[spec] = {" style doesn't seem to be working correctly unless all of the specs show up (demonstrated by my manual alteration) or a generic (non-multi-spec-formatted) entry exists. Side note - now that the spec number only shows up in a comment how is this new style even supposed to work? How is EVERYONE not having these issues? In the case of this style, it does come in with a config toggle so obviously the code is capable of reading it, it's just not doing it on toon load / spec change / etc. For my purposes I'd like to see this fixed so I don't have to create all new profiles again. Is the numeric format ([spec] = {) only used when there's a gap before it? Maybe that's it.

2) The new profile format without the "[spec] = {" and with the spec number commented isn't working either except in the case of the first spec; nil doesn't work as a placeholder for earlier specs.

Hopefully this all makes some sense, I had to re-write it a few times due to bad assumptions and various other issues to earlier drafts.

brittyazel commented 5 years ago

Very thorough, nice work. I'll have to dig through the profiles and see what I can make sense of. I was hoping this wouldn't be a database issue lol. You know how much I LOVE messing with the database

raysmith59 commented 5 years ago

Upside, assuming my vibe is somewhat accurate it should be possible to code around the database quirks. The fact that config toggling brings the buttons in tells me that there's code in there that can load them properly, it just isn't always being run when it should. I also forgot to mention that this is all probably tied to the grid being hidden so it might be as simple as seeing how the buttons are loaded when the grid is enabled, since toggling config does show the grid it may be that simple. Hopefully.

Unfortunately, my range indicator issue is continuing on different toons and far as I can think of nothing has changed since the backup that I restored, it should be back to how it was before. So, I may have to re-do all my profiles from scratch again. Sigh. Unless... I don't think I actually did any playing after installing the new Master so maybe the issue is in that build. I'll try reverting the version.

brittyazel commented 5 years ago

Yeah the range indicator is fixed. That was a bug for some reason I couldn't just say "if SpellInRange(spell) then)" I had to explicitely say "if SpellInRange(spell)==0 then"

This is counter to pretty much every function in the game, so it caught me off guard. It's fixed, just pull the latest MASTER. The good news is your mount/crafting indicator bug is fixed :-)

raysmith59 commented 5 years ago

I've noticed two other issues that may be related to this, let me know if so or if you'd like them reported separately:

1) Buttons aren't changing due to passive conditions (things like /cast [harm] Solar Wrath(); Rejuvenation()); I was having all kinds of issues getting them to work until relogging (are changes to button macros supposed to be immediately active?), after rebooting they seem to be casting the correct spells but the icon in that case is still showing Rejuvenation even when I have a hostile targeted. I also ended up getting all hostile buttons up in a warfront even when I had friendlies targeted, I had to run out of combat for them to go back to the healing ones, that's just happened once but figured I'd mention it. 2) I've enabled grids temporarily to get past the missing buttons issue (which is far from ideal, I keep thinking I'm in config mode) but when I enable grid mode on my vehicle bar with priority hotkeys, those hotkeys are active priority even when there aren't any abilities active on them.

brittyazel commented 5 years ago

Yeah can you open those as different issues, I wana ask more about each one

brittyazel commented 5 years ago

I still cannot for the life of me replicate this. I'm basically shooting blind here lol ugh

Koskun commented 5 years ago

Getting the same issue. I checked on 2 characters (DK and Monk). The DK's bars load up fine, specced Blood (first of the specs), loaded on the Monk and only Bar 1 shows, specced WW (third of the specs).

It also does not trigger any bindings other than those that are on Bar 1 when this happens.

brittyazel commented 5 years ago

@Koskun @raysmith59

Ok I got this fixed! Sorry for the delay, lots of stuff in my life. Thanks for the debugging, it helped A TON.

The issue ended up being some ass backward logic that I put into the SetObjectVisibility(). Basically I had it check for the presence of an ability on a button and "not hide" the button, but I never explicitly told it to show the button if it was otherwise hidden i.e. when switching specs. Now it's all fixed, and the code is better and cleaner because of it.

New version coming at you asap! Cheers

raysmith59 commented 5 years ago

In limited testing it does seem to be working now, thanks!