北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: jarlyyn

一步一步在北侠做机器人

[复制链接]
 楼主| 发表于 2021-9-14 11:00:05 | 显示全部楼层
接着再维护一下我们的路径列表。

扬州太小了,我想出去走走,先把中原地区的都加进去

  1.     addroom("yzgc","扬州广场",{Landmark:"Rong shu"})
  2.     addroom("yzqz","扬州钱庄",{Station:"扬州钱庄"})
  3.     addroom("yzdp","扬州当铺",{Landmark:"Tang nan"})
  4.     addroom("yztj","扬州铁匠",{Landmark:"Wang tiejiang"})
  5.     addroom("yzzxl","扬州醉仙楼",{Station:"醉仙楼"})
  6.     addroom("yzcg","春来茶馆",{Station:"春来茶馆"})
  7.     addroom("yzyp","扬州药铺",{Landmark:"Ping yizhi"})
  8.     addroom("yzsy","扬州书院",{Landmark:"Fu zi"})
  9.     addroom("yzkd","扬州客店",{Landmark:"Song shengyi"})
  10.     addroom("yzdtpns","扬州打铁铺内室",{Station:"打铁铺内室"})
  11.     addroom("qfgl","曲阜鼓楼",{Station:"鼓楼"})
  12.     addroom("xyzhq","信阳镇淮桥",{Station:"镇淮桥"})
  13.     addroom("xcc","许昌城",{Station:"许昌城"})
  14.     addroom("nyc","南阳城",{Station:"南阳城"})
  15.     addroom("xydp","襄阳当铺",{Station:"襄阳当铺"})
  16.     addroom("jz","荆州",{Station:"荆州"})
  17.     addroom("rzc","汝州城",{Station:"汝州城"})
复制代码
接着是路径
  1.         "yzqz":"yzgc|n;w|e;s",
  2.         "yzdp":"yzgc|s;e|w;n",
  3.         "yztj":"yzgc|e;e;s|n;w;w",
  4.         "yzzxl":"yzgc|n;n;e|w;s;s",
  5.         "yzcg":"yzgc|s;s;w|e;n;n",
  6.         "yzyp":"yzgc|e;e;n|s;w;w",
  7.         "yzsy":"yzgc|e;e;n|s;w;w",
  8.         "yzkd":"yzgc|n;e|w;s",
  9.         "yzdtpns":"yztj|s|n",
  10.         "qfgl":"yzgc|n;n;n;n;n;n;n;n;n;n|s;s;s;s;s;s;s;s;s;s",
  11.         "xyzhq":"yzgc|w;w;w;w;nw;w;w;w;w;w;n|s;e;e;e;e;e;se;e;e;e;e",
  12.         "xcc":"xyzhq|n;n;n;n;n|s;s;s;s;s",
  13.         "nyc":"xcc|sw;sw;w;s;sw;sw|ne;ne;n;e;ne;ne",
  14.         "xydp":"nyc|sw;s;s;s;s;s;s;w;w;n|s;e;e;n;n;n;n;n;n;bo xiaolu&&ne",
  15.         "jz":"xydp|s;e;e;s;s;s;s;s;s;s;s;s;s;s|n;n;n;n;n;n;n;n;n;n;n;w;w;n",
  16.         "rzc":"xcc|nw;nw|se;se"
复制代码
可以看到,在襄阳当铺回南阳城的路径上有个&&符号,这是成组发送的意思。


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-14 11:10:39 | 显示全部楼层
然后我们可以欢畅的奔跑了,先让我们到达任何一个我们认识的地方,比如扬州客店

接着出发去荆州

  1. /App.NewMove("walk","jz").Start()
复制代码

不错,下一个目标是许昌城

  1. /App.NewMove("walk","xcc").Start()
复制代码



我们能看到途中bo xiaolu && ne因为是特殊命令不是在命令组中一起发送的。


再到曲阜鼓楼
  1. /App.NewMove("walk","qfgl").Start()
复制代码



很不错,在中原地区我们驰骋千里,如同统一北方的曹阿瞒一样

下一步,我们需要做到人妻曹做不到的事情,过长江,过赤壁,活捉孙十万。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-14 14:49:21 | 显示全部楼层
发现过江要花钱

不说了,一文钱逼死英雄汉,我先搞点钱先。

难怪曹操过不了长江啊,80W大军,这要花多少钱啊……
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-14 20:32:09 | 显示全部楼层
本帖最后由 jarlyyn 于 2021-9-15 11:12 AM 编辑

继续,在探索北侠地图时,发现了丐帮密道这个好东西。

