Files
ElvUIModernized/ElvUI/Modules/Skins/Blizzard/Quest.lua
T
2018-07-10 16:19:07 +03:00

465 lines
15 KiB
Lua

local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local S = E:GetModule("Skins");
--Cache global variables
--Lua functions
local _G = _G
local pairs = pairs
local unpack = unpack
local find, format, match, split = string.find, string.format, string.match, string.split
--WoW API / Variables
local GetItemInfo = GetItemInfo
local GetItemQualityColor = GetItemQualityColor
local hooksecurefunc = hooksecurefunc
local function LoadSkin()
if E.private.skins.blizzard.enable ~= true or E.private.skins.blizzard.quest ~= true then return end
local QuestStrip = {
"QuestFrame",
"QuestLogFrame",
"EmptyQuestLogFrame",
"QuestFrameDetailPanel",
"QuestDetailScrollFrame",
"QuestDetailScrollChildFrame",
"QuestRewardScrollFrame",
"QuestRewardScrollChildFrame",
"QuestFrameProgressPanel",
"QuestFrameRewardPanel",
"QuestFrameRewardPanel"
}
for _, object in pairs(QuestStrip) do
E:StripTextures(_G[object], true)
end
local QuestButtons = {
"QuestLogFrameAbandonButton",
"QuestFrameExitButton",
"QuestFramePushQuestButton",
"QuestFrameCompleteButton",
"QuestFrameGoodbyeButton",
"QuestFrameCompleteQuestButton",
"QuestFrameCancelButton",
"QuestFrameAcceptButton",
"QuestFrameDeclineButton"
}
for _, button in pairs(QuestButtons) do
E:StripTextures(_G[button])
S:HandleButton(_G[button])
end
for i = 1, MAX_NUM_ITEMS do
local item = _G["QuestLogItem"..i]
local icon = _G["QuestLogItem"..i.."IconTexture"]
local count = _G["QuestLogItem"..i.."Count"]
E:StripTextures(item)
E:SetTemplate(item, "Default")
E:StyleButton(item, nil, true)
E:Width(item, item:GetWidth() - 4)
item:SetFrameLevel(item:GetFrameLevel() + 2)
icon:SetDrawLayer("OVERLAY")
E:Size(icon, icon:GetWidth() -(E.Spacing*2), icon:GetHeight() -(E.Spacing*2))
E:Point(icon, "TOPLEFT", E.Border, -E.Border)
S:HandleIcon(icon)
count:SetParent(item.backdrop)
count:SetDrawLayer("OVERLAY")
end
for i = 1, 6 do
local item = _G["QuestDetailItem"..i]
local icon = _G["QuestDetailItem"..i.."IconTexture"]
local count = _G["QuestDetailItem"..i.."Count"]
E:StripTextures(item)
E:SetTemplate(item, "Default")
E:StyleButton(item, nil, true)
E:Width(item, item:GetWidth() - 4)
item:SetFrameLevel(item:GetFrameLevel() + 2)
icon:SetDrawLayer("OVERLAY")
E:Size(icon, icon:GetWidth() -(E.Spacing*2), icon:GetHeight() -(E.Spacing*2))
E:Point(icon, "TOPLEFT", E.Border, -E.Border)
S:HandleIcon(icon)
count:SetParent(item.backdrop)
count:SetDrawLayer("OVERLAY")
end
for i = 1, 6 do
local item = _G["QuestRewardItem"..i]
local icon = _G["QuestRewardItem"..i.."IconTexture"]
local count = _G["QuestRewardItem"..i.."Count"]
E:StripTextures(item)
E:SetTemplate(item, "Default")
E:StyleButton(item, nil, true)
E:Width(item, item:GetWidth() - 4)
item:SetFrameLevel(item:GetFrameLevel() + 2)
icon:SetDrawLayer("OVERLAY")
E:Size(icon, icon:GetWidth() -(E.Spacing*2), icon:GetHeight() -(E.Spacing*2))
E:Point(icon, "TOPLEFT", E.Border, -E.Border)
S:HandleIcon(icon)
count:SetParent(item.backdrop)
count:SetDrawLayer("OVERLAY")
end
local function QuestQualityColors(frame, text, quality, link)
if link and not quality then
_, _, quality = GetItemInfo(match(link, "item:(%d+)"))
end
if quality then
if frame then
frame:SetBackdropBorderColor(GetItemQualityColor(quality))
frame.backdrop:SetBackdropBorderColor(GetItemQualityColor(quality))
end
text:SetTextColor(GetItemQualityColor(quality))
else
if frame then
frame:SetBackdropBorderColor(unpack(E["media"].bordercolor))
frame.backdrop:SetBackdropBorderColor(unpack(E["media"].bordercolor))
end
text:SetTextColor(1, 1, 1)
end
end
E:StripTextures(QuestRewardItemHighlight)
E:SetTemplate(QuestRewardItemHighlight, "Default", nil, true)
QuestRewardItemHighlight:SetBackdropBorderColor(1, 1, 0)
QuestRewardItemHighlight:SetBackdropColor(0, 0, 0, 0)
E:Size(QuestRewardItemHighlight, 142, 40)
hooksecurefunc("QuestRewardItem_OnClick", function()
QuestRewardItemHighlight:ClearAllPoints();
E:SetOutside(QuestRewardItemHighlight, this:GetName().."IconTexture")
_G[this:GetName().."Name"]:SetTextColor(1, 1, 0)
for i = 1, MAX_NUM_ITEMS do
local questItem = _G["QuestRewardItem"..i]
local questName = _G["QuestRewardItem"..i.."Name"]
local link = questItem.type and GetQuestItemLink(questItem.type, questItem:GetID())
if questItem ~= this then
QuestQualityColors(nil, questName, nil, link)
end
end
end)
local function QuestObjectiveTextColor()
local numObjectives = GetNumQuestLeaderBoards()
local objective
local _, type, finished
local numVisibleObjectives = 0
for i = 1, numObjectives do
_, type, finished = GetQuestLogLeaderBoard(i)
if type ~= "spell" then
numVisibleObjectives = numVisibleObjectives + 1
objective = _G["QuestLogObjective"..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("QuestLog_UpdateQuestDetails", function()
local requiredMoney = GetQuestLogRequiredMoney()
if requiredMoney > 0 then
if requiredMoney > GetMoney() then
QuestLogRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
QuestLogRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
end)
hooksecurefunc("QuestFrameItems_Update", function(questState)
local textColor = {1, 1, 1}
local titleTextColor = {1, 0.80, 0.10}
QuestFont:SetTextColor(unpack(textColor))
QuestFontNormalSmall:SetTextColor(unpack(textColor))
QuestDescription:SetTextColor(unpack(textColor))
QuestObjectiveText:SetTextColor(unpack(textColor))
QuestTitleText:SetTextColor(unpack(titleTextColor))
QuestTitleFont:SetTextColor(unpack(titleTextColor))
QuestDetailRewardTitleText:SetTextColor(unpack(titleTextColor))
QuestDetailObjectiveTitleText:SetTextColor(unpack(titleTextColor))
QuestDetailItemReceiveText:SetTextColor(unpack(textColor))
QuestDetailSpellLearnText:SetTextColor(unpack(textColor))
QuestDetailItemChooseText:SetTextColor(unpack(textColor))
QuestLogRewardTitleText:SetTextColor(unpack(titleTextColor))
QuestLogTitleText:SetTextColor(unpack(titleTextColor))
QuestLogQuestTitle:SetTextColor(unpack(titleTextColor))
QuestLogDescriptionTitle:SetTextColor(unpack(titleTextColor))
QuestLogObjectivesText:SetTextColor(unpack(textColor))
QuestLogQuestDescription:SetTextColor(unpack(textColor))
QuestLogItemChooseText:SetTextColor(unpack(textColor))
QuestLogItemReceiveText:SetTextColor(unpack(textColor))
QuestLogSpellLearnText:SetTextColor(unpack(textColor))
QuestRewardRewardTitleText:SetTextColor(unpack(titleTextColor))
QuestRewardTitleText:SetTextColor(unpack(titleTextColor))
QuestRewardItemChooseText:SetTextColor(unpack(textColor))
QuestRewardItemReceiveText:SetTextColor(unpack(textColor))
QuestRewardSpellLearnText:SetTextColor(unpack(textColor))
QuestRewardText:SetTextColor(unpack(textColor))
if GetQuestLogRequiredMoney() > 0 then
if GetQuestLogRequiredMoney() > GetMoney() then
QuestInfoRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
QuestInfoRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
QuestObjectiveTextColor()
local numQuestRewards, numQuestChoices
if questState == "QuestLog" then
numQuestRewards, numQuestChoices = GetNumQuestLogRewards(), GetNumQuestLogChoices()
else
numQuestRewards, numQuestChoices = GetNumQuestRewards(), GetNumQuestChoices()
end
local rewardsCount = numQuestChoices + numQuestRewards
if rewardsCount > 0 then
local questItem, itemName, link
local questItemName = questState.."Item"
for i = 1, rewardsCount do
questItem = _G[questItemName..i]
itemName = _G[questItemName..i.."Name"]
link = questItem.type and (questState == "QuestLog" and GetQuestLogItemLink or GetQuestItemLink)(questItem.type, questItem:GetID())
QuestQualityColors(questItem, itemName, nil, link)
end
end
end)
QuestLogTimerText:SetTextColor(1, 1, 1)
E:CreateBackdrop(QuestFrame, "Transparent")
QuestFrame.backdrop:SetPoint("TOPLEFT", 15, -11)
QuestFrame.backdrop:SetPoint("BOTTOMRIGHT", -20, 0)
E:Width(QuestFrame, 374)
E:Height(QuestDetailScrollFrame, 403)
E:Height(QuestRewardScrollFrame, 403)
E:Height(QuestProgressScrollFrame, 403)
QuestFrameAcceptButton:SetPoint("BOTTOMLEFT", 20, 4)
QuestFrameDeclineButton:SetPoint("BOTTOMRIGHT", -37, 4)
QuestFrameCompleteButton:SetPoint("BOTTOMLEFT", 20, 4)
QuestFrameGoodbyeButton:SetPoint("BOTTOMRIGHT", -37, 4)
QuestFrameCompleteQuestButton:SetPoint("BOTTOMLEFT", 20, 4)
QuestFrameCancelButton:SetPoint("BOTTOMRIGHT", -37, 4)
QuestNpcNameFrame:SetPoint("TOP", QuestFrame, "TOP", 0, -19)
E:CreateBackdrop(QuestLogFrame, "Transparent")
QuestLogFrame.backdrop:SetPoint("TOPLEFT", 10, -12)
QuestLogFrame.backdrop:SetPoint("BOTTOMRIGHT", -1, 8)
E:Size(QuestLogFrame, 685, 490)
E:StripTextures(QuestLogListScrollFrame)
E:CreateBackdrop(QuestLogListScrollFrame, "Default", true)
QuestLogListScrollFrame.backdrop:SetPoint("TOPLEFT", 0, 2)
E:Size(QuestLogListScrollFrame, 685, 490)
QuestLogListScrollFrame:ClearAllPoints()
QuestLogListScrollFrame:SetPoint("TOPLEFT", QuestLogFrame, "TOPLEFT", 19, -75)
QuestLogListScrollFrame:SetPoint("BOTTOMRIGHT", QuestLogFrame, "BOTTOMRIGHT", -355, 40)
E:StripTextures(QuestLogDetailScrollFrame)
E:CreateBackdrop(QuestLogDetailScrollFrame, "Default", true)
QuestLogDetailScrollFrame.backdrop:SetPoint("TOPLEFT", 0, 2)
E:Size(QuestLogDetailScrollFrame, 300, 375)
QuestLogDetailScrollFrame:ClearAllPoints()
QuestLogDetailScrollFrame:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPRIGHT", 25, 0)
QuestLogNoQuestsText:ClearAllPoints()
QuestLogNoQuestsText:SetPoint("CENTER", EmptyQuestLogFrame, "CENTER", -45, 65)
QuestLogFrameAbandonButton:SetPoint("BOTTOMLEFT", 18, 15)
E:Width(QuestLogFrameAbandonButton, 100)
QuestLogFrameAbandonButton:SetText("Abandon")
QuestFramePushQuestButton:ClearAllPoints()
QuestFramePushQuestButton:SetPoint("LEFT", QuestLogFrameAbandonButton, "RIGHT", 2, 0)
E:Width(QuestFramePushQuestButton, 100)
QuestFramePushQuestButton:SetText("Share")
QuestFrameExitButton:SetPoint("BOTTOMRIGHT", -8, 15)
E:Width(QuestFrameExitButton, 100)
S:HandleScrollBar(QuestLogDetailScrollFrameScrollBar)
S:HandleScrollBar(QuestDetailScrollFrameScrollBar)
S:HandleScrollBar(QuestLogListScrollFrameScrollBar)
QuestLogListScrollFrameScrollBar:SetPoint("TOPLEFT", QuestLogListScrollFrame, "TOPRIGHT", 5, -16)
S:HandleScrollBar(QuestProgressScrollFrameScrollBar)
S:HandleScrollBar(QuestRewardScrollFrameScrollBar)
S:HandleCloseButton(QuestFrameCloseButton, QuestFrame.backdrop)
S:HandleCloseButton(QuestLogFrameCloseButton)
QuestLogFrameCloseButton:ClearAllPoints()
QuestLogFrameCloseButton:SetPoint("TOPRIGHT", 2, -9)
QuestLogTrack:Hide()
local QuestTrack = CreateFrame("Button", "QuestTrack", QuestLogFrame, "UIPanelButtonTemplate")
S:HandleButton(QuestTrack)
QuestTrack:SetText("Track")
QuestTrack:SetPoint("LEFT", QuestFramePushQuestButton, "RIGHT", 2, 0)
E:Size(QuestTrack, 110, 21)
HookScript(QuestTrack, "OnClick", function()
if IsQuestWatched(GetQuestLogSelection()) then
RemoveQuestWatch(GetQuestLogSelection())
QuestWatch_Update()
else
if GetNumQuestLeaderBoards(GetQuestLogSelection()) == 0 then
UIErrorsFrame:AddMessage(QUEST_WATCH_NO_OBJECTIVES, 1.0, 0.1, 0.1, 1.0)
return
end
if GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS then
UIErrorsFrame:AddMessage(format(QUEST_WATCH_TOO_MANY, MAX_WATCHABLE_QUESTS), 1.0, 0.1, 0.1, 1.0)
return
end
AddQuestWatch(GetQuestLogSelection())
QuestLog_Update()
QuestWatch_Update()
end
QuestLog_Update()
end)
hooksecurefunc("QuestLog_Update", function()
local numEntries = GetNumQuestLogEntries()
if numEntries == 0 then
QuestTrack:Disable()
else
QuestTrack:Enable()
end
QuestLogListScrollFrame:Show()
end)
for i = 1, 6 do
local item = _G["QuestProgressItem"..i]
local icon = _G["QuestProgressItem"..i.."IconTexture"]
local count = _G["QuestProgressItem"..i.."Count"]
E:StripTextures(item)
E:SetTemplate(item, "Default")
E:StyleButton(item, nil, true)
E:Width(item, item:GetWidth() - 4)
item:SetFrameLevel(item:GetFrameLevel() + 2)
icon:SetDrawLayer("OVERLAY")
E:Size(icon, icon:GetWidth() -(E.Spacing*2), icon:GetHeight() -(E.Spacing*2))
E:Point(icon, "TOPLEFT", E.Border, -E.Border)
S:HandleIcon(icon)
count:SetParent(item.backdrop)
count:SetDrawLayer("OVERLAY")
end
hooksecurefunc("QuestFrameProgressItems_Update", function()
QuestProgressTitleText:SetTextColor(1, 0.80, 0.10)
QuestProgressText:SetTextColor(1, 1, 1)
QuestProgressRequiredItemsText:SetTextColor(1, 0.80, 0.10)
if GetQuestMoneyToGet() > 0 then
if GetQuestMoneyToGet() > GetMoney() then
QuestProgressRequiredMoneyText:SetTextColor(0.6, 0.6, 0.6)
else
QuestProgressRequiredMoneyText:SetTextColor(1, 0.80, 0.10)
end
end
for i = 1, 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, nil, link)
end
end)
QUESTS_DISPLAYED = 25
for i = 7, 25 do
local questLogTitle = CreateFrame("Button", "QuestLogTitle"..i, QuestLogFrame, "QuestLogTitleButtonTemplate")
questLogTitle:SetID(i)
questLogTitle:Hide()
questLogTitle:SetPoint("TOPLEFT", _G["QuestLogTitle"..i - 1], "BOTTOMLEFT", 0, 1)
end
for i = 1, QUESTS_DISPLAYED do
local questLogTitle = _G["QuestLogTitle"..i]
local highlight = _G["QuestLogTitle"..i.."Highlight"]
questLogTitle:SetNormalTexture("Interface\\AddOns\\ElvUI\\media\\textures\\PlusMinusButton")
questLogTitle.SetNormalTexture = E.noop
E:Size(questLogTitle:GetNormalTexture(), 14, 14)
questLogTitle:GetNormalTexture():SetPoint("LEFT", 3, 0)
highlight:SetTexture("")
highlight.SetTexture = E.noop
hooksecurefunc(questLogTitle, "SetNormalTexture", function(self, texture)
if find(texture, "MinusButton") then
self:GetNormalTexture():SetTexCoord(0.540, 0.965, 0.085, 0.920)
elseif find(texture, "PlusButton") then
self:GetNormalTexture():SetTexCoord(0.040, 0.465, 0.085, 0.920)
else
self:GetNormalTexture():SetTexCoord(0, 0, 0, 0)
end
end)
end
E:StripTextures(QuestLogCollapseAllButton)
E:Point(QuestLogCollapseAllButton, "TOPLEFT", -45, 7)
QuestLogCollapseAllButton:SetNormalTexture("Interface\\AddOns\\ElvUI\\media\\textures\\PlusMinusButton")
QuestLogCollapseAllButton.SetNormalTexture = E.noop
E:Size(QuestLogCollapseAllButton:GetNormalTexture(), 15, 15)
QuestLogCollapseAllButton:SetHighlightTexture("")
QuestLogCollapseAllButton.SetHighlightTexture = E.noop
QuestLogCollapseAllButton:SetDisabledTexture("Interface\\AddOns\\ElvUI\\media\\textures\\PlusMinusButton")
QuestLogCollapseAllButton.SetDisabledTexture = E.noop
E:Size(QuestLogCollapseAllButton:GetDisabledTexture(), 15, 15)
QuestLogCollapseAllButton:GetDisabledTexture():SetTexCoord(0.040, 0.465, 0.085, 0.920)
QuestLogCollapseAllButton:GetDisabledTexture():SetDesaturated(true)
hooksecurefunc(QuestLogCollapseAllButton, "SetNormalTexture", function(self, texture)
if find(texture, "MinusButton") then
self:GetNormalTexture():SetTexCoord(0.540, 0.965, 0.085, 0.920)
elseif find(texture, "PlusButton") then
self:GetNormalTexture():SetTexCoord(0.040, 0.465, 0.085, 0.920)
else
self:GetNormalTexture():SetTexCoord(0, 0, 0, 0)
end
end)
end
S:AddCallback("Quest", LoadSkin)