魔兽世界 LUA API UnitClass() returns 零值
World Of Warcraft LUA API UnitClass() returns nil value
问题
使用《魔兽世界》中的 UnitClass() 函数时出现奇怪的情况 lua API。它是 returning nil。它的参数是一个"target name",见参考文献here
不过,如果我重新加载,我确实会像预期的那样得到一个值。所以发生了以下情况:
- 使用任意字符登录
- print() 来自 UnitClass() 函数调用的 return 值
- 它为 class 和 className
打印出 nill
- /重新加载游戏
- print() 来自 UnitClass() 函数调用的 return 值
- 这次它打印出实际数据,正如人们所期望的那样
我认为正在发生的事情
我想我需要等待一个特定的事件,但不确定是什么事件。如果我从聊天 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"
问题
使用《魔兽世界》中的 UnitClass() 函数时出现奇怪的情况 lua API。它是 returning nil。它的参数是一个"target name",见参考文献here
不过,如果我重新加载,我确实会像预期的那样得到一个值。所以发生了以下情况:
- 使用任意字符登录
- print() 来自 UnitClass() 函数调用的 return 值
- 它为 class 和 className 打印出 nill
- /重新加载游戏
- print() 来自 UnitClass() 函数调用的 return 值
- 这次它打印出实际数据,正如人们所期望的那样
我认为正在发生的事情
我想我需要等待一个特定的事件,但不确定是什么事件。如果我从聊天 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"