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 select = select local unpack = unpack local find, gsub = string.find, string.gsub --WoW API / Variables local GetItemInfo = GetItemInfo local GetItemQualityColor = GetItemQualityColor local GetMoney = GetMoney local GetNumQuestLeaderBoards = GetNumQuestLeaderBoards local GetQuestItemLink = GetQuestItemLink local GetQuestLogItemLink = GetQuestLogItemLink local GetQuestLogLeaderBoard = GetQuestLogLeaderBoard local GetQuestLogRequiredMoney = GetQuestLogRequiredMoney local hooksecurefunc = hooksecurefunc local GetQuestMoneyToGet = GetQuestMoneyToGet local MAX_NUM_ITEMS = MAX_NUM_ITEMS local MAX_REPUTATIONS = MAX_REPUTATIONS S:AddCallback("Skin_Quest", function() if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.quest then return end QuestLogFrame:StripTextures() QuestLogFrame:CreateBackdrop("Transparent") QuestLogFrame.backdrop:Point("TOPLEFT", 11, -12) QuestLogFrame.backdrop:Point("BOTTOMRIGHT", -1, 11) S:SetUIPanelWindowInfo(QuestLogFrame, "width") S:SetBackdropHitRect(QuestLogFrame) S:HandleCloseButton(QuestLogFrameCloseButton, QuestLogFrame.backdrop) QuestLogCount:StripTextures() QuestLogCount:CreateBackdrop("Transparent") QuestLogCount.backdrop:Point("TOPLEFT", -1, 0) QuestLogCount.backdrop:Point("BOTTOMRIGHT", 1, -4) QuestLogFrameShowMapButton:StripTextures() S:HandleButton(QuestLogFrameShowMapButton) QuestLogScrollFrame:CreateBackdrop("Transparent") QuestLogScrollFrame.backdrop:Point("TOPLEFT", 0, 2) QuestLogScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2) QuestLogDetailScrollFrame:StripTextures() QuestLogDetailScrollFrame:CreateBackdrop("Transparent") QuestLogDetailScrollFrame.backdrop:Point("TOPLEFT", 0, 1) QuestLogDetailScrollFrame.backdrop:Point("BOTTOMRIGHT", 0, -2) EmptyQuestLogFrame:StripTextures() S:HandleButton(QuestLogFrameAbandonButton) S:HandleButton(QuestLogFramePushQuestButton) S:HandleButton(QuestLogFrameTrackButton) S:HandleButton(QuestLogFrameCancelButton) QuestLogSkillHighlight:SetTexture(E.Media.Textures.Highlight) QuestLogSkillHighlight:SetAlpha(0.35) S:HandleScrollBar(QuestLogScrollFrameScrollBar) S:HandleScrollBar(QuestLogDetailScrollFrameScrollBar) S:HandleScrollBar(QuestDetailScrollFrameScrollBar) S:HandleScrollBar(QuestProgressScrollFrameScrollBar) S:HandleScrollBar(QuestRewardScrollFrameScrollBar) QuestLogCount:ClearAllPoints() QuestLogCount:Point("BOTTOMLEFT", QuestLogScrollFrame, "TOPLEFT", 1, 13) QuestLogCount.SetPoint = E.noop QuestLogFrameShowMapButton.text:ClearAllPoints() QuestLogFrameShowMapButton.text:Point("CENTER") QuestLogFrameShowMapButton:Size(QuestLogFrameShowMapButton.text:GetWidth() + 32, 32) QuestLogScrollFrame:Point("TOPLEFT", 19, -62) QuestLogScrollFrameScrollBar:Point("TOPLEFT", QuestLogScrollFrame, "TOPRIGHT", 3, -17) QuestLogScrollFrameScrollBar:Point("BOTTOMLEFT", QuestLogScrollFrame, "BOTTOMRIGHT", 3, 17) QuestLogDetailScrollFrame:Width(304) QuestLogDetailScrollFrame.Hide = E.noop QuestLogDetailScrollFrame:Show() QuestLogFrameTrackButton:Height(22) QuestLogFrameAbandonButton:Height(22) QuestLogFramePushQuestButton:Height(22) QuestLogFrameTrackButton:Point("RIGHT", -1, 2) QuestLogFrameAbandonButton:Point("LEFT", 1, 2) QuestLogFramePushQuestButton:Point("LEFT", QuestLogFrameAbandonButton, "RIGHT", 3, 0) QuestLogFramePushQuestButton:Point("RIGHT", QuestLogFrameTrackButton, "LEFT", -3, 0) QuestLogFrameCancelButton:Point("BOTTOMRIGHT", -9, 19) QuestLogFrame:HookScript("OnShow", function() QuestLogDetailScrollFrame.backdrop:Show() QuestLogFrameShowMapButton:Point("TOPRIGHT", -30, -24) QuestLogDetailScrollFrame:Height(336) QuestLogDetailScrollFrame:Point("TOPRIGHT", -30, -61) QuestLogDetailScrollFrameScrollBar:Point("TOPLEFT", QuestLogDetailScrollFrame, "TOPRIGHT", 3, -18) QuestLogDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestLogDetailScrollFrame, "BOTTOMRIGHT", 3, 17) QuestLogControlPanel:SetPoint("BOTTOMLEFT", 18, 15) end) for _, questLogTitle in ipairs(QuestLogScrollFrame.buttons) do questLogTitle:SetNormalTexture(E.Media.Textures.Plus) questLogTitle.SetNormalTexture = E.noop questLogTitle:GetNormalTexture():Size(16) questLogTitle:GetNormalTexture():Point("LEFT", 5, 0) questLogTitle:SetHighlightTexture("") questLogTitle.SetHighlightTexture = E.noop hooksecurefunc(questLogTitle, "SetNormalTexture", function(self, texture) if find(texture, "MinusButton") then self:GetNormalTexture():SetTexture(E.Media.Textures.Minus) elseif find(texture, "PlusButton") then self:GetNormalTexture():SetTexture(E.Media.Textures.Plus) else self:GetNormalTexture():SetTexture(0, 0, 0, 0) end end) end -- QuestLog Detail Frame QuestLogDetailFrame:StripTextures() QuestLogDetailFrame:Height(513) QuestLogDetailFrame:CreateBackdrop("Transparent") QuestLogDetailFrame.backdrop:Point("TOPLEFT", 11, -12) QuestLogDetailFrame.backdrop:Point("BOTTOMRIGHT", 2, 1) S:SetUIPanelWindowInfo(QuestLogDetailFrame, "height", nil, nil, true) S:SetUIPanelWindowInfo(QuestLogDetailFrame, "width") S:SetBackdropHitRect(QuestLogDetailFrame) S:HandleCloseButton(QuestLogDetailFrameCloseButton, QuestLogDetailFrame.backdrop) QuestLogDetailTitleText:Point("TOP", QuestLogDetailFrame, "TOP", 0, -18) QuestLogDetailFrame:HookScript("OnShow", function() QuestLogDetailScrollFrame.backdrop:Hide() QuestLogDetailScrollFrame:Height(402) QuestLogDetailScrollFrame:Point("TOPLEFT", 19, -73) QuestLogDetailScrollFrameScrollBar:Point("TOPLEFT", QuestLogDetailScrollFrame, "TOPRIGHT", 3, -19) QuestLogDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestLogDetailScrollFrame, "BOTTOMRIGHT", 3, 19) QuestLogFrameShowMapButton:Point("TOPRIGHT", -27, -34) end) -- Quest Frame QuestFrame:StripTextures(true) QuestFrame:CreateBackdrop("Transparent") QuestFrame.backdrop:Point("TOPLEFT", 11, -12) QuestFrame.backdrop:Point("BOTTOMRIGHT", -32, 0) S:SetUIPanelWindowInfo(QuestFrame, "width") S:SetBackdropHitRect(QuestFrame) S:HandleCloseButton(QuestFrameCloseButton, QuestFrame.backdrop) QuestFrameDetailPanel:StripTextures(true) QuestDetailScrollFrame:StripTextures(true) QuestDetailScrollChildFrame:StripTextures(true) QuestRewardScrollFrame:StripTextures(true) QuestRewardScrollChildFrame:StripTextures(true) QuestFrameProgressPanel:StripTextures(true) QuestFrameRewardPanel:StripTextures(true) S:HandleButton(QuestFrameAcceptButton) S:HandleButton(QuestFrameCompleteButton) S:HandleButton(QuestFrameCompleteQuestButton) S:HandleButton(QuestFrameDeclineButton) S:HandleButton(QuestFrameGoodbyeButton) S:HandleButton(QuestFrameCancelButton) QuestFrameNpcNameText:ClearAllPoints() QuestFrameNpcNameText:Point("TOP", QuestFrame, "TOP", -6, -15) QuestDetailScrollFrame:Size(304, 402) QuestRewardScrollFrame:Size(304, 402) QuestProgressScrollFrame:Size(304, 402) QuestDetailScrollFrame:Point("TOPLEFT", QuestFrame, "TOPLEFT", 19, -73) QuestRewardScrollFrame:Point("TOPLEFT", QuestFrame, "TOPLEFT", 19, -73) QuestProgressScrollFrame:Point("TOPLEFT", QuestFrame, "TOPLEFT", 19, -73) QuestDetailScrollFrameScrollBar:Point("TOPLEFT", QuestDetailScrollFrame, "TOPRIGHT", 3, -19) QuestDetailScrollFrameScrollBar:Point("BOTTOMLEFT", QuestDetailScrollFrame, "BOTTOMRIGHT", 3, 19) QuestRewardScrollFrameScrollBar:Point("TOPLEFT", QuestRewardScrollFrame, "TOPRIGHT", 3, -19) QuestRewardScrollFrameScrollBar:Point("BOTTOMLEFT", QuestRewardScrollFrame, "BOTTOMRIGHT", 3, 19) QuestProgressScrollFrameScrollBar:Point("TOPLEFT", QuestProgressScrollFrame, "TOPRIGHT", 3, -19) QuestProgressScrollFrameScrollBar:Point("BOTTOMLEFT", QuestProgressScrollFrame, "BOTTOMRIGHT", 3, 19) QuestFrameAcceptButton:Point("BOTTOMLEFT", 19, 8) QuestFrameCompleteButton:Point("BOTTOMLEFT", 19, 8) QuestFrameCompleteQuestButton:Point("BOTTOMLEFT", 19, 8) QuestFrameDeclineButton:Point("BOTTOMRIGHT", -40, 8) QuestFrameGoodbyeButton:Point("BOTTOMRIGHT", -40, 8) QuestFrameCancelButton:Point("BOTTOMRIGHT", -40, 8) -- Quest Greeting Frame QuestFrameGreetingPanel:StripTextures(true) QuestGreetingFrameHorizontalBreak:Kill() S:HandleButton(QuestFrameGreetingGoodbyeButton, true) S:HandleScrollBar(QuestGreetingScrollFrameScrollBar) GreetingText:SetTextColor(1, 1, 1) CurrentQuestsText:SetTextColor(1, 0.80, 0.10) AvailableQuestsText:SetTextColor(1, 0.80, 0.10) GreetingText.SetTextColor = E.noop CurrentQuestsText.SetTextColor = E.noop AvailableQuestsText.SetTextColor = E.noop QuestGreetingScrollFrame:Size(304, 402) QuestGreetingScrollFrame:Point("TOPLEFT", GossipFrame, "TOPLEFT", 19, -73) QuestGreetingScrollFrameScrollBar:Point("TOPLEFT", QuestGreetingScrollFrame, "TOPRIGHT", 3, -19) QuestGreetingScrollFrameScrollBar:Point("BOTTOMLEFT", QuestGreetingScrollFrame, "BOTTOMRIGHT", 3, 19) QuestFrameGreetingGoodbyeButton:Point("BOTTOMRIGHT", -40, 8) QuestFrameGreetingPanel:HookScript("OnShow", function() for i = 1, MAX_NUM_QUESTS do local button = _G["QuestTitleButton"..i] if button:GetFontString() then if button:GetText() and find(button:GetText(), "|cff000000") then button:SetText(gsub(button:GetText(), "|cff000000", "|cffFFFF00")) end end end end) -- Quest Progress + Reward QuestInfoItemHighlight:StripTextures() QuestInfoTimerText:SetTextColor(1, 1, 1) QuestInfoAnchor:SetTextColor(1, 1, 1) local items = { ["QuestInfoItem"] = MAX_NUM_ITEMS, ["QuestProgressItem"] = MAX_REQUIRED_ITEMS } for frame, numItems in pairs(items) do for i = 1, numItems do local item = _G[frame..i] local icon = _G[frame..i.."IconTexture"] local count = _G[frame..i.."Count"] item:StripTextures() item:SetTemplate("Default") item:StyleButton() item:Size(143, 40) item:SetFrameLevel(item:GetFrameLevel() + 2) icon:Size(E.PixelMode and 38 or 32) icon:SetDrawLayer("OVERLAY") icon:Point("TOPLEFT", E.PixelMode and 1 or 4, -(E.PixelMode and 1 or 4)) S:HandleIcon(icon) count:SetParent(item.backdrop) count:SetDrawLayer("OVERLAY") end end local function questQualityColors(frame, text, link, quality) if link and not quality then quality = select(3, GetItemInfo(link)) end if quality then local r, g, b = GetItemQualityColor(quality) frame:SetBackdropBorderColor(r, g, b) frame.backdrop:SetBackdropBorderColor(r, g, b) text:SetTextColor(r, g, b) else frame:SetBackdropBorderColor(unpack(E.media.bordercolor)) frame.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor)) text:SetTextColor(1, 1, 1) end end hooksecurefunc("QuestFrameProgressItems_Update", function() QuestProgressTitleText:SetTextColor(1, 0.80, 0.10) QuestProgressText:SetTextColor(1, 1, 1) QuestProgressRequiredItemsText:SetTextColor(1, 0.80, 0.10) local moneyToGet = GetQuestMoneyToGet() if moneyToGet > 0 then if moneyToGet > GetMoney() then QuestProgressRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6) else QuestProgressRequiredMoneyText:SetTextColor(1, 0.80, 0.10) end end local item, name, link for i = 1, MAX_REQUIRED_ITEMS do item = _G["QuestProgressItem"..i] name = _G["QuestProgressItem"..i.."Name"] link = item.type and GetQuestItemLink(item.type, item:GetID()) questQualityColors(item, name, link) end end) hooksecurefunc("QuestInfoItem_OnClick", function(self) if self.type == "choice" then self:SetBackdropBorderColor(1, 0.80, 0.10) self.backdrop:SetBackdropBorderColor(1, 0.80, 0.10) _G[self:GetName().."Name"]:SetTextColor(1, 0.80, 0.10) local item, name, link for i = 1, MAX_NUM_ITEMS do item = _G["QuestInfoItem"..i] if item ~= self then name = _G["QuestInfoItem"..i.."Name"] link = item.type and (QuestInfoFrame.questLog and GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID()) questQualityColors(item, name, link) end end end end) local function questObjectiveText() local numObjectives = GetNumQuestLeaderBoards() local _, objType, finished, objective local numVisibleObjectives = 0 for i = 1, numObjectives do _, objType, finished = GetQuestLogLeaderBoard(i) if objType ~= "spell" then numVisibleObjectives = numVisibleObjectives + 1 objective = _G["QuestInfoObjective"..numVisibleObjectives] if finished then objective:SetTextColor(1, 0.80, 0.10) else objective:SetTextColor(0.6, 0.6, 0.6) end end end end hooksecurefunc("QuestInfo_Display", function() QuestInfoTitleHeader:SetTextColor(1, 0.80, 0.10) QuestInfoDescriptionHeader:SetTextColor(1, 0.80, 0.10) QuestInfoObjectivesHeader:SetTextColor(1, 0.80, 0.10) QuestInfoRewardsHeader:SetTextColor(1, 0.80, 0.10) QuestInfoDescriptionText:SetTextColor(1, 1, 1) QuestInfoObjectivesText:SetTextColor(1, 1, 1) QuestInfoGroupSize:SetTextColor(1, 1, 1) QuestInfoRewardText:SetTextColor(1, 1, 1) QuestInfoItemChooseText:SetTextColor(1, 1, 1) QuestInfoItemReceiveText:SetTextColor(1, 1, 1) QuestInfoSpellLearnText:SetTextColor(1, 1, 1) QuestInfoHonorFrameReceiveText:SetTextColor(1, 1, 1) QuestInfoArenaPointsFrameReceiveText:SetTextColor(1, 1, 1) QuestInfoTalentFrameReceiveText:SetTextColor(1, 1, 1) QuestInfoXPFrameReceiveText:SetTextColor(1, 1, 1) QuestInfoReputationText:SetTextColor(1, 1, 1) for i = 1, MAX_REPUTATIONS do _G["QuestInfoReputation"..i.."Faction"]:SetTextColor(1, 1, 1) end local requiredMoney = GetQuestLogRequiredMoney() if requiredMoney > 0 then if requiredMoney > GetMoney() then QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6) else QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10) end end questObjectiveText() local item, name, link for i = 1, MAX_NUM_ITEMS do item = _G["QuestInfoItem"..i] name = _G["QuestInfoItem"..i.."Name"] link = item.type and (QuestInfoFrame.questLog and GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID()) questQualityColors(item, name, link) end end) hooksecurefunc("QuestInfo_ShowRewards", function() local item, name, link for i = 1, MAX_NUM_ITEMS do item = _G["QuestInfoItem"..i] name = _G["QuestInfoItem"..i.."Name"] link = item.type and (QuestInfoFrame.questLog and GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID()) questQualityColors(item, name, link) end end) hooksecurefunc("QuestInfo_ShowRequiredMoney", function() local requiredMoney = GetQuestLogRequiredMoney() if requiredMoney > 0 then if requiredMoney > GetMoney() then QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6) else QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10) end end end) end)