我正在尝试为“魔兽世界”创建一个插件。我创建了一个函数来检查是否已将buff增加到当前播放器。
Button:RegisterEvent("UNIT_AURA");
local function auraGained(self, event, ...)
if (UnitAura("player", "Heating Up")) then
if (heatingUpIsActive ~= 1) then
heatingUpIsActive = heatingUpIsActive + 1
print (heatingUpIsActive)
end
end
Button:SetScript("OnEvent", auraGained);
这很有用,但我该如何检查UnitAura
不是 "Heating Up"
?
此外,如果heatingUpIsActive
是boolean
,我更愿意,但似乎不喜欢我这样做的时候。在Lua中创建boolean
的正确方法是什么?
答案 0 :(得分:3)
您的功能不是检查导致事件的光环。它会在任何UNIT_AURA
事件发生时随时寻找“加热”。实际上,看起来UNIT_AURA
事件实际上并没有告诉你哪个光环触发了它。因此,您无法“检查UnitAura
是否不 "Heating Up"
”,因为您根本不知道该事件导致的光环。也许它甚至可以同时出现几个光环。
然而,该事件确实告诉你哪个单位获得了光环。这是第一个vararg。在做某事之前,您应该检查以确保它是player
local unitid = ...
if unitid ~= "player" then return end
另外,你没有解释你对布尔有什么问题。你应该能够说出类似
的内容if not heatingUpIsActive then
heatingUpIsActive = true
-- do whatever you want
end
虽然我从未在代码中看到任何变量声明。对这样的事情使用全局变量是个坏主意,所以你应该声明
local heatingUpIsActive
在函数声明之前,例如
local heatingUpIsActive
local function auraGained(self, event, ...)
-- ...