C_TaskQuest.GetQuestInfoByQuestID(questID)的问题

我正在练习为《魔兽世界》制作插件。我试图通过从魔兽的 API 中检索信息并在框架中显示任务标题来显示任务标题。我可以很好地显示任务是否已经完成,但是当我尝试使用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

如有帮助,感谢!

点赞
用户10939850
用户10939850

如错误的第一行所示;

C_TaskQuest.GetQuestInfoByQuestID(questID) 将会返回以下所有的值:

questTitle, factionID, capped, displayAsObjective

你必须选择一个值作为设置,因为这个返回类型是一个包括多个值的列表,所以无法设置文本。它返回的是第一个值,但我认为它还会返回其他值。

我猜你想要的是 _questTitle_,所以为了获取它而不使用额外的函数比如 **select()**,你需要注释掉(或删除)你的 SetText 行,并使用以下两种方式之一:

local questTitle, _, _, _ = C_TaskQuest.GetQuestInfoByQuestID(array[questID]) -- 获取任务标题,将其他值设为虚拟变量
fontString:SetText(questTitle) -- 将文本的值设为 questTitle 的值
-- fontString:SetText(C_TaskQuest.GetQuestInfoByQuestID(array[questID])) 原版

-- 使用 select(number, values) 的版本
fontString:SetText(select(1,C_TaskQuest.GetQuestInfoByQuestID(array[questID]))) -- 将文本的值设为 questTitle 的值 -- 如果经常执行,额外的函数使用不好!

希望这有所帮助!

2020-03-09 04:43:02
用户1297035
用户1297035

C_TaskQuest.GetQuestInfoByQuestID() 只有对于世界任务才返回适当的值,但是你可以使用 C_QuestLog.GetQuestInfo() 来代替。请注意,数据仍然需要缓存,第一次在 QUEST_LOG_UPDATE 事件之前不可用。

参见 https://www.townlong-yak.com/framexml/go/QuestUtils_GetQuestName

2020-03-09 17:11:12