如何捕捉瞬发或施法事件?

问题描述 投票:0回答:1

我正在尝试实现一个脚本,当我的角色施放某种咒语时会捕获该脚本,例如具有施放时间的Chaos BoltShadow Word: Pain(即时施放)。搜索时我发现了“通道”事件,但我还不太了解。

我希望角色投射某种咒语时触发自定义消息或播放音频。

lua add-on world-of-warcraft
1个回答
0
投票

[UNIT_SPELLCAST_SENT:“单位”,“目标”,“ castGUID”,spellID“

[UNIT_SPELLCAST_SUCCEEDED:“目标”,“ castGUID”,spellID

每个拼写法都有唯一的castGUID。它是在您开始使用UNIT_SPELLCAST_SENT进行投射时创建的,它显示在投射/频道的末尾或立即显示在UNIT_SPELLCAST_SUCCEEDED中。

因此,只要unit ==“ player,只需记录castGUID,然后查找具有相同值的咒语即可。这就是您所知道的不是别人的咒语。

同时,您可以查找与每个咒语相对应的spellID。在下面的示例中,我使用了您的帖子中的两者(196670和589)。

local myFrame = CreateFrame("Frame");
local myCurrentCast;
myFrame:RegisterEvent("UNIT_SPELLCAST_SENT");
myFrame:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED");
myFrame:SetScript("OnEvent",
    function(self, event, arg1, arg2, arg3, arg4)
        if (event == "UNIT_SPELLCAST_SENT" and arg1 == "player") then
            print("I am casting something");
            myCurrentCast = arg3;
        elseif (event == "UNIT_SPELLCAST_SUCCEEDED" and arg2 == myCurrentCast) then
            if (arg3 == 196670) then
                print("I just finished casting Chaos Bolt!");
            elseif (arg3 == 589) then
                print("Look at my instant Shadow Word: Pain.  Isn't it cool?");
            end
        end
    end
);

此示例创建一个框架,注册这两个事件,然后创建事件处理程序以在投射这两个示例咒语时打印出精美的文字。有关事件处理程序的教程,建议使用Wowpedia/Handling_events

© www.soinside.com 2019 - 2024. All rights reserved.