操作方式:地图上按方向键行走会随机遇到敌人,然后进入战斗场景。

在战斗场景中双击敌人可进行普通攻击,或按热键1或“攻击”选中敌人普通攻击,按热键2选中敌人可以释放技能,按热键3可以补血(大地图上也可使用)。
制作思路:根据判断颜色或图形来确定是否进入战斗模式,多用标记和子程序
参考脚本
//鹤羽原创,翻版必究
//释放插件
PutAttachment ".\plugin","*.dll"
//--------------------------------------------------------------
//获得游戏窗口句柄和位置尺寸等信息以便使用后台操作
hw=Plugin.Window.mousepoint()
clintrect=Plugin.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 Then
    Call messagebox("请将鼠标放在游戏窗口内启动脚本。")
    Goto QMScript_end
End If 
//
//以下程序段用于参数设置
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
Call Plugin.Bkgnd.MoveTo(hw,0,0)
//一直向上移动,直到遇敌,因为无地图限制所以往一个方向运动即可
KeyDown 38
//
Rem 等待遇敌
//获得小地图上的定义点,判断是否出现蓝框
color1=Plugin.BkgndColor.GetPixelColor(hw,xme,yme)
//如果不遇敌则反复判断
If color1<>clng("&H" & colorme) Then
    Delay 100
    Goto 等待遇敌
End If 
//检测到小地图蓝框则执行下面的遇敌处理
//遇敌后首先停止移动
KeyUp 38
Delay 100
Rem 等待攻击
//再次判断人物蓝框和回合标志
color1=Plugin.BkgndColor.GetPixelColor(hw,xme,yme)
//如果人物蓝框消失,表示战斗结束
If color1<>clng("&H" & colorme) Then
    Goto start
End If 
color1=Plugin.BkgndColor.GetPixelColor(hw,xround,yround)
//如果没有回合标志镖师还在等待战斗状态
If color1<>clng("&H" & colorround) Then
    Delay 100
    Goto 等待攻击
End If 
//回合标志出现,按顺序搜索小地图上的敌人
i=0
While i<3
    color1=Plugin.BkgndColor.GetPixelColor(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)
    If color1=clng("&H" & coloranimy) Then
        //如果找到任何一个敌人,则实施攻击并回到等待攻击状态,等待下一回合
        Gosub 战斗
        Goto 等待攻击
    End If 
    i=i+1
Wend 
//没有找到敌人,表示攻击结束,进入移动状态
//因为此游戏补血没有消耗,所以战斗结束后补血一次
KeyPress 51,1
Goto start
//
//程序结束
Rem QMScript_end
EndScript 
//
//
//战斗子程序
Sub 战斗
    //战斗前先检查血量,如果血量少于设定值则补血并退出战斗
    color1=Plugin.BkgndColor.GetPixelColor(hw,xred,yred)
    If color1<>clng("&H" & colorred) Then
        KeyPress 51,1
        Goto fightfinish
    End If 
    //不需要补血则攻击
    //根据设定的要求进行普通或者技能攻击
    If attackmode=0 Then
        KeyPress 49,1
    Else 
        KeyPress 50,1
    End If 
    Delay 200
    Call Plugin.Bkgnd.MoveTo(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)
    Delay 100
    Call Plugin.Bkgnd.LeftClick(hw,xanimy1+dxanimy*i,yanimy1+dyanimy*i)
    Rem fightfinish
    Delay 500
    Call Plugin.Bkgnd.MoveTo(hw,0,0)
    Delay 200
End Sub