killunix 发表于 2010-6-24 10:17:15

Cmud/Zmud地图定位方法

不讲废话,直入正题:
唯一地名:
pattern:^> (*) - $
coder:room=%1
room=@room
#teleport %mapquery(='@Room')
#teleport %mapquery("= '"%replace(@room, "'", "~'~'")"' AND ="%roomzone())
roomvum=%mapquery("= '"%replace(@room, "'", "~'~'")"' AND ="%roomzone())
#if %numitems(@roomvum)=1 {roomflags=1;#teleport @roomvum}重名地名:
   如果像推车路线周围的地点,可以用小地图或地名描述把他写出来,如汉水下面的一个"大驿道"
pattern:大驿道%s$%s|%s $%s大驿道%s$ %s|%s$%s青石大道
coder:teleport 2287
roomflags=1如果你很懒,写个函数随机走几步,找到唯一点的时候再走,可以用如下写法:
   Pattern:这里*的出口是(*)。coder: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("= '"%replace(@room, "'", "~'~'")"' AND ="%roomzone())
#if (%numitems(@roomvum)=1) {#teleport @roomvum;#wa 500;set action walk} {set action relocation}需要注明的是fanxiang这个function是把走过的方向删除,这样一直走到底,不会来回重复走。   
用在推车这里的话,如果迷路了,就是沿着一个路径推到底,但这样效率较低,如果磨时间倒不错,看个人取舍。

[ 本帖最后由 killunix 于 2010-6-24 10:20 AM 编辑 ]

seagate 发表于 2010-6-24 13:28:48

支持啊!

pds 发表于 2010-6-24 13:42:08

可怜的偶,完全看不懂。

safeguard 发表于 2010-6-24 14:10:03

我想我如果死几百万个脑细胞,估计能看懂50%
还是不懂算了,打死推车的和尚们我也不推车

stevenson 发表于 2010-6-24 14:11:46

哇!!!爱死你了!!! ttk_36 ttk_36 ttk_36

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

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

[ 本帖最后由 stevenson 于 2010-6-24 02:17 PM 编辑 ]

hash 发表于 2010-6-24 14:16:31

这种难度的估计给我机器人我都不会用hz3

stevenson 发表于 2010-6-24 16:37:37

原帖由 killunix 于 2010-6-24 10:17 AM 发表 http://pkuxkx.net/forum/images/common/back.gif
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("= '"%replace(@room, "'", "~'~'")"' AND ="%roomzone())
#if (%numitems(@roomvum)=1) {#teleport @roomvum;#wa 500;set action walk} {set action relocation}需要注明的是fanxiang这个function是把走过的方向删除,这样一直走到底,不会来回重复走。   
用在推车这里的话,如果迷路了,就是沿着一个路径推到底,但这样效率较低,如果磨时间倒不错,看个人取舍。

killunix, 请问一下,这段代码里那个命令是随便走个方向的?看到了截取所有方向到chukou2中,但没看到行走的指令,另外@fanxiang(@nextstep)这个function是在其他地方定义好的吗?

lzkd 发表于 2010-6-24 16:50:17

我觉得还是mush好用.....这看的一脑袋雾水

killunix 发表于 2010-6-24 16:53:15

回复 7楼 的帖子

这个是没写全。还有一个触发:
Pattern:设定环境变量:action = "relocation"$Code:coder:#wa 800
#if (@room="黑沼") {.enw2sw;#wa 1000;look} {
#if (@room="树林") {#10 n;#3 e;#wa 1000;look} {#if (%numitems(@chukou2)=1) {nextstep=@chukou2} {nextstep=%item(@chukou2,%random(1,%numitems(@chukou2)))}
#execute @nextstep}}
反向函数:%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 编辑 ]

killunix 发表于 2010-6-24 17:10:22

回复 8楼 的帖子

用mush这些问题照样要解决,下列函数是mush用来找路的:
<trigger
   enabled="y"
   group="walk"
   match="^[>]*\s*这里.+出口是\s*(.+)"
   regexp="y"
   send_to="12"
   sequence="100"
>
<send>walk.exist=string.gsub(string.gsub(string.gsub(string.gsub("%1","、",";"),"和",";"),"%s",""),"。","")
</send>
</trigger>


function findrightway()
local tt=utils.split(exist,";")
local removedir
if #tt==1 then nextstep=tt end
if #tt>1 then
if laststep~=nil then
for k,v in pairs(tt) do
if v==settings.revdir(laststep) then
removedir=k
break
end
end
table.remove(tt,removedir)
end
nextstep=tt
end
laststep=nextstep
return nextstep
end

[ 本帖最后由 killunix 于 2010-6-24 10:34 PM 编辑 ]
页: [1] 2
查看完整版本: Cmud/Zmud地图定位方法