魔兽世界Lua-If语句流

魔兽世界Lua-If语句流,lua,add-on,world-of-warcraft,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 = hea

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


另外,我更希望
heatingUpIsActive
是一个
布尔值
,但它似乎不像我那样做。在Lua中创建布尔值的正确方法是什么?

您的函数没有检查导致事件的光环。任何
UNIT\u AURA
事件到来时,它都在寻找“加热”。事实上,
UNIT_AURA
事件看起来并没有告诉你是哪个光环触发了它。所以你不能“检查”UnitAura是否“正在升温”,因为你根本不知道是什么光环导致了这一事件。甚至可能是同时出现了几个光环

然而,这个事件确实告诉你哪个单位有光环。这是第一个瓦拉格。在做某件事之前,您可能应该检查它是否是
player

local unitid = ...
if unitid ~= "player" then return end
而且,你没有解释你和布尔人有什么问题。你应该能说出这样的话

if not heatingUpIsActive then
    heatingUpIsActive = true
    -- do whatever you want
end
尽管我从未在代码中看到任何变量声明。在这样的事情上使用globals是个坏主意,所以您应该声明

local heatingUpIsActive
在函数声明之前,例如

local heatingUpIsActive
local function auraGained(self, event, ...)
    -- ...

谢谢你的快速回复!据我所知(如果我不正确,请原谅),我在这里完成的是,每当该区域的一个单位获得或失去光环时,就会调用
单位光环事件。最后,我想做的是当播放器上的“加热”处于活动状态时,将
heatingUpIsActive
设置为true。按照我的逻辑,当“加热”不再在玩家身上时,会调用
UNIT\u AURA
,我会检测到它不在那里,并将
heatingUpIsActive
设置为false。对于这个问题,这是一种不正确的思考方式吗?为了回答您关于布尔的问题,在这个代码snippit中,我声明了一个变量
heatingUpIsActive=true
,加载项不会加载,但当我声明它为
heatingUpIsActive=1
时,它运行良好。这让我很困惑_0@GreenWire:你对单位光环的理解对我来说是正确的。如果你想在光环消失后将
heatingUpIsActive
设置为
false
,只需添加
else heatingUpIsActive=false
@GreenWire:当你说“插件无法加载”时,到底出了什么问题?你有什么错误吗?可能有一个名为
heatingUpIsActive
的全局变量来自另一个需要数字的插件?按照我的建议,用一个当地人会解决这个问题。哈哈……我一定是因为这个而遭受了成长的痛苦。它现在很好用,布尔人和所有人。我的思维过程需要改变,因为如果(UnitAura(“player”,“Heating Up”)
不是真的,那么剩下的事情就由
来处理了。Duh.很抱歉,我是一个nooblit,非常感谢你的帮助!你太棒了!