北大侠客行MUD论坛

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

推广一下tintin++

[复制链接]
发表于 2014-4-4 14:20:04 | 显示全部楼层 |阅读模式
其实是探讨怎么做一个容易用的mapper,然后改造一下tintin自带的mapper。
假定有完善的地图数据的情况下,可以把行走变得简单。北侠的地图很复杂,要自动处理所有的地图很困难。这里简单探讨一下非迷宫地图就好了。
当然了,用其他的客户端做这些也没问题。

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-4 14:24:33 | 显示全部楼层
改造目标
实现几个命令(alias)从而简化机器人的制作。
1。 ablareas {区域名称列表} {停止标识} {命令}
       功能:自动遍历区域内所有房间,停留在有停止标志的房间之后,执行命令。
       应用场景举例:
       韩员外说道:韩家仇人%1(%2)据传在%3、%4、%5三处出现过,快去找到他帮我杀了他!
       触发: ablareas {%3;%4;%5}{%1}{hihi}
2。ablarearoom {区域名称}{距离x}{房间名称}{深度y}{遍历停止标识}{命令}
      功能:自动遍历距离区域x步之内,名称符合的房间。附加y步深度之内房间,停留在有停止标志的房间之后,执行命令。
       应用场景举例:
       韩员外说道:韩家仇人%1(%2)据传在『%3』出现过,快去帮我杀了他!
       finder告诉你:【%1(%2)】目前在【%4】,快去摁死它吧!
       触发: ablarearoom {%3}{x}{%4}{y}{%1}{hihi}      
       说明: 比如npc出现在中原,finder说在石阶,可能就是在少林寺的石阶。所以,任何一个名叫石阶的房间,如果距离中原任何一个房间在x步之内,就要搜索。为了对付npc移动,石阶y步之内的房间也要搜索。
       如果确定是区域内的房间,x=0就可以了。
       npc不会移动?你真乐观。 y=0就可以了。
3。arun {编号}{命令}
      功能:行走到编号房间,执行命令。
      说明:mapper确定走到目标房间之后,才会执行命令。
实现了这几个命令,应该就可以对付差不多的跑路需求了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2014-4-4 14:36:51 | 显示全部楼层
膜拜牛人,等下面的干货
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-4 14:45:13 | 显示全部楼层
画完了大饼, 下面开始讨论正题。

首先讨论一些跑路的基本问题:
1。搜索点对点路径的算法:优化的dijkstra算法。(这是tintin++中mapper使用的算法,就是实现的有点惨不忍睹。)
      优点:速度足够快。
                保证首先搜索消耗(weight)低的路径。
2。搜索一条走过n个指定房间的算法。
      这个没有好的方法。但是利用优化的dijkstra算法,一个一个的搜索过去,搜出来的路径也是可以接受的。对于区域遍历而言,应该没有人工优化的遍历路径高效。但是在正确设置路径消耗的情况下,结果也是可以接受的。优点在于灵活性,随便指定图中n个房间,自动就可以搜索过去。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-6 06:18:17 | 显示全部楼层
跑路不只是搜索路径。

搜索出一条路径之后,不能简单的把命令一股脑的发出去。
跑路的过程中有很多的特殊情况要处理,这就要求mapper每发出一些命令,都要判断实际情况,再决定下一步的行动。
比较常见的情况:
1。 一秒钟20个命令的限制
2。遇到不能连续行走的路径,比如坐船,比如需要招呼一下看门的。

这种情况下,mapper就需要知道某些出口比较特殊,发出命令之后,需要等待确认进入下一个房间,可以继续行走之后,才能发出下一个命令。

