MUSH+VBSCRIPT+ACCESS实现常用路径行走的实例(申请加精)
数据库模型(没截到名字的那列为content):http://pkuxkx.net/forum/images/default/attachimg.gif http://pkuxkx.net/forum/attachment.php?aid=3311&noupdate=yes http://pkuxkx.net/forum/images/attachicons/image.gif 未命名2.bmp.bmp (106.15 KB)
2009-11-4 12:14 PM
别名:
http://pkuxkx.net/forum/images/default/attachimg.gif http://pkuxkx.net/forum/attachment.php?aid=3310&noupdate=yes http://pkuxkx.net/forum/images/attachicons/image.gif 未命名1.bmp (601.76 KB)
2009-11-4 12:14 PM
触发器模型:
VBSCRIPT脚本:
'===========连接数据库
dim conn
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&"D:\Program Files\MUSHclient\worlds\pku\bxbl.mdb"
dim rs,ss,ts,vs,ws,xs,ys,zs
dim rq,sq,tq,vq,wq,xq,yq,zq
Set rs = CreateObject("ADODB.RECORDSET")
'============数据库连接完毕
'==============定义遍历每个地点的动作
dim dzA,dzB,dzC,dzD,dzE,dzF,dzG
sub dongzuo()
if dzA="xxx" then send ("xxx")
if dzB="xxx" then send ("xxx")
if dzC="xxx" then send ("xxx")
if dzD="xxx" then send ("xxx")
if dzE="xxx" then send ("xxx")
if dzF="xxx" then send ("xxx")
if dzG="xxx" then send ("xxx")
'===============因为还没做遍历的动作触发,变量以和指令以XXX代替
dzA=""
dzB=""
dzC=""
dzD=""
dzE=""
dzF=""
dzG=""
end sub
'==============定义动作结束
'==============捡钱
sub dzss(getobjs)
send ""&getobjs&""
end sub
'==============结束
dim i,j
'==============读取路径
'其实这就是一个简单的遍历,用数据库的好处是,把常用路径加到数据库,在MUSH里和数据库的nicks列一样的名字设置别名,下面的代码完全可以实现了。
'如果遍历的时候觉得走的太慢或太快,找到j=j+0.3这里把0.3调整成你想要的延时时间,0.3代表0.3秒(最少0.1秒,相当于ZMUD里的#wa 100)。
'当然里面也可以加上你想执行的其他命令。
sub mypath(lujing)
rs.open "select * from path where nicks='"&lujing&"'",conn,1,1
if not rs.eof then
j=0
dim path
path=split(rs("content"),";")
for i = 0 to ubound(path)
call dongzuo()
if i=0 then
send ""&path(i)&""
else
j=j+0.3
if int(j)=0 then j="0"&j
world.DoAfterSpecial ""&j&"", ""&path(i)&"", 0
end if
next
end if
rs.close
lujing=""
end sub
'==============路径结束
[ 本帖最后由 bigpswd 于 2009-11-4 01:27 PM 编辑 ] j=j/10+0.3是不是更好一点? 别光发布脚本呀,做成插件嘛~ 另外,使用ADO要注意释放内存。这两天在研究用ADO做另外一个东西,结果ADO读入一个40MB的二进制文件,再加上其它操作,一个函数,一执行就用了120MB的内存,函数执行完成后,ADO就把40MB的内存吞了,再不释放了。这是ADO的BUG,好像暂时还没有解决办法。
所以哦,使用ADO,一定要注意释放内存(Set rs = nothing)。不过处理字符串还好,本身占的内存就不多,但也要考虑时间的积累,时间长了,恐怕内存也会很巨大。
[ 本帖最后由 ddid 于 2009-11-4 02:10 PM 编辑 ] 真专业呀.... 原帖由 ddid 于 2009-11-4 01:42 PM 发表 http://pkuxkx.net/forum/images/common/back.gif
j=j/10+0.3是不是更好一点?
开始就定义J=0了,所以每执行一行都是0.3的倍数,如果J/10+0.3的话,那就越往后就越没有延时的效果了。
另外,写插件的问题,昨天刚刚研究出了MUSH喝VBSCRIPT及ACCESS的联合作业,插件怎么做还没来得及看呢,等我把路径,北大侠客行的全部房间都收集进数据库,把遍历程序写好再做插件,不过,感觉做了插件后就不方便修改了,做不做插件有待考虑。
还要谢谢你的提醒,要改成每个rs.open前都set rs=CreateObject("ADODB.RECORDSET"),每个rs.close后都set rs = nothing。
这个VBSCRIPT完全完成后,一定会很小的,不会占用太多内存,现在所有的常用路径都由sub mypath(lujing)完成,以后房间的遍历将全部用sub mapper(rooms)来完成。在sub mapper(rooms)中,实现多任务共同调用,也就是多加几个公用变量,多做几个动作触发,多点判断就OK了,不就是if else end if的问题了,这个应该都好说了。
现在正在考虑的问题:房间的遍历,我也要加入到数据库中,包括每个房间的ID号(当然是我自己赋值的),房间名称(比如:客店 -),环境描述,出口描述,出口对应房间ID(以二维数组甚至三维数组),详细是数据库构架设想是ID自动编号就行,房间名称、环境描述、出口描述和游戏里一样就好,出口对应房间的二维数组举个例子,扬州中央广场下的树洞为例,出口对应房间out,1|say 天堂有路你不走呀;d,55
这就是个三维数组了,out,1out的出口对应出口是扬州广场,扬州广场的ID是1
55是丐帮暗道的数据库ID,从树洞过去的出口就要先说一句话再DOWN,这又是一个数组。
现在要解决的一个问题是从一个房间到另一个房间自动生成最近路线的算法问题,希望你能再提供点参考
[ 本帖最后由 bigpswd 于 2009-11-4 11:55 PM 编辑 ] j=0看漏了,是我不仔细了。
其实MUSH的插件就是一个xml文件,alias, triggers, variable, script -- all in one,做成了插件,更好改。
记得还有 conn = nothing
至于路径的算法么,有人前几天在论坛里提过,你可以找找看。 原帖由 ddid 于 2009-11-5 12:02 AM 发表 http://pkuxkx.net/forum/images/common/back.gif
j=0看漏了,是我不仔细了。
其实MUSH的插件就是一个xml文件,alias, triggers, variable, script -- all in one,做成了插件,更好改。
记得还有 conn = nothing
至于路径的算法么,有人前几天在论坛里提过 ...
有时间教教我怎么做插件:lol: File -> Plugin Wizard ... 按提示一步一步走就行了。
页:
[1]