Toon profiles aren't always loading correctly
raysmith59 opened this issue ยท 31 comments
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.
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.
Ok cool, I was hoping that would be the case. I think I know where to look for the bug
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?
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?
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:
Cool thanks I'll play around and try to replicate it. When did this start happening?
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
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
Can you screenshot the bar states tab as well. I want to create a bar exactly as you have it
I may have fixed this. Can you please test out MASTER and let me know what you think?
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)
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
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.
- On a level 1 toon, create a new default profile, save as DefaultNew or similar, add a few mounts or something to the bar and log out to save.
- On a high-level toon, save your toon's profile to some sort of placeholder so you can load it back later.
- Switch to a spec that ISN'T the first on the list, then copy over that DefaultNew profile to the toon's profile.
- Populate some buttons (add a few spell book abilities), log out to save.
- Log back in, add more buttons. Log out to save.
- Log in, see how it goes.
- Copy back your placeholder save.
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:
-
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.
-
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.
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
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.
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 :-)
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...
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]
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
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.
Hold off on doing anything with this, I'm going to test a theory and it'll take a bit of time to confirm.
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:
- 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.
- 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.
I still cannot for the life of me replicate this. I'm basically shooting blind here lol ugh
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.
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