EVA timer 使用方法
写zMail时发现的问题不知如何解决[code]local zMailSendMailBlock = EVA.Block:New()zMailSendMailBlock.Name ="zMail Send Mail Block"
zMailSendMailBlock.RequestTypes = {"Event"}
zMailSendMailBlock.Events = {"MAIL_SEND_SUCCESS"}
zMailSendMailBlock.Enabled = true
zMailSendMailBlock.Commands = {
{Description ="Slipt Item",Function = "zm_SendSpilt",
Timer = {Interval = 0.3, Times = 3},--拆分等待发送
},
{Description ="Mail Send",Function = function()
if not zmSend.SendCo then return end
if coroutine.status(zmSend.SendCo) == "suspended" then
coroutine.resume(zmSend.SendCo,true)
end
end,
Timer = {Interval = 0.1, Times = 1},
},
}
zMailAddon:Add(zMailSendMailBlock)
function zm_SendSpilt(context)--拆分过程
if zmSend.sliptItem and GetContainerItemLink(zmSend.tbag,zmSend.tslot) then
zmHook.PickupContainerItem(zmSend.tbag,zmSend.tslot)
ClickSendMailItemButton()
zmSend.sliptItem = false
else
context.Timer:End()
end
end[/code]设计逻辑是在需要进行物品拆分的时候先将大于数量要求的物品拆分n个到目标空格中,如果完成拆分就将关闭过程timer执行下一项发送处理,单纯的让拆分过程每0.3秒做一次做3次是可以完成这设定要求的,但是整体发送时间就过长了 现需要按照处理要求在不需要拆分的时候最多执行一次 拆分过程作为检验之用 甚至最好有方法通过一个状态标记方式选择执行需要的操作减少执行时间 目前来说这个代码逻辑没有问题, 与预期不符合的地方是哪里呢?
协程中的函数没有再控制timer吧?
可以使用简单的业务逻辑测试下换成简单的打印, 看看是否正确呢 [language=lua]function EvaHelloWorld.Say1(context)
DEFAULT_CHAT_FRAME:AddMessage("hello")
context.Timer:End()
end
function EvaHelloWorld.Say2()
DEFAULT_CHAT_FRAME:AddMessage("world-------")
end
--.....
Commands = {
{Description = "say hello", Function = EvaHelloWorld.Say1, Timer = {Interval = 1, Times = 2}},
{Description = "say world", Function = EvaHelloWorld.Say2, Timer = {Interval = 2, Times = 1}},
}
[/language]
我在EvaHelloWorld示例插件中写了这样的测试代码, 上面是代码片段, 结果完全正确, 输出是
hello
world-------
而不是
hello
hello
world-------
由此可见context.Timer:End()能够在第一次的时候就中断当前项目而不是继续执行项目的次数. 你最好也把你这里的逻辑最简化先测试下看看.
再尝试下把延时调长时间, 如1s, 这点不太确定. 也可能是0.3太短了.
页:
[1]