立刻把路径格式给改一下,适应密道这种单向的路径

新的房间列表如下
  1.     addroom("yzgc","扬州广场",{Landmark:"Rong shu"})
  2.     addroom("yzqz","扬州钱庄",{Station:"扬州钱庄"})
  3.     addroom("yzdp","扬州当铺",{Landmark:"Tang nan"})
  4.     addroom("yztj","扬州铁匠",{Landmark:"Wang tiejiang"})
  5.     addroom("yzzxl","扬州醉仙楼",{Station:"醉仙楼"})
  6.     addroom("yzcg","春来茶馆",{Station:"春来茶馆"})
  7.     addroom("yzyp","扬州药铺",{Landmark:"Ping yizhi"})
  8.     addroom("yzsy","扬州书院",{Landmark:"Fu zi"})
  9.     addroom("yzkd","扬州客店",{Landmark:"Tianshen suicong"})
  10.     addroom("yzdtpns","扬州打铁铺内室",{Station:"打铁铺内室"})
  11.     addroom("qfkm","曲阜孔庙",{Station:"孔庙"})
  12.     addroom("xyzhq","信阳镇淮桥",{Station:"镇淮桥"})
  13.     addroom("xcc","许昌城",{Station:"许昌城"})
  14.     addroom("nyc","南阳城",{Station:"南阳城"})
  15.     addroom("xydp","襄阳当铺",{Station:"襄阳当铺"})
  16.     addroom("jz","荆州",{Station:"荆州"})
  17.     addroom("rzc","汝州城",{Station:"汝州城"})
  18.     addroom("sms","石门寺",{Station:"石门寺"})
  19.     addroom("sjy","石经峪",{Station:"石经峪"})
  20.     addroom("lygc","洛阳中心广场",{Station:"洛阳中心广场"})
  21.     addroom("cakd","长安三秦客栈",{Station:"三秦客栈"})
  22.     addroom("cayp","长安千金堂",{Station:"千金堂"})
  23.     addroom("hz","汉中",{Station:"汉中"})
  24.     addroom("cdkd","成都悦来客店",{Station:"悦来客店"})
  25.     addroom("yyl","岳阳楼",{Station:"岳阳楼"})
  26.     addroom("xyl","浔阳楼",{Station:"浔阳楼"})
  27.     addroom("xcz","小池镇",{Station:"小池镇"})
  28.     addroom("jzkd","盈月客栈",{Station:"盈月客栈"})
复制代码

其中明显江州和荆州的简称冲突了,怎么整等我顺顺。



新的路径列表如下


  1.         "yzgc|yzqz|n;w|e;s",
  2.         "yzgc|yzdp|s;e|w;n",
  3.         "yzgc|yztj|e;e;s|n;w;w",
  4.         "yzgc|yzzxl|n;n;e|w;s;s",
  5.         "yzgc|yzcg|s;s;w|e;n;n",
  6.         "yzgc|yzyp|e;e;n|s;w;w",
  7.         "yzgc|yzsy|e;e;n|s;w;w",
  8.         "yzgc|yzkd|n;e|w;s",
  9.         "yztj|yzdtpns|s|n",
  10.         "yzgc|qfkm|n;n;n;n;n;n;n;n;n;w|e;s;s;s;s;s;s;s;s;s",
  11.         "yzgc|xyzhq|w;w;w;w;nw;w;w;w;w;w;n|s;e;e;e;e;e;se;e;e;e;e",
  12.         "xyzhq|xcc|n;n;n;n;n|s;s;s;s;s",
  13.         "xcc|nyc|sw;sw;w;s;sw;sw|ne;ne;n;e;ne;ne",
  14.         "nyc|xydp|sw;s;s;s;s;s;s;w;w;n|s;e;e;n;n;n;n;n;n;bo xiaolu&&ne",
  15.         "xydp|jz|s;e;e;s;s;s;s;s;s;s;s;s;s;s|n;n;n;n;n;n;n;n;n;n;n;w;w;n",
  16.         "xcc|rzc|nw;nw|se;se",
  17.         "qfkm|sms|e;e;ne;eu;enter|out;wd;sw;w;w",
  18.         "qfkm|sjy|e;n;n;n;n;ne;e;ne;n;n;nu;nu;nu;eu|wd;sd;sd;sd;s;s;sw;w;sw;s;s;s;s;w",
  19.         "nyc|lygc|n;n;n;n;n;n;n|s;s;s;s;s;s;s",
  20.         "lygc|cakd|w;w;w;wu;w;w;w;w;w;nw;w;w;w;w;s;s;s;s;w|e;n;n;n;n;e;e;e;e;se;e;e;e;e;e;ed;e;e;e",
  21.         "cakd|cayp|e;s;s;w;w;n;n;w|e;s;s;e;e;n;n;w",
  22.         "cayp|hz|e;n;n;n;w;w;w;w;sw;su;sd;se|nw;nu;nd;ne;e;e;e;e;s;s;s;w",
  23.         "hz|cdkd|su;.sw;.se;.su;sd;s;s;e|w;n;n;nu;nd;.nw;.ne;.nd",
  24.         "cdkd|yyl|w;s;s;se;se;e;e;ne;.ne;.nw;.nw;.ne;ed;e;n|s;w;wu;sw;.se;.se;.sw;.sw;w;w;nw;nw;n;n;e",
  25.         "xyzhq|xcz|s;s;s;s;sd;se|nw;nu;n;n;n;n",
  26.         "xcz|xyl|s;ask shao gong about 过江&&enter;#sail;se;se;s|n;nw;nw;ask shao gong about 过江&&enter;#sail;n",
  27.         "xyl|jzkd|sw;sw;nw|se;ne;ne",
