北大侠客行MUD论坛

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

新手学习mush数日后的一些陋见~ 请前辈指正~

[复制链接]
发表于 2013-2-4 18:28:13 | 显示全部楼层 |阅读模式
最近在学mush,因为没有编程基础,学的很吃力,刚看了下论坛里的mush钓鱼机器人,有点感想,
随便说点自己对做机器的一点理解,请前辈们多批评~

  以前一直用的是zmud7.21,抛开中文支持不好这方面,其实zmud7.21对于做不是太复杂的机器人来说
是足够了,有位前辈在论坛里说过机器最重要的是走路,这点我觉得很有道理,个人认为:
mud机器的功能可以粗略分解如下:1,走路功能,2,动作功能,3,将其合理有序衔接的触发、别名、
变量等。不管是zmud还是mush,应该都是围绕这个做工作的。

  那么为什么说mush比zmud更先进呢,学习了几天后我觉得应该还是因为脚本语言毕竟是一种严谨规范
的正式程序语言,在脚本的支持下mud机器人除了做的功能强大之外,更符合现代编程理念,可扩展性、
移植性、通用性更好,而相比之下虽然zmud机器也可以实现非常强大的功能,但也许这些功能的实现会
比较艰难,有些在mush中比较简单的功能实现,zmud需要机器作者挖空心思的去琢磨如何实现,而过程
的复杂也许就决定了其容错率和可读可修改性的不足。

  回头来说钓鱼机器,因为刚开始学mush,还不是看得很懂,大致看了下,觉得其流程是在客店输入一个
alias调用脚本函数开始,然后走路去取钱->买干粮->去钓鱼->无鱼钩鱼饵则回头购买->鱼饵用完则卖鱼
并存钱->符合结束条件则触发机器结束,看完之后有点困惑:
1,机器的容错性似乎没有很好的体现,如果走路或执行动作出了问题如何处理,2,脚本中的内容貌似是
线性执行,是否可以改为动态匹配呢,比如做一个任务前将下一步工作分为数个结构:1,定义下一步目标、
行走路径及执行动作,2,行走失败或动作过快导致动作未发出后执行定位,根据任务目标及当前位置确定
新的路径并执行行走动作,3,当前目标完成后清除目标,动作,路径预存值并根据下一步目标更新。如果
实现这个结构的话,脚本的架构思路可能会更清晰,每次判断动作不成功后执行的操作都是固定的,确定
失败->定位->寻路->再次执行,动作成功则是执行动作->更新变量->下一步。
以上架构的实现难点应该是准确定位及计算路径的方法,其他的应该不难。
因为对mush不大懂,以上都只是猜想,还请前辈们指点。

  另外说下以前用zmud7.21做机器时的思路,当时应该能实现上述的大部分功能了,曾经尝试做了个
使用map的机器,如果做地图时用比较清晰易懂的代码标记过房间、npc的话,地图完成后点对点的行走
就比较简单,busy和挡路的处理可以使用相对应的触发解决,如果需要遍历的话,可以再加上使用list
变量的预设路径,因为path的缺陷太多,而用地图数据库自动生成遍历路径有点麻烦(广度深度遍历对
我来说是天书),那么地图用于定位和点对点行走,遍历使用list变量预设路径,这样走路这个问题就
解决了,至于迷路后的定位,应该有很多方法可以解决,比如房间唯一,直接就定位了,如果房间名重复,
抓取出口look,look后判断该出口通向的房间是否唯一,如果都不是唯一,判断重复值最小的那个,进入
该房间,再次look,机器执行这段操作还是很快的,如果加入多套处理模式就更可靠了,当然,有极端情况
的话不妨放弃重来,毕竟机器不能和人比,xkx里的乱入只是听说,因为我不是玩的北侠,所以不大清楚,
我想应该可以写出一个固定模式处理。以上走路的模式确定后,每次只需简单调用即可,复杂的工作都已经
前期完成,行走过程中需要得到的信息都由相应的触发提供给变量。
  机器判断点对点行走结束后,定位当前房间是否为需要的房间,否则重新定位寻路,确认行走无误则执行
nextaction,只有动作正确执行后才重新定义下一个nextaction,这里要说明下,当时使用了2个动作定义,
一个是当前的机器人选择的任务,另一个才是nextaction,因为机器包含内容挺多,手动时用button切换,
自动时就要靠tasknow来确定,随便什么时候什么原因出现中断或者直接掉线,机器先判断tasknow,然后再
判断nextaction,一般情况下都能自行接续,这样就一定程度上提高了容错性。
  概括起来说,机器需要的信息都由固定的class组获得并赋值变量,当前执行任务的class组只需提取即可,
机器执行的每一个关键动作都是从预定义值中获得,每完成一个操作都只需要去改一下定义值,架构做好后
添加其他功能组还是很方便的,这也就是为什么机器越做越大的原因,呵呵,懒得新建了,直接添加~
  再说下zmud map的缺点,最麻烦的就是每次只能一个号使用,而且暂时没找到解决方法...
至于中文乱码问题,其实用正则表达式匹配就可以了,屏幕上是乱码,但匹配的时候还是看的代码,只要观察
下乱码出现的不同场合,可以做到通配,而中文变量存储再提取乱码,可以预设list变量后用%ismember解决,
这样大部分情况机器都能应付~
  
  以上只是个人的一些陋见,错漏之处还望前辈们不吝批评指正,个人觉得用mush来实现这种思路应该更合适,
也更容易吧,如果只是用触发,别名实现序贯动作,似乎就失去了使用mush的意义,举个不恰当的比喻吧,
就像...用烧菜的铲子来吃饭一样......

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2013-2-4 18:58:16 | 显示全部楼层
呃……楼主以后还是不要强调自己是文科生了吧,让我们理科生情何以堪呐
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2013-2-4 19:38:34 | 显示全部楼层
我做zmud机器都是照猫画虎... 知其然不知其所以然,所以一换到mush就抓瞎了,那天连个简单的alias都不
会写,呵呵,幸好两位前辈指点~
因为zmud玩过一段时间,后期做机器的时候比较注意结构,因为结构做的好的话以后无论是读还是修改或者
添加功能实在太方便了,如果都是线性的操作的话,内容一多,只怕最后凌乱到连自己都糊里糊涂不知道怎么
去改,更别提把机器给别人用的情况了,感觉机器做到一定时间就会有些新的想法,有些概念虽然模模糊糊,
但觉得应该是可行并且有价值的,比如信息集中处理,各个功能组尽量在自己的范围内处理,通过相对固定的
衔接模式连接起来,但因为没有编程基础,这些功能的实现都是自己想想再看看别人的机器后改出来的,有些
做法就像上面提到的,真是挖空心思做出来的,这个应该就是zmud的缺陷了,而对于一直在更新的mush来
说,这个问题要小很多,曾经看过一眼官网论坛,感觉真是高手云集...信息化时代,大家一起掺和的东西才
更有生命力啊...
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 01:08 PM , Processed in 0.008969 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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