//鹤羽原创,翻版必究
//制作脚本最关键的部分不是语句,因为所有语句的功能和用法都可以查询到,即使不记得也无所谓。最关键在于制作的逻辑。
//因此首先要把需要用脚本操作的过程手工做一遍,找到每一个关键的步骤和需要判断的关键点坐标、颜色等。
//然后把这些主要的判断和动作串起来,就形成了一个初步的脚本框架。在这个大框架中再添加,完善就比较容易了。
//本例中要完成挂机过程,其实只需要以下几个过程:
//1、判断什么时候进入战斗画面
//2、如果在战斗画面是不是轮到玩家攻击
//3、如何攻击
//4、如何判断攻击结束并退出了战斗画面
//另外一个附加的问题是加血,可以在大框架确定以后再考虑插入。
//后面的脚本是一个完整的功能脚本,大家可以从脚本说明中看出这几个过程的顺序以及各自的判断方式、选择的点和颜色,
//当然这种选择不是唯一的,大家可以根据自己的理解进行选择。
//脚本中使用了后台技术,虽然这个游戏实际上并不能完全支持后台(比如不支持后台键盘,后台鼠标也只在鼠标放在游戏窗口中才生效)。
//这里只是举例说明一下后台插件的使用方法。
//--------------------------------------------------------------
//获得游戏窗口句柄和位置尺寸等信息以便使用后台操作
Plugin hw=Window.mousepoint()
Plugin clintrect=Window.GetClientRect(hw)
rect=split(clintrect,"|",-1,1)
xoffset=cint(rect(0))
yoffset=cint(rect(1))
xwinsize=cint(rect(2))
ywinsize=cint(rect(3))
//系统和窗口初始化完毕------------------------------------------
//
//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)
If xwinsize<>550 or ywinsize<>400
    VBSCall messagebox("请将鼠标放在游戏窗口内启动脚本。")
    Goto end
EndIf 
//
//以下程序段用于参数设置
UserVar attackmode=DropList{普通:0|技能:1}=0 攻击模式
UserVar fillredscale=30 补血百分比
//参数设置完毕--------------------------------------------------
//
//以下程序段用于定义关键点(所有点位均以游戏窗口左上角为基准零点)
//之所以把一些关键点位都集中在一起定义是为了方便以后修改
//
//1、血条左边界点和血条长度及颜色(这个游戏的血条大约是90个像素点)
xred0=82: yred=36: dxred=90: colorred="0066FF"
xred=xred0+cint(fillredscale*dxred/100)
//
//2、迷你小地图上的人物标志点和颜色(如果进入战斗状态小地图上会出现蓝色方块表示人物位置,因此可用来判断是否遇敌)
xme=495: yme=70: colorme="CC9900"
//
//3、回合标志(回合标志取第一个字上的点,为了判断什么时候开始攻击)
xround=208: yround=26: colorround="003399"
//
//4、mini地图上的敌人位置和位差(最左侧敌人为1,右侧敌人按位差移动)
xanimy1=448: yanimy1=62: dxanimy=25: dyanimy=-9: coloranimy="0066FF"
//定义基本点完毕------------------------------------------------
//
//
//****************************************************************
//
//挂机程序正式开始
Rem start
Plugin Bkgnd.MoveTo(hw,0,0)
//一直向上移动,直到遇敌,因为无地图限制所以往一个方向运动即可
KeyDown 38
//
Rem 等待遇敌
//获得小地图上的定义点,判断是否出现蓝框
Plugin color1=BkgndColor.GetPixelColor(hw,xme,yme)
//如果不遇敌则反复判断
If color1<>clng("&H" & colorme)
    Delay 100
    Goto 等待遇敌
EndIf 
//检测到小地图蓝框则执行下面的遇敌处理
//遇敌后首先停止移动
KeyUp 38
Delay 100
Rem 等待攻击
//再次判断人物蓝框和回合标志
Plugin color1=BkgndColor.GetPixelColor(hw,xme,yme)
//如果人物蓝框消失,表示战斗结束
If color1<>clng("&H" & colorme)
    Goto start
EndIf 
Plugin color1=BkgndColor.GetPixelColor(hw,xround,yround)
//如果没有回合标志镖师还在等待战斗状态
If color1<>clng("&H" & colorround)
    Delay 100
    Goto 等待攻击
EndIf 
//回合标志出现,按顺序搜索小地图上的敌人
i=0
While i<3
    Plugin color1=BkgndColor.GetPixelColor(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)
    If color1=clng("&H" & coloranimy)
        //如果找到任何一个敌人,则实施攻击并回到等待攻击状态,等待下一回合
        Gosub 战斗
        Goto 等待攻击
    EndIf 
    i=i+1
EndWhile 
//没有找到敌人,表示攻击结束,进入移动状态
//因为此游戏补血没有消耗,所以战斗结束后补血一次