11<Ui ><Script ><![CDATA[ --[[
22
3- TaintLess [22-11-27 ]
3+ TaintLess [23-05-18 ]
44https://www.townlong-yak.com/addons/taintless
55
66All rights reserved.
@@ -33,51 +33,74 @@ local function purgeKey(t, k)
3333 end
3434end
3535
36+ local patch do
37+ local q, skips = {}, securecall(function()
38+ local cb, r, _, an = select(4,GetBuildInfo()), {moon="haunted"}
39+ r.moon, _, an = nil, issecurevariable(r, "moon")
40+ for m, v, clo, chi in (GetAddOnMetadata(an, "X-TaintLess-DisableMitigations") or ""):gmatch("([%a_]+)=(%d+):?(%d*):?(%d*)") do
41+ if (clo == "" or cb >= clo+0) and (chi == "" or chi+0 >= cb) then
42+ r[m] = v + 0
43+ end
44+ end
45+ return r
46+ end)
47+ function patch(name, version, impl)
48+ if name == nil then
49+ for qf, v in pairs(q) do
50+ securecall(qf, v)
51+ end
52+ elseif not ((tonumber(_G[name]) or 0) >= version or skips and skips[name] == version) then
53+ _G[name], q[impl] = version, version
54+ end
55+ end
56+ end
57+
3658-- https://www.townlong-yak.com/addons/taintless/fixes/RefreshOverread
37- if (tonumber(UIDD_REFRESH_OVERREAD_PATCH_VERSION) or 0) < 3 then
38- UIDD_REFRESH_OVERREAD_PATCH_VERSION = 3
59+ patch("UIDD_REFRESH_OVERREAD_PATCH_VERSION", 3, function(V)
3960 hooksecurefunc("UIDropDownMenu_InitializeHelper", function()
40- for i=1, UIDD_REFRESH_OVERREAD_PATCH_VERSION == 3 and UIDROPDOWNMENU_MAXLEVELS or 0 do
61+ for i=1, UIDD_REFRESH_OVERREAD_PATCH_VERSION == V and UIDROPDOWNMENU_MAXLEVELS or 0 do
4162 for j=1+_G["DropDownList" .. i].numButtons, UIDROPDOWNMENU_MAXBUTTONS do
4263 local b, _ = _G["DropDownList" .. i .. "Button" .. j]
4364 _ = issecurevariable(b, "checked") or purgeKey(b, "checked")
4465 _ = issecurevariable(b, "notCheckable") or purgeKey(b, "notCheckable")
4566 end
4667 end
4768 end)
48- end
69+ end)
4970
5071-- https://www.townlong-yak.com/addons/taintless/fixes/DisplayModeTaint
51- if (tonumber(UIDROPDOWNMENU_OPEN_PATCH_VERSION) or 0) < 1 then
52- UIDROPDOWNMENU_OPEN_PATCH_VERSION = 1
72+ patch("UIDROPDOWNMENU_OPEN_PATCH_VERSION", 1, function(V)
5373 hooksecurefunc("UIDropDownMenu_InitializeHelper", function(frame)
54- if UIDROPDOWNMENU_OPEN_PATCH_VERSION == 1
74+ if UIDROPDOWNMENU_OPEN_PATCH_VERSION == V
5575 and UIDROPDOWNMENU_OPEN_MENU and UIDROPDOWNMENU_OPEN_MENU ~= frame
5676 and not issecurevariable(UIDROPDOWNMENU_OPEN_MENU, "displayMode") then
5777 purgeKey(_G, "UIDROPDOWNMENU_OPEN_MENU")
5878 end
5979 end)
60- end
80+ end)
6181
6282-- https://www.townlong-yak.com/addons/taintless/fixes/IOFrameSelection
63- if (tonumber(IOFRAME_SELECTION_PATCH_VERSION) or 0) < 3 then
64- IOFRAME_SELECTION_PATCH_VERSION = 3
65- if InterfaceOptionsFrame then
83+ patch("IOFRAME_SELECTION_PATCH_VERSION", 5, function(V)
84+ if type(InterfaceOptionsFrame) == "table" and type(InterfaceOptionsFrame.HookScript) == "function" then
6685 InterfaceOptionsFrame:HookScript("OnHide", function()
67- if IOFRAME_SELECTION_PATCH_VERSION == 3 then
86+ if IOFRAME_SELECTION_PATCH_VERSION == V then
6887 InterfaceOptionsFrameCategories.selection = nil
6988 end
7089 end)
7190 end
72- end
91+ end)
7392
7493-- https://www.townlong-yak.com/addons/taintless/fixes/EditModeOpenDrop
75- if EditModeManagerFrame and FriendsFrameStatusDropDown and (tonumber(EDITMAN_OPENDROP_PATCH_VERSION) or 0) < 1 then
76- EDITMAN_OPENDROP_PATCH_VERSION = 1
94+ patch("EDITMAN_OPENDROP_PATCH_VERSION", 3, function(V)
95+ if not (type(EditModeManagerFrame) == "table" and
96+ type(EditModeManagerFrame.GetAttribute) == "function" and
97+ type(FriendsFrameStatusDropDown) == "table") then
98+ return
99+ end
77100 hooksecurefunc(EditModeManagerFrame, "GetAttribute", function(_, attr)
78- if attr ~= "UIPanelLayout-checkFit" or EDITMAN_OPENDROP_PATCH_VERSION ~= 1
79- or (issecurevariable(DropDownList1, "maxWidth") and issecurevariable("UIDROPDOWNMENU_MENU_LEVEL")) then
80- elseif InCombatLockdown() and FriendsFrameStatusDropDown:IsProtected() then
101+ if attr ~= "UIPanelLayout-checkFit" or EDITMAN_OPENDROP_PATCH_VERSION ~= V
102+ or (issecurevariable(DropDownList1, "maxWidth") and issecurevariable("UIDROPDOWNMENU_MENU_LEVEL"))
103+ or InCombatLockdown() and FriendsFrameStatusDropDown:IsProtected() then
81104 elseif FriendsFrameStatusDropDown:IsVisible() then
82105 FriendsFrameStatusDropDown:Hide()
83106 FriendsFrameStatusDropDown:Show()
@@ -91,40 +114,45 @@ if EditModeManagerFrame and FriendsFrameStatusDropDown and (tonumber(EDITMAN_OPE
91114 FriendsFrameStatusDropDown:SetParent(op)
92115 end
93116 end)
94- end
117+ end)
95118
96119-- https://www.townlong-yak.com/addons/taintless/fixes/ObjectiveTrackerUpdate
97- if ObjectiveTrackerFrame and (tonumber(OBJTRACK_DELAYUPDATE_PATCH_VERSION) or 0) < 1 then
98- OBJTRACK_DELAYUPDATE_PATCH_VERSION = 1
120+ patch("OBJTRACK_DELAYUPDATE_PATCH_VERSION", 3, function(V)
121+ if not (type(ObjectiveTrackerFrame) == "table" and
122+ type(ObjectiveTrackerFrame.HeaderMenu) == "table" and
123+ type(ObjectiveTrackerFrame.HeaderMenu.Title) == "table") then
124+ return
125+ end
99126 local counter, didDelayUpdate, delayFrameCount = (CreateFrame("Frame", nil, ObjectiveTrackerFrame))
100127 counter:Hide()
101128 counter:SetScript("OnUpdate", function()
102- if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 then
129+ if OBJTRACK_DELAYUPDATE_PATCH_VERSION == V and delayFrameCount then
103130 delayFrameCount = delayFrameCount + 1
104131 else
105132 counter:Hide()
106133 end
107134 end)
108135 hooksecurefunc("ObjectiveTracker_Update", function()
109- if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 and didDelayUpdate then
136+ if OBJTRACK_DELAYUPDATE_PATCH_VERSION == V and didDelayUpdate then
110137 didDelayUpdate = nil
111138 purgeKey(ObjectiveTrackerFrame, "isUpdating")
112139 end
113140 end)
114141 hooksecurefunc(ObjectiveTrackerFrame.HeaderMenu.Title, "ClearAllPoints", function()
115- if OBJTRACK_DELAYUPDATE_PATCH_VERSION == 1 and not ObjectiveTrackerFrame.isUpdating then
116- if issecurevariable(ObjectiveTrackerFrame, "isOnLeftSideOfScreen") then
117- if delayFrameCount then
118- delayFrameCount = nil
119- counter:Hide()
120- end
121- elseif (delayFrameCount or 0) < 4 then
122- ObjectiveTrackerFrame.isUpdating, didDelayUpdate, delayFrameCount = 86, 1, delayFrameCount or 0
123- counter:Show()
124- else
142+ if OBJTRACK_DELAYUPDATE_PATCH_VERSION ~= V or ObjectiveTrackerFrame.isUpdating then
143+ elseif issecurevariable(ObjectiveTrackerFrame, "isOnLeftSideOfScreen") then
144+ if delayFrameCount then
145+ delayFrameCount = nil
125146 counter:Hide()
126147 end
148+ elseif 4 > (delayFrameCount or 0) then
149+ ObjectiveTrackerFrame.isUpdating, didDelayUpdate, delayFrameCount = 86, 1, delayFrameCount or 0
150+ counter:Show()
151+ else
152+ counter:Hide()
127153 end
128154 end)
129- end
155+ end)
156+
157+ patch()
130158]]> </Script ></Ui >
0 commit comments