【发布时间】:2020-03-04 09:40:21
【问题描述】:
我正在尝试实现一个脚本,当我的角色施放某种咒语时捕捉到,例如具有施法时间的 Chaos Bolt 或 Shadow Word: Pain(即时施法)。搜索我发现了“通灵”事件,但我还不太明白。
我希望在角色施放特定咒语时触发自定义消息或播放音频。
【问题讨论】:
标签: lua add-on world-of-warcraft
我正在尝试实现一个脚本,当我的角色施放某种咒语时捕捉到,例如具有施法时间的 Chaos Bolt 或 Shadow Word: Pain(即时施法)。搜索我发现了“通灵”事件,但我还不太明白。
我希望在角色施放特定咒语时触发自定义消息或播放音频。
【问题讨论】:
标签: lua add-on world-of-warcraft
UNIT_SPELLCAST_SENT: "单位", "目标", "castGUID", spellID"
UNIT_SPELLCAST_SUCCEEDED: "target", "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。
【讨论】:
and "player" 部分不完整,在这种情况下实际上什么都不做。