504 lines
17 KiB
Lua
504 lines
17 KiB
Lua
local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
|
|
local S = E:GetModule('Skins')
|
|
|
|
local _G = _G
|
|
local pairs, select, unpack = pairs, select, unpack
|
|
|
|
local hooksecurefunc = hooksecurefunc
|
|
local GetAchievementCriteriaInfo = GetAchievementCriteriaInfo
|
|
local GetAchievementNumCriteria = GetAchievementNumCriteria
|
|
local GetNumFilteredAchievements = GetNumFilteredAchievements
|
|
local IsAddOnLoaded = IsAddOnLoaded
|
|
local CreateFrame = CreateFrame
|
|
|
|
local blueAchievement = { r = 0.1, g = 0.2, b = 0.3 }
|
|
local function blueBackdrop(self)
|
|
self:SetBackdropColor(blueAchievement.r, blueAchievement.g, blueAchievement.b)
|
|
end
|
|
|
|
local function skinAch(Achievement, BiggerIcon)
|
|
if Achievement.isSkinned then return; end
|
|
|
|
Achievement:SetFrameLevel(Achievement:GetFrameLevel() + 2)
|
|
Achievement:StripTextures(true)
|
|
Achievement:CreateBackdrop(nil, true)
|
|
Achievement.backdrop:SetInside()
|
|
Achievement.icon:CreateBackdrop()
|
|
Achievement.icon.backdrop:SetAllPoints()
|
|
Achievement.icon:Size(BiggerIcon and 54 or 36, BiggerIcon and 54 or 36)
|
|
Achievement.icon:ClearAllPoints()
|
|
Achievement.icon:Point('TOPLEFT', 8, -8)
|
|
Achievement.icon.bling:Kill()
|
|
Achievement.icon.frame:Kill()
|
|
Achievement.icon.texture:SetTexCoord(unpack(E.TexCoords))
|
|
Achievement.icon.texture:SetInside()
|
|
|
|
if Achievement.highlight then
|
|
Achievement.highlight:StripTextures()
|
|
Achievement:HookScript('OnEnter', function(self) self.backdrop:SetBackdropBorderColor(1, 1, 0) end)
|
|
Achievement:HookScript('OnLeave', function(self) self.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor)) end)
|
|
end
|
|
|
|
if Achievement.label then
|
|
Achievement.label:SetTextColor(1, 1, 1)
|
|
end
|
|
|
|
if Achievement.description then
|
|
Achievement.description:SetTextColor(.6, .6, .6)
|
|
hooksecurefunc(Achievement.description, 'SetTextColor', function(_, r, g, b)
|
|
if r == 0 and g == 0 and b == 0 then
|
|
Achievement.description:SetTextColor(.6, .6, .6)
|
|
end
|
|
end)
|
|
end
|
|
|
|
if Achievement.hiddenDescription then
|
|
Achievement.hiddenDescription:SetTextColor(1, 1, 1)
|
|
end
|
|
|
|
if Achievement.tracked then
|
|
Achievement.tracked:GetRegions():SetTextColor(1, 1, 1)
|
|
S:HandleCheckBox(Achievement.tracked)
|
|
Achievement.tracked:Size(18)
|
|
Achievement.tracked:ClearAllPoints()
|
|
Achievement.tracked:Point('TOPLEFT', Achievement.icon, 'BOTTOMLEFT', 0, -2)
|
|
end
|
|
|
|
Achievement.isSkinned = true
|
|
end
|
|
|
|
local function SkinStatusBar(bar)
|
|
bar:StripTextures()
|
|
bar:SetStatusBarTexture(E.media.normTex)
|
|
bar:SetStatusBarColor(4/255, 179/255, 30/255)
|
|
bar:CreateBackdrop()
|
|
E:RegisterStatusBar(bar)
|
|
|
|
local StatusBarName = bar:GetName()
|
|
if _G[StatusBarName..'Title'] then
|
|
_G[StatusBarName..'Title']:Point('LEFT', 4, 0)
|
|
end
|
|
if _G[StatusBarName..'Label'] then
|
|
_G[StatusBarName..'Label']:Point('LEFT', 4, 0)
|
|
end
|
|
if _G[StatusBarName..'Text'] then
|
|
_G[StatusBarName..'Text']:Point('RIGHT', -4, 0)
|
|
end
|
|
end
|
|
|
|
local function SkinSearchButton(self)
|
|
self:StripTextures()
|
|
|
|
if self.icon then
|
|
S:HandleIcon(self.icon)
|
|
end
|
|
|
|
self:CreateBackdrop('Transparent')
|
|
self:SetHighlightTexture(E.media.normTex)
|
|
|
|
local hl = self:GetHighlightTexture()
|
|
hl:SetVertexColor(1, 1, 1, 0.3)
|
|
hl:Point('TOPLEFT', 1, -1)
|
|
hl:Point('BOTTOMRIGHT', -1, 1)
|
|
end
|
|
|
|
local function playerSaturate(self) -- self is Achievement.player
|
|
local Achievement = self:GetParent()
|
|
|
|
local r, g, b = unpack(E.media.bordercolor)
|
|
Achievement.player.backdrop.callbackBackdropColor = nil
|
|
Achievement.friend.backdrop.callbackBackdropColor = nil
|
|
|
|
if Achievement.player.accountWide then
|
|
r, g, b = blueAchievement.r, blueAchievement.g, blueAchievement.b
|
|
Achievement.player.backdrop.callbackBackdropColor = blueBackdrop
|
|
Achievement.friend.backdrop.callbackBackdropColor = blueBackdrop
|
|
end
|
|
|
|
Achievement.player.backdrop:SetBackdropColor(r, g, b)
|
|
Achievement.friend.backdrop:SetBackdropColor(r, g, b)
|
|
end
|
|
|
|
local function setAchievementColor(frame)
|
|
if frame and frame.backdrop then
|
|
if frame.accountWide then
|
|
frame.backdrop.callbackBackdropColor = blueBackdrop
|
|
frame.backdrop:SetBackdropColor(blueAchievement.r, blueAchievement.g, blueAchievement.b)
|
|
else
|
|
frame.backdrop.callbackBackdropColor = nil
|
|
frame.backdrop:SetBackdropColor(unpack(E.media.backdropcolor))
|
|
end
|
|
end
|
|
end
|
|
|
|
function S:Blizzard_AchievementUI(event)
|
|
if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.achievement) then return end
|
|
|
|
if event == 'PLAYER_ENTERING_WORLD' then
|
|
hooksecurefunc('HybridScrollFrame_CreateButtons', function(frame, template)
|
|
if template == 'AchievementCategoryTemplate' then
|
|
for _, button in pairs(frame.buttons) do
|
|
if button.isSkinned then return; end
|
|
button:StripTextures(true)
|
|
button:StyleButton()
|
|
button.isSkinned = true
|
|
end
|
|
end
|
|
if template == 'AchievementTemplate' then
|
|
for _, Achievement in pairs(frame.buttons) do
|
|
skinAch(Achievement, true)
|
|
end
|
|
end
|
|
if template == 'ComparisonTemplate' then
|
|
for _, Achievement in pairs(frame.buttons) do
|
|
if Achievement.isSkinned then return; end
|
|
skinAch(Achievement.player)
|
|
skinAch(Achievement.friend)
|
|
|
|
hooksecurefunc(Achievement.player, 'Saturate', playerSaturate)
|
|
end
|
|
end
|
|
if template == 'StatTemplate' then
|
|
for _, Stats in pairs(frame.buttons) do
|
|
-- Stats:StripTextures(true)
|
|
Stats:StyleButton()
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
if not IsAddOnLoaded('Blizzard_AchievementUI') then return end
|
|
|
|
_G.AchievementFrameSummary:StripTextures()
|
|
_G.AchievementFrameSummaryBackground:Hide()
|
|
_G.AchievementFrameSummary:GetChildren():Hide()
|
|
|
|
for i = 1, 4 do
|
|
select(i, _G.AchievementFrameHeader:GetRegions()):Hide()
|
|
end
|
|
|
|
_G.AchievementFrameHeaderRightDDLInset:SetAlpha(0)
|
|
_G.AchievementFrameHeaderLeftDDLInset:SetAlpha(0)
|
|
select(2, _G.AchievementFrameAchievements:GetChildren()):Hide()
|
|
_G.AchievementFrameAchievementsBackground:Hide()
|
|
select(3, _G.AchievementFrameAchievements:GetRegions()):Hide()
|
|
_G.AchievementFrameStatsBG:Hide()
|
|
_G.AchievementFrameSummaryAchievementsHeaderHeader:Hide()
|
|
_G.AchievementFrameSummaryCategoriesHeaderTexture:Hide()
|
|
select(3, _G.AchievementFrameStats:GetChildren()):Hide()
|
|
select(5, _G.AchievementFrameComparison:GetChildren()):Hide()
|
|
_G.AchievementFrameComparisonHeaderBG:Hide()
|
|
_G.AchievementFrameComparisonHeaderPortrait:Hide()
|
|
_G.AchievementFrameComparisonHeaderPortraitBg:Hide()
|
|
_G.AchievementFrameComparisonBackground:Hide()
|
|
_G.AchievementFrameComparisonDark:SetAlpha(0)
|
|
_G.AchievementFrameComparisonSummaryPlayerBackground:Hide()
|
|
_G.AchievementFrameComparisonSummaryFriendBackground:Hide()
|
|
|
|
local summaries = {_G.AchievementFrameComparisonSummaryPlayer, _G.AchievementFrameComparisonSummaryFriend}
|
|
for _, frame in pairs(summaries) do
|
|
frame:SetBackdrop()
|
|
end
|
|
|
|
_G.AchievementFrameMetalBorderTopLeft:Hide()
|
|
_G.AchievementFrameWoodBorderTopLeft:Hide()
|
|
_G.AchievementFrameMetalBorderTopRight:Hide()
|
|
_G.AchievementFrameWoodBorderTopRight:Hide()
|
|
_G.AchievementFrameMetalBorderBottomRight:Hide()
|
|
_G.AchievementFrameWoodBorderBottomRight:Hide()
|
|
_G.AchievementFrameMetalBorderBottomLeft:Hide()
|
|
_G.AchievementFrameWoodBorderBottomLeft:Hide()
|
|
|
|
local noname_frames = {
|
|
_G.AchievementFrameStats,
|
|
_G.AchievementFrameSummary,
|
|
_G.AchievementFrameAchievements,
|
|
_G.AchievementFrameComparison
|
|
}
|
|
for _, frame in pairs(noname_frames) do
|
|
if frame and frame.GetNumChildren then
|
|
for i=1, frame:GetNumChildren() do
|
|
local child = select(i, frame:GetChildren())
|
|
if child and not child:GetName() then
|
|
child:SetBackdrop()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local AchievementFrame = _G.AchievementFrame
|
|
AchievementFrame:StripTextures()
|
|
AchievementFrame:CreateBackdrop('Transparent')
|
|
AchievementFrame.backdrop:Point('TOPLEFT', 0, 7)
|
|
AchievementFrame.backdrop:Point('BOTTOMRIGHT')
|
|
|
|
_G.AchievementFrameHeaderTitle:ClearAllPoints()
|
|
_G.AchievementFrameHeaderTitle:Point('TOP', AchievementFrame.backdrop, 'TOP', 0, -8)
|
|
|
|
_G.AchievementFrameHeaderPoints:ClearAllPoints()
|
|
_G.AchievementFrameHeaderPoints:Point('CENTER', _G.AchievementFrameHeaderTitle, 'CENTER', 0, 0)
|
|
|
|
--Backdrops
|
|
_G.AchievementFrameCategories:StripTextures()
|
|
_G.AchievementFrameCategoriesContainerScrollBarBG:SetAlpha(0)
|
|
_G.AchievementFrameCategoriesContainer:CreateBackdrop('Transparent')
|
|
_G.AchievementFrameCategoriesContainer.backdrop:Point('TOPLEFT', 0, 4)
|
|
_G.AchievementFrameCategoriesContainer.backdrop:Point('BOTTOMRIGHT', -2, -3)
|
|
_G.AchievementFrameCategoriesBG:SetAlpha(0)
|
|
_G.AchievementFrameWaterMark:SetAlpha(0)
|
|
--_G.AchievementFrameCategoriesBG:SetInside(_G.AchievementFrameCategoriesContainer.backdrop)
|
|
|
|
_G.AchievementFrameAchievementsContainer:CreateBackdrop('Transparent')
|
|
_G.AchievementFrameAchievementsContainer.backdrop:Point('TOPLEFT', -2, 2)
|
|
_G.AchievementFrameAchievementsContainer.backdrop:Point('BOTTOMRIGHT', -2, -3)
|
|
|
|
_G.AchievementFrameGuildEmblemRight:Kill()
|
|
_G.AchievementFrameGuildEmblemLeft:Kill()
|
|
|
|
S:HandleCloseButton(_G.AchievementFrameCloseButton, AchievementFrame.backdrop)
|
|
|
|
S:HandleDropDownBox(_G.AchievementFrameFilterDropDown)
|
|
_G.AchievementFrameFilterDropDown:ClearAllPoints()
|
|
_G.AchievementFrameFilterDropDown:Point('TOPLEFT', _G.AchievementFrameAchievements, 'TOPLEFT', -18, 24)
|
|
|
|
S:HandleEditBox(AchievementFrame.searchBox)
|
|
AchievementFrame.searchBox.backdrop:Point('TOPLEFT', AchievementFrame.searchBox, 'TOPLEFT', -3, -3)
|
|
AchievementFrame.searchBox.backdrop:Point('BOTTOMRIGHT', AchievementFrame.searchBox, 'BOTTOMRIGHT', 0, 3)
|
|
AchievementFrame.searchBox:ClearAllPoints()
|
|
AchievementFrame.searchBox:Point('TOPRIGHT', AchievementFrame, 'TOPRIGHT', -50, 8)
|
|
AchievementFrame.searchBox:Size(107, 25)
|
|
|
|
local scrollBars = {
|
|
_G.AchievementFrameCategoriesContainerScrollBar,
|
|
_G.AchievementFrameAchievementsContainerScrollBar,
|
|
_G.AchievementFrameStatsContainerScrollBar,
|
|
_G.AchievementFrameComparisonContainerScrollBar,
|
|
_G.AchievementFrameComparisonStatsContainerScrollBar,
|
|
}
|
|
|
|
for _, scrollbar in pairs(scrollBars) do
|
|
if scrollbar then
|
|
S:HandleScrollBar(scrollbar, 5)
|
|
end
|
|
end
|
|
|
|
-- Search
|
|
AchievementFrame.searchResults:StripTextures()
|
|
AchievementFrame.searchResults:CreateBackdrop('Transparent')
|
|
AchievementFrame.searchPreviewContainer:StripTextures()
|
|
AchievementFrame.searchPreviewContainer:ClearAllPoints()
|
|
AchievementFrame.searchPreviewContainer:Point('TOPLEFT', AchievementFrame, 'TOPRIGHT', 2, 6)
|
|
|
|
for i = 1, 5 do
|
|
SkinSearchButton(AchievementFrame.searchPreviewContainer['searchPreview'..i])
|
|
end
|
|
SkinSearchButton(AchievementFrame.searchPreviewContainer.showAllSearchResults)
|
|
|
|
hooksecurefunc('AchievementFrame_UpdateFullSearchResults', function()
|
|
local numResults = GetNumFilteredAchievements()
|
|
|
|
local scrollFrame = AchievementFrame.searchResults.scrollFrame
|
|
local offset = _G.HybridScrollFrame_GetOffset(scrollFrame)
|
|
local results = scrollFrame.buttons
|
|
local result, index
|
|
|
|
for i = 1, #results do
|
|
result = results[i]
|
|
index = offset + i
|
|
|
|
if index <= numResults then
|
|
if not result.styled then
|
|
result:SetNormalTexture('')
|
|
result:SetPushedTexture('')
|
|
result:GetRegions():Hide()
|
|
|
|
result.resultType:SetTextColor(1, 1, 1)
|
|
result.path:SetTextColor(1, 1, 1)
|
|
|
|
result.styled = true
|
|
end
|
|
|
|
if result.icon:GetTexCoord() == 0 then
|
|
result.icon:SetTexCoord(unpack(E.TexCoords))
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
hooksecurefunc(AchievementFrame.searchResults.scrollFrame, 'update', function(self)
|
|
for i = 1, #self.buttons do
|
|
local result = self.buttons[i]
|
|
|
|
if result.icon:GetTexCoord() == 0 then
|
|
result.icon:SetTexCoord(unpack(E.TexCoords))
|
|
end
|
|
end
|
|
end)
|
|
|
|
S:HandleCloseButton(AchievementFrame.searchResults.closeButton)
|
|
S:HandleScrollBar(_G.AchievementFrameScrollFrameScrollBar)
|
|
|
|
--Tabs
|
|
for i = 1, 3 do
|
|
S:HandleTab(_G['AchievementFrameTab'..i])
|
|
_G['AchievementFrameTab'..i]:SetFrameLevel(_G['AchievementFrameTab'..i]:GetFrameLevel() + 2)
|
|
end
|
|
|
|
SkinStatusBar(_G.AchievementFrameSummaryCategoriesStatusBar)
|
|
SkinStatusBar(_G.AchievementFrameComparisonSummaryPlayerStatusBar)
|
|
SkinStatusBar(_G.AchievementFrameComparisonSummaryFriendStatusBar)
|
|
_G.AchievementFrameComparisonSummaryFriendStatusBar.text:ClearAllPoints()
|
|
_G.AchievementFrameComparisonSummaryFriendStatusBar.text:Point('CENTER')
|
|
_G.AchievementFrameComparisonHeader:Point('BOTTOMRIGHT', _G.AchievementFrameComparison, 'TOPRIGHT', 45, -20)
|
|
|
|
for i=1, 12 do
|
|
local frame = _G['AchievementFrameSummaryCategoriesCategory'..i]
|
|
local button = _G['AchievementFrameSummaryCategoriesCategory'..i..'Button']
|
|
local highlight = _G['AchievementFrameSummaryCategoriesCategory'..i..'ButtonHighlight']
|
|
SkinStatusBar(frame)
|
|
button:StripTextures()
|
|
highlight:StripTextures()
|
|
|
|
_G[highlight:GetName()..'Middle']:SetColorTexture(1, 1, 1, 0.3)
|
|
_G[highlight:GetName()..'Middle']:SetAllPoints(frame)
|
|
end
|
|
|
|
hooksecurefunc('AchievementButton_DisplayAchievement', setAchievementColor)
|
|
|
|
hooksecurefunc('AchievementFrameSummary_UpdateAchievements', function()
|
|
for i=1, _G.ACHIEVEMENTUI_MAX_SUMMARY_ACHIEVEMENTS do
|
|
local frame = _G['AchievementFrameSummaryAchievement'..i]
|
|
if not frame.isSkinned then
|
|
skinAch(frame)
|
|
frame.isSkinned = true
|
|
end
|
|
|
|
--The backdrop borders tend to overlap so add a little more space between summary achievements
|
|
local prevFrame = _G['AchievementFrameSummaryAchievement'..i-1]
|
|
if i ~= 1 then
|
|
frame:ClearAllPoints()
|
|
frame:Point('TOPLEFT', prevFrame, 'BOTTOMLEFT', 0, 1)
|
|
frame:Point('TOPRIGHT', prevFrame, 'BOTTOMRIGHT', 0, 1)
|
|
end
|
|
|
|
setAchievementColor(frame)
|
|
end
|
|
end)
|
|
|
|
for i=1, 20 do
|
|
local frame = _G['AchievementFrameStatsContainerButton'..i]
|
|
frame:StyleButton()
|
|
|
|
_G['AchievementFrameStatsContainerButton'..i..'BG']:SetColorTexture(1, 1, 1, 0.2)
|
|
_G['AchievementFrameStatsContainerButton'..i..'HeaderLeft']:Kill()
|
|
_G['AchievementFrameStatsContainerButton'..i..'HeaderRight']:Kill()
|
|
_G['AchievementFrameStatsContainerButton'..i..'HeaderMiddle']:Kill()
|
|
|
|
frame = 'AchievementFrameComparisonStatsContainerButton'..i
|
|
_G[frame]:StripTextures()
|
|
_G[frame]:StyleButton()
|
|
|
|
_G[frame..'BG']:SetColorTexture(1, 1, 1, 0.2)
|
|
_G[frame..'HeaderLeft']:Kill()
|
|
_G[frame..'HeaderRight']:Kill()
|
|
_G[frame..'HeaderMiddle']:Kill()
|
|
end
|
|
|
|
hooksecurefunc('AchievementButton_GetProgressBar', function(index)
|
|
local frame = _G['AchievementFrameProgressBar'..index]
|
|
if frame then
|
|
if not frame.skinned then
|
|
frame:StripTextures()
|
|
frame:SetStatusBarTexture(E.media.normTex)
|
|
E:RegisterStatusBar(frame)
|
|
frame:SetStatusBarColor(4/255, 179/255, 30/255)
|
|
frame:CreateBackdrop('Transparent')
|
|
frame:SetFrameLevel(frame:GetFrameLevel() + 3)
|
|
frame:Height(frame:GetHeight() - 2)
|
|
|
|
frame.text:ClearAllPoints()
|
|
frame.text:Point('CENTER', frame, 'CENTER', 0, -1)
|
|
frame.text:SetJustifyH('CENTER')
|
|
|
|
if index > 1 then
|
|
frame:ClearAllPoints()
|
|
frame:Point('TOP', _G['AchievementFrameProgressBar'..index-1], 'BOTTOM', 0, -5)
|
|
frame.SetPoint = E.noop
|
|
frame.ClearAllPoints = E.noop
|
|
end
|
|
|
|
frame.skinned = true
|
|
end
|
|
|
|
end
|
|
end)
|
|
|
|
hooksecurefunc('AchievementObjectives_DisplayCriteria', function(objectivesFrame, id)
|
|
local numCriteria = GetAchievementNumCriteria(id)
|
|
local textStrings, metas = 0, 0
|
|
for i = 1, numCriteria do
|
|
local _, criteriaType, completed, _, _, _, _, assetID = GetAchievementCriteriaInfo(id, i)
|
|
|
|
if criteriaType == _G.CRITERIA_TYPE_ACHIEVEMENT and assetID then
|
|
metas = metas + 1;
|
|
local metaCriteria = _G.AchievementButton_GetMeta(metas);
|
|
if objectivesFrame.completed and completed then
|
|
metaCriteria.label:SetShadowOffset(0, 0)
|
|
metaCriteria.label:SetTextColor(1, 1, 1, 1);
|
|
elseif completed then
|
|
metaCriteria.label:SetShadowOffset(1, -1)
|
|
metaCriteria.label:SetTextColor(0, 1, 0, 1);
|
|
else
|
|
metaCriteria.label:SetShadowOffset(1, -1)
|
|
metaCriteria.label:SetTextColor(.6, .6, .6, 1);
|
|
end
|
|
elseif criteriaType ~= 1 then
|
|
textStrings = textStrings + 1;
|
|
local criteria = _G.AchievementButton_GetCriteria(textStrings);
|
|
if objectivesFrame.completed and completed then
|
|
criteria.name:SetTextColor(1, 1, 1, 1);
|
|
criteria.name:SetShadowOffset(0, 0);
|
|
elseif completed then
|
|
criteria.name:SetTextColor(0, 1, 0, 1);
|
|
criteria.name:SetShadowOffset(1, -1);
|
|
else
|
|
criteria.name:SetTextColor(.6, .6, .6, 1);
|
|
criteria.name:SetShadowOffset(1, -1);
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
--The section below is usually handled in our hook, but another addon may have loaded the AchievementUI before we were ready
|
|
--Categories
|
|
for i = 1, 20 do
|
|
local button = _G['AchievementFrameCategoriesContainerButton'..i]
|
|
if not button or (button and button.isSkinned) then return end
|
|
button:StripTextures(true)
|
|
button:StyleButton()
|
|
button.isSkinned = true
|
|
end
|
|
|
|
--Comparison
|
|
for i = 1, 10 do
|
|
local Achievement = _G['AchievementFrameComparisonContainerButton'..i]
|
|
if not Achievement or (Achievement and Achievement.isSkinned) then return end
|
|
|
|
skinAch(Achievement.player)
|
|
skinAch(Achievement.friend)
|
|
|
|
hooksecurefunc(Achievement.player, 'Saturate', playerSaturate)
|
|
|
|
Achievement.isSkinned = true
|
|
end
|
|
end
|
|
|
|
local f = CreateFrame('Frame')
|
|
f:RegisterEvent('PLAYER_ENTERING_WORLD')
|
|
f:SetScript('OnEvent', function(self, event)
|
|
self:UnregisterEvent(event)
|
|
S:Blizzard_AchievementUI(event)
|
|
end)
|
|
|
|
S:AddCallbackForAddon('Blizzard_AchievementUI')
|