Проблема с C_TaskQuest.GetQuestInfoByQuestID (questID) - PullRequest
0 голосов
/ 08 марта 2020

Я практикую создание аддона для World of Warcraft. Я пытаюсь отобразить названия квестов, извлекая информацию из API Wow и отображая их во фрейме. Я могу показать, завершен ли квест или нет, но когда я пытаюсь использовать конечную точку C_TaskQuest.GetQuestInfoByQuestID(questID); ничего не выводится на экран.

local function questStatus()
    for questID = 1, #array do
        local y = topY - (questID * 15 - 20)
        local fontString = UIConfig:CreateFontString(nil, "ARTWORK")
        fontString:SetFont("Fonts\\ARIALN.ttf", 13, "OUTLINE")
            fontString:SetText(C_TaskQuest.GetQuestInfoByQuestID(array[questID]))
            fontString:SetPoint("TOPLEFT", topX, y)
    end
end

ошибка, которую я получаю в окне чата:

7x Usage: local questTitle, factionID, capped, displayAsObjective = C_TaskQuest.GetQuestInfoByQuestID(questID)
[string "=[C]:"]: in function 'GetQuestInfoByQuestID'
[string "@My-Addon\Core.lua"]:66: in main chunk

Любая помощь приветствуется, спасибо!

Ответы [ 2 ]

1 голос
/ 09 марта 2020

C_TaskQuest.GetQuestInfoByQuestID() возвращает только правильные значения для мировых квестов, но вы можете использовать C_QuestLog.GetQuestInfo (). Обратите внимание, что данные все еще должны быть кэшированы, в первый раз они не будут доступны до события QUEST_LOG_UPDATE

См. https://www.townlong-yak.com/framexml/go/QuestUtils_GetQuestName

1 голос
/ 09 марта 2020

Как показано в первой строке ошибки;
C_TaskQuest.GetQuestInfoByQuestID (questID) вернет все эти значения:
questTitle , factionID , capped , displayAsObjective

Вы должны выбрать значение для установки, поскольку оно не может установить текст для этого возвращаемого типа, список, который включает в себя несколько значений , Это первое возвращаемое значение, но оно также будет возвращать другие значения afaik.

Я предполагаю, что вы хотите questTitle , поэтому получить его без использования дополнительной функции, такой как select () , вы бы прокомментировали (или удалили) строку SetText и использовали вместо этого одну из этих 2:

local questTitle, _, _, _ = C_TaskQuest.GetQuestInfoByQuestID(array[questID]) -- get quest title, other values to dummy locals
fontString:SetText(questTitle) -- set the text to the value of questTitle
-- fontString:SetText(C_TaskQuest.GetQuestInfoByQuestID(array[questID])) ORIGINAL


-- version using select(number, values)
fontString:SetText(select(1,C_TaskQuest.GetQuestInfoByQuestID(array[questID]))) -- set the text to the value of questTitle -- extra function usage is no good if done often!

Надеюсь, это поможет!

...