魔兽世界 LUA API UnitClass() returns 零值

World Of Warcraft LUA API UnitClass() returns nil value

问题

使用《魔兽世界》中的 UnitClass() 函数时出现奇怪的情况 lua API。它是 returning nil。它的参数是一个"target name",见参考文献here

不过,如果我重新加载,我确实会像预期的那样得到一个值。所以发生了以下情况:

  1. 使用任意字符登录
  2. print() 来自 UnitClass() 函数调用的 return 值
  3. 它为 class 和 className
  4. 打印出 nill
  5. /重新加载游戏
  6. print() 来自 UnitClass() 函数调用的 return 值
  7. 这次它打印出实际数据,正如人们所期望的那样

我认为正在发生的事情

我想我需要等待一个特定的事件,但不确定是什么事件。如果我从聊天 window 调用相同的脚本,我会在登录或重新加载后取回值,这就是我认为它应该在我的 lua 脚本

中工作的方式

代码

ClassColors.lua

function GetUnitClassColor(UnitName)
    local class, classFileName = UnitClass(UnitName)
    local color = RAID_CLASS_COLORS[classFileName]

    print(class)
    print(classFileName)

    return color
end

core.lua(有我的初始化代码)

function GetCharacterData()
    local playerName = UnitName("Player")
    local playerRealm = GetRealmName()

    local playerNameRealm = playerName .. '-' .. playerRealm

    return playerNameRealm
end

----------------------Initialize----------------------------------

    local mainFrame = CreateFrame("Frame")
    mainFrame:RegisterEvent("ADDON_LOADED")
    mainFrame:RegisterEvent("PLAYER_LOGOUT")

    mainFrame:SetScript("OnEvent", function(self, event, arg1)

        local currentCharacter = GetCharacterData()
        local newCharacter = true

        if event == "ADDON_LOADED" and arg1 == "MyAddOn" then   

            local characterClassColor        = GetUnitClassColor(UnitName("Player"))

所以你可以看到我的意图是获得颜色 table returned 并分配给 characterClassColor,但我什么也得不到 class 和 classGetUnitClassColor 中的 FileName 变量。

对此有何想法?我一直在查看 API 文档中的事件,看看我是否遗漏了任何明显的内容。

我通过删除 GetUnitClassColor(UnitName) 函数并简单地调用 print(UnitClass("player")) 解决了这个问题。猜猜有一些内部逻辑我没有看到 UnitClass 在加载时无法处理实际玩家的名字,但确实识别 "player"