World Of Warcraft LUA API UnitClass() 返回空值

问题

从魔兽世界的 LUA API 中使用 UnitClass() 函数时出现了奇怪的情况,它返回了空值。它的参数是“目标名称”,可以在这里查阅 参考资料

但是,如果我重新加载,我会得到预期的返回值。以下情况正在发生:

  1. 任何角色登录
  2. 打印 UnitClass() 函数调用的返回值
  3. 它打印出班级和职业名称的空值
  4. 重新加载游戏
  5. 打印 UnitClass() 函数调用的返回值
  6. 这一次,它打印出了实际数据,就像人们所期望的那样

我认为正在发生的事情

我认为我需要等待特定的事件,但不确定是哪个事件。如果我从聊天窗口调用相同的脚本,我在登录或重新加载后就能得到返回值,这是我认为它应该从我的 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

----------------------初始化----------------------------------

    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"))

所以你可以看到我的意图是获得颜色表并将其分配给 characterClassColor,但我根本没有得到任何来自 GetUnitClassColor 函数的返回值,只有 class 和 classFileName 变量的空值。

对此有何想法? 我一直在查看 API 文档中的事件,看看是否有什么明显的问题。

点赞
用户6528020
用户6528020

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

2017-12-02 22:54:26