北大侠客行MUD论坛

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

再问mush遍历

[复制链接]
发表于 2010-12-30 14:26:35 | 显示全部楼层 |阅读模式
之前讨论遍历的贴子不少,但比较系统的还是介绍zmud(7.21)中的遍历的。现有问题如下:

如何在mush中实现像zmud那样,可以走一步看一步的?就是看到出口才走下一步,而不是每x秒走一步。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 14:33:43 | 显示全部楼层
鄙视走一步看一步的做法,拖累服务器
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-30 14:37:56 | 显示全部楼层
原帖由 bluse 于 2010-12-30 02:33 PM 发表
鄙视走一步看一步的做法,拖累服务器


校园网的网速太慢,没办法啊!而且俺们等服务器有了反应才走下一步,这样慢慢走着,未必就比每秒十几条指令发过去更拖累服务器吧

嗯嗯楼可别歪了,感谢楼下继续回答问题~~
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 14:49:42 | 显示全部楼层
我不知道,不用谢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 14:52:06 | 显示全部楼层
为什么要走一步看一步?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 15:01:25 | 显示全部楼层
现在谁都没有电信慢
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-12-30 15:04:40 | 显示全部楼层
原帖由 jarlyyn 于 2010-12-30 02:52 PM 发表
为什么要走一步看一步?


不是说走一步就look一下,而是根据显示的描述判断是否要继续走。如果遇到要找的NPC就停止遍历。为防止由于网速太慢致使捕捉到npc信息时,已经多走了n个房间。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 15:50:34 | 显示全部楼层

自定义触发方式行走


一步一步的行走其核心思想就是:把一个行走字符串分解成最小的单步命令,一步一步的根据触发来发送行走指令。
这个触发可以是“这里的出口是”,当然也可以是自己设定的特殊触发,即所谓自定义触发。
把计算好的行走字符串分解为一个一个的行走指令,作为行走的步存在表格里。
然后用一个函数来读取每步并发送指令。即可形成一步一步走的思路。
如:e;w;e;w;n;nu;e,形成一个表格的每个元素分别是tb[1]=e,tb[2]=w,tb[3]=e...
然后用do_walk()函数来读取tb表,并发送指令即可。其实do_walk()就是一个迭代器。


自定义触发的方式行走介绍:
应用自定义触发的方式实现慢速行走:
行走暂停:设置walkgo.needstop=1,当执行do_walk()时会检查此变量。若为1则不发送行走指令,即暂停行走。
如:当遇到NPC的时候,需要配合遇到NPC触发,触发内容仅是设置walkgo.needstop=1,就可以实现暂停行走了。
行走等待:把wait的需要设置为一个wait函数,此函数根据需要设定等待的时间。在do_walk()函数里会根据其来设定多长时间发送set no_more walkgo。即应用DoAfterSpecial()来实现等待几秒的目的。
行走继续:设置walkgo.needstop=0,发送set no_more walkgo 激发行走触发。继续行走。
如:NPC已经被处理完事,即可设定walkgo.needstop=0 并发送set no_more walkgo。就可以继续行走了。
行走障碍:即已经发送了行走指令,却没有成功行走,如NPC blocker,劫匪的阻拦,蜀道难等等)设定walk.meetblocker=1,即遇到了障碍同时返回当前步供形成行走指令。
整体思路:
----[触发被激活]---->do_walk()----->walk Command------Set no_more walkgo

1、根据自定义触发来判断是否需要走下一步。触发内容是:
1)自定义触发:命令:set no_more walkgo
^(>)*()*设定环境变量:no_more = walkgo,对应函数是do_walk()
作用:每次见到这个触发,就去执行do_walk()函数,
2)do_walk()函数:计算行走步数并根据其发送行走指令。
1)判断是否需要停止,若需要则直接返回,不返回行走命令
2)判断是否遇到行走障碍(已经走了当前步,却没能成功),返回当前步。
3)判断是否超过最大步数,以及是否有赶车需要(赶车就是在行走前面加一个字符串gan che to )
若没超过最大步数,形成行走命令字符串。发送行走指令和设置指令(set no_more)
若超过最大步数,则行走结束。

这种行走方式在城际互联插件里已经得到了应用。

[ 本帖最后由 littleknife 于 2010-12-30 06:54 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 19:05:55 | 显示全部楼层
咳,小刀同学的回复不错(怎么感觉这么奇怪呢....)
果断精华

另外,楼主如果觉得littleknife的回复比较复杂,可以先去研究一下maper的#ok功能,把那个整明白再过来看这个回复
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-12-30 19:25:09 | 显示全部楼层
原帖由 lzkd 于 2010-12-30 19:05 发表
咳,小刀同学的回复不错(怎么感觉这么奇怪呢....)
果断精华

另外,楼主如果觉得littleknife的回复比较复杂,可以先去研究一下maper的#ok功能,把那个整明白再过来看这个回复

当然很奇怪,这是领导检阅的口气,另外小刀叫另一个人小刀也很奇怪
我表示例子口袋把自己当唐老板了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 11:41 AM , Processed in 0.010012 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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