mush关于遍历难题问题,感谢maper,请在帮下忙
比如这个table["油辣猪排"] = "d n e (buy ylzp from su)",
["油辣猪排b"] = "(qput ylzp) w s u (qreturn)",
["信"] = "(tj2bf) (bf2qp) 5e n (get all from desk) ",
有这个调用方式
QuestFindAction = _QuestFindTable [questitem]
如果传递的 questitem == 油辣猪排 那么就返回 d n e (buy ylzp from su) 字符串,
下面的指令
DoAfterSpeedWalk (0.5,QuestFindAction) ------执行指令去购买
等于执行
DoAfterSpeedWalk (0.5,"d n e (buy ylzp from su) ")
上面这种格式就可以用。都是快速行走,可以正常使用。
现在问题是
如果走的比较远,我想要嵌套 alias 怎么嵌套?
比如第三个
["信"] = "(tj2bf) (bf2qp) 5e n (get all from desk) ",
有两个做好的alias 。这个要怎么解决?用Execute ?
还有些地方,要是去的话,第一要wait,
而且是随机的,不知道怎么处理
现在对游戏的乐趣小了,对编程乐趣大了。
[[i] 本帖最后由 chans 于 2010-7-26 03:46 PM 编辑 [/i]] 比如tj2bf代表的指令是5e;3n
bf2qp代表的指令是3s;4e
把"(tj2bf) (bf2qp) 5e n (get all from desk) "通过字符处理都连接起来变成这样的格式:s;n;e;n;n;e;buy jiudai;get all from desk;n;s;之类的
然后以;为分割,把命令挨个发送出去。
除了DoAfterSpeedWalk,还有doafter,doafterspecial,wait命令都可以看看。 [url]http://pkuxkx.net/forum/viewthread.php?tid=5017[/url]
这个帖子以及后面的回帖要认真阅读,会给你启发的。 [url]http://pkuxkx.net/forum/viewthread.php?tid=5602[/url]
这个也可以看看 [url]http://pkuxkx.net/forum/viewthread.php?tid=4664[/url]
zmud遍历改成mush的 [url]http://pkuxkx.net/forum/viewthread.php?tid=8309[/url]
一些写法和函数 估计你是要做一个天机老人找东西的任务吧?
建议还是先画出整个mud的地图吧,这样子可以得到任意两个房间的路径,能够实现自动行走,比你这样用alias要好很多,不会迷路。
关于画地图可以搜索本论坛。 好感动mapper 老大。呵呵。这么详细的回复
我先慢慢消化吸收 感谢maper。真的不错。很好。很强大
现在做个地图吧。估计理论上可以应对很多情况。
现在学了一个addtir。以后不会为触发多了误操作发愁了。
全部放到脚本里面。需要加上。不需要就del掉。很不错。 不过一个问题是。这个方式走,比alias要效率低。尤其是固定位置NPC
我的地图都是四通八达的。做遍历不好做。比如下面的情况
A -----B -----C DD EE
| | I
D ------[color=red]E[/color]------F-----------AA ----BB
| | |
G------[color=red]H[/color]-------I CC FF
I
J-------[color=red]K[/color]------[color=red]L[/color]
上面的情况。你做遍历 A B C D E F G H I J K L 这样做啊?还是怎么走这个地图?都要重复几次。
如果alias B E H K L 到了。
比如 E 是中心点,你遍历 E到 L。都要 E-> H-> I-> H-> K-> L 啊?这个还是走了右半面的情况。
不太清楚具体遍历的情况。
[[i] 本帖最后由 chans 于 2010-7-26 03:39 PM 编辑 [/i]] 是不是这么理解。遍历就是走了一圈呢?
如果我做个alias 把一个地方都走了一遍。是不是就是遍历了?
不过你这个做了一个栈,每次弹出一个方向指令。
比如我做的遍历 红色部分。
A -----B -----C DD EE
| | I
D ------[color=red]E[/color]------F-----------AA ----BB
[color=red] |[/color] | |
[color=red][color=blue]G[/color]------H-------[color=blue]I[/color] [/color] CC FF
I
[color=red][color=blue]J[/color]-------K------[/color][color=blue]L[/color]
[color=#ff0000][/color]
[color=#ff0000]是不是就是 E -> H [color=blue]-> G[/color] -> H [color=blue]-> I[/color] -> H [color=red]-> K[/color] [color=blue]-> J[/color] -> K [color=blue]-> L[/color] 这么做呢?[/color]
[color=#ff0000]这样重复好多。有没有好的办法?[/color]
[color=#ff0000]个人感觉对变量有些误解[/color]
[color=#ff0000][/color]
[color=#ff0000][/color]
[color=#ff0000][/color]
[[i] 本帖最后由 chans 于 2010-7-26 03:43 PM 编辑 [/i]] 我记得看过一个帖子。说遍历的时候,如果进不去,look 一下也可以。
是不是系统只记录路径呢?比如上面的帖子
要做路径。怎么做?mapper高手来告诉下。不胜感激。 |
A -----B -----C DD EE
| | I
D ------[color=red]E[/color]------F-----------AA ----BB
[color=red] |[/color] | |
[color=red][color=blue]G[/color]------H-------[color=blue]I[/color] [/color] CC FF
I
[color=red][color=blue]J[/color]-------K------[/color][color=blue]L
先来说一下什么是遍历。
以上面的地图为例,上面的地图可以看做是mud里面的一个区域、城市、范围,这里我们当成是扬州城好了,现在你接到一个任务:有个小偷偷了只鸡,他现在在扬州城晃荡,你去把他抓来。
这个时候我们只知道小偷在扬州城,但不知道在具体的房间,所以只能采用遍历的方式来找,[b]也就是从一个房间开始把一定范围内的房间都走一遍。[/b]
假设我们现在从房间A开始遍历,那么路径可能是A-B-C-B-E-D-E......这样肯定会重复走过一些房间的,但是没有办法。
[/color] |
A -----B -----C DD EE
| | I
D ------[color=red]E[/color]------F-----------AA ----BB
[color=red] |[/color] | |
[color=red][color=blue]G[/color]------H-------[color=blue]I[/color] [/color] CC FF
I
[color=red][color=blue]J[/color]-------K------[/color][color=blue]L
下面来说一下到最短路径行走。
也就是现在你站在房间A,你知道你要去的房间是FF,那这个时候最短的路径就是A-B-E-F-AA-BB-FF。你不必要先从房间A走到房间K,然后再绕回去FF。
当你知道你的起始房间和终点房间的时候,就要找到一条最短路径,然后走过去。
上面的图是很简单的,如果地图很大,并且有些房间相互连通成环路,这个时候找最短路径还是要靠计算的。
[/color] 明白。这个就是以前数据结构做的遍历。做一个树。然后做深度优先或者广度优先搜索。
换到游戏了。可以这么做。经常去的固定地方。可以结合alias ,直接定位,
如果是随机的NPC,那么就做遍历搜索。
也就是体现在数据结构上。
好多年没接触这个了。呵呵。以前的东西忘光了。回头拿那个数据结构在看看 你给的提示很好。我结合 addtr 和deltr的功能。可以做的比较完美的机器人。
理论上人能做到的都可以写成程序。
受益匪浅。感谢感谢。 [quote]原帖由 [i]chans[/i] 于 2010-7-27 12:48 AM 发表 [url=http://edu.pkuxkx.net:8082/forum/redirect.php?goto=findpost&pid=168633&ptid=14866][img]http://edu.pkuxkx.net:8082/forum/images/common/back.gif[/img][/url]
你给的提示很好。我结合 addtr 和deltr的功能。可以做的比较完美的机器人。
理论上人能做到的都可以写成程序。
受益匪浅。感谢感谢。 [/quote]
个人感觉遍历不需要算法,按一条最佳路径走就行了。举个例子,
你把扬州的房间编号按顺序排成一个数列 1|2|3...
然后就%walk(1),%walk(2)...就可以了,这种在HYD中最合适。
还有如果HYD的NPC走开了,就在当前位置处搜索周围几个房间,一个个走过去很快啊。 [quote]原帖由 [i]maper[/i] 于 2010-7-25 09:27 PM 发表 [url=http://www.pkuxkx.net/forum/redirect.php?goto=findpost&pid=168306&ptid=14866][img]http://www.pkuxkx.net/forum/images/common/back.gif[/img][/url]
估计你是要做一个天机老人找东西的任务吧?
建议还是先画出整个mud的地图吧,这样子可以得到任意两个房间的路径,能够实现自动行走,比你这样用alias要好很多,不会迷路。
关于画地图可以搜索本论坛。 [/quote]
mapper大大,我按你的教程用zmud 7.21已经画出整个MUD的地图了,不过残念,这样的方法,即使做出来了全auto机器,同一时间也只能挂一个ID... ...
页:
[1]