魔兽世界LUA API UnitClass()返回零值

时间:2017-12-02 13:52:12

标签: lua world-of-warcraft

问题

使用World Of Warcrafts lua API中的UnitClass()函数时出现奇怪的情况。它返回零。它的参数是“目标名称”,请参阅参考here

如果我重新加载,我确实得到了我期望的价值。所以发生了以下情况:

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

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

    所以你可以看到我的意图是返回颜色表并分配给characterClassColor,但是我从getUnitClassColor中的class和classFileName变量得到的只是nill。

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

1 个答案:

答案 0 :(得分:2)

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