lzkd
发表于 2014-11-18 18:16:19
现在的人,实用主义居多,估计很少人能耐下性子来看了
huacuoh 发表于 2014-11-18 06:02 PM http://pkuxkx.net/forum/images/common/back.gif
呵呵,同感~~
我做这个,也是还个自己的心愿,也是求个心安....
也许,哪天就让一个什么人看明白了,从此走上mush的MUD之路呢...是吧.
when
发表于 2014-11-22 10:13:32
不知道现在desc还缺字不,md5生成的id感觉不是很稳定
以前看E文MUD的地图真是酷炫啊,向往yct51
hasea
发表于 2014-11-25 20:28:38
"根据房间名+当地描述,然后用MD5加密以后,作为唯一的标志"在北侠这样跟机器人过不去的MUD好像不可行,北侠好像会变化房间描述的。
mapper.lua感觉在画图表示上花的工作太多了。对自动机器人帮助并不是特别明显。
lzkd
发表于 2014-12-6 19:58:12
回复 91# hasea
这个,只是为了临时生成一个_roomid而采用的变通办法。真正的操作中,自然不可能这么做。如果有了全地图资料,mapper.lua用起来,效果还是不错的。
另外,说到自动机器人,Nick用maper.lua写了个自动画地图的机器人的,有机会交流哈。
lzkd
发表于 2014-12-6 19:58:49
把排版的错误给改了,终于想出办法对付那个bug了。。呃~~~
suxxx
发表于 2014-12-7 00:14:06
zmud也有这个功能,以前我用那个把整个北侠的地图都画出来了,后来发现他的地图函数不太好用,就慢慢放弃了。
moonlily
发表于 2014-12-15 18:07:56
看的有点迷糊,只能算是一知半解。
为了解放全人类的双手和大脑,必须全自动画地图啊。。至于显示地图这个功能,个人觉得是没啥用的。 机器人只要地图数据用来计算路径就行了
以下是一些思路。
关于房间id,这个无所谓,直接指定1,2,3,4直到n就可以
关键是以下的几个问题。
1. 同名同描述的房间怎么判断?也就是说程序怎么判定当前房间是另外一个同名同描述的房间, 还是走到了一个已经存在的房间?
2. 循环路径节点房间怎么判断?也就是说程序怎么判定当前房间是另外一个同名同描述的房间, 还是回到了一个之前已经存在的房间?
上述2个问题是既互相矛盾又相辅相成的。
为什么这么说呢?
1.如果我们不去判断房间描述, 自动建立地图的时候, 只要没走过的出口,都默认为是新的不同的房间,即使名字和描述都一样。每个新房间都赋予一个唯一的id。
那么问题来了,循环路径节点房间也就会变成一个新的房间, 因为是从另外一个方向进入的,程序上是从另外一个房间没走过的出口进入了这个节点房间,于是后面就乱套了。
a-a1-a2-b-c-d-e-f-g-a, 假设a,a1,a2都是相同名字相同描述的房间, 比如某某路, 从a一路到g都没问题,因为都是从当前房间没走过的出口过去的,都建立了新房间, 但是从g走到a就出问题了。 这个a就是一个循环路径的节点,也就是第一个a, 但是程序是从g的一个没走过的出口到达a的,于是将a当作为一个新房间记录下来了。
我现在的做法只能是手动将g到a这个出口指向房间a。
2. 如果我们根据房间名字,描述来建立地图数据, 那么碰到同名同描述的房间,程序该怎么判定呢? 或者如果描述随机改变的话,用加密计算出来的id也就会不一样。
在慎重考虑后, 我还是采取了第一个方案, 不管房间名字和描述,只获取地图结构,房间名字和描述作为2个数据存起来,以便以后定位时候做比对(定位不到当前房间或匹配到多个房间就随机走出口重新定位)。
只要mud的地图结构不变,那么当地图数据建立后,随便怎么走都是可以的
由于上述原因,目前画地图还处于半自动状态,希望有大神来指点一二,以便早日解放双手。
sungtao
发表于 2014-12-16 17:20:27
看的有点迷糊,只能算是一知半解。
为了解放全人类的双手和大脑,必须全自动画地图啊。。至于显示地图这个 ...
moonlily 发表于 2014-12-15 10:07 AM http://pkuxkx.net/forum/images/common/back.gif
说的好,有针对性!
littleknife
发表于 2014-12-16 22:04:01
对小刀(lzkd)这篇文章我个人的理解:
这篇文章它已经超越了单纯的应用地图来进行路线搜索、遍历、定位等等基础功能,他把这个部分跨越了,所以致使看的有些迷糊。
当然,若能弄清楚mapper.lua这个内置的MUSH脚本的机制,完成地图的基础功能当然也能实现。但是,需要准备的前期知识和对MUSH及Lua的理解恐怕也得到达一定的高度。
我所理解的地图的基本功能:
1,定位:你如何确认自身所处位置的问题。也就是,抓取房间信息及关联信息的方法,以及把这些信息和数据库信息对比的方法。
2,搜索:包括数据库中点对点的搜索函数形成路线;以指定信息来搜索数据库房间号的方法等。
3,遍历:指定区域内遍历路线的形成、指定点深度遍历路线的形成等等。
问题1. 同名同描述的房间怎么判断?也就是说程序怎么判定当前房间是另外一个同名同描述的房间, 还是走到了一个已经存在的房间?
首先,这个问题的核心是如何定位。就是你所处的房间在数据库或lua表库里找到的房间不唯一。一般可以采用如下的几种解决方法:
1)采用look出口房间来定位,look某一方向后,以该方向的房间信息来反馈你所处房间的信息是什么。
2)定位函数的多元化处理,比如,描述+关联信息(小地图);描述+出口信息;出口+关联信息;出口+描述。这些条件满足一条即为匹配。就是说,不一定完全匹配所有信息。
3)最终就是确认了是完全相同的房间信息。也可以采用随机行走几步到一个可定位的房间在处理后续动作的方法。
其次,房间的描述不完整,其实也可以采用模糊比较的方式来进行描述对比。
问题2. 循环路径节点房间怎么判断?也就是说程序怎么判定当前房间是另外一个同名同描述的房间, 还是回到了一个之前已经存在的房间?
循环路径在数据库层面上并不影响路径的计算。至于“于是将a当作为一个新房间记录下来了。”这个记录的过程是需要定位的,若定位准确是不能记录重复房间的。
也就是说,录制过程无论是自动还是手动,都不允许进入数据库的房间信息是重复的,起码房间ID是不能重复的。
若是迷宫地图,这里一般采用特殊处理函数来去处理。比如归云庄树林等等,我的处理方法是单独做一个处理函数来做。其前提是你能准确定位处于这个迷宫中。
路径的生成完全是算法的问题,也就是链表(links表)的才形成路径,而信息表(room表)是用来定位的。
moonlily
发表于 2014-12-17 08:44:34
对小刀(lzkd)这篇文章我个人的理解:
这篇文章它已经超越了单纯的应用地图来进行路线搜索、遍历、定位等等 ...
littleknife 发表于 2014-12-16 02:04 PM http://pkuxkx.net/forum/images/common/back.gif
这位小刀同学说的很详细很有启发性, 特别是对于重复房间的判定列出很多可选的方法
原先也考虑过这些方法, 比如当前房间如果不是唯一,那么继续深入判断这个房间的所有出口, 不过嫌麻烦没做这部分, 考虑到建立地图数据也就是一次性的活, 就半自动了.
其实上述2个问题, 核心就一个, 怎么将一个不唯一的房间名, 通过各种判断, 变成唯一, 然后不管是抓地图还是定位, 一切问题都迎刃而解.
循环路径在数据库层面上并不影响路径的计算。
正是因为这点, 所以我目前没完善自动画地图对于循环节点的判断, 只要手动定向好后, 今后的路径计算完全不受影响.
实际运用中定位的问题, 因为我之前玩的mud有个home指令, 直接回扬州中心了, 于是也偷懒略过, 碰到不是唯一的房间, 就home了事.