Default raid UI gets buggy after someone joined/left group while in combat
Hantunaar opened this issue ยท 7 comments
Hi there, I've been using Questie since the beginning of Classic and since then I had issues with it and the default raid UI.
Whenever someone joins/leaves/changes group while I'm in combat, I'm getting a yellow chat message saying there was an error with a addon/custom interface thingy and the raid UI gets stuck. There is no Lua error pop-up.
By stuck I mean people aren't added/removed from the grid, and I can't click on parts of the grid or it's targetting someone else than the one I clicked.
It's only happening when Questie is enabled/when Questie is the only addon enabled, and on 2 differents computers, So I'm 100% sure it's a Questie related issue.
Hey @Hantunaar we are aware of (so called) taint issues caused by Questie. Unfortunately it is not really easy for us to fix these without losing some functionality.
Since we are also very limited in time the small team can invest in the addon I can't promise when we will have the time to investigate this further. Moreover Blizzard is not really helpful towards this and adds more and more sources of these taint issues.
Sorry for the trouble and thanks for taking the time to create this report. We will try to keep you updated.
Have you tried updating your version of LibUIDropDownMenu in Questie? Questie seems to be using one from 5-18.
@BreakBB Ah ok, sorry for the repost then. Keeping such a big and useful addon on tracks is not easy task, thank you guys for your work!
@warbasher I'm not sure, I always run the latest update of Questie. The issue has been there since the very beginning of Classic though. Maybe it only happens with defaut raid UI? I'm using no addons for that so I can't say.
Hey @warbasher we will look into it! Could indeed be that our version is (again) outdated. Thanks for the hint ๐๐ป
The top comment in this reddit post might be relevant to the cause of this issue: https://www.reddit.com/r/wow/comments/cqq3vx/blizzard_why_cant_i_open_90_of_my_interface/
Since TBC classic is based on a more modern client and has some of the more recent changes to combat botting, etc it's probably the same thing happening here.
As far as steps to reproduce (TBC classic client v2.5.2): basically doing anything that tries to open/close a UI panel while in combat causes taint. Clicking on a quest objective in the Questie Tracker while in combat, inspecting a player via an addon function (which tries to open the inspect UI panel - questie doesn't do this I believe, but it's another example), etc. Once an addon causes taint, various parts of even the default UI become unresponsive or stop working correctly until the UI is reloaded.
This happens CONSTANTLY with the current version of questie to the point that I have to disable the addon completely when I'm not actively using it. It's so frequent that just about any loss of functionality required to reduce the amount of taint issues would be a welcome change.
As far as workarounds, putting a check for combat via UnitAffectingCombat("player"); before attempting to perform any UI panel actions could help. When appropriate, those actions could be queued for when combat ends (triggering on the PLAYER_REGEN_ENABLED event that fires when the player leaves combat), but in most cases it's probably preferable and easier to just deny those actions with an error message in chat saying to try again out of combat (it's not a great user experience when you try to do stuff in combat, and then the UI freaks out and opens a bunch of stuff that was queued all at once the moment combat ends).
@Tadur that's a very useful find. I figured something changed with the API since multiple addons were suddenly broken. Restricting ShowUIPanel and HideUIPanel seems to remove taint caused by clicking on a quest (via Questie Tracker) in combat.
Here's the code I used as an example:
local nextMessage = 0
function Questie.ShowUIPanel(frame, forced)
if InCombatLockdown() then
Questie.QueuedPanel = frame
local time = GetTime()
if (nextMessage <= time) then
nextMessage = time + 0.5
DEFAULT_CHAT_FRAME:AddMessage("Questie window will open when combat ends.", 1, 1, 0)
end
else
Questie.QueuedPanel = nil
ShowUIPanel(frame)
end
end
function Questie.HideUIPanel(frame)
if (not InCombatLockdown()) then
HideUIPanel(frame)
end
end
I also changed the event handler for PlayerRegenEnabled:
function _EventHandler:PlayerRegenEnabled()
Questie:Debug(DEBUG_DEVELOP, "[EVENT] PLAYER_REGEN_ENABLED")
if Questie.db.global.hideTrackerInCombat and (previousTrackerState == true) then
QuestieTracker:Expand()
end
-- New code
if Questie.QueuedPanel then
Questie.ShowUIPanel(Questie.QueuedPanel)
end
end
@warbasher @Tadur I merged PR #3155 which tackles the taint from the Tracker when in combat. There is also another PR (#3154) open to further reduce the taints Questie is causing. @Laumesis is on it