北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: stevenson

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

[复制链接]
 楼主| 发表于 2010-6-24 14:39:51 | 显示全部楼层
原帖由 bluse 于 2010-6-24 02:32 PM 发表

乱入解决了,就不需要全地图数据了,你信不信


乱入其实解决起来不难,好程序和笨办法都能解决,其实再我没认真学zmud和map前,我就用我的一个很笨的办法也能解决绝大多少的乱入了。

把这个问题提出来,其实是想交流交流一些解决问题的思路,不仅仅是这个乱入问题。刚学习写复杂的机器人程序,想向各位大神学些思路是主要目的。

即使乱入解决了,如果想保证效率,做其他任务还是需要全地图数据的,你信不信,大狗熊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 14:56:09 | 显示全部楼层
我就没有用任何map功能,问我map相关的我也是一点都不懂!
其实对于护镖来说只要有地名,方向,邻居,描述就足够了,其他都没有必要!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-24 14:56:25 | 显示全部楼层
原帖由 killunix 于 2010-6-24 10:21 AM 发表
http://pkuxkx.net/forum/thread-14370-1-1.html去这里看


看到了,非常感谢!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 14:57:17 | 显示全部楼层
基本上护镖要用上60-70%左右的地图数据,和全地图差距不是特别明显!尤其是是找伙计遍历的时候在那个地图那个地图的房间几乎用遍了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-24 15:00:54 | 显示全部楼层
原帖由 seagate 于 2010-6-24 02:56 PM 发表
我就没有用任何map功能,问我map相关的我也是一点都不懂!
其实对于护镖来说只要有地名,方向,邻居,描述就足够了,其他都没有必要!


呵呵,你应该就不用问了吧。。。。呵呵,从你的文章中学了好多。

原理上我明白,通过地名、方向、描述和邻居就可以准确定位了,在加上护镖路线相对固定,定位只是为了解决乱入,其实就足够了。

我主要还不知道怎么在技术上实现通过邻居来定位,不会写这段程序,呵呵
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 15:40:03 | 显示全部楼层
技术上非常简单:
#forall @locate_directlist {
  set action 邻居定位%i
  look %i
  }
#if %numitems(@locate_directlist)>4||@fight_start_flag=1 {
  #alarm +1 {set action 行走判定}
  } {
  set action 行走判定
  }
就是先取出方向放到变量@locate_directlist ,然后循环遍历look就行,look完以后加一个action触发乱入判定。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-24 23:05:14 | 显示全部楼层
原帖由 seagate 于 2010-6-24 03:40 PM 发表
技术上非常简单:
#forall @locate_directlist {
  set action 邻居定位%i
  look %i
  }
#if %numitems(@locate_directlist)>4||@fight_start_flag=1 {
  #alarm +1 {set action 行走判定}
  } {
  set act ...


赞!明白了!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 23:46:39 | 显示全部楼层
hawks手边有较全的地图数据,所以利用起来当然是方便的,但bluse和seagate说得对,地图数据不是必须的,我也没用
luohh每走一步都look all exits我觉得有点浪费,刷得头晕
实际上只需要在大官道或大驿道处look all exits即可,也就是当条件满足 %match(@roomname,^大??道)=1时才需要看一下全部出口
此外,我用zmud721,有几处地点抓地名有点问题(如南村口),造成两次look不能完全吻合,这也好办,把乱入前后roomname,roomdesc,roomexits相等赋给不同值,取其最大值来判定返回出口.我用这种方法还没有发现走错了的.

[ 本帖最后由 mister 于 2010-6-24 11:50 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 23:57:49 | 显示全部楼层
我look是用multistate trigger来实现的,速度和准确率都很好
state 0 的trigger是乱入提示
state 1的trigger是乱入后的地点出口那行,当这行被触发时,乱入所到的房间的所有信息已经收集完整,并开始look
state 2 的trigger仍然是房间出口的trigger,这是抓look 之后各个房间信息.如果look后的房间信息完全等于乱入前的,则返回的出口确定,state调回到0;否则state调回到3,look 一下个出口.
这一设置的好处是不需要等待,某一个出口房间的信息收集后马上开始look下一个出口,如果等待时间较长,比如一秒look一次,这过程如果发生再次乱入就杯具了.

[ 本帖最后由 mister 于 2010-6-25 12:12 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-25 08:31:12 | 显示全部楼层
我是比较懒惰的处理,每一次都look exits,就不用考虑乱入一套处理机制,非乱入一套处理机制。我乱入定位源码那块也不区分乱入与否,只要出问题都是一种机制处理。逻辑上比较简单,处理上增加一些代价。不过代价也不是特别多。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 09:28 PM , Processed in 0.009762 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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