1

我正在尝试为魔兽世界创建一个插件。我创建了一个函数来检查当前玩家是否添加了一个 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"

另外,我更喜欢 ifheatingUpIsActive是 a boolean,但是当我这样做时似乎不喜欢。boolean在 Lua中创建的正确方法是什么?

4

1 回答 1

3

您的功能没有检查导致事件的光环。UNIT_AURA任何事件发生时,它都在寻找“加热” 。事实上,看起来UNIT_AURA事件实际上并没有告诉你是哪个光环触发了它。所以你不能“检查是否UnitAura不是 "Heating Up",因为你根本不知道是什么光环导致了这个事件。说不定一下子就有好几个气场了。

但是,该事件确实会告诉您哪个单位获得了光环。这是第一个可变参数。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, ...)
    -- ...
于 2013-04-04T23:08:53.050 回答