北大侠客行MUD论坛

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

请教如何在zmud721下用map方法解决护镖乱入问题

[复制链接]
发表于 2010-6-23 17:42:02 | 显示全部楼层 |阅读模式
最近开始练小号推车,半自动护镖,别的都还可以,就是被乱入搞烦了。一乱入就屏幕乱滚,然后就不知道自己在哪儿了,晕。

发狠决定苦学zmud721的map功能,希望能自动解决乱入问题。已经用721画好了部分护镖线路的地图,大部分的乱入可以通过判断乱入后的房间号来定位解决了。但现在的问题是对于一些非唯一的房间的处理

1)一种解决办法是对于非唯一的房间,随机取一个出口,推一步,然后再定位,直到找到一个唯一的房间。

2)另一种就是look周边房间,通过周边房间来定位所在位置。

这两种办法是否可行?请问哪种方式更好些(可扩展性更强些)?初学map,技术上还搞不太定,哪位大侠有现成的模块给参考一下?

评分

参与人数 1精华 +10 +10 收起 理由
seagate + 10 + 10

查看全部评分

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-23 18:10:16 | 显示全部楼层
这两种方法,好象是一回事吧?
个人觉得2好..

借用maper的一句话,---北大街有好几个个,但s方向是中央广场的北大街只有一个

[ 本帖最后由 lzkd 于 2010-6-23 06:12 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-23 19:53:23 | 显示全部楼层
look周边房间可以解决绝大多数一步乱入,多步乱入就悲剧了,需要记录乱入的步数,然后进行遍历,不过如果画好了map,用大米follow着,乱入后确定自己和大米的位置,马上就能回去
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-23 22:26:15 | 显示全部楼层
利用多行触发,根据小地图来定位,这是最简单有效的办法
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-23 23:39:59 | 显示全部楼层
原帖由 killunix 于 2010-6-23 10:26 PM 发表
利用多行触发,根据小地图来定位,这是最简单有效的办法


好主意!那就不用map了?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-23 23:52:30 | 显示全部楼层
原帖由 zgbl 于 2010-6-23 07:53 PM 发表
look周边房间可以解决绝大多数一步乱入,多步乱入就悲剧了,需要记录乱入的步数,然后进行遍历,不过如果画好了map,用大米follow着,乱入后确定自己和大米的位置,马上就能回去

有大米做辅助,乱入是可以解决的,大米抓取每一步的出口,同时对18个方向的中文进行英文解析,由此判定主号究竟乱入了哪一个出口,不过唯一杯具的情形是某个ROOM同时拥有一个方向的UP和DOWN两个出口,比如泰山天街有EU和ED,这个非得过去之后再抓取出口,反向比较。计算较复杂。如果护镖路线没有这种出口,则万事大吉。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-23 23:53:46 | 显示全部楼层
原帖由 stevenson 于 2010-6-23 11:39 PM 发表


好主意!那就不用map了?

多行触发理论上可行,实际上你会被累死的,况且同名地点的小地图也有许多重复的,比如牙山驿道或者襄阳官道。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 08:16:09 | 显示全部楼层
原帖由 bluse 于 2010-6-23 11:53 PM 发表

多行触发理论上可行,实际上你会被累死的,况且同名地点的小地图也有许多重复的,比如牙山驿道或者襄阳官道。


虚无还是不要用map推车了,文若的多行定位是一种办法,我看他的全自动推车就是这样的。
我做胡一刀机器人时画了比较全的map,但推车还是用遍历加固定路线的唯一点的方式。
不管用上面哪种方式,其实都有比较简单的解决重复地名的方法
其实首先要解决的误区是不要怕重复地点,有重复的地点没关系,要想想这些重复的是不是影响你的护镖路线。。。。
具体来说要区分的是地图上的重复地点,在你的推车路线上是否重复(更进一步说其实是推车的剩余路线),不重复就没关系了,这个观察一下路线就很容易做出来。
如果遇到实在连固定路线上都重复的无法定位的地点,就先选一个点试验(这和走迷宫有类似的地方,走到头撞了墙再折回),然后当走错位置(报这个方向过不去)的时候再当乱入处理
因为整个机器人post出来会给purge的,就简单贴几个上面思路的函数,其实这个不难做,不含地图数据,不含自动机制,犯规的吧,呵呵。

下面这个是每轮护镖取唯一点的函数
;; 生成护镖路上的唯一标志点位
  unique_points={}
  unique_points_pos={}
  #FORALL %find(@address,unique_point,dbroute) {
    #dbget %i
    unique_points=%additem(&dbplace, @unique_points)
    unique_points_pos=%additem(&dbstep, @unique_points_pos)
  }

我比较懒,所以这些唯一点也不是手输入数据库的,是用下面的函数写入的,这个和自动画地图类似,你自己推车就写了
#var temp_step_route %concat("'",%concat(@go_num,@address))
#var temp_place_route %concat("'",%concat(@now_place,@address))
#var  temp_db_cursor %find(@temp_step_route,ALL,step_route)
#IF (%null( @temp_db_cursor)) {
#new [email=dbroute=@address]dbroute=@address[/email] [email=dbstep=@go_num]dbstep=@go_num[/email] [email=dbplace=@now_place]dbplace=@now_place[/email] [email=step_route=@temp_step_route]step_route=@temp_step_route[/email] [email=place_route=@temp_place_route]place_route=@temp_place_route[/email]
#dbput [email={dbroute=@address|dbstep=@go_num|dbplace=@now_place|step_route=@temp_step_route|place_route=@temp_place_route]{dbroute=@address|dbstep=@go_num|dbplace=@now_place|step_route=@temp_step_route|place_route=@temp_place_route[/email]}
}

这是推车途中取下一个检查点的函数,因为我们只需要剩余路线上的唯一点
now_place=%1
//过了检查点时取下一个检查点,渡船的话暂停取一次
#if ((@go_num>@last_go_num) AND (@now_place!=渡船) ) {
temp_next_unique=%ismember(@last_place,@unique_points)
#if (@temp_next_unique >0) {
//唯一点是顺序排序的,取下一个。
#if (@temp_next_unique < %numitems(@unique_points)) {
   #add temp_next_unique 1
}
last_place=%item(@unique_points,@temp_next_unique)
last_go_num=%item(@unique_points_pos,@temp_next_unique)
//从唯一点列表中删掉当前点之前的唯一点
#var temp_i (@temp_next_unique-1)
#loop 1,@temp_i {
  unique_points=%delnitem(@unique_points,1)
  unique_points_pos=%delnitem(@unique_points_pos,1)
}
}
}
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 10:21:26 | 显示全部楼层
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 11:03:19 | 显示全部楼层
我也没有用地图,而用指定路线让镖车走
set brief 0,乱入时用look解决,把地名,房间描述和出口全面比较,二次乱入也不怕,用look的方式设定一个返回列表
现在稍有遗憾的是,大驿道和大官道有连续三处房间名出口和描述全部相同,有极小的概率乱入返回时走错房间
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 09:44 PM , Processed in 0.010433 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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