魔兽世界Lua - 如果声明流动

时间:2013-04-04 23:05:30

标签: lua add-on world-of-warcraft

我正在尝试为“魔兽世界”创建一个插件。我创建了一个函数来检查是否已将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"

此外,如果heatingUpIsActiveboolean,我更愿意,但似乎不喜欢我这样做的时候。在Lua中创建boolean的正确方法是什么?

1 个答案:

答案 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, ...)
    -- ...