如何在CLUB_STREAM_SUBSCRIBED事件后加载WoW插件?

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

免责声明,我根本不知道如何编码,这是我第一次重写别人的插件。

在加载插件之前,我需要检查以下内容。

frame:RegisterEvent("CLUB_STREAM_SUBSCRIBED");

问题是,我不知道在哪里或如何做。我尝试将其添加到第19行,然后将第6行更改为if event == 'ADDON_LOADED' and arg1 == 'unitscan' and event == 'CLUB_STREAM_SUBSCRIBED' then

完整代码可在https://github.com/Damnedprinter/unitscan/blob/master/unitscan.lua中找到

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

最下面的底线:

[您至少在Boolean logic中犯了一个错误,event =='this'and event =='that'但是很明显,某些事情不能同时出现。您可以使用两种方法对此进行补救:

  • 如果...elseif...结束在大多数情况下建议使用
  • event =='this'or event =='that'但要注意操作顺序)] >>
  • 详细答案:

1。原始插件的工作方式:

我认为代码看起来与此类似:

local frame = CreateFrame("Frame");
frame:RegisterEvent("ADDON_LOADED");
frame:SetScript("OnEvent", function(__, event, arg1)
    if (event == "ADDON_LOADED" and arg1 == "unitscan") then
        doStuff();
    end
end);

这会创建一个框架,并告诉它在任何加载项完成加载时做出响应。它以event handler响应,该事件接收事件的类型(如[[event

)和一个参数(如arg1),这对于不同类型的事件可能意味着不同的含义。在此示例中,arg1将是刚刚完成加载的插件的名称(请参阅Wowpedia上的ADDON_LOADED)。原始作者不想在加载任何插件时做任何事情,因此它会检查在ADDON_LOADED事件期间arg1等于“ unitscan”。

2。使它适合您:

[如果您希望插件也响应CLUB_STREAM_SUBSCRIBED,那么我建议像本例一样使用elseif语句:

frame:SetScript("OnEvent", function(__, event, arg1, arg2) if (event == "ADDON_LOADED" and arg1 == "unitscan") then doStuff(); elseif (event == "CLUB_STREAM_SUBSCRIBED") then doOtherStuff(); end end);

注意,我将处理程序更改为接收我任意称为

arg1

arg2的两个参数。根据Wowpedia上的文档,它们分别是俱乐部ID和流ID。我不知道您是否出于个人目的需要此信息,但以防万一。

3。替代解决方案:

如果要对两个事件执行完全相同的代码,则可以通过使用

or

运算符和一些括号来控制操作顺序来简化上述操作。 frame:SetScript("OnEvent", function(__, event, arg1, arg2) if ( (event == "ADDON_LOADED" and arg1 == "unitscan") or (event == "CLUB_STREAM_SUBSCRIBED") ) then doStuff(); end end);
© www.soinside.com 2019 - 2024. All rights reserved.