魔兽世界聊天框过滤冲突

我有一个 WoW/LUA 脚本,但似乎与 Stubby 插件产生了冲突,后者是拍卖行插件的一部分,我认为。这里是我收到的消息:

Error occured in: Stubby Count: 1 Message: Error: Original call failed after running hooks for: ChatFrame_OnEvent Usage: SendChatMessage(text [,type] [,language] [,targetPlayer]) Debug:

(tail call): ? [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

这个错误是由两个插件都试图过滤聊天框引起的吗?如果是这样,怎么做呢?对我来说,暴雪只将如此简单且重要的概念限制在一个插件中似乎有些奇怪。

点赞
用户675940
用户675940

为了完整起见,我包含此插件的全部源代码:

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 不是第四个和第五个参数。此外,WoWWiki 上的此页面总体不正确。正确的参数在源代码中列出。第一个参数,一个表,我不确定其目的。无论如何,此代码现在完全可用。

2012-08-19 23:59:34
用户714557
用户714557

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

你使用的参考文献 Events/Communication 只显示了特定事件的参数,而不考虑上下文。

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

ChatFrame_AddMessageEventFilter 函数允许你使用聊天框架的 OnEvent 处理程序而不是自己的处理程序进行聊天框架事件,并具有为你添加的过滤器定义的参数。

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

function Foo_OnEvent(self, event, ...)

对于前两个参数,'ChatFrame' 过滤器必须像这样:

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

聊天框架过滤器是特定的。但是,对于 OnEvent,你可以制作一个 Lua 'handler',它不关心它来自哪个框架:

<OnEvent>
    MyEventHandler(event, ...)
</OnEvent>
2012-08-20 19:30:22