很闲的时候,找东西找发时间,无聊就玩了会verycd上的魔塔世界.有时候杀10来只怪更无聊,何况更要爬100多层的塔,全是重复劳动.不由想起很久以前用过的按键精灵,做这事最合适了.于是顺手写了个简单的前台脚本,放虚拟机里用蛮方便.后台那块还没看,以后看看会不会加进去.
记得最早用按键精灵好象还是2.x还是3.x来着,现在已经到了8.0,用起来是更方便了,广告也更多了......
脚本不长,100多行,就直接贴在下面,懒人也可以下载能直接运行的小精灵版本.下载压缩文件,全部放在c:\mt下就好.放别的目录则在代码或小精灵里修改下picPath参数.
脚本:
//todo //1.加入修理 //2.加入统计显示 //3.智能判断所处场景 Dim findFlag //是否找到的标志 Dim stepX //X偏移量 Dim stepY //Y偏移量 Dim picPath //图片所在目录 Dim varGWWZ //怪物位置 Dim varScreen //场景,取值为 副本,冲塔,野外杀怪 Dim varLoopNum //脚本运行次数 Dim varPicsim //图片相似度 Dim adjX //x adjust Dim adjY //y adjust //初始设置 UserVar varPicsim=0.8 "图片相似度,0,5~1" UserVar stepX=20 "查找图片时的偏移量x" UserVar stepY=20 "查找图片时的偏移量y" UserVar picPath="c:\mt\" "图片所在目录,以结束" UserVar varGWWZ=1 "设置怪物位置,取值为1,2,3" UserVar varLoopNum=100 "脚本运行次数" UserVar varScreen=DropList{"副本":"副本"|"冲塔":"冲塔"|"野外杀怪":"野外杀怪"}=2 "场景,取值为 副本,冲塔,野外杀怪" UserVar adjX=208 "x adjust" UserVar adjY=84 "Y adjust" varGWWZ=varGWWZ*60-60 findFlag=false Delay 500 For varLoopNum if varScreen="野外杀怪" then Call 野外杀怪 ElseIf varScreen="冲塔" then Call 冲塔 ElseIf varScreen="副本" then Call 副本 End If Next //冲塔主程序 Sub 冲塔 Call 继续探险() Delay 1000 Call 确定打怪() Delay 500 Call 关闭战斗() Delay 1000 End Sub //野外杀怪主程序 Sub 野外杀怪 Call 找到怪物() Delay 1000 Call 确定打怪() Delay 500 Call 关闭战斗() Delay 1000 End Sub //副本主程序 Sub 副本 Call 副本攻击() Delay 1000 Call 确定打怪() Delay 500 Call 关闭战斗() Delay 1000 End Sub Sub 副本攻击 If 试图查找点击图片(801,407,870,432,"攻击.bmp",35,14)=false then //没有找到则退出 MessageBox "没有找到<攻击>哦,我先休息会儿~~" EndScript End If End Sub Sub 继续探险 If 试图查找点击图片(566,484,643,513,"继续探险.bmp",40,15)=false then //没有找到则退出 MessageBox "没有找到<继续探险>哦,我先休息会儿~~" EndScript End If End Sub Sub 找到怪物 //光标移动到第一个怪位置 If 试图查找点击图片(1106,365+varGWWZ,1136,383+varGWWZ,"怪物.bmp",15,9)=false then //没有找到则退出 MessageBox "没有找到怪物哦,我先休息会儿~~" EndScript End If End Sub //查找指定的图片并点击,返回true //如果没查找,返回false //参数分别为 //左上x,左上y,右下x,右下y,图片名,点击时偏移x,偏移y //偏移用于尽量将鼠标移动到图片中间 //查找图片的范围偏移由全局变量决定 Function 试图查找点击图片(sX,sY,eX,eY,picName,mX,mY) FindPic sX-stepX-adjX,sY-stepY-adjY,eX+stepX-adjX,eY+stepY-adjY,picPath+picName,varPicsim,intX,intY If intX>0 and intY>0 then MoveTo intX+mX,intY+mY LeftClick 1 Delay 500 //确认点击成功,检查三次 FindPic sX-stepX-adjX,sY-stepY-adjY,eX+stepX-adjX,eY+stepY-adjY,picPath+picName,varPicsim,intX,intY For 3 if intX>0 and intY>0 then //MoveTo intX+mX,intY+mY LeftClick 1 Delay 500 Else Exit For End If Next 试图查找点击图片=true Else 试图查找点击图片=false End If End Function //查找指定的图片并点击 //如果没查找,延迟一秒后继续查找,找到为止 //参数分别为 //左上x,左上y,右下x,右下y,图片名,点击时偏移x,偏移y //偏移用于尽量将鼠标移动到图片中间 //查找图片的范围偏移由全局变量决定 Sub 查找点击图片(sX,sY,eX,eY,picName,mX,mY) findFlag=false While findFlag=false FindPic sX-stepX-adjX,sY-stepY-adjY,eX+stepX-adjX,eY+stepY-adjY,picPath+picName,varPicsim,intX,intY If intX>0 and intY>0 then MoveTo intX+mX,intY+mY LeftClick 1 Delay 500 //确认点击成功,检查三次 FindPic sX-stepX-adjX,sY-stepY-adjY,eX+stepX-adjX,eY+stepY-adjY,picPath+picName,varPicsim,intX,intY For 3 if intX>0 and intY>0 then //MoveTo intX+mX,intY+mY LeftClick 1 Delay 500 Else Exit For End If Next findFlag=true End If Wend End Sub Sub 确定打怪 Call 查找点击图片(626,558,713,596,"确定.bmp",41,17) End Sub Sub 关闭战斗 Call 查找点击图片(712,604,794,636,"关闭.bmp",41,15) End Sub Sub 关闭战场 Call 查找点击图片(720,560,804,593,"关闭战场.bmp",42,16) End Sub
备注一:不做任何改动,能在1024x768下运行,ie or ff最大化,只显示一行地址栏及一行标签栏.
备注二:UserVar adjX=208 "x adjust"及UserVar adjY=84 "Y adjust"设置为0.能在1440x900的本本上运行.其他则要修改下这二个的值.原始图是在1440x900下取的,以攻击第一个野外怪位置为例,"攻击"二个字的图片位置是1104,363.其他分辨率下取这处图边左上角坐标与原始坐标的差值.1024x768下,这二字的左上角坐标为896,279,差值就是现在在用的208,84.以后有空再改为简单点的标识.
可能存在的问题:
我在按键精灵8时进行调试,发现有时候Uservar定义的变量取值会不正常,后来发现是保存代码后,脚本里所有定义的Uservar值都会被保存下来,放在按键精灵8的安装目录根下,名为uservar.txt文件中.这时候如果只改动脚本里的值,调试运行里仍会读取这个文件里保存的值.理论上按键精灵8在调试里,应该先读取脚本里的值,并更新到uservar.txt中,或者调试里不使用这个文件. 临里办法是每次调试都删除这个文件,或者直接先在编辑器里的GUI中选择确定新值,并先保存,再调试.