复制代码

很明显,里面多了两个新元素

一个是从汉中到成都客店的 .se

其实这就是加个flag,发送时还是按se发送,但走行走时单独一组

然后配合行走失败重走的触发(调用App.Core.OnMoveRetry),就实现了走蜀道

还有就是小池镇到浔阳楼的#sail。

其实乘船就是一个很标准的行走,就是耗时长点。

用#sail第一是占一个位置,其次这个命令我调用了一个事件,可以实现过江时打坐吐纳的功能。


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-14 20:52:00 | 显示全部楼层
来,上图

从扬州客店走过蜀道到成都客店



然后水军再攻东吴




好了,乘船和随机失败的路径也处理完了。

接下去应该要找迷宫类的路径,和拦路收费类的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2021-9-15 09:04:58 | 显示全部楼层
还有官方的walk节点没加进去,set walk_speed -1, 在有的地方(一般是城市中心),walk -c可以查询连接点。

点评

那个程序不可控,我的路径完全可以取代掉那个。  发表于 2021-9-15 10:59 AM
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-15 10:58:26 | 显示全部楼层
本帖最后由 jarlyyn 于 2021-9-15 11:13 AM 编辑

继续。在添加了岳阳楼到江州客店和洵阳楼到江州客店的路径后,整个地图成了一个完整的圈。

房间:
  1. addroom("yzgc","扬州广场",{Landmark:"Rong shu"})
  2.     addroom("yzqz","扬州钱庄",{Station:"扬州钱庄"})
  3.     addroom("yzdp","扬州当铺",{Landmark:"Tang nan"})
  4.     addroom("yztj","扬州铁匠",{Landmark:"Wang tiejiang"})
  5.     addroom("yzzxl","扬州醉仙楼",{Station:"醉仙楼"})
  6.     addroom("yzcg","春来茶馆",{Station:"春来茶馆"})
  7.     addroom("yzyp","扬州药铺",{Landmark:"Ping yizhi"})
  8.     addroom("yzsy","扬州书院",{Landmark:"Fu zi"})
  9.     addroom("yzkd","扬州客店",{Landmark:"Tianshen suicong"})
  10.     addroom("yzdtpns","扬州打铁铺内室",{Station:"打铁铺内室"})
  11.     addroom("qfkm","曲阜孔庙",{Station:"孔庙"})
  12.     addroom("xyzhq","信阳镇淮桥",{Station:"镇淮桥"})
  13.     addroom("xcc","许昌城",{Station:"许昌城"})
  14.     addroom("nyc","南阳城",{Station:"南阳城"})
  15.     addroom("xydp","襄阳当铺",{Station:"襄阳当铺"})
  16.     addroom("jz","荆州",{Station:"荆州"})
  17.     addroom("rzc","汝州城",{Station:"汝州城"})
  18.     addroom("sms","石门寺",{Station:"石门寺"})
  19.     addroom("sjy","石经峪",{Station:"石经峪"})
  20.     addroom("lygc","洛阳中心广场",{Station:"洛阳中心广场"})
  21.     addroom("cakd","长安三秦客栈",{Station:"三秦客栈"})
  22.     addroom("cayp","长安千金堂",{Station:"千金堂"})
  23.     addroom("hz","汉中",{Station:"汉中"})
  24.     addroom("cdkd","成都悦来客店",{Station:"悦来客店"})
  25.     addroom("yyl","岳阳楼",{Station:"岳阳楼"})
  26.     addroom("xyl","浔阳楼",{Station:"浔阳楼"})
  27.     addroom("xcz","小池镇",{Station:"小池镇"})
  28.     addroom("jzkd","盈月客栈",{Station:"盈月客栈"})
  29.     addroom("sdnb","树洞内部",{Station:"树洞内部"})
  30.     addroom("sdx","树洞下",{Station:"树洞下"})
  31.     addroom("zpgc","赞普广场",{Station:"赞普广场"})