tintin++的mapper中,出口是不包含这些特殊的信息的。所以需要一下扩展:
1。记录特殊出口信息,发出特殊出口命令之后,暂停,(#map exitflag e check)
2。根据mud反馈,通知mapper继续 (#map ok)
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2014-4-6 13:39:45 | 显示全部楼层
完全鸭子听雷~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-6 15:19:59 | 显示全部楼层
跑路要跟踪进度

跑路的过程中,需要跟踪自己每一步的进度。这里有两层含义:
      1。mapper认为跑到哪里了。
      2。mud里实际到哪里了。
      例如,从ct输入个n,w。mapper认为你已经到了钱庄了。但是网络卡啊,你才走到北大街。这时候看见目标了,就必须知道目标其实是在北大街,而不是钱庄。
      
      具体的做法就是,每走一步都注意一下房间名。
      例如,从ct出发,mapper就设置一个触发,“下一站北大街”。你看见了北大街, 就告诉mapper,然后立刻设置下一个触发,“下一站扬州钱庄”。
      
      这样做还可以检测是否迷路了。具体就不说了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-6 15:26:05 | 显示全部楼层
为了一次完美的跑路,都需要做那些准备?

1。 告诉mapper现在在哪个房间,方法有:
       A。告诉系统: 比如刚登陆进来,告诉系统你在客店, (#map go 1)
       B。传说中的GPS,这个就不讨论了。你问为啥?因为“风景要慢慢看”就是这么来的。
       当然这个做一次就可以了,只要不迷路, 就不需要再设置了。
2。 设置停止标志和命令,告诉系统你要找什么,找到目标之后做什么。(map_stop_setup {岳不群}{hihi yue buqun})

3。 路尽头命令,路跑完了,没找到目标,做点啥呢?比如扩大搜索范围或者跑回去要个奖励看看是不是可以糊弄过去。(map_eop_setup {idle})
      
4。进入目标房间命令。(map_metr_setup {zhaohuoji})
      例如你要去茶花院找伙计,那么多不同颜色的院子,得一个一个的找过去。这个命令告诉mapper进入每个茶花院都执行着伙计。
6。迷路命令,不具体讲了。
7。看门狗命令,不具体讲了。

做好以上的准备之后,就可以开始跑路了。

注: 蓝色的命令是要具体实现的tintin++命令和alias。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-6 15:45:02 | 显示全部楼层
行走的方法

行走分为3类:
1。快速行走:一次输入尽量多的命令,然后等待系统回应。(#map dfs fast)
2。慢速行走:先快速的走到目标附近,再一步一步走过去。(#map dfs slow)
3。一步一停:推车可以用到这个。(#map dfs step)


遍历的走法
1。首先快速行走,看到目标记录目标房间。

2。针对目标房间n步( 根据npc的移动能力来决定)之内使用慢速行走。
     快速行走要合理设置地图的特殊出口。例如要遍历黄河两岸时,走完了南岸,坐船之前最好停一下,确定没有看到目标之后,再坐船去北岸。实现的方法很简单,把坐船的出口标志为check就可以了。

到这里关于跑路的基本问题就说的差不多了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2014-4-9 12:48:22 | 显示全部楼层
本帖最后由 alrighty 于 2014-4-9 12:53 PM 编辑

言归正传,现在是时候兑现2楼对观众朋友们的承诺的时候了。



用了几天时间把跑路的部分从mapper里扒出来,然后port到了2.01版。



前提要求: 请下载一个2.01版本的tintin,自己编译通过。



然后,下载附件(遵守机器人守则,hs.map只包含了9个房间),解压到src目录(把你自己的文件备份先),覆盖已有文件,重新make clean;make

编译完成之后,就可以开始测试了。



登录一个id,跑到华山脚下,准备测试。



./tt++  test.class

登录, 确认你站在华山脚下。





1. arun 9 {hihi feng}

    跑到room 9 和铁匠打招呼。

2. ablareas {华山}{李铁嘴}{hihi teller}

    遍历华山,找到李铁嘴打个招呼

    注意,由于我设置了华山脚上north的出口weight为100,所以保证了遍历的时候,

     A 最后一个才遍历玉泉院,

     B 进入玉泉院之前会停一下,一边有机会执行#map stop来停止遍历。

3. ablarearoom {华山}{3}{碎石路}{2}{铁匠}{hihi feng}

    距离华山3歩之内,所有叫做碎石路的房间,遍历其周围2步之内所有房间,找到铁匠打招呼



4. ablat {小山村}{碎石路}{hihi}

    附送多一个命令, 遍历小山村所有叫做随时路的房间, 执行hihi。

    注意, 必须手动执行#map ok之后, mapper才会继续去下一个房间。

    这个命令可以用来做hsz,寻宝,找伙计。



贴一张截图:

黄色的房间时路径经过的房间

绿色的是跑路的目标房间

紫色的是当前所在房间

跑路的过程中,经过的每个房间都会记录 区域,名字, 编号。



有了这个框架之后, 配合一份比较好的地图, 做主流任务就很轻松了。



本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-4-28 05:56 AM , Processed in 0.014639 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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