胡先生 发表于 2024-4-13 11:47:23

求助:如何仅执行一次 事件监听

本帖最后由 胡先生 于 2024-4-13 11:51 AM 编辑

local frame = CreateFrame("Frame")
frame:RegisterEvent("CHAT_MSG_RAID")

frame:SetScript("OnEvent", function(self, event, ...)
      local message, sender, _, _, _, _, _, _, _, _, _, guid = ...

      -- 如果消息是 "1",则回复 "2"
      if message == "1" then
            -- 发送消息 "2"
            SendChatMessage("2", "RAID")
            return
      end
end)

想做一个监听事件,当监听到 团队消息“1”时,自己发送消息“2".
功能可以实现,但却是在刷屏的发送“2”.如何仅发送一次消息“2”呢?
增加frame:UnregisterEvent("CHAT_MSG_RAID") 注销监听事件也无法阻止刷屏


懒动行不行 发表于 2024-4-13 19:13:46

是不是在WBE里面运行的?
运行一次就行,别打勾

胡先生 发表于 2024-4-15 14:34:39

--控制施法
local frame = CreateFrame("Frame")
frame:RegisterEvent("CHAT_MSG_SAY")      --普通频道
frame:RegisterEvent("CHAT_MSG_RAID")      --团队成员频道
frame:RegisterEvent("CHAT_MSG_PARTY")      --小队成员频道
frame:RegisterEvent("CHAT_MSG_PARTY_LEADER") -- 小队领袖频道
frame:RegisterEvent("CHAT_MSG_RAID_LEADER") -- 团队领袖频道
frame:RegisterEvent("CHAT_MSG_GUILD") -- 工会频道
frame:SetScript("OnEvent", function(self, event, ...)
      local message, sender, _, _, _, _, _, _, _, _, _, guid = ...
      if message == "痛苦压制" then
            if BeeSpellCoolDown("痛苦压制") == 0 then
                BeeRun("痛苦压制", sender)
                return
            end
      end
end)

--我放弃了,改成不回话了。有人喊痛苦压制就对他用。

vshrd 发表于 2024-4-14 20:31:39

= =你是典型的捡了西瓜丢芝麻
你的回调函数里不能做个静态变量存储当前状态
然后进回调函数之前判断一下这个变量吗?

lk47354813 发表于 2024-4-13 13:35:17

你重复注册事件了吧,代码看起来没啥问题

blxyz521 发表于 2024-4-17 11:34:32

重复注册了,每运行一次就会注册一次,第一句不要local ,改成frame=frame orCreateFrame("Frame"),
另外可以给function命名,如果function为空就赋值为函数,不为空就赋值为空,达到按1次开启,再按一次关闭的目的。做成宏比较好用。

xiaoyao1 发表于 2024-8-14 09:06:08

blxyz521 发表于 2024-4-17 11:34 AM
重复注册了,每运行一次就会注册一次,第一句不要local ,改成frame=frame orCreateFrame("Frame"),
另 ...

重复注册是不是会占用内存,用frame=frame orCreateFrame("Frame")可以避免重复注册吗?

blxyz521 发表于 2024-8-14 09:15:25

xiaoyao1 发表于 2024-8-14 09:06 AM
重复注册是不是会占用内存,用frame=frame orCreateFrame("Frame")可以避免重复注册吗?

肯定会占用内存啊,比如楼主的代码,运行N次就注册了N个frame,当别人喊1的时候就会回复N次2。
占用的内存直到reload才会释放。

xiaoyao1 发表于 2024-8-14 09:20:17

blxyz521 发表于 2024-8-14 09:15 AM
肯定会占用内存啊,比如楼主的代码,运行N次就注册了N个frame,当别人喊1的时候就会回复N次2。
占用的内 ...

如何解决重复注册呢!!?请给下具体解决方法

notveryimba 发表于 2024-8-14 09:46:53

xiaoyao1 发表于 2024-8-14 09:20 AM
如何解决重复注册呢!!?请给下具体解决方法

刚刚blxyz521大佬已经告诉你了呀。frame or CreateFrame("Frame")。意思就是有就用,没就创建。
而且你这个如果不想在魔蜂运行的话,可以尝试写在插件或者WA里面,没必要啥都丢在魔蜂里面。归根结底都是lua代码。
页: [1] 2
查看完整版本: 求助:如何仅执行一次 事件监听