oakbai 发表于 2023-11-30 23:33:00

求助怎么减少checkbusy

比如我现在从hsz副本退出后,检查不busy了,再回去交任务。求指点怎么改进,谢谢

dtp 发表于 2023-11-30 23:33:42

副本进入前后就该 checkbusy,放心大胆地用吧,这才几分钟一次。正当理由,正当需求。别怕出事。

jarlyyn 发表于 2023-11-30 23:38:24

为什么要减少checkbusy?

checkbusy是为什么出的?

checkbusy一个心跳有会发多次的意义吗?一个极限一秒用一次的指令有什么消耗?

checkbusy上你top cmd榜了吗?

oakbai 发表于 2023-11-30 23:39:41

jarlyyn 发表于 2023-11-30 11:38 PM
为什么要减少checkbusy?

checkbusy是为什么出的?


刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下

jarlyyn 发表于 2023-11-30 23:42:06

另外,理论上的确有减少checkbusy使用数量的方法。

就是mud忙结束的语句固定化,不要该来改去。

那么可以在能可预期的忙周期里,可以不使用chekcbusy,用忙结束语句来触发。

代码复杂度也提升的有限,甚至可以很容易的兼容,同步使用。

但回到现实的话,可预期 三个字是很难的。

dtp 发表于 2023-11-30 23:43:59

唯一可预期的就是,任何预期随时都有可能会发生变化。

jarlyyn 发表于 2023-11-30 23:44:17

oakbai 发表于 2023-11-30 11:39 PM
刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下

低级不低级,取决于你目标。

oakbai 发表于 2023-11-30 23:47:37

jarlyyn 发表于 2023-11-30 11:44 PM
低级不低级,取决于你目标。

哈哈,担心自己不懂给系统造成负担。谢谢各位!

jarlyyn 发表于 2023-11-30 23:50:53

本帖最后由 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 23:57:25

本帖最后由 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
页: [1] 2 3 4
查看完整版本: 求助怎么减少checkbusy