北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 1996|回复: 38

求助怎么减少checkbusy

[复制链接]
发表于 2023-11-30 23:33:00 | 显示全部楼层 |阅读模式
比如我现在从hsz副本退出后,检查不busy了,再回去交任务。求指点怎么改进,谢谢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-11-30 23:33:42 | 显示全部楼层
副本进入前后就该 checkbusy,放心大胆地用吧,这才几分钟一次。正当理由,正当需求。别怕出事。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-11-30 23:38:24 | 显示全部楼层
为什么要减少checkbusy?

checkbusy是为什么出的?

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

checkbusy上你top cmd榜了吗?

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2023-11-30 23:39:41 | 显示全部楼层
jarlyyn 发表于 2023-11-30 11:38 PM
为什么要减少checkbusy?

checkbusy是为什么出的?

刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-11-30 23:42:06 | 显示全部楼层
另外,理论上的确有减少checkbusy使用数量的方法。

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

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

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

但回到现实的话,可预期 三个字是很难的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-11-30 23:43:59 | 显示全部楼层
唯一可预期的就是,任何预期随时都有可能会发生变化。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2023-11-30 23:44:17 | 显示全部楼层
oakbai 发表于 2023-11-30 11:39 PM
刚才wiz讲貌似这是低级机器做法,我琢磨怎么改进下

低级不低级,取决于你目标。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2023-11-30 23:47:37 | 显示全部楼层
jarlyyn 发表于 2023-11-30 11:44 PM
低级不低级,取决于你目标。

哈哈,担心自己不懂给系统造成负担。谢谢各位!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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里排的比较靠前的截图
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 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[1]=="不"  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
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-4-27 04:01 PM , Processed in 0.010375 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表