魔兽世界聊天框架过滤器冲突



我有一个WoW/LUA脚本正在尝试启动,但它似乎与Stubby插件冲突,我相信Stubby是Auctioneer插件的一部分。这是我收到的信息:

发生错误:Stubby计数:1消息:错误:原始调用失败运行挂钩后:ChatFrame_OnEvent用法:SendChatMessage(text[,type][,language][,targetPlayer])调试:
(尾呼):?[string":OnEvent"]:1:[string":OnEvent"]:1

现在,在冲突的插件中唯一发生的事情是:

ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", partyMsg)

partyMsg中的代码也非常简单:

local function partyMsg(msg,author,language,lineID,senderGUID)
  if (store ~= msg) then
    SendChatMessage(msg,"SAY",nil,nil);
  end
  store = msg;
end

这个错误是因为两个插件都试图过滤聊天框吗?如果是这样,如何做到这一点?我觉得很奇怪,暴雪会有一个如此简单但重要的概念,只限于一个插件。

我想我明白这里发生了什么。

您使用的引用Events/Communication仅显示特定事件的特定参数,而与上下文无关。

上下文通常是一个OnEvent处理程序。

ChatFrame_AddMessageEventFilter函数允许您使用聊天框架的OnEvent处理程序,而不是您自己的聊天框架事件处理程序,并且为您添加的过滤器定义了良好的参数。

OnEvent处理程序可能看起来像:

function Foo_OnEvent(self, event, ...)

对于前两个参数,"ChatFrame"过滤器必须如下所示:

function Foo_ChatFrameFilter(self, event, msg, ...)

ChatFrame筛选器是特定的。然而,对于OnEvent,你可以制作一个Lua"处理程序",它不在乎它来自哪个帧:

<OnEvent>
    MyEventHandler(event, ...)
</OnEvent>

为了完成,我将包括这个插件的整个来源:

local function partyMsg(someTable,msgType,msg,user,language,...)
  if (store ~= msg) then
      SendChatMessage(user .. " just said: ".. msg .. " using that sneaky " .. language .. " language.");
  end
  store = msg;
  return false;
end
ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", partyMsg)
ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER",partyMsg)

原始代码有几个问题:

1) 我用WoWWiki获取信息,首先,我读错了。lineID和senderGUID不是第4个和第5个参数。然后,除此之外,WoWWiki在这个页面上通常是不正确的。正确的参数在上面的源代码中列出。第一个论点,一张表,我不确定它的目的。无论如何,这段代码现在可以完全工作了。

相关内容

  • 没有找到相关文章

最新更新