【问题标题】:World-of-Warcraft Chat Frame Filter Conflict魔兽世界聊天框过滤器冲突
【发布时间】:2012-08-19 20:07:14
【问题描述】:

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

错误发生在:存根计数:1 消息:错误:原始调用失败 运行挂钩后: ChatFrame_OnEvent 用法: SendChatMessage(text [,type] [,language] [,targetPlayer]) 调试:
(尾声):? [字符串“:OnEvent”]:1: [字符串“: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

这个错误是因为两个插件都试图过滤聊天框吗?如果是这样,如何做到这一点?暴雪将如此简单但重要的概念仅限于一个插件,这对我来说似乎很奇怪。

【问题讨论】:

    标签: lua world-of-warcraft


    【解决方案1】:

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

    您使用的引用 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>
    

    【讨论】:

      【解决方案2】:

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

      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 通常在此页面上是不正确的。正确的论点在上面的源代码中列出。第一个参数,一个表,我不确定它的用途。无论如何,这段代码现在可以正常工作了。

      【讨论】:

      • 对于过滤器函数,'self' 或 'table' 参数是对实际聊天框架对象或表格本身的引用,以便过滤器具有上下文。语法和示例都显示了这一点,但是语法行将其称为“chatFrame”,而示例将其称为“self”,因为“self”对于 Lua 的“语法糖”隐式参数来说是传统的,如果您要使用与实际聊天框架表中的功能相同。这些在 WoWWIki 文档中都是正确的。该页面充斥着 API 更改说明,阅读起来有些混乱,尤其是在不熟悉 Lua 语义的情况下。
      • 我指的是wowwiki.com/API_ChatFrame_AddMessageEventFilter,以防万一你在不同的地方看到它,也许那个地方不正确。
      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      相关资源
      最近更新 更多