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(maleText, femaleText, original) local translation = addon.API.ResolveGender(maleText, femaleText) local paragraphs = addon.API.ParseParagraphs(original, translation) return FillPlaceholders(paragraphs) end local function GetQuest(id) local quest = addon.data.quest[id]; if quest 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(quest.titleMale, quest.titleFemale), objective = GetQuestText(quest.objectiveMale, quest.objectiveFemale, objective), description = GetQuestText(quest.descriptionMale, quest.descriptionFemale, description), progress = GetQuestText(quest.progressMale, quest.progressFemale), completion = GetQuestText(quest.completionMale, quest.completionFemale), } end end addon.API.GetQuest = GetQuest