免责声明,我根本不知道如何编码,这是我第一次重写别人的插件。
在加载插件之前,我需要检查以下内容。
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中找到
[您至少在Boolean logic中犯了一个错误,event =='this'and event =='that'但是很明显,某些事情不能同时出现。您可以使用两种方法对此进行补救:
1。原始插件的工作方式:
我认为代码看起来与此类似:
)和一个参数(如arg1),这对于不同类型的事件可能意味着不同的含义。在此示例中,arg1将是刚刚完成加载的插件的名称(请参阅Wowpedia上的ADDON_LOADED)。原始作者不想在加载任何插件时做任何事情,因此它会检查在ADDON_LOADED事件期间arg1等于“ unitscan”。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
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);
注意,我将处理程序更改为接收我任意称为和arg2的两个参数。根据Wowpedia上的文档,它们分别是俱乐部ID和流ID。我不知道您是否出于个人目的需要此信息,但以防万一。arg1
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);