You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

473 lines
15 KiB

local E, L, V, P, G = unpack(ElvUI)
local S = E:GetModule('Skins')
local _G = _G
local gsub, strmatch, unpack = gsub, strmatch, unpack
local next, pairs, select = next, pairs, select
local GetItemInfo = GetItemInfo
local GetItemQualityColor = GetItemQualityColor
local GetMoney = GetMoney
local GetNumQuestLeaderBoards = GetNumQuestLeaderBoards
local GetNumQuestLogEntries = GetNumQuestLogEntries
local GetQuestItemLink = GetQuestItemLink
local GetQuestLogItemLink = GetQuestLogItemLink
local GetQuestLogLeaderBoard = GetQuestLogLeaderBoard
local GetQuestLogRequiredMoney = GetQuestLogRequiredMoney
local GetQuestLogTitle = GetQuestLogTitle
local GetQuestMoneyToGet = GetQuestMoneyToGet
local IsQuestComplete = IsQuestComplete
local HybridScrollFrame_GetOffset = HybridScrollFrame_GetOffset
local MAX_NUM_ITEMS = MAX_NUM_ITEMS
local MAX_NUM_QUESTS = MAX_NUM_QUESTS
local MAX_REQUIRED_ITEMS = MAX_REQUIRED_ITEMS
local hooksecurefunc = hooksecurefunc
local function UpdateGreetingFrame()
local i = 1
local title = _G['QuestTitleButton'..i]
while (title and title:IsVisible()) do
_G.GreetingText:SetTextColor(1, 1, 1)
_G.CurrentQuestsText:SetTextColor(1, 0.80, 0.10)
_G.AvailableQuestsText:SetTextColor(1, 0.80, 0.10)
local text = title:GetFontString()
local textString = gsub(title:GetText(), '|c[Ff][Ff]%x%x%x%x%x%x(.+)|r', '%1')
title:SetText(textString)
local icon = _G['QuestTitleButton'..i..'QuestIcon']
if title.isActive == 1 then
icon:SetTexture(132048)
icon:SetDesaturation(1)
text:SetTextColor(.6, .6, .6)
else
icon:SetTexture(132049)
icon:SetDesaturation(0)
text:SetTextColor(1, .8, .1)
end
local numEntries = GetNumQuestLogEntries()
for y = 1, numEntries do
local titleText, _, _, _, _, isComplete, _, questId = GetQuestLogTitle(y)
if not titleText then
break
elseif strmatch(titleText, textString) and (isComplete == 1 or IsQuestComplete(questId)) then
icon:SetDesaturation(0)
text:SetTextColor(1, .8, .1)
break
end
end
i = i + 1
title = _G['QuestTitleButton'..i]
end
end
local function handleItemButton(item)
if not item then return end
if item then
item:SetTemplate()
item:Size(143, 40)
item:SetFrameLevel(item:GetFrameLevel() + 2)
end
if item.Icon then
item.Icon:Size(E.PixelMode and 35 or 32)
item.Icon:SetDrawLayer('ARTWORK')
item.Icon:Point('TOPLEFT', E.PixelMode and 2 or 4, -(E.PixelMode and 2 or 4))
S:HandleIcon(item.Icon)
end
if item.IconBorder then
S:HandleIconBorder(item.IconBorder)
end
if item.Count then
item.Count:SetDrawLayer('OVERLAY')
item.Count:ClearAllPoints()
item.Count:SetPoint('BOTTOMRIGHT', item.Icon, 'BOTTOMRIGHT', 0, 0)
end
if item.NameFrame then
item.NameFrame:SetAlpha(0)
item.NameFrame:Hide()
end
if item.IconOverlay then
item.IconOverlay:SetAlpha(0)
end
if item.Name then
item.Name:FontTemplate()
end
if item.CircleBackground then
item.CircleBackground:SetAlpha(0)
item.CircleBackgroundGlow:SetAlpha(0)
end
for _, Region in next, { item:GetRegions() } do
if Region:IsObjectType('Texture') and Region:GetTexture() == [[Interface\Spellbook\Spellbook-Parts]] then
Region:SetTexture('')
end
end
end
local function questQualityColors(frame, text, link)
if not frame.template then
handleItemButton(frame)
end
local _, _, quality = GetItemInfo(link or 0)
if quality and quality > 1 then
local r, g, b = GetItemQualityColor(quality)
text:SetTextColor(r, g, b)
frame:SetBackdropBorderColor(r, g, b)
else
text:SetTextColor(1, 1, 1)
frame:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
function S:BlizzardQuestFrames()
if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.quest) then return end
local QuestStrip = {
_G.EmptyQuestLogFrame,
_G.QuestDetailScrollChildFrame,
_G.QuestDetailScrollFrame,
_G.QuestFrame,
_G.QuestFrameDetailPanel,
_G.QuestFrameGreetingPanel,
_G.QuestFrameProgressPanel,
_G.QuestFrameRewardPanel,
_G.QuestGreetingScrollFrame,
_G.QuestInfoItemHighlight,
_G.QuestLogDetailScrollFrame,
_G.QuestLogFrame,
_G.QuestLogListScrollFrame,
_G.QuestLogQuestCount,
_G.QuestProgressScrollFrame,
_G.QuestRewardScrollChildFrame,
_G.QuestRewardScrollFrame,
_G.QuestRewardScrollFrame
}
for _, object in pairs(QuestStrip) do
object:StripTextures(true)
end
local QuestButtons = {
_G.QuestFrameAcceptButton,
_G.QuestFrameCancelButton,
_G.QuestFrameCompleteButton,
_G.QuestFrameCompleteQuestButton,
_G.QuestFrameDeclineButton,
_G.QuestFrameGoodbyeButton,
_G.QuestFrameGreetingGoodbyeButton,
_G.QuestFramePushQuestButton,
_G.QuestLogFrameAbandonButton,
_G.QuestLogFrameTrackButton,
_G.QuestLogFrameCancelButton
}
for _, button in pairs(QuestButtons) do
button:StripTextures()
S:HandleButton(button)
end
local ScrollBars = {
_G.QuestDetailScrollFrameScrollBar,
_G.QuestGreetingScrollFrameScrollBar,
_G.QuestLogDetailScrollFrameScrollBar,
_G.QuestLogListScrollFrameScrollBar,
_G.QuestProgressScrollFrameScrollBar,
_G.QuestRewardScrollFrameScrollBar
}
for _, object in pairs(ScrollBars) do
S:HandleScrollBar(object)
end
for frame, numItems in pairs({ QuestLogItem = MAX_NUM_ITEMS, QuestProgressItem = MAX_REQUIRED_ITEMS }) do
for i = 1, numItems do
handleItemButton(_G[frame..i])
end
end
hooksecurefunc('QuestInfo_GetRewardButton', function(rewardsFrame, index)
local button = rewardsFrame.RewardButtons[index]
if not button and button.template then return end
handleItemButton(button)
end)
hooksecurefunc('QuestInfoItem_OnClick', function(frame)
if frame.type == 'choice' then
frame:SetBackdropBorderColor(1, 0.80, 0.10)
_G[frame:GetName()..'Name']:SetTextColor(1, 0.80, 0.10)
for i = 1, #_G.QuestInfoRewardsFrame.RewardButtons do
local item = _G['QuestInfoRewardsFrameQuestInfoItem'..i]
if item ~= frame then
local name = _G['QuestInfoRewardsFrameQuestInfoItem'..i..'Name']
local link = item.type and (_G.QuestInfoFrame.questLog and GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID())
questQualityColors(item, name, link)
end
end
end
end)
hooksecurefunc('QuestInfo_ShowRewards', function()
for i = 1, #_G.QuestInfoRewardsFrame.RewardButtons do
local item = _G['QuestInfoRewardsFrameQuestInfoItem'..i]
local name = _G['QuestInfoRewardsFrameQuestInfoItem'..i..'Name']
local link = item.type and (_G.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
_G.QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
_G.QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
end)
hooksecurefunc('QuestFrameProgressItems_Update', function()
_G.QuestProgressTitleText:SetTextColor(1, .8, .1)
_G.QuestProgressText:SetTextColor(1, 1, 1)
_G.QuestProgressRequiredItemsText:SetTextColor(1, .8, 0.1)
local moneyToGet = GetQuestMoneyToGet()
if moneyToGet > 0 then
if moneyToGet > GetMoney() then
_G.QuestProgressRequiredMoneyText:SetTextColor(.6, .6, .6)
else
_G.QuestProgressRequiredMoneyText:SetTextColor(1, .8, .1)
end
end
for i = 1, _G.MAX_REQUIRED_ITEMS do
local item = _G['QuestProgressItem'..i]
local name = _G['QuestProgressItem'..i..'Name']
local link = item.type and GetQuestItemLink(item.type, item:GetID())
questQualityColors(item, name, link)
end
end)
hooksecurefunc('QuestLog_Update', function()
if not _G.QuestLogFrame:IsShown() then return end
local numEntries = GetNumQuestLogEntries()
local scrollOffset = HybridScrollFrame_GetOffset(_G.QuestLogListScrollFrame)
local buttons = _G.QuestLogListScrollFrame.buttons
for i = 1, 22 do
local questIndex = i + scrollOffset
if questIndex <= numEntries then
local _, _, _, isHeader, isCollapsed = GetQuestLogTitle(questIndex)
if isHeader then
if isCollapsed then
buttons[i]:SetNormalTexture(E.Media.Textures.PlusButton)
else
buttons[i]:SetNormalTexture(E.Media.Textures.MinusButton)
end
end
end
end
end)
hooksecurefunc('QuestLogUpdateQuestCount', function()
_G.QuestLogCount:ClearAllPoints()
_G.QuestLogCount:Point('BOTTOMLEFT', _G.QuestLogListScrollFrame.backdrop, 'TOPLEFT', 0, 5)
end)
hooksecurefunc('QuestLog_UpdateQuestDetails', function()
local requiredMoney = GetQuestLogRequiredMoney()
if requiredMoney > 0 then
if requiredMoney > GetMoney() then
_G.QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
_G.QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
end)
local textR, textG, textB = 1, 1, 1
local titleR, titleG, titleB = 1, 0.80, 0.10
hooksecurefunc('QuestFrameItems_Update', function()
-- Headers
_G.QuestLogDescriptionTitle:SetTextColor(titleR, titleG, titleB)
_G.QuestLogRewardTitleText:SetTextColor(titleR, titleG, titleB)
_G.QuestLogQuestTitle:SetTextColor(titleR, titleG, titleB)
-- Other text
_G.QuestLogItemChooseText:SetTextColor(textR, textG, textB)
_G.QuestLogItemReceiveText:SetTextColor(textR, textG, textB)
_G.QuestLogObjectivesText:SetTextColor(textR, textG, textB)
_G.QuestLogQuestDescription:SetTextColor(textR, textG, textB)
_G.QuestLogSpellLearnText:SetTextColor(textR, textG, textB)
_G.QuestInfoQuestType:SetTextColor(textR, textG, textB)
local requiredMoney = GetQuestLogRequiredMoney()
if requiredMoney > 0 then
if requiredMoney > GetMoney() then
_G.QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
_G.QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
_G.QuestLogItem1:Point('TOPLEFT', _G.QuestLogItemChooseText, 'BOTTOMLEFT', 1, -3)
local numVisibleObjectives = 0
local numObjectives = GetNumQuestLeaderBoards()
for i = 1, numObjectives do
local _, objType, finished = GetQuestLogLeaderBoard(i)
if objType ~= 'spell' then
numVisibleObjectives = numVisibleObjectives + 1
local objective = _G['QuestLogObjective'..numVisibleObjectives]
if objective then
if finished then
objective:SetTextColor(1, .8, .1)
else
objective:SetTextColor(.63, .09, .09)
end
end
end
end
for i = 1, _G.MAX_NUM_ITEMS do
local item = _G['QuestLogItem'..i]
local name = _G['QuestLogItem'..i..'Name']
local link = item.type and (GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID())
questQualityColors(item, name, link)
end
end)
hooksecurefunc('QuestInfo_Display', function()
-- Headers
_G.QuestInfoTitleHeader:SetTextColor(titleR, titleG, titleB)
_G.QuestInfoDescriptionHeader:SetTextColor(titleR, titleG, titleB)
_G.QuestInfoObjectivesHeader:SetTextColor(titleR, titleG, titleB)
_G.QuestInfoRewardsFrame.Header:SetTextColor(titleR, titleG, titleB)
-- Other text
_G.QuestInfoDescriptionText:SetTextColor(textR, textG, textB)
_G.QuestInfoObjectivesText:SetTextColor(textR, textG, textB)
_G.QuestInfoGroupSize:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardText:SetTextColor(textR, textG, textB)
_G.QuestInfoQuestType:SetTextColor(textR, textG, textB)
local numObjectives = GetNumQuestLeaderBoards()
for i = 1, numObjectives do
local text = _G['QuestInfoObjective'..i]
if not text then break end
text:SetTextColor(textR, textG, textB)
end
-- Reward frame text
_G.QuestInfoRewardsFrame.ItemChooseText:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardsFrame.ItemReceiveText:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardsFrame.XPFrame.ReceiveText:SetTextColor(textR, textG, textB)
_G.QuestInfoTalentFrame.ReceiveText:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardsFrameHonorReceiveText:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardsFrameReceiveText:SetTextColor(textR, textG, textB)
_G.QuestInfoRewardsFrame.spellHeaderPool.textR, _G.QuestInfoRewardsFrame.spellHeaderPool.textG, _G.QuestInfoRewardsFrame.spellHeaderPool.textB = textR, textG, textB
for spellHeader, _ in _G.QuestInfoFrame.rewardsFrame.spellHeaderPool:EnumerateActive() do
spellHeader:SetVertexColor(1, 1, 1)
end
for spellIcon, _ in _G.QuestInfoFrame.rewardsFrame.spellRewardPool:EnumerateActive() do
if not spellIcon.template then
handleItemButton(spellIcon)
end
end
local requiredMoney = GetQuestLogRequiredMoney()
if requiredMoney > 0 then
if requiredMoney > GetMoney() then
_G.QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
_G.QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
for i = 1, #_G.QuestInfoRewardsFrame.RewardButtons do
local item = _G['QuestInfoRewardsFrameQuestInfoItem'..i]
local name = _G['QuestInfoRewardsFrameQuestInfoItem'..i..'Name']
local link = item.type and (_G.QuestInfoFrame.questLog and GetQuestLogItemLink or GetQuestItemLink)(item.type, item:GetID())
questQualityColors(item, name, link)
end
end)
for i = 1, MAX_NUM_QUESTS do
_G['QuestTitleButton'..i..'QuestIcon']:SetPoint('TOPLEFT', 4, 2)
_G['QuestTitleButton'..i..'QuestIcon']:SetSize(16, 16)
end
_G.QuestFrameGreetingPanel:HookScript('OnUpdate', UpdateGreetingFrame)
hooksecurefunc('QuestFrameGreetingPanel_OnShow', UpdateGreetingFrame)
_G.QuestFramePushQuestButton:ClearAllPoints()
_G.QuestFramePushQuestButton:Point('LEFT', _G.QuestLogFrameAbandonButton, 'RIGHT', 1, 0)
_G.QuestFramePushQuestButton:Point('RIGHT', _G.QuestLogFrameTrackButton, 'LEFT', -1, 0)
local QuestLogDetailFrame = _G.QuestLogDetailFrame
S:HandleFrame(QuestLogDetailFrame, true, nil, 8, -8, 8)
S:HandleFrame(_G.QuestFrame, true, nil, 11, -12, -32, 66)
S:HandleFrame(_G.QuestLogCount)
S:HandleFrame(_G.QuestLogFrame, true, nil, 10, -10, 1, 8)
S:HandleFrame(_G.QuestLogListScrollFrame, true, nil, -1, 2)
S:HandleFrame(_G.QuestLogDetailScrollFrame, true, nil, -1, 2)
S:HandleFrame(_G.QuestDetailScrollFrame, true, nil, -6, 2)
S:HandleFrame(_G.QuestRewardScrollFrame, true, nil, -6, 2)
S:HandleFrame(_G.QuestProgressScrollFrame, true, nil, -6, 2)
S:HandleFrame(_G.QuestGreetingScrollFrame, true, nil, -6, 2)
S:HandlePointXY(_G.QuestLogFrameAbandonButton, 0, -2)
S:HandlePointXY(_G.QuestLogFrameTrackButton, 0, -2)
S:HandlePointXY(_G.QuestFramePushQuestButton, 1)
S:HandlePointXY(_G.QuestFrameAcceptButton, 15, 70)
S:HandlePointXY(_G.QuestFrameDeclineButton, -36, 70)
S:HandlePointXY(_G.QuestFrameCompleteQuestButton, 15, 70)
S:HandlePointXY(_G.QuestFrameCompleteButton, 15, 70)
S:HandlePointXY(_G.QuestFrameCancelButton, -36, 70)
S:HandlePointXY(_G.QuestFrameGoodbyeButton, -36, 70)
S:HandlePointXY(_G.QuestFrameGreetingGoodbyeButton, -36, 70)
S:HandlePointXY(_G.QuestFrameNpcNameText, -1, 0)
_G.QuestLogFrameCancelButton:Point('BOTTOMRIGHT', _G.QuestLogFrame, 'BOTTOMRIGHT', -7, 12)
_G.QuestGreetingFrameHorizontalBreak:Kill()
_G.QuestLogListScrollFrame:Width(303)
_G.QuestLogDetailScrollFrame:Width(303)
_G.QuestLogFrameAbandonButton:Width(129)
_G.QuestLogHighlightFrame:Width(303)
_G.QuestLogHighlightFrame.SetWidth = E.noop
_G.QuestLogSkillHighlight:SetTexture(E.Media.Textures.Highlight)
_G.QuestLogSkillHighlight:SetAlpha(0.3)
S:HandleCloseButton(_G.QuestFrameCloseButton, _G.QuestFrame.backdrop)
S:HandleCloseButton(_G.QuestLogFrameCloseButton, _G.QuestLogFrame.backdrop)
S:HandleCloseButton(_G.QuestLogDetailFrameCloseButton, _G.QuestLogDetailFrame.backdrop)
end
S:AddCallback('BlizzardQuestFrames')