1

World of Warcraft のアドオンを作成しようとしています。現在のプレイヤーにバフが追加されているかどうかを確認する関数を作成しました。

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気に入らないようです。booleanLuaでaを作成する正しい方法は何ですか?

4

1 に答える 1

3

あなたの関数は、イベントの原因となったオーラをチェックしていません。UNIT_AURA何かイベントがあればいつでも「Heating Up」を探しています。実際、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 に答える