n年没来了,上来看看,发现又改革了,没声望啥也干不了,把以前写的几篇心得发一下挣点声望吧。
当初玩的好象是北京站还是乱世,记不太清了,不过原理搞清楚了对别的站也是一个帮助。
---------------------------------------
全自动task编程指南
几年没玩过xyj,前两天无意中在硬盘里翻出了zmud7.21来,又想看看现在的mud发展成什么样了,于是上网查mud地址,就来到这了,通过这几天,发现这个mud很有新意啊,跟我玩的时候改了不少东西,还是不错的,就把我这几天来做的机器和大家讨论一下。当然,和几年前一样,我很少给出完整的机器,都是把自己的思路写清楚,按这个思路做,是可以做出来的。
1.关键命令和函数
这几个命令是最常用的,一定要记好,同时,要多了解和数据库、地图相关的函数的命令,要知道利用地图和数据库做任务机器是相当方便的。
#QUERY expression [viewdatabase]
在数据库viewdatabase中找出符合expression的记录
例如:#query (&name="木笛子") {task} 就是在数据库task中找出字段名name中符合木笛子的记录。
%mapquery([SQLstring])
在地图中利用SQL语句找出相符合的房间,并把房间号用"|"间隔
例子:
TaskWhereList=%mapquery([Name] LIKE '十字街头')就是把地图中房间名为"十字街头"的房间号存在taskwherelist里,这时在我的地图里taskwherelist内容会变为19,如果是多个房间,就会变为19|20|21
%item(list, n)这就不多说了,就是把字list里的第n个提出来
#dbreset数据库在执行过#query和#find后,要用这个命令复原,可以看成是重启数据库。
2.编程思路
我的想法很简单,就是利用地图功能,把xyj里所有的房间全记下来,这样,所有的房间名也就都有了。而task的任务物品,用数据库一一列出来,用于拾取、归还。
看图片1是地图,图片2是数据库
3.部分代码
开始的触发:
据说(*)在(*)一带出现。
TaskName=%1 //取物品名
TaskWhere=%2 //取房间名
#QUERY (&name=@TaskName) {task} //在数据库里找物品相关信息
TaskWhereString="[Name] LIKE '@taskwhere'" //定义SQL语句
TaskWhereList=%mapquery( @taskwhereString) //找房间名,并存储
gt %item( @TaskWhereList, @TaskPickNum) //走到第一个房间
get &id //捡物品
如果第一个房间没有物品怎么办呢,做个标志,向下走吧。
#if @TaskFindFlag=0 { //如果没有物品
TaskPickNum=%eval( @TaskPickNum+1)
#if @TaskPickNum<%eval( @TaskWhereNum+1) { //房间还没走完
gt %item( @TaskWhereList, @TaskPickNum) //到下个房间
get &id} { //捡物品
TaskFindFlag=0}
好不容易找到了啊:
你捡起*@TaskName*
TaskFindFlag=1 //找到物品
gt &roomid //走到从数据库里取出的归还房间号
give &id to &npcid //归还物品
归还物品后,一定不要忘了#dbreset啊,要不下次物品就找不到了。
好了,这次就到这里吧,下讲我会谈一些全自动quest编程思路,现在这个工作作了一些了,由于地图已经差不多完工了,工作量会比task机器小很多,希望能做得顺利。