求助:如何仅执行一次 事件监听
本帖最后由 胡先生 于 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") 注销监听事件也无法阻止刷屏
是不是在WBE里面运行的?
运行一次就行,别打勾 --控制施法
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)
--我放弃了,改成不回话了。有人喊痛苦压制就对他用。
= =你是典型的捡了西瓜丢芝麻
你的回调函数里不能做个静态变量存储当前状态
然后进回调函数之前判断一下这个变量吗? 你重复注册事件了吧,代码看起来没啥问题 重复注册了,每运行一次就会注册一次,第一句不要local ,改成frame=frame orCreateFrame("Frame"),
另外可以给function命名,如果function为空就赋值为函数,不为空就赋值为空,达到按1次开启,再按一次关闭的目的。做成宏比较好用。 blxyz521 发表于 2024-4-17 11:34 AM
重复注册了,每运行一次就会注册一次,第一句不要local ,改成frame=frame orCreateFrame("Frame"),
另 ...
重复注册是不是会占用内存,用frame=frame orCreateFrame("Frame")可以避免重复注册吗? xiaoyao1 发表于 2024-8-14 09:06 AM
重复注册是不是会占用内存,用frame=frame orCreateFrame("Frame")可以避免重复注册吗?
肯定会占用内存啊,比如楼主的代码,运行N次就注册了N个frame,当别人喊1的时候就会回复N次2。
占用的内存直到reload才会释放。 blxyz521 发表于 2024-8-14 09:15 AM
肯定会占用内存啊,比如楼主的代码,运行N次就注册了N个frame,当别人喊1的时候就会回复N次2。
占用的内 ...
如何解决重复注册呢!!?请给下具体解决方法 xiaoyao1 发表于 2024-8-14 09:20 AM
如何解决重复注册呢!!?请给下具体解决方法
刚刚blxyz521大佬已经告诉你了呀。frame or CreateFrame("Frame")。意思就是有就用,没就创建。
而且你这个如果不想在魔蜂运行的话,可以尝试写在插件或者WA里面,没必要啥都丢在魔蜂里面。归根结底都是lua代码。
页:
[1]
2