求助怎么减少checkbusy
比如我现在从hsz副本退出后,检查不busy了,再回去交任务。求指点怎么改进,谢谢 副本进入前后就该 checkbusy,放心大胆地用吧,这才几分钟一次。正当理由,正当需求。别怕出事。 为什么要减少checkbusy?checkbusy是为什么出的?
checkbusy一个心跳有会发多次的意义吗?一个极限一秒用一次的指令有什么消耗?
checkbusy上你top cmd榜了吗?
jarlyyn 发表于 2023-11-30 11:38 PM
为什么要减少checkbusy?
checkbusy是为什么出的?
刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下 另外,理论上的确有减少checkbusy使用数量的方法。
就是mud忙结束的语句固定化,不要该来改去。
那么可以在能可预期的忙周期里,可以不使用chekcbusy,用忙结束语句来触发。
代码复杂度也提升的有限,甚至可以很容易的兼容,同步使用。
但回到现实的话,可预期 三个字是很难的。 唯一可预期的就是,任何预期随时都有可能会发生变化。 oakbai 发表于 2023-11-30 11:39 PM
刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下
低级不低级,取决于你目标。 jarlyyn 发表于 2023-11-30 11:44 PM
低级不低级,取决于你目标。
哈哈,担心自己不懂给系统造成负担。谢谢各位! 本帖最后由 jarlyyn 于 2023-11-30 11:52 PM 编辑
另外,纠正一个误区。
本质上来说,checkbusy用的多的机器,可能是一个非常环保的机器。
因为mud机器有一个重要的功能是异步指令的同步化。
举个例子。
我发了5个yun heal,然后我需要一个标志,让我知道,这个标志之后的文字和这5个yun heal无关,可以把heal的触发组关了。
那么有几个选择.
[*]chat
[*]say
[*]tell 自己 heal end
[*]response heal end
[*]checkbusy
个人的猜测,这几个指令的消耗应该是按数量级递减。
毕竟我见过不少response 在top cmddetail里排的比较靠前的截图
本帖最后由 risc 于 2023-11-30 11:59 PM 编辑
楼主的问题,有2个解决办法:
一是增加checkbusy的间隔,比如这样的思路(以mush为例):
--------------------------------------------------------------------------------
--等待进入不忙状态(check_tick为检测间隔),进入不忙状态后执行:callback
--------------------------------------------------------------------------------
function WaitforFree(callback,check_tick)
wait.make(function()
while true do
SendNoEcho("checkbusy")
local l,w=wait.regexp("^你(.*)忙$",0,trigger_flag.OmitFromOutput)
if w=="不"then break end
wait.time(0.1)
if (check_tick~=nil) and (check_tick~=0) then wait.time(check_tick) end
end
if type(callback)=="function" then callback()
elseif type(callback)=="string" then SendNoEcho(callback)
end
end)
end不管你设不设置间隔,都自动加个0.1秒的间隔。设置间隔的时候,就按照你设置的秒数,比如每1秒checkbusy一下。
二是从任务逻辑上,使用触发器来解决。
比如上述的hsz任务,在退出副本以后,会提示“快去找韩王复命吧。”,那么捕捉到这句的时候,直接等待个2,3秒,再返回交任务。这里的2,3秒钟在整个任务过程中,不会带来什么大的影响。
checkbusy这个函数,我的体会,除非在战斗中(不过一般战斗中多用suicide命令),大多数情况下,设置个0.5秒或者1,2秒啥的间隔进行checkbusy,不会影响什么。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\SGPicFaceTpBq\14552\F6DA5073.png