北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
12
返回列表 发新帖
楼主: jarlyyn

pkuxkx.noob机器人架构剖析

[复制链接]
 楼主| 发表于 2024-3-11 16:49:02 | 显示全部楼层
每个人是自己的第一责任人

好了,除了最初的问题,其他问题都解决了,剩下的问题就是,最终串起整个机器的流程的责任人是谁?

除非我们能用人工智能自动推算出最优的流程,这个责任人当然是机器最终的用户,亲爱的您阿。

我的机器里设置了3个任务队列,可以通过start,start2,start3分别启动

截取下我AFK前ffqm的任务设置

  1. turbo>>study guangming-shenghuogong::xiulian::jxj

  2. turbo>>study cangming-gong::xiulian::jxj

  3. fullmeok>>changespecial agile,ironskin,sociability

  4. fullmeok>>compressgem 0.9

  5. fullmeok>>xgy 于夕勤@yz-lcy,顾横波@jkf-jyl,孙倩叶@chengdu-fhz

  6. !jobred 17,fullmeok>>syq reborn

  7. !jobred 24,fullmeok>>jxcf

  8. !jobred 16,fullmeok>>touxue

  9. !jobred 08,fullmeok>>mzj

  10. fullmeok>>syq reborn

  11. fullmeok>>jxcf

  12. fullmeok>>touxue

  13. fullmeok>>mzj



  14. fullmeok>>wat

  15. fullmeok>>hsz

  16. fullmeok>>gsz

  17. fullmeok>>mrxj

  18. fullmeok>>vein





  19. study2

  20. study

  21. never>>vein

  22. !fullmeok,pot 2000000>>study qiankun-danuoyi::cmd::mj-mishi::jifa parry qiankun-danuoyi&&lian parry 50::parry

  23. dazuo

  24. xiuxingdian>>biguan abandon skills

  25. tuna
复制代码


>>代表提内置条件,每个任务都有内置的cd系统

有turbo(我有一个界面选择的超频时间设置,这里用来设置开双),依次修炼牛逼光明圣火功和卡拉米沧溟功
有fullme时
  • 设置special,压缩超过9成的宝石
  • 就近找拼头
  • 依次找不在cd的,不红的syq/jxcf/touxue/mzj
  • 一次找再cd的,红色的syq/jxcf/touxue/mzj
  • 都做完的话,看wat/hsz/gsz/mrxj哪个没cd
  • 实在没活了通个脉


没有fullme的话
  • 优先学习列表2,不行学习列表1
  • 通脉(被never注释)
  • 潜能过2m,就去搞大挪移
  • 打坐
  • 有修行点就去闭关,顺便放弃垃圾技能
  • 吐纳


根据条件和cd,从上到下一次挑一个最合适的。

进入具体任务,由任务来负责创建状态列表。

这个模式有个缺陷,只能僵化的执行队列,没发最优化,比如同时接几个任务同时做。

如果要最优化,就要废弃整个体系的优点推翻重来。

但如之前所说,我追求的是“高可维护性的机器”,不是“高性能的机器”。

所以,得到一些,放弃一些,虽然是成年人,我也没法选择全都要。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-3-11 16:49:33 | 显示全部楼层
理想很丰满,现实很骨感。

到这一步,通过状态及状态队列驱动的机器看似跑通了。

但还是有个问题没解决。

怎么应对意外状况。

比如死了,比如断线了,比如遇到野外boss了。

状态机和状态队列的模式天生不适合处理意外状况。

这时候,我加入很多其他监听指定事件的意外处理守护程序。

当意外发生时,快照或者直接清理掉当前任务。

意外处理完时。由当前任务决定是否能够继续。不能继续就重新走任务队列。

很脏,很暴力,但有效。

凡事都有代价,我选择接受这个代价。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-3-11 16:50:14 | 显示全部楼层
这样写机器,要多少触发啊?

恩,做一个全能机器人的话,100多个吧。

曹丞相不可能.gif

其实是可能的。所有的触发都是事件。所以,我有个^.*$的事件,叫做line,参数是当前文本。

对,全局事件统一规划,非全局的代码自己监听online事件。

online事件的监听主要由4个地方负责

1.当前状态,离开状态时自动失效。一般用来做任务等待确定的恢复。
2.当前任务,结束任务时自动失效。用来做不定时的触发。比如新任务的线索。
3.当前房间,离开房间时自动失效。当一个房间涉及到多个状态切换时使用。
4.当前战斗,战斗结束时自动失效。用来做特殊的战斗触发,比如偷学。

对的,只要有责任人,偶尔跨界一次,未必不好。

我们只是写一个机器人,不是玩代码宗教,不必过于强调纯洁性。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-3-11 16:50:45 | 显示全部楼层
外面的世界很大,我想走一走

整个逻辑系统讲完了,剩下的就是房间系统了。

房间系统对于mud来说是很独立的一块,因为不走标准的心跳拿一块。

对于北侠来说,房间系统就是 敏感词敏感词敏感词,所以细节不多说了。

八仙过海,各显神通吧。

就是说几个基本点

  • 不要用数字id命名,维护起来要哭。我喜欢地区+房间的拼音简称,能直接看房间说命名。
  • 要维护当前房间信息。包括当前房间ID,描述,对象列表,变量空间(方便写机器),触发
  • 要记录当前房间ID,没有移动,或者标记过look的话不清楚ID,实现论坛上说的“惯性定位”。每次都要定位的话很蛋疼
  • 房间出口要有标签。有些出口乞丐能走,别的不行。有些出口女的能走,男的不行。
  • 尽量实现动态生成路径。就是能把制定几个房间,周围制定的N格,根据标签动态生成固定路径。如果能实现按剩余房间而不是路径动态遍历更好。


有条件再开帖子细化下不敏感的内容

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2024-3-11 16:51:18 | 显示全部楼层
膜拜下大佬,什么时候我才能看懂大佬写的东西呢。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-3-11 16:51:19 | 显示全部楼层
战,我要战

战斗系统,没啥好说的。

Timer,永远的timer

抓起足够多的变量,设置一个根据变量和cd,有优先级的战斗策略系统,就差不多了。

锚定心跳的系统,不用timer属于折腾自己。


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-3-11 16:51:59 | 显示全部楼层
本帖最后由 jarlyyn 于 2024-3-11 04:54 PM 编辑

看我无敌的手速

命令输出系统的话,比较简单。

首先要有限制流。我是通过0.6s的令牌桶系统,也就是每0.6s补满桶里令牌的机制来限流的。

然后是限流后命令要有个分组功能,要么同一个心跳发出去,要么都等下一个心跳,避免蛋疼状况。

再加上简单的别名系统,一般就ok了。

参考:

令牌桶:https://baike.baidu.com/item/%E4 ... /12715076?fr=ge_ala
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2024-3-11 16:52:32 | 显示全部楼层
结语

终于,我也逼逼叨叨的说完了。

玩北侠本来就是实践一把机器的新想法,现在发了这个帖子也算有始有终。

有了总结,机器应该还会再写,毕竟mud那么多,一个一个写过来能写到天荒地老。

这个机器本身,因为是边写边用,很多底层的东西哪怕重构过一次也改不掉,所以也总有不完美的地方。

不过,这本身也是写代码有乐趣的地方,有想法,实现它,完善它,犹如生物的进化,那一刻,你就是造物主。

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-28 05:27 AM , Processed in 0.009368 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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