inspector 发表于 2011-3-10 20:04:45

[Mush]锡蓝路径A版

一、机器人设想

  最近空余时间都没怎么练功,在做路径玩,我设想中的样子是这样的:
1、输入简化且可修改,比如要去北京,不需要你输入起点,也就是说不管在江南河北的哪座城市,输入一个比如goto 北京或者go bj就可以去到北京,而且这个goto指令以及目标城市的简写缩写形式可以根据各人不同的习惯爱好很方便的修改,当然处理坐船问题是最基本的;
2、分区合理,分区太多数据整理工作太繁重,分区太少比如单一中心以扬州为例,如果想从北京到晋阳,那得先从北京到扬州,再从扬州到晋阳,平白无故加了两次坐船,显然不效率;
3、能够处理拦路npc的问题,有的门派有拦路的npc,用普通的alias形式大半会撞墙,需要有自动杀门卫的设置;
4、需要有数据的录入和维护处理函数,否则地图一升级,又全抓瞎了。

二、地图分区设定

  于是就照着这个设想开工了,给分了七个区。
  1是灵州中心,2是北京中心,3是洛阳中心,4是扬州中心,5是赞普中心,6是江州中心,7是苏州中心,明教和绿柳并入4区。
  分区完了就做数据录入函数,原本只是想做个能分辨当前城市的数据库,做着做着发现还不如做个全图房间的数据库,这样不但可以实现城对城,还能实现房间对房间的一次输入到位,岂不是更high,于是函数是越做越多…后来又加了遍历路径录取,同名房间处理,在线帮助查询npc位置函数等等,现在代码是900行左右,这方面的工作应该基本完成了,剩下的就是数据库的录入。
  这方面确实有点繁杂单调,现在的数据库里除了各城市中心的房间外,只录取了扬州、洛阳、少林的全房间,可以实现房间对房间的行走,比如在扬州的任意房间输入goto ly到洛阳,或者输入goto 唐三彩到洛阳的名为唐三彩的房间,或者输入goto 萧峰(xiao feng、xf神马的也可以,看你喜欢)去到萧峰所在的房间。

  但是考虑到论坛不让交流过多房间数据的要求,我把数据库阉割了一下,去掉了非城市中心房间的数据,但是录取函数在代码里是没删的,因为我觉得交流代码不算违规吧,有兴趣的可以自己录入。
  录房间其实也挺快的,录整个扬州城的话半小时足矣,而且对于新手来说还是个很好的认路过程,我以前除了扬州基本哪都没去过,录完城市路径现在差不多知道哪是哪了…

