胡先生 发表于 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-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)

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

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

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

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次开启,再按一次关闭的目的。做成宏比较好用。
页: [1]
查看完整版本: 求助:如何仅执行一次 事件监听