addon/Addon/Code/Quest.lua
Roman Jaroš 7a12abeda3
All checks were successful
forgejo/Czech Quests/addon/pipeline/head This commit looks good
Improve QuestFrame font handling
2025-03-08 22:57:39 +01:00

153 lines
No EOL
5.4 KiB
Lua

local _, addon = ...
local function GetQuestTitle(title, questId)
return title .. (CzechQuestsAddon_Store.config.DEBUG_MODE and " (" .. questId .. ")" or "")
end
local function ShowQuestTranslation(event)
local frame = addon.QuestFrame
frame:Hide()
-- Classic Era has QuestLogFrame
if QuestLogFrame then
if QuestLogFrame:IsVisible() then
local questIndex = GetQuestLogSelection()
if questIndex > 0 then
local questId = select(8, GetQuestLogTitle(questIndex))
local data = CzechQuestsAddon:GetData("quest", questId)
if data then
local title = GetQuestTitle(data.title, questId)
frame:SetData(title, data.objective, "Popis", data.description, QuestLogFrame, -20, -20)
end
end
end
end
-- Retail has QuestMapDetailsScrollFrame
if QuestMapDetailsScrollFrame then
if QuestMapDetailsScrollFrame:IsVisible() then
local questId = C_QuestLog.GetSelectedQuest()
local hasModel = QuestModelScene:IsVisible()
local data = CzechQuestsAddon:GetData("quest", questId)
if data then
local yOffset = hasModel and 210 or 50
local title = GetQuestTitle(data.title, questId)
frame:SetData(title, data.objective, "Popis", data.description, QuestMapFrame, 0, yOffset)
end
end
end
-- If quest is right from NPC, this work for both wow version
if event ~= nil then
local questId = GetQuestID()
if questId == 0 then
return
end
local hasModel = QuestModelScene and QuestModelScene:IsShown() or false
if questId then
local data = CzechQuestsAddon:GetData("quest", questId)
if data then
local title = GetQuestTitle(data.title, questId)
local xOffset = hasModel and 210 or 10
if (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC) then
xOffset = -20
end
if event == "QUEST_PROGRESS" then
frame:SetData(title, data.progress, "", "", QuestFrame, -20, xOffset)
elseif event == "QUEST_COMPLETE" then
frame:SetData(title, data.completion, "", "", QuestFrame, -20, xOffset)
elseif event == "QUEST_DETAIL" then
frame:SetData(title, data.description, "Cíl úkolu", data.objective, QuestFrame, -20, xOffset)
else
frame:Hide()
end
end
end
end
end
local function ShowQuestItemTranslation()
local frame = addon.QuestFrame
frame:Hide()
-- classic and retail has same frame
if ItemTextFrame:IsVisible() then
local itemName = ItemTextGetItem();
local itemNameTranslation = CzechQuestsAddon:GetData("item", itemName)
if itemNameTranslation then
local pageNum = ItemTextGetPage()
local itemPageContentTranslation = CzechQuestsAddon:GetData("item", itemName .. '__' .. pageNum)
if itemPageContentTranslation then
frame:SetData(
itemNameTranslation.title,
itemPageContentTranslation.text,
"",
"",
ItemTextFrame,
-20,
0
)
end
end
end
end
local function InitQuests()
local frame = addon.QuestFrame
frame:RegisterEvent("PLAYER_LOGIN")
frame:RegisterEvent("QUEST_PROGRESS")
frame:RegisterEvent("QUEST_COMPLETE")
frame:RegisterEvent("QUEST_FINISHED")
frame:RegisterEvent("QUEST_DETAIL")
frame:RegisterEvent("ITEM_TEXT_READY")
frame:RegisterEvent("PLAYER_STARTED_MOVING")
frame:RegisterEvent("PLAYER_STOPPED_MOVING")
frame:SetScript("OnEvent", function(_, event)
if not CzechQuestsAddon_Store.config.QUEST_ENABLED then
return
end
if event == "PLAYER_LOGIN" then
-- classic
if QuestLogFrame then
QuestLogFrame:SetScript("OnEnter", function()
ShowQuestTranslation()
end)
QuestLogFrame:SetScript("OnLeave", function()
frame:Hide()
end)
end
-- retail
if QuestMapDetailsScrollFrame then
QuestMapDetailsScrollFrame:SetScript("OnEnter", function()
ShowQuestTranslation()
end)
QuestMapDetailsScrollFrame:SetScript("OnLeave", function()
frame:Hide()
end)
end
frame:Init()
end
if event == "QUEST_PROGRESS" or event == "QUEST_COMPLETE" or event == "QUEST_DETAIL" or event == "QUEST_FINISHED" then
ShowQuestTranslation(event)
end
if (event == "ITEM_TEXT_READY") then
ShowQuestItemTranslation()
end
if CzechQuestsAddon_Store.config.QUEST_TEXTURE_ALPHA_ONLY_MOVING then
if event == "PLAYER_STARTED_MOVING" then
frame.Texture:SetAlpha(CzechQuestsAddon_Store.config.QUEST_TEXTURE_ALPHA / 100)
elseif event == "PLAYER_STOPPED_MOVING" then
frame.Texture:SetAlpha(1)
end
end
end)
end
addon.API.InitQuests = InitQuests