北大侠客行MUD论坛

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

Cmud/Zmud地图定位方法

[复制链接]
发表于 2010-6-24 10:17:15 | 显示全部楼层 |阅读模式
不讲废话,直入正题:
唯一地名:
pattern:^> (*) - $
coder:
  1. room=%1
  2. room=@room
  3. #teleport %mapquery([NAME]='@Room')
  4. #teleport %mapquery("[Name]= '"%replace(@room, "'", "~'~'")"' AND [ZoneID]="%roomzone())
  5. roomvum=%mapquery("[Name]= '"%replace(@room, "'", "~'~'")"' AND [ZoneID]="%roomzone())
  6. #if %numitems(@roomvum)=1 {roomflags=1;#teleport @roomvum}
复制代码
重名地名:
     如果像推车路线周围的地点,可以用小地图或地名描述把他写出来,如汉水下面的一个"大驿道"
pattern:
  1. 大驿道%s$%s|%s $%s大驿道%s$ %s|%s$%s青石大道
复制代码

coder:
  1. teleport 2287
  2. roomflags=1
复制代码
如果你很懒,写个函数随机走几步,找到唯一点的时候再走,可以用如下写法:
     Pattern:
  1. 这里*的出口是(*)。
复制代码
coder:
  1. chukou=%replace(%replace(%1,"和","、"),"、","|");
  2. chukou2=""
  3. #if (%numitems(@chukou)>1) {
  4. #loop 1,%numitems(@chukou)
  5. {
  6. #additem chukou2 %trimleft(%trimright(%item(@chukou,%i)))
  7. }
  8. #delitem chukou2 @fanxiang(@nextstep)
  9. } { chukou2=@chukou }
  10. roomvum=%mapquery("[Name]= '"%replace(@room, "'", "~'~'")"' AND [ZoneID]="%roomzone())
  11. #if (%numitems(@roomvum)=1) {#teleport @roomvum;#wa 500;set action walk} {set action relocation}
复制代码
需要注明的是fanxiang这个function是把走过的方向删除,这样一直走到底,不会来回重复走。   
用在推车这里的话,如果迷路了,就是沿着一个路径推到底,但这样效率较低,如果磨时间倒不错,看个人取舍。

[ 本帖最后由 killunix 于 2010-6-24 10:20 AM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 13:28:48 | 显示全部楼层
支持啊!
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 13:42:08 | 显示全部楼层
可怜的偶,完全看不懂。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 14:10:03 | 显示全部楼层
我想我如果死几百万个脑细胞,估计能看懂50%
还是不懂算了,打死推车的和尚们我也不推车
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 14:11:46 | 显示全部楼层
哇!!!爱死你了!!!

非常酷啊! 感谢!明白了!

学了一个星期的zmud721和map了(之前从来没用过,一直zmud462),头已经大如斗了。。。不过,还是很有收获的。。。

[ 本帖最后由 stevenson 于 2010-6-24 02:17 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 14:16:31 | 显示全部楼层
这种难度的估计给我机器人我都不会用
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 16:37:37 | 显示全部楼层
原帖由 killunix 于 2010-6-24 10:17 AM 发表
chukou=%replace(%replace(%1,"和","、"),"、","|");
chukou2=""
#if (%numitems(@chukou)>1) {
#loop 1,%numitems(@chukou)
{
#additem chukou2 %trimleft(%trimright(%item(@chukou,%i)))
}
#delitem chukou2 @fanxiang(@nextstep)
} { chukou2=@chukou }
roomvum=%mapquery("[Name]= '"%replace(@room, "'", "~'~'")"' AND [ZoneID]="%roomzone())
#if (%numitems(@roomvum)=1) {#teleport @roomvum;#wa 500;set action walk} {set action relocation}需要注明的是fanxiang这个function是把走过的方向删除,这样一直走到底,不会来回重复走。   
用在推车这里的话,如果迷路了,就是沿着一个路径推到底,但这样效率较低,如果磨时间倒不错,看个人取舍。


killunix, 请问一下,这段代码里那个命令是随便走个方向的?看到了截取所有方向到chukou2中,但没看到行走的指令,另外@fanxiang(@nextstep)这个function是在其他地方定义好的吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2010-6-24 16:50:17 | 显示全部楼层
我觉得还是mush好用.....这看的一脑袋雾水
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-24 16:53:15 | 显示全部楼层

回复 7楼 的帖子

这个是没写全。还有一个触发:
Pattern:
  1. 设定环境变量:action = "relocation"$
复制代码
Code:
  1. coder:#wa 800
  2. #if (@room="黑沼") {.enw2sw;#wa 1000;look} {
  3. #if (@room="树林") {#10 n;#3 e;#wa 1000;look} {#if (%numitems(@chukou2)=1) {nextstep=@chukou2} {nextstep=%item(@chukou2,%random(1,%numitems(@chukou2)))}
  4. #execute @nextstep}}
复制代码

反向函数:
  1. %if(%1=east,west,%if(%1=west,east, %if(%1=south,north,%if(%1=north, south, %if(%1=northeast,southwest,%if(%1=northwest,southeast,%if(%1=southwest,northeast,%if(%1=southeast,northwest,%if(%1=up,down,%if(%1=down,up,%if(%1=southup,northdown,%if(%1=southdown,northup,%if(%1=northup,southdown,%if(%1=northdown,southup,%if(%1=westup,eastdown,%if(%1=westdown,eastup,%if(%1=eastup,westdown,%if(%1=eastdown,westup))))))))))))))))))
复制代码

[ 本帖最后由 killunix 于 2010-6-24 04:56 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2010-6-24 17:10:22 | 显示全部楼层

回复 8楼 的帖子

用mush这些问题照样要解决,下列函数是mush用来找路的:

  1.   
  2.    enabled="y"
  3.    group="walk"
  4.    match="^[>]*\s*这里.+出口是\s*(.+)"
  5.    regexp="y"
  6.    send_to="12"
  7.    sequence="100"
  8.   >
  9.   walk.exist=string.gsub(string.gsub(string.gsub(string.gsub("%1","、",";"),"和",";"),"%s",""),"。","")

  10.   


  11. function findrightway()
  12. local tt=utils.split(exist,";")
  13. local removedir
  14. if #tt==1 then nextstep=tt[1] end
  15. if #tt>1 then
  16. if laststep~=nil then
  17. for k,v in pairs(tt) do
  18. if v==settings.revdir(laststep) then
  19. removedir=k
  20. break
  21. end
  22. end
  23. table.remove(tt,removedir)
  24. end
  25. nextstep=tt[math.random(#tt)]
  26. end
  27. laststep=nextstep
  28. return nextstep
  29. end
复制代码

[ 本帖最后由 killunix 于 2010-6-24 10:34 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 05:45 AM , Processed in 0.012184 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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