Quantcast ObjectiveTracker-related taint - WoWInterface
Thread Tools Display Modes
08-20-16, 07:11 AM   #1
A Rage Talon Dragon Guard
lightspark's Avatar
AddOn Author - Click to view addons
Join Date: Sep 2012
Posts: 328
ObjectiveTracker-related taint


So I've been messing w/ Blizzard_ObjectiveTracker for quite some time, but recently I discovered a bit weird issue. Here's how it happens.

At first I modify (a.k.a. taint) objective tracker's constant, for example, OBJECTIVE_TRACKER_UPDATE_ALL = 0xFFFFFFFF. I think that taint reaches world map frame, when QuestObjectiveTracker_UpdatePOIs is called from world map's QuestMapFrame_UpdateAll function.

But here's a weird part. It doesn't break either objective tracker, or world map itself, they work fine. However, it affects two frames, WorldMapFrame.UIElementsFrame.BountyBoard and WorldMapFrame.UIElementsFrame.ActionButton. So neither :Hide(), nor :SetPoint(), nor :ClearAllPoints() methods can be called in combat. I just get cold "An action was blocked in combat because of taint" warning.

Tweaking Blizzard_ObjectiveTracker was causing no problems before Legion pre-patch, but right now it's pretty much impossible cuz of described issue.

Was this change intended? TBH, it makes no sense.

Example of warning message.

8/20 16:49:10.879  An action was blocked in combat because of taint from ls_UI - <unnamed>:Hide()
8/20 16:49:10.879      Interface\FrameXML\WorldMapActionButton.lua:58 <unnamed>:Clear()
8/20 16:49:10.879      Interface\FrameXML\WorldMapActionButton.lua:67 <unnamed>:Refresh()
8/20 16:49:10.879      Interface\FrameXML\WorldMapActionButton.lua:19 <unnamed>:SetMapAreaID()
8/20 16:49:10.879      Interface\FrameXML\WorldMapFrame.lua:390
8/20 16:49:10.879      WorldMapFrame:Hide()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2320 <unnamed>:SetUIPanel()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2347 <unnamed>:MoveUIPanel()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2378 <unnamed>:HideUIPanel()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2052
8/20 16:49:10.879      <unnamed>:SetAttribute()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2846 HideUIPanel()
8/20 16:49:10.879      Interface\FrameXML\UIParent.lua:2812 ToggleFrame()
8/20 16:49:10.879      Interface\FrameXML\WorldMapFrame.lua:219 ToggleWorldMap()

Last edited by lightspark : 08-20-16 at 07:18 AM.
08-20-16, 10:33 AM   #2
A Black Drake
AddOn Author - Click to view addons
Join Date: Apr 2009
Posts: 89
Yes, I also encountered this taint path related to WorldMapFrame.UIElementsFrame.ActionButton. Even just opening the World Map frame from addon code (e.g. with WorldMapFrame:Show() or QuestMapFrame_OpenToQuestDetails) will end up in this code path being tainted and errors happening when the map is hidden again, which is incredibly frustrating. Seems like it's currently impossible to open the quest log or world map (which are now the same thing) in 7.0 without tainting this.

In my case I also want to prevent the UI's new bizarre behavior where some undocumented C function causes the order of your quest log to be shuffled whenever you change the zoomed area in the world map, which is caused by the new SortQuestSortTypes function. As expected, all attempts to prevent this also taint the world map/quest log due to this same code path.

Let's hope Blizzard will fix it in 8.0 or 9.0.

Last edited by Barjack : 08-20-16 at 10:40 AM.
08-20-16, 04:49 PM   #3
A Pyroguard Emberseer
AddOn Author - Click to view addons
Join Date: Mar 2010
Posts: 1,289
Well since toggling the world map is basically a :Show/Hide call thats the root of your taint. And of couse it's spreading by the global variables.

WoWInterface » Site Forums » Archived Beta Forums » Legion Beta archived threads » ObjectiveTracker-related taint

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off