UserVar LTop=300,100 鼠标活动范围:左上角坐标
UserVar RBot=600,400 鼠标活动范围:右下角坐标
UserVar Center=300,200 方形渐开搜怪起点
UserVar L=20 2个搜怪点之间的距离
UserVar M=1 从第几圈开始搜索
//变量定义
Dim s,v,i,n,x,y,a1,b1,a2,b2,c1,c2,x0,y0,k1,k2
//在鼠标左上角活动范围变量“LTop”内查找逗号,用于区分左上角的X、Y坐标
s=InStr(LTop,",")
//Mid(参数1,参数2,参数3):从字符串中返回指定数目的字符
//参数1(字符串表达式,从中返回字符)
//参数2(参数1中被提取的字符部分的开始位置)
//参数3(要返回的字符数,若省略将返回字符串中从参数2 到字符串结束的所有字符)
//“Mid(LTop,1,s-1)”从字符串“LTop”中的第1个字符开始取s-1个字符
//int(Mid(LTop,1,s-1)):将取到的字符转换成整数
//取鼠标活动范围左上角横坐标赋值到变量a1
a1=int(Mid(LTop,1,s-1))
//取鼠标活动范围左上角纵坐标赋值到变量b1
b1=int(Mid(LTop,s+1))
s=InStr(RBot,",")
//取鼠标活动范围右下角横坐标赋值到变量a2
a2=int(Mid(RBot,1,s-1))
//取鼠标活动范围右下角纵坐标赋值到变量b2
b2=int(Mid(RBot,s+1))
s=InStr(Center,",")
//取起点坐标赋值到x0,y0
x0=int(Mid(Center,1,s-1))
y0=int(Mid(Center,s+1))
//比较x0到a1和x0到a2的长度,取最长的距离来限制方形渐开的范围,保证渐开线能全部覆盖鼠标活动范围
If x0-a1>=a2-x0
    n=a1
Else 
    //将x0到a2的距离转换到左边,方便下面的While x>=n的循环判断
    n=x0-(a2-x0)
EndIf 
Rem 开始搜怪
//将点距赋值到v
v=L
//将渐开起点圈数赋值到i
i=M
//将渐开起点坐标赋值到x,y
x=x0:y=y0-v
MoveTo x y
//回到起点
While x>=n
    k1=0:k2=v
    For 2
        For i
            x=x+k1:y=y+k2
            //只有(x,y)点在鼠标活动范围内才移动鼠标和执行鼠标变化判断
            If x>=a1 and x<=a2 and y>=b1 and y<=b2
                //计算出x,y
                MoveTo x y
                Delay 10
                VBSCall c=GetCursorShape(0)
                //移动到x,y延时10毫秒后再次取x,y点的鼠标并赋值到c
                Delay 10
                If c=202004408
                    //这里202004408为打怪时鼠标特征码,实用时要改。
                    LeftClick 1
                    //左键攻击
                    //边打边吃药循环
                    //以后加入计时功能,设定攻击最大时间,超时回原点,避免被卡住
                    For 3
                        Gosub 判断吃药
                        Delay 2000
                    EndFor 
                    Delay 1000
                    / /延迟7秒打怪,这里要具体测试一下打怪的时间,确保将怪打死,避免写判断怪是否死亡的程序了
                ElseIf c=20224499
                    //20224499为拣东西时的鼠标特征码
                    Gosub 拣东西
                    //打完怪后再重新开始搜索
                    Goto 开始搜怪
                EndIf 
                Delay 1
            EndIf 
        EndFor 
        k1=v:k2=0
    EndFor 
    i=i+1:v=v*(-1)
EndWhile 
Delay 200
//搜索完鼠标活动范围后重新开始搜索
Goto 开始搜怪
Sub 判断吃药
    VBSCall ReadMemory( &04bcf18,2,d)
    VBSCall ReadMemory( &04bcfc4,2,dd)
    n=d/dd
    //读取内存中最大血量和动态血量,求比值n。这里的内存地址需要用ce查找,剑侠1设定的很简单,查3次血量变化就找出来了
    If n<=0.6 and n>0.3
        KeyPress 49,1
        //按1补血
    ElseIf n<=0.2
        KeyPress 51,1
        //没有药了或遭到pk,按3回城
        Gosub 买药
        Gosub 返回
    EndIf 
Return