|
先看攻略 http://pkuxkx.net/forum/thread-22485-1-1.html
ask sha mi about job
沙弥说道:「你刚入本门,一切还不熟悉,应该尽快习惯天龙寺的生活。」
这个任务第二好做,重点就是每隔一会儿看看时间~
语句:^??北大侠客行现在大约是
命令:#wa 30000;l;time
值得注意的是,正午时分别忘了在雨花院打坐(dazuo),这个必须你的内力增加了!!才能进行下一项。我当时就 dazuo 10 敷衍一下,结果总是说你打坐了吗,而无法完成任务。
1W经验之后
ask sha mi about job
沙弥说道:「近年来道路变化极大,很多人都难辨方向,你去天龙寺山脚看看有没有人迷路了,有的话去帮帮他们把。」
这个任务最好做。唯一要注意的是,路人的脑子有点秀逗,经常都不知道自己要去哪里,胡乱指挥。但不用管他,自顾自把所有地点都走一遍,反正天龙地图也小。如果他指挥错了,再走一遍,也就是了。
语句:沙弥说道:「我不是让你去帮助迷路的人了吗?」
命令:s;sd;ed;do 3 ne;do 3 sw;#wa 2000;nw;n;s;se;#wa 2000;nw;do 3 nu;do 3 sd;se;#wa 2000;wu;nu;n;#wa 2000;n;w;e;n;w;e;enter;out;#wa 2000;n;s;e;u;d;w;s;e;w;s;#wa 2000;ask sha mi about job
通过这个任务,我学会抓取NPC的ID。以前只会做文字触发,不会用变量。
语句:路人*~((%w)%s*
命令:name=%lower(%1);ask @name about 迷路;#wa 2000;ask @name about 带路
3W经验之后
ask sha mi about job
沙弥说道:「孙飞顺家里很有钱,你到大理城贵宾房向他化缘(huayuan)重塑佛祖金身吧。」
沙弥说道:「武将前些日子在我寺捐了很多香火钱,你到昆明北城门把这本佛经送(song)给他吧。」
这个任务最难,两个任务随机给,NPC还不在位置上呆着,来回乱跑。这时候用第二个任务(带路)的方法,就不行了,我想到遍历。教程看了几个,最后 http://www.pkuxkx.net/forum/viewthread.php?tid=7512&extra=&page=1 给了我足够的知识,我也放弃Zmud4.62,改用Zmud7.21。
我的思路是,先趟地图,找到NPC后停下,化缘或者送书,完成后回家继续接任务。
用以往的方法趟地图是停不下来的,这才想到遍历。必须说,我很笨,没用明白Zmud自带的路径(Paths),刚好这篇教程教了不用路径(Paths)遍历的方法,造福了我。
1、遍历地图
举例:从大理中心广场向东走到太和居上楼太和居二楼下楼太和居向西走中心广场,走一圈共4步, e;u;d;w ,存到变量dali中,走第几步存到变量n中。
#var dali {e|u|d|w}
#var n 1
再做个别名bianli来遍历地图
#alias bianli {内容在下边}
#if @n<=%numitems( @dali) {
%item( @dali, @n)
#wa
#add n 1
bianli
} {
#say 遍历结束
#var n 1
}
#if 条件 {条件成立时执行} {条件不成立时执行}
@dali 的值是 e|u|d|w
%numitems(@dali) 的值是 4
%item(@dali, @n) 如果n是1,值为e;如果n是2,值为u。。。
#wa 表示等待出现提示符>
#add n 1 表示把n+1的值存到n
bianli 重复执行bianli
#say 遍历结束 给自己一个回馈,没用
#var n 1 重置变量n的值为1
以上,作用跟直接执行 e;u;d;w 一样,但意义不同了:)
2、遇到NPC后停止
举例:
太和居二楼
太和居老板 宋老板(Song laoban)
二位歌女(Ge nu)
希望看见宋老板后停止。
语句:宋老板
命令:#var onoff 1;#say 找到NPC
#var onoff 0 设置变量叫开关onoff,值为0表示开启,值不为0表示关闭
改造别名bianli的内容为
#if @onoff=0 {
#if @n<=%numitems( @dali) {
%item( @dali, @n)
#wa
#add n 1
bianli
} {
#say 遍历结束
#var n 1
}
} {#say 找到NPC,暂停遍历}
以上,做到了找到NPC后停止遍历。
值得注意的是,现在的位置是太和居二楼,n的值是3,我们化缘或者送书之后,回到这里执行bianli,就可以回到中心广场。
3、分割地图
大理不大,也要走近200步,如果走了几十步就完成了任务,实在没有必要把剩下的地图遍历完,思路Zmud机器人制作-----基础知识,技巧以及实例讲解
作者:糖果 讲的很清楚,这里就说我的具体做法。
把大理分4块儿,就按东南西北分,十分不科学,就是举例而已。
#var dali1 {w|e}
#var dali2 {e|u|d|w}
#var dali3 {s|e|n|s|s|n|w|w|n|enter|w|n|s|e|out|s|s|w|e|n|e|s|eu|se|se|nw|n|nw|n|enter|out|s|se|s|nw|wd|s|w|w|n|enter|w|u|w|enter|out|e|e|enter|out|e|enter|out|w|w|d|e|n|s|out|s|e|e|n|n|n}
#var dali4 {n|w|w|e|e|e|n|s|s|n|e|w|w|n|w|enter|sw|w|e|n|s|s|n|ne|n|w|n|s|e|n|nw|e|nw|se|n|n|s|ne|sw|e|w|se|nw|s|w|se|s|e|e|enter|nw|ne|n|w|ne|se|w|s|se|sw|out|w|w|s|out|e|e|n|s|s|w|e|s|n|e|enter|out|n|w|n|n|n|n|ne|ne|ne|sw|sw|sw|s|s|s|s|s|s}
#var sub_area {} 设置变量子区域sub_area来存放dali1或者dali2等变量名。
思路说明:从天龙寺接任务,然后走到大理中心广场,按照西东南北的方向一次遍历dali1到dali4,然后从中心广场回天龙寺再接任务。
dali1到dali4都是从中心广场去该方向遍历一圈然后回到中心广场。
#var dali 4 设置变量dali,表明把大理分成4块。
改造别名bianli的内容为
#if @onoff=0 {#if @n<=%numitems( @{@sub_area}) {
%item( @{@sub_area}, @n)
#wa
#add n 1
bianli
} {#say 遍历下一子区域;内容在下边}} {#say 找到NPC,暂停遍历}
@sub_area 如果sub_area存放的是dali1,值为dali1;如果放的是dali2,值为dali2
@{@sub_area} 如果sub_area存放的是dali1,值为 w|e ;如果放的是dali2,值为 e|u|d|w
%numitems( @{@sub_area}) 如果sub_area存放的是dali1,值为2(变量dali1中方向的个数,w|e 共2个);如果放的是dali2,值为4(变量dali2中方向的个数,e|u|d|w 共4个)
以下是{#say 遍历下一子区域;内容在下边}的内容
#var area_en {} 设置变量区域area_en来存放dali,chengdu,kunming等的拼音
#var area_num {} 设置变量区域号area_num存放dali1,dali2等的数字1,2,3,4
#add area_num 1
#if @area_num<=@{@area_en} {
#var n 1
#var sub_area %concat( @area_en, @area_num)
#wa 1000
bianli
} {#say 遍历结束}
#add area_num 1 区域号+1
@area_en 值为或dali或chengdu等拼音
@{@area_en} 如果area_en存放的是dali,值为4(我把大理分成4块儿,没忘吧);如果area_en存放的是chengdu,值是几取决于预设值,本例没有成都,所以我也不知道是几
%concat( @area_en, @area_num) 连接两个变量,如果@area_en是dali,@area_num是3,它的值就是dali3
4、遇到NPC后,放弃未遍历的子区域
举例:
太和居二楼
太和居老板 宋老板(Song laoban)
二位歌女(Ge nu)
希望看见宋老板后停止。
语句:宋老板
命令:#var findnpc 1;#var onoff 1;#say 找到NPC
#var findnpc 0 设置变量findnpc,值为0表示没找到NPC,值不为0表示找到NPC
改造
{#say 遍历下一子区域;内容在下边}内容的部分
#if @findnpc=0 {
#add area_num 1
#if @area_num<=@{@area_en} {
#var n 1
#var sub_area %concat( @area_en, @area_num)
#wa 1000
bianli
} {#say 遍历结束}
} {#say NPC已找到,遍历结束}
以上,对付固定位置的NPC足够了,但对走动的NPC就不足够。
思路:跟着NPC走,任务完成后原路返回到最初遇到NPC的位置,继续bianli。这样就跳过余下的子区域直接回去继续接任务。
4、跟随行走,然后回到原点
糖果的教程讲了 12.1 路径的制作 以下摘抄
#alias g {%1;#var area %additem(%1,@area);#say @area}
//定义一个alias,在走路的同时将方向添加到@area中,并且显示出@area的内容
有了这个alias,你只需要用g s,g e,g "enter boat",g "aliasname"这些命令在游戏里走路就可以了.在你走路的同时,s,e,enter boat,aliasname都自动添加到变量@area中了,并且同步显示出变量@area的内容.
以上。
现在我要做个别名叫g2,走路的同时记录返回的路。(以下带2的都表示反)
先做几个变量
#var dir_list_en {e|s|w|n|se|ne|sw|nw|u|d|enter|out} 英文方向列表
#var dir_list_en2 {w|n|e|s|nw|sw|ne|se|d|u|out|enter} 英文反方向列表
#var direction2 {} 存放反方向
#var gomap {} 临时存放返回的路径
#var g2 0 存放一共走了几步。设置了个跟别名同名的变量,不是个好习惯
#alias g2 {内容在下边}
%1
#var direction2 %item( @dir_list_en2, %ismember( %1, @dir_list_en))
#var gomap %additem( @direction2, @gomap)
#add g2 1
#say @gomap
%1 第一个变量的通配符,这里就是行走的方向。如果输入g ne,%1就是 ne
%ismember( %1, @dir_list_en) 表示%1在@dir_list_en中的位置,如果%1是ne,%ismember的值就是6
%additem( @direction2, @gomap) 把@direction2的值加入到@gomap的值后边
#add g2 1 又跟着走了一步
如果一共走了4步:g2 n;g2 n;g2 w;g2 w,那么变量gomap的值就是 s|s|e|e ,只要反着走,就回原点了。
设置别名go2,来反着走gomap。
#alias go2 {内容在下边}
#if @g2>0 {
%item( @gomap, @g2)
#wa
#add g2 -1
go2 {@gomap}
} {
#var gomap {}
#say 回到原地
}
以上,本任务需要的功能就都有了,之后就是做触发。都说触发时机器人的灵魂,我这个机器人的灵魂还不完整,还在调整中。
5、残缺的灵魂
语句:沙弥说道:「&npc_cn{家里很有钱|前些日子在我寺捐了很多香火钱},你到(????)城&address_cn{向他化缘|把这本佛经送}~(&act~)*」
命令:空。多写这个触发就是为了准确得到中文区域地址。
语句:沙弥说道:「&npc_cn{家里很有钱|前些日子在我寺捐了很多香火钱},你到(????)&address_cn{向他化缘|把这本佛经送}~(&act~)*」
命令:
#cap say 给自己提个醒,去哪,找谁
初始化一些变量,比如n什么的
set brief 1 减少走路的风景描述,0为默认值
判断要去哪
#t- 某类别 说明,关闭一些触发,以免影响走路,比如要去昆明城门,结果路过大理城门就停了,岂不冤枉。
go {@portal} 我是这么去的,你肯定有更好的方法
#t+ 某类别 到地方了,要用这些触发了
#wa 5000 晚上网速慢,多等会
bianli 用到上边做的别名了
语句:你小心翼翼往前挪动,遇到艰险难行处,只好放慢脚步。
命令:#add n -1 说明成都蜀道有busy
到地方后用到的触发:
语句:@npc_cn~(&npc_en~)
命令:
#if @npc_cn=%1 { 判断是不是要找的NPC
#cap 5 say 给自己提醒,机器人失灵还能手动
#var onoff 1
#var findnpc 1
@act %lower( @npc_en) 把NPC的名字变成小写的
}
语句:@npc_cn往(*)离开。
命令:
#var direction %item( @dir_list_en, %ismember( %1, @dir_list_cn)) 用中文方向找到英文方向
#say "#wa 2000" 我经常跟自己说话,以此判断机器人在哪失灵的
#wa 2000
g2 @direction
@act %lower( @npc_en)
语句:说道:「这年头,骗子不少啊。」
命令:look 本来没这句的,但NPC有时候说我是骗子之后居然不往什么方向离开,只好多加个触发
以上,就是我做门派任务的过程~其中一些变量别名没有一一列举,但本文的意图是记录机器人制作过程中遇到的各种问题,以及如何思考如何解决的。全部知识点来自于糖果的教程。只在灵魂(触发)方面有一些想象和发挥,偏偏这里要阐述清楚十分困难,而每个乐于制作机器人的同学想必都更愿意赋予机器人自己的灵魂,所以不赘述。慢慢写了一天,别名的改进部分都在Zmud7.21实验过,但我用的都是bianli2 bianli3这样的名字,如果文章中出现这样的错误属于笔误。
北大侠客行MUD,中国最好的MUD |
|