local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB local S = E:GetModule("Skins") --Lua functions local _G = _G local ipairs = ipairs local unpack = unpack --WoW API / Variables local hooksecurefunc = hooksecurefunc local GetAchievementNumCriteria = GetAchievementNumCriteria local GetAchievementCriteriaInfo = GetAchievementCriteriaInfo local CRITERIA_TYPE_ACHIEVEMENT = CRITERIA_TYPE_ACHIEVEMENT local function skinAchievement(achievement, biggerIcon) if achievement.isSkinned then return end _G[achievement:GetName().."Background"]:Kill() achievement:StripTextures() achievement:SetTemplate("Default", true) achievement.icon:SetTemplate() achievement.icon:SetSize(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", S.SetModifiedBackdrop) achievement:HookScript("OnLeave", S.SetOriginalBackdrop) end if achievement.label then achievement.label:SetTextColor(1, 1, 1) end if achievement.description then achievement.description:SetTextColor(.6, .6, .6) achievement.description.SetTextColor = E.noop end if achievement.hiddenDescription then achievement.hiddenDescription:SetTextColor(1, 1, 1) end if achievement.tracked then S:HandleCheckBox(achievement.tracked, true) achievement.tracked:Size(14, 14) achievement.tracked:ClearAllPoints() achievement.tracked:Point("TOPLEFT", achievement.icon, "BOTTOMLEFT", 0, -2) end hooksecurefunc(achievement, "Saturate", function(self) self:SetBackdropBorderColor(unpack(E.media.bordercolor)) end) hooksecurefunc(achievement, "Desaturate", function(self) self:SetBackdropBorderColor(unpack(E.media.bordercolor)) end) achievement.isSkinned = true end S:AddCallback("Skin_AchievementUI_HybridScrollButton", function() if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.achievement then return end hooksecurefunc("HybridScrollFrame_CreateButtons", function(frame, template) if template == "AchievementCategoryTemplate" then for _, button in ipairs(frame.buttons) do if not button.isSkinned then button:StripTextures(true) button:StyleButton() button.isSkinned = true end end elseif template == "AchievementTemplate" then for _, achievement in ipairs(frame.buttons) do skinAchievement(achievement, true) end elseif template == "ComparisonTemplate" then for _, achievement in ipairs(frame.buttons) do skinAchievement(achievement.player) skinAchievement(achievement.friend) end elseif template == "StatTemplate" then for _, stats in ipairs(frame.buttons) do if not stats.isSkinned then -- stats:StripTextures(true) stats:StyleButton() stats.isSkinned = true end end end end) end) S:AddCallbackForAddon("Blizzard_AchievementUI", "Skin_Blizzard_AchievementUI", function() if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.achievement then return end local frames = { "AchievementFrame", -- "AchievementFrameCategories", "AchievementFrameSummary", "AchievementFrameSummaryCategoriesHeader", "AchievementFrameSummaryAchievementsHeader", "AchievementFrameStatsBG", "AchievementFrameAchievements", "AchievementFrameComparison", "AchievementFrameComparisonHeader", "AchievementFrameComparisonSummaryPlayer", "AchievementFrameComparisonSummaryFriend" } for _, frame in ipairs(frames) do _G[frame]:StripTextures(true) end local nonameFrames = { "AchievementFrameStats", "AchievementFrameSummary", "AchievementFrameAchievements", "AchievementFrameComparison" } for _, frame in ipairs(nonameFrames) do frame = _G[frame] for i = 1, frame:GetNumChildren() do local child = select(i, frame:GetChildren()) if child and not child:GetName() then child:SetBackdrop(nil) end end end local function updatePanelInfo(self) if self == AchievementFrameComparison then if AchievementFrame.isComparison then AchievementFrame:Width(863) else AchievementFrame:Width(737) end end S:SetUIPanelWindowInfo(AchievementFrame, "xoffset", 11, nil, true) S:SetUIPanelWindowInfo(AchievementFrame, "yoffset", -12, nil, true) S:SetUIPanelWindowInfo(AchievementFrame, "width", nil, -11) end AchievementFrame:HookScript("OnShow", updatePanelInfo) AchievementFrameComparison:HookScript("OnShow", updatePanelInfo) AchievementFrameComparison:HookScript("OnHide", updatePanelInfo) S:HandleCloseButton(AchievementFrameCloseButton, AchievementFrame.backdrop) S:HandleDropDownBox(AchievementFrameFilterDropDown) S:HandleScrollBar(AchievementFrameCategoriesContainerScrollBar) S:HandleScrollBar(AchievementFrameAchievementsContainerScrollBar) S:HandleScrollBar(AchievementFrameStatsContainerScrollBar) S:HandleScrollBar(AchievementFrameComparisonContainerScrollBar) S:HandleScrollBar(AchievementFrameComparisonStatsContainerScrollBar) AchievementFrameHeaderTitle:SetParent(AchievementFrame) AchievementFrameHeaderTitle:ClearAllPoints() AchievementFrameHeaderTitle:Point("TOPLEFT", AchievementFrame, "TOPLEFT", -29, -9) AchievementFrameHeaderPoints:SetParent(AchievementFrame) AchievementFrameHeaderPoints:ClearAllPoints() AchievementFrameHeaderPoints:Point("LEFT", AchievementFrameHeaderTitle, "RIGHT", 2, 0) AchievementFrameHeaderShield:SetParent(AchievementFrame) AchievementFrameHeader:Hide() AchievementFrameHeader.Show = E.noop AchievementFrame:Size(737, 485) AchievementFrame:SetTemplate("Transparent") AchievementFrameFilterDropDown:Point("TOPRIGHT", AchievementFrame, "TOPRIGHT", -21, -5) AchievementFrameCategories:SetTemplate("Default") AchievementFrameCategories:Point("TOPLEFT", 8, -35) AchievementFrameCategories:Point("BOTTOMLEFT", 21, 8) AchievementFrameCategoriesContainerScrollBar:Point("TOPLEFT", AchievementFrameCategoriesContainer, "TOPRIGHT", 3, -14) AchievementFrameCategoriesContainerScrollBar:Point("BOTTOMLEFT", AchievementFrameCategoriesContainer, "BOTTOMRIGHT", 3, 14) AchievementFrameSummaryAchievements:Point("TOPLEFT", 5, -10) AchievementFrameSummaryAchievements:Point("TOPRIGHT", -5, -30) AchievementFrameAchievements:SetTemplate("Transparent") AchievementFrameAchievementsContainer:Point("TOPLEFT", 2, -2) AchievementFrameAchievementsContainer:Point("BOTTOMRIGHT", -2, 4) AchievementFrameAchievementsContainerScrollBar:Point("TOPLEFT", AchievementFrameAchievementsContainer, "TOPRIGHT", 5, -17) AchievementFrameAchievementsContainerScrollBar:Point("BOTTOMLEFT", AchievementFrameAchievementsContainer, "BOTTOMRIGHT", 5, 15) AchievementFrameStats:SetTemplate("Transparent") AchievementFrameStatsContainerScrollBar:Point("TOPLEFT", AchievementFrameStatsContainer, "TOPRIGHT", 3, -16) AchievementFrameStatsContainerScrollBar:Point("BOTTOMLEFT", AchievementFrameStatsContainer, "BOTTOMRIGHT", 3, 14) AchievementFrameComparison:SetTemplate("Transparent") AchievementFrameComparisonHeader:Point("BOTTOMRIGHT", AchievementFrameComparison, "TOPRIGHT", 50, -1) AchievementFrameComparison:Point("TOPLEFT", AchievementFrameCategories, "TOPRIGHT", 3, 0) AchievementFrameComparisonSummary:Height(30) AchievementFrameComparisonSummary:Point("TOPLEFT", 4, -2) AchievementFrameComparisonContainer:Point("TOPLEFT", AchievementFrameComparisonSummary, "BOTTOMLEFT", 0, -3) AchievementFrameComparisonContainerScrollBar:Point("TOPLEFT", AchievementFrameComparisonSummary, "TOPRIGHT", 9, -17) AchievementFrameComparisonContainerScrollBar:Point("BOTTOMLEFT", AchievementFrameComparisonContainer, "BOTTOMRIGHT", 9, 14) AchievementFrameComparisonStatsContainer:Point("TOPLEFT", 5, -3) AchievementFrameComparisonStatsContainerScrollBar:Point("TOPLEFT", AchievementFrameComparisonStatsContainer, "TOPRIGHT", 3, -16) AchievementFrameComparisonStatsContainerScrollBar:Point("BOTTOMLEFT", AchievementFrameComparisonStatsContainer, "BOTTOMRIGHT", 3, 14) AchievementFrameAchievementsContainerScrollBar.Show = function(self) AchievementFrameAchievements:SetWidth(500) for _, button in ipairs(AchievementFrameAchievements.buttons) do button:SetWidth(496) end getmetatable(self).__index.Show(self) end AchievementFrameAchievementsContainerScrollBar.Hide = function(self) AchievementFrameAchievements:SetWidth(521) for _, button in ipairs(AchievementFrameAchievements.buttons) do button:SetWidth(517) end getmetatable(self).__index.Hide(self) end AchievementFrameStatsContainerScrollBar.Show = function(self) AchievementFrameStats:SetWidth(500) for _, button in ipairs(AchievementFrameStats.buttons) do button:SetWidth(494) end getmetatable(self).__index.Show(self) end AchievementFrameStatsContainerScrollBar.Hide = function(self) AchievementFrameStats:SetWidth(521) for _, button in ipairs(AchievementFrameStats.buttons) do button:SetWidth(515) end getmetatable(self).__index.Hide(self) end --[[ AchievementFrameComparisonContainerScrollBar.Show = function(self) AchievementFrameComparison:SetWidth(626) AchievementFrameComparisonSummaryPlayer:SetWidth(498) for _, button in ipairs(AchievementFrameComparisonContainer.buttons) do button:SetWidth(616) button.player:SetWidth(498) end getmetatable(self).__index.Show(self) end ]] AchievementFrameComparisonContainerScrollBar.Hide = function(self) AchievementFrameComparison:SetWidth(647) AchievementFrameComparisonSummaryPlayer:SetWidth(519) for _, button in ipairs(AchievementFrameComparisonContainer.buttons) do button:SetWidth(637) button.player:SetWidth(519) end getmetatable(self).__index.Hide(self) end --[[ AchievementFrameComparisonStatsContainerScrollBar.Show = function(self) AchievementFrameComparison:SetWidth(626) for _, button in ipairs(AchievementFrameComparisonStatsContainer.buttons) do button:SetWidth(616) end getmetatable(self).__index.Show(self) end ]] AchievementFrameComparisonStatsContainerScrollBar.Hide = function(self) AchievementFrameComparison:SetWidth(647) for _, button in ipairs(AchievementFrameComparisonStatsContainer.buttons) do button:SetWidth(637) end getmetatable(self).__index.Hide(self) end local function categoriesContainerScripts() AchievementFrameCategoriesContainerScrollBar.Show = function(self) ACHIEVEMENTUI_CATEGORIESWIDTH = 176 AchievementFrameCategories:SetWidth(176) AchievementFrameCategoriesContainer:GetScrollChild():SetWidth(176) AchievementFrameAchievements:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 24, 0) AchievementFrameStats:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 24, 0) AchievementFrameComparison:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 24, 0) for _, button in ipairs(AchievementFrameCategoriesContainer.buttons) do AchievementFrameCategories_DisplayButton(button, button.element) end getmetatable(self).__index.Show(self) end AchievementFrameCategoriesContainerScrollBar.Hide = function(self) ACHIEVEMENTUI_CATEGORIESWIDTH = 197 AchievementFrameCategories:SetWidth(197) AchievementFrameCategoriesContainer:GetScrollChild():SetWidth(197) AchievementFrameAchievements:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 3, 0) AchievementFrameStats:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 3, 0) AchievementFrameComparison:SetPoint("TOPLEFT", "$parentCategories", "TOPRIGHT", 3, 0) for _, button in ipairs(AchievementFrameCategoriesContainer.buttons) do AchievementFrameCategories_DisplayButton(button, button.element) end getmetatable(self).__index.Hide(self) end end if AchievementFrameCategoriesContainer.update then categoriesContainerScripts() else AchievementFrameCategories:HookScript("OnEvent", categoriesContainerScripts) end for i = 1, 2 do local tab = _G["AchievementFrameTab"..i] S:HandleTab(tab) tab.text:SetPoint("CENTER", 0, 2) tab.text.SetPoint = E.noop end AchievementFrameTab1:Point("BOTTOMLEFT", AchievementFrame, "BOTTOMLEFT", 0, -30) AchievementFrameTab2:Point("LEFT", AchievementFrameTab1, "RIGHT", -15, 0) local sbcR, sbcG, sbcB = 4/255, 179/255, 30/255 local function skinStatusBar(bar) bar:StripTextures() bar:SetStatusBarTexture(E.media.normTex) bar:SetStatusBarColor(sbcR, sbcG, sbcB) bar:CreateBackdrop("Default") E:RegisterStatusBar(bar) local barName = bar:GetName() local title = _G[barName.."Title"] local label = _G[barName.."Label"] local text = _G[barName.."Text"] if title then title:Point("LEFT", 4, 0) end if label then label:Point("LEFT", 4, 0) end if text then text:Point("RIGHT", -4, 0) end end skinStatusBar(AchievementFrameSummaryCategoriesStatusBar) skinStatusBar(AchievementFrameComparisonSummaryPlayerStatusBar) skinStatusBar(AchievementFrameComparisonSummaryFriendStatusBar) AchievementFrameComparisonSummaryFriendStatusBar.text:ClearAllPoints() AchievementFrameComparisonSummaryFriendStatusBar.text:Point("CENTER") for i = 1, 8 do local frame = _G["AchievementFrameSummaryCategoriesCategory"..i] local button = _G["AchievementFrameSummaryCategoriesCategory"..i.."Button"] local highlight = _G["AchievementFrameSummaryCategoriesCategory"..i.."ButtonHighlight"] local middle = _G["AchievementFrameSummaryCategoriesCategory"..i.."ButtonHighlightMiddle"] skinStatusBar(frame) button:StripTextures() highlight:StripTextures() middle:SetTexture(1, 1, 1, 0.3) middle:SetAllPoints(frame) end for i = 1, 20 do _G["AchievementFrameStatsContainerButton"..i]:StyleButton() _G["AchievementFrameStatsContainerButton"..i.."BG"]:SetTexture(1, 1, 1, 0.2) _G["AchievementFrameStatsContainerButton"..i.."HeaderLeft"]:Kill() _G["AchievementFrameStatsContainerButton"..i.."HeaderRight"]:Kill() _G["AchievementFrameStatsContainerButton"..i.."HeaderMiddle"]:Kill() local frame = _G["AchievementFrameComparisonStatsContainerButton"..i] frame:StripTextures() frame:StyleButton() _G["AchievementFrameComparisonStatsContainerButton"..i.."BG"]:SetTexture(1, 1, 1, 0.2) _G["AchievementFrameComparisonStatsContainerButton"..i.."HeaderLeft"]:Kill() _G["AchievementFrameComparisonStatsContainerButton"..i.."HeaderRight"]:Kill() _G["AchievementFrameComparisonStatsContainerButton"..i.."HeaderMiddle"]:Kill() end hooksecurefunc("AchievementFrameSummary_UpdateAchievements", function() local frame, prevFrame for i = 1, ACHIEVEMENTUI_MAX_SUMMARY_ACHIEVEMENTS do frame = _G["AchievementFrameSummaryAchievement"..i] skinAchievement(frame) if i ~= 1 then prevFrame = _G["AchievementFrameSummaryAchievement"..(i-1)] frame:ClearAllPoints() frame:Point("TOPLEFT", prevFrame, "BOTTOMLEFT", 0, -1) frame:Point("TOPRIGHT", prevFrame, "BOTTOMRIGHT", 0, 1) end frame:SetBackdropBorderColor(unpack(E.media.bordercolor)) end end) hooksecurefunc("AchievementButton_GetProgressBar", function(index) local frame = _G["AchievementFrameProgressBar"..index] if frame and not frame.skinned then frame:StripTextures() frame:SetStatusBarTexture(E.media.normTex) E:RegisterStatusBar(frame) frame:SetStatusBarColor(sbcR, sbcG, sbcB) frame:GetStatusBarTexture():SetInside() frame:Height(frame:GetHeight() + (E.Border + E.Spacing)) frame:SetTemplate("Default") 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) 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 == CRITERIA_TYPE_ACHIEVEMENT and assetID then metas = metas + 1 local metaCriteria = AchievementButton_GetMeta(metas) metaCriteria:Height(21) metaCriteria:StyleButton() metaCriteria.border:Kill() metaCriteria.icon:SetTexCoord(unpack(E.TexCoords)) metaCriteria.icon:Point("TOPLEFT", 2, -2) metaCriteria.label:Point("LEFT", 26, 0) 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 = 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) hooksecurefunc("AchievementObjectives_DisplayProgressiveAchievement", function(objectivesFrame, id) local mini for i = 1, 12 do mini = _G["AchievementFrameMiniAchievement"..i] if mini and not mini.isSkinned then local icon = _G["AchievementFrameMiniAchievement"..i.."Icon"] local points = _G["AchievementFrameMiniAchievement"..i.."Points"] local border = _G["AchievementFrameMiniAchievement"..i.."Border"] local shield = _G["AchievementFrameMiniAchievement"..i.."Shield"] mini:SetTemplate() mini:SetBackdropColor(0, 0, 0, 0) mini:Size(32) local prevFrame = _G["AchievementFrameMiniAchievement"..i - 1] if i == 1 then mini:Point("TOPLEFT", 6, -4) elseif i == 7 then mini:Point("TOPLEFT", AchievementFrameMiniAchievement1, "BOTTOMLEFT", 0, -20) else mini:Point("TOPLEFT", prevFrame, "TOPRIGHT", 10, 0) end mini.SetPoint = E.noop icon:SetTexCoord(unpack(E.TexCoords)) icon:SetInside() points:Point("BOTTOMRIGHT", -8, -15) points:SetTextColor(1, 0.80, 0.10) border:Kill() shield:Kill() mini.isSkinned = true end end end) end)