复制代码
路径
  1.         "yzgc|yzqz|n;w|e;s",
  2.         "yzgc|yzdp|s;e|w;n",
  3.         "yzgc|yztj|e;e;s|n;w;w",
  4.         "yzgc|yzzxl|n;n;e|w;s;s",
  5.         "yzgc|yzcg|s;s;w|e;n;n",
  6.         "yzgc|yzyp|e;e;n|s;w;w",
  7.         "yzgc|yzsy|e;e;n|s;w;w",
  8.         "yzgc|yzkd|n;e|w;s",
  9.         "yztj|yzdtpns|s|n",
  10.         "yzgc|qfkm|n;n;n;n;n;n;n;n;n;w|e;s;s;s;s;s;s;s;s;s",
  11.         "yzgc|xyzhq|w;w;w;w;nw;w;w;w;w;w;n|s;e;e;e;e;e;se;e;e;e;e",
  12.         "xyzhq|xcc|n;n;n;n;n|s;s;s;s;s",
  13.         "xcc|nyc|sw;sw;w;s;sw;sw|ne;ne;n;e;ne;ne",
  14.         "nyc|xydp|sw;s;s;s;s;s;s;w;w;n|s;e;e;n;n;n;n;n;n;bo xiaolu&&ne",
  15.         "xydp|jz|s;e;e;s;s;s;s;s;s;s;s;s;s;s|n;n;n;n;n;n;n;n;n;n;n;w;w;n",
  16.         "xcc|rzc|nw;nw|se;se",
  17.         "qfkm|sms|e;e;ne;eu;enter|out;wd;sw;w;w",
  18.         "qfkm|sjy|e;n;n;n;n;ne;e;ne;n;n;nu;nu;nu;eu|wd;sd;sd;sd;s;s;sw;w;sw;s;s;s;s;w",
  19.         "nyc|lygc|n;n;n;n;n;n;n|s;s;s;s;s;s;s",
  20.         "lygc|cakd|w;w;w;wu;w;w;w;w;w;nw;w;w;w;w;s;s;s;s;w|e;n;n;n;n;e;e;e;e;se;e;e;e;e;e;ed;e;e;e",
  21.         "cakd|cayp|e;s;s;w;w;n;n;w|e;s;s;e;e;n;n;w",
  22.         "cayp|hz|e;n;n;n;w;w;w;w;sw;su;sd;se|nw;nu;nd;ne;e;e;e;e;s;s;s;w",
  23.         "hz|cdkd|su;.sw;.se;.su;sd;s;s;e|w;n;n;nu;nd;.nw;.ne;.nd",
  24.         "cdkd|yyl|w;s;s;se;se;e;e;ne;.ne;.nw;.nw;.ne;ed;e;n|s;w;wu;sw;.se;.se;.sw;.sw;w;w;nw;nw;n;n;e",
  25.         "xyzhq|xcz|s;s;s;s;sd;se|nw;nu;n;n;n;n",
  26.         "xcz|xyl|[rich]s;ask shao gong about 过江&&enter;#sail;se;se;s|[rich]n;nw;nw;ask shao gong about 过江&&enter;#sail;n",
  27.         "xyl|jzkd|sw;sw;nw|se;ne;ne",
  28.         "yyl|jzkd|e;e;e;e;e;e;ed;se;ed;e;ne;ne;ne;ne;ne;nw|se;sw;sw;sw;sw;sw;w;wu;nw;wu;w;w;w;w;w;w",
  29.         "yzgc|sdnb|enter shudong|out",
  30.         "sdnb|sdx|say 天堂有路你不走呀&&d|u",
复制代码

那么,我们既有免费但更慢的走蜀道的西边路线,又有收费的更快捷的坐船过江,平时应该走哪条路线呢?

很可能我们想有钱的时候坐船,没钱(那自然走不了)的时候走蜀道,甚至想要走门派密道(比如丐帮从各地回扬州树洞)的话,该怎么办呢?

加标签。

加标签有两个部分。一个是路径要加入标签,比如我路径里小池镇到浔阳楼的路径里开头的[rich],就是说这条路径需要具有rich标签才能走。

完整的语法应该是[rich,gb,!14year],就是说有钱可以走,丐帮可以走,但是如果是14岁的话不走。

具体的解析是建立了一个正则     let pathre=a=/^(\[(.+)\]){0,1}(.*)$/ 进行解析



代码见


https://github.com/hellclient-sc ... cript/info/paths.js

然后在每次移动前都会触发个MoveInit的事件

https://github.com/hellclient-sc ... t/core/move/move.js

再在需要的地方,比如item模块,status模块里,加上相应代码

比如

https://github.com/hellclient-sc ... script/core/item.js

里我注册了 一个回调 core.item.initwalk 并绑定到了MoveInit事件上,功能为

计算身上的现金,并依据现金是否大于10银来设置是否具有 rich 标签。

具体到实际线路上,如下,

身上有钱和没钱。从扬州客店到江州客店的路径是不同的



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-16 11:38:01 | 显示全部楼层
昨天做的杂项比较多,但至少可以解决部分任务了。

首先,把检查忙的机制给做了。

检查忙很简单。

打开触发,如果有任何一个我们认识的不忙的描述就关了出发,调用回调。

如果不忙的描述我们不认识怎么办?在触发打开的期间定时的发我们认识的判断忙的命令,比如我这里选用的是 tuna

代码见

https://github.com/hellclient-sc ... script/core/busy.js

功能很简单

检查忙,不忙后将调用时的数据传给调用时的回调



北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-16 11:47:35 | 显示全部楼层
然后是检查自身状态的

第一步是利用事件机制来检查状态,同时触发时可以指定检查级别,根据预先定义的级别来决定执行那些检查


由于pkuxkx的有busy的特点,每个检查我都记录了最后的执行时间,并可以预设并可自定义间隔,在间隔之类不重复检查


检查的基础类,通过链式调用进行设置,最后可以通过调用Callback方法返回一个标准的回调


https://github.com/hellclient-sc ... core/check/check.js

修改后的用户检查模块

https://github.com/hellclient-sc ... ript/core/player.js

主要加入了

  1.     let checkScore=(new check("score")).WithLevel(app.CheckLevelBrief).WithCommand("score").WithIntervalParam("checkscoreinterval").WithLastID("LastScore")
  2.     app.RegisterCallback("core.player.score",checkScore.Callback())
复制代码
这样的检查代码

检查的核心代码

https://github.com/hellclient-sc ... cript/core/check.js

可以用过App.Check(level)和App.ForceCheck(id")来根据等级检查或指定ID强行检查


接着是应用

我添加了一个#to的别名,可以#to yzyp 的形式来前往指定目的地。

同时在前进前会获取一下当前信息,为路径打上合适的标签


https://github.com/hellclient-sc ... /script/alias/to.js

这样,至少过江的时候,会根据是否身上有钱,决定绕不绕蜀道



北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2021-9-16 12:02:13 | 显示全部楼层
在接下去是忙检查的应用。

我建立了一套 调用队列的指令(临时的,发现污染了App.Send命令,应该会调整),依次执行命令

队列支持的命令包裹

#to 前往某地
#do 做某事
#afterbusy检查忙
#delay 延迟指定毫秒数。

怎么用呢?

比如在扬州,抄书的流程应该是
  • 到药铺
  • 向平一指打听工作
  • 向北一步
  • 配药
  • 等待忙结束
  • 等待一定延时(我猜这个延时是想针对机器人,但明显我手动的时候更蛋疼)
  • 南一步,把药给平一指

于是我输入
  1. #to yzyp|#do ask ping yizhi about 工作|#do n|#do peiyao|#afterbusy |#delay 5000|#do s|#do give cheng yao to ping yizhi
复制代码
这串命令,就完成了做药工作,结果见下图



再比如抄经任务。步骤也很简单
  • 石门寺ask任务
  • 复制fullme,打开浏览器新页面
  • 前往石经峪
  • write jing
  • 等忙结束
  • 等延时(呵呵)
  • 会到石门寺,ask done
  • 打开页面,识别一下,report 工号。

由于里面涉及到了fullme,我们需要分两部

第一步ask任务
  1. #to sms|#do ask sengren about job
复制代码


复制到浏览器,刷新到不会搞错的形态,会游戏继续输入命令

  1. #to sjy|#do write jing|#afterbusy |#delay 2000|#to sms|#do ask sengren about done
复制代码
然后report 刚刚看到的工号



小钱钱入手。

到这个部分,机器才能勉强称为有辅助能力,大概完成了一半的工作量吧。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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

GMT+8, 2024-3-29 10:45 PM , Processed in 0.013698 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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