三、城市路径录制方法

  顺便说下录取路径的方法。
  城市间的路径就不说了,我保留在数据里了,如果要调整分区才需要重新录,讲下市内房间的录取:先按F12打开录取模式,在城市中心比如扬州中央广场按F10,(F9是无数据库模式,也就是录取的路径只会在屏幕上显示但是不写入数据库,用于调整分区之间路径,可以不理;F10是房间录取模式,录取的路径写入房间数据库;F11是遍历录取模式,录取遍历路径写入遍历数据库,房间路径和遍历路径很显然是不一样的,房间路径要求快,一般是#nswnnnss之类的,遍历路径要求走一步看一步目标有没有出现,所以当然不能一次把路径跑完了。ctrl+F12就是快速行走和慢速行走的开关,录房间路径的时候一般调成快速,只有有挡路npc的时候开需要开慢速,录遍历肯定要全开慢速的。)
  在中央广场按了F10打开房间录取模式,然后输入"wai"(where am i的缩写=。=),确认看屏幕上显示的是不是区域4,地区扬州,是的话不用管,然后用小键盘路径了,按一下小键盘5,然后用小键盘行走或者在命令行输入方向走到书院,再按一下小键盘5,书院的数据就录入进access了。
  打开数据库的path3_room表,level栏右键升序排列,书院的数据就在第一行,它的level栏和item栏是空着的。
  level栏里面数字的意思是:
1表示不重名的普通房间,比如扬州钱庄,再没有第二个地方叫这个名字的,根据房间名就可以直接判定位置的,level是1;
2表示有重名房间,需要先进行一下判定才能知道自己到底是在哪个位置的,比如扬州北大街有两条,西大街有三条,站在其中一个地方光靠房间名是不能确认位置的,level是2。
  录“书院”路径的话…不知道有没有别的地方还有书院这个名字的,输入1就可以了,以后录到有重名的再改成2,怕麻烦就写2。
  不过每次如果你在书院goto别的地方,会事先look一下,要耗费个秒把钟。item里面装的房间内的东西或者该房间的别称,这里不填也是可以的,但是强烈建议填入当前房间npc的名字和id,否则这个路径的功能就夭折了一半。在item栏填入:朱熹.zhu xi. 就算ok了。(这里的内容有什么作用,其一是可以作为npc位置查询的帮助机器人,告诉别人哪个npc在哪个房间,去那个房间的路径是什么,其二就是自己方便,随便在哪输入goto 朱熹就可以到朱熹旁边。这里要注意下,每个词都是以半角的点.结尾)然后输入backto回到中央广场,再按5开始录取第二个房间。
  如果录取的中途走错了,按ctrl+小键盘5可以删掉最后一步的录入,按几次删几下。录取途中可以输入look 等随便什么指令,这些非方向命令是不会被录入的。这样熟练之后录整个扬州的房间也花不了多少时间。我留了个茶馆的房间没删和两个北大街的房间没删,可以参考下,在茶馆输入goto 北大街,有重名,然后确认下到底是去哪一个北大街,比如是第一个,就输入北大街-1,到了北大街输入goto mrf,可以去到慕容复所在地。

四、遍历路径录制方法

  遍历路径的录取就简单多了,在起点按F11,然后用zone xxx指令给路径命个名,这个名字可以随便起,不一定要是所在地区的名字。
  比如你要做慕容遍历,扬州丐帮密道,那你可以zone mr-丐帮密道 这样子,然后按5录取,然后开走,走完再按F5,这条遍历就录入数据库path3_around里面了,这个不需要打开调整,直接可以用。
  用的时候先用goto走到遍历的起点,然后输入 sou 目标id in mr-丐帮密道,它就会按照你录取的路径一步步走着找这个目标,当然这条指令可以修改alias来修改,你要改成 zhao xx mr-丐帮密道也行。

五、其他遍历相关

  顺便提下还有个"小遍历"函数,就是你估计目标离你不会超过两个房间的距离,那输入 around for 目标id 就可以了,它会遍历自己两步范围的所有房间来查找目标,注意目标id首字母不要大写。这个函数主要用在慕容如果你到达目的地够快,叛徒应该还走不了一两步,用around for显然比用sou 整个可能区效率要高;还有一个用处应该可以用于乱入,乱入按说是不应该超过两个房间的,由于我没有id能做比慕容高级的任务,还不知道所谓的乱入到底是什么情况。
  遍历功能我留了一条扬州城的没删,有且只有一条,应该不算多违规吧… 你可以在中央广场输入 sou 阿庆嫂 in 扬州 或者 sou mrf in 扬州 试试效果,再试试遍历武将,因为武将不止一个,搜到第一个如果发现不是,输入 sou 武将 它就接着搜下一个。
  当然,这种固定位置的npc是不需要用遍历来找的,直接输入goto 阿庆嫂 就行了,只是举个例子。

  想到那说到哪,说了一篇没什么条理,见谅。
  总之呢,想做全自动机器人的话做房间数据库可以说是少不了的,数据库是不让交流的,所以要想舒适还得自己费点力气。
  第一要录完任务相关的房间,第二要分别录各任务的遍历数据,慕容是慕容的,其他是其他的。
  胡一刀萧峰推车什么的我没做过,不知道可不可以全自动,但是慕容是可以的,只要你数据完整,整个任务过程可以是:ask murong about job,goto xxx,sou xxx in xxx,killall pantu,get all from corpse,goto mrf,ask murong about done。再加几条自动战斗的trigger和衔接的trigger就可以了。
  送信任务就更简单了,接任务,goto 目标,给信,goto 岳不群,当然这过程中等抢信的人就看自己喜好了,是在比武场傻等还是穿在其他任务里面。

六、其他事项

  我做这个机器人的另一个想法是做一个新手帮助机器,有的人用zmud或者别的软件,用不了这个插件,不知道灵鹫宫怎么走,不知道天街到底是个什么鬼地方,或者不知道阿拉木汗在哪里,可以在新手帮助频道求组,输入 helpme where xxx ,如果这条记录存在,那么在线的用这个mush机器人的玩家会tell 你 xxx在哪里,从CT怎么走,到那了不知道怎么回,就helpme whereback xxx。如果你用这个机器人但是不想提供询问服务,修改变量path_help_mode的值为off即可。由于房间数据禁止交流,所以我现在提供的版本只能询问地区怎么去怎么回,房间名和npc的查询无法提供。

  在这发个小广告,我希望能有时间充裕一点的同志跟我合作,帮忙录一下房间和npc,做完之后对新手的上路应该说是很有帮助的,找任务物品找任务地点查询门派来回路径。有意的论坛信息我,不会编程的没关系,也不会白出力,我会尽力帮你贴身定做机器人。

七、使用帮助

  先就这样了,别的想起来再说。
  4个文件,odbc.dll放mush根目录,MCL和lua放/worlds下,Pkuxkx-Scyllane.mdb随便放哪,但是要设置一下odbc:开始-控制面板-管理工具-数据源-添加-Microsoft Access Driver(*.mdb)-数据源名填Pkuxkx-Scyllane,说明不用填,选择(S)..选取你下载的Pkuxkx-Scyllane.mdb位置,确认,ok。还是不会的可以论坛搜一下,我记得有位前辈有个带图的帖子讲解,我就是那学的。
  这个机器人是用Access作数据库,在进入游戏的时候读一次,把数据写入lua table,然后对table进行操作,这样做的好处是第一个便于维护,access的界面是很友善的,想修改点什么很方便,第二个是运行速度快,Access查询数据的速度实在不敢恭维…而table,一个字,快极了,谁用谁知道,我现在没阉割的数据库六七百条数据,table能让人根本感觉不出查询是要耗费时间的。
  这里顺便提下,录取路径是直接写入access,但是路径行走和npc之类的查找是通过table,所以录好的路径需要load一次才能生效,还有如果修改了lua文件重载会导致table丢失,不知道算不算bug,这时候也需要load一下,命令就是"load"。
  对了,小键盘改过键,打开lua看第一个函数里面的内容就知道了。
       加一条,使用这个路径机器最好set brief 2。
       更新:应basara师兄的建议,数据库内加入出口信息和房间描述以便做task定位,所以增加了相关函数,建议重新下载一下更新后的MCL和lua文件,用新文件的话录取房间的同时出口信息和房间描述会自动写入access,对于已经录好的房间,当然重新录也是可以的,但是工作量重复太多,建议手动添加:在目标房间输入info,把显示的出口和描述文字复制进access里path3_room对应的exits和describe列。这两列在原access文件里没有,自己手动添加一下,给个图在下面。记得在数据库单击path3_room,然后在上头的“设计”里面把describe的最大字节数改成最大255,否则装不下。还有屏幕Note反馈的描述可能因为换行而出现乱码,这种情况不要复制Note出来的,而要复制变量列表path_describe里面的内容。总之如果有人开始用这个机器人录制房间,最好重新下载一下下面的文件,要不等房间录完了再想加入出口和描述,就太麻烦了。

-------友情排版 小刀(lzkd)-------------

  考虑到本帖内容涉及到高级机器人制作,在MUD管理层做出新的决定之前,不允许在本帖要完整数据库(这个大家都可以理解),不允许在本帖问怎么使用这个机器人(仔细读文章,里面的内容已经足够详细了)。
  为了大家有更好的机器人资源可以使用,谢谢配合!
                                  by 小刀(lzkd)

[ 本帖最后由 inspector 于 2011-3-12 02:27 AM 编辑 ]

inspector 发表于 2011-3-10 20:08:25

我去,发完才发现排版很成问题啊,费眼神,凑合着看吧

yhkh 发表于 2011-3-10 20:28:14

这个很强大

求完整版

ivanfox 发表于 2011-3-10 20:38:41

路径可以用小刀的

inspector 发表于 2011-3-10 20:48:50

原帖由 ivanfox 于 2011-3-10 08:38 PM 发表 http://www.pkuxkx.com/forum/images/common/back.gif
路径可以用小刀的
我知道小刀有路径插件,纯粹路径机器可以不需要数据库,但是涉及别的功能非得用数据库不可了,这个看个人喜好吧。

slapd 发表于 2011-3-10 21:02:19

哇靠这么强大的东西 支持 支持!!!!

angelei 发表于 2011-3-10 23:21:15

程序盲飘过无语风中凌乱

basara 发表于 2011-3-10 23:32:30

太酷了, 楼主是个有创意且细腻的人, 佩服.

basara 发表于 2011-3-11 00:00:59

又仔细的看了一遍, 佩服的五体投地ttk_03

afact 发表于 2011-3-11 00:16:07

这个太强大了...

yct19 yct19 yct19
页: [1] 2 3 4 5 6
查看完整版本: [Mush]锡蓝路径A版