local _, addon = ... local WowQuestTextMethod = { Description = GetQuestText, Objective = GetObjectiveText, }; local function GetWowQuestText(method) local text = WowQuestTextMethod[method](); if text then return text else return "" end end local function GetQuestLogQuestIndex(questID) local numEntries = C_QuestLog.GetNumQuestLogEntries() for questLogIndex = 1, numEntries do local info = C_QuestLog.GetInfo(questLogIndex) if info and info.questID == questID then return questLogIndex end end return nil end local function FillPlaceholders(text) if text == nil then return text end local playerName = UnitName("player") local _, playerClass = UnitClass("player") local _, playerRace = UnitRace("player") local class = CzechQuestsAddon:GetData("class", playerClass); local race = CzechQuestsAddon:GetData("race", playerRace); local formatted = text; formatted = string.gsub(formatted, '', playerName); formatted = string.gsub(formatted, '', class.f0); formatted = string.gsub(formatted, '', class.f1); formatted = string.gsub(formatted, '', class.f2); formatted = string.gsub(formatted, '', class.f3); formatted = string.gsub(formatted, '', class.f4); formatted = string.gsub(formatted, '', class.f5); formatted = string.gsub(formatted, '', class.m0); formatted = string.gsub(formatted, '', class.m1); formatted = string.gsub(formatted, '', class.m2); formatted = string.gsub(formatted, '', class.m3); formatted = string.gsub(formatted, '', class.m4); formatted = string.gsub(formatted, '', class.p0); formatted = string.gsub(formatted, '', class.p1); formatted = string.gsub(formatted, '', class.m3); formatted = string.gsub(formatted, '', race.f0); formatted = string.gsub(formatted, '', race.f1); formatted = string.gsub(formatted, '', race.f2); formatted = string.gsub(formatted, '', race.f3); formatted = string.gsub(formatted, '', race.f4); formatted = string.gsub(formatted, '', race.f5); formatted = string.gsub(formatted, '', race.m0); formatted = string.gsub(formatted, '', race.m1); formatted = string.gsub(formatted, '', race.m2); formatted = string.gsub(formatted, '', race.m3); formatted = string.gsub(formatted, '', race.m4); formatted = string.gsub(formatted, '', race.p0); formatted = string.gsub(formatted, '', race.p1); formatted = string.gsub(formatted, '', race.p3); return formatted end local function GetQuestText(questTranslation, original) if questTranslation == nil then return nil end local translation = addon.API.ResolveGender(questTranslation) local paragraphs = addon.API.ParseParagraphs(original, translation) return FillPlaceholders(paragraphs) end local function GetQuest(id) local questName = addon.data.quest['q' .. id .. '_name']; local questObjective = addon.data.quest['q' .. id .. '_objective']; local questDescription = addon.data.quest['q' .. id .. '_description']; local questProgress = addon.data.quest['q' .. id .. '_progress']; local questCompletion = addon.data.quest['q' .. id .. '_completion']; if questName or questObjective or questDescription or questProgress or questCompletion then local description = "" local objective = "" if QuestMapDetailsScrollFrame and QuestMapDetailsScrollFrame:IsVisible() then local index = GetQuestLogQuestIndex(id) description, objective = GetQuestLogQuestText(index) else description = GetWowQuestText("Description") objective = GetWowQuestText("Objective") end return { title = GetQuestText(questName), objective = GetQuestText(questObjective, objective), description = GetQuestText(questDescription, description), progress = GetQuestText(questProgress), completion = GetQuestText(questCompletion), } end end addon.API.GetQuest = GetQuest