Delay 1000
Delay 1000
//**************************************************************************
//作者:Jimmyzs
//制作时间:2009-9-4 11:00 ~ 2009-9-5  2:00
//V1.1   1-解决上个版本怪在某些特殊位置出现导致的问题
//       2-修正了判断层位置时的BUG
//       3-加入了平时对技能的支持
//       4-退出时弹起所有按键
//V1.2   1-加入了寻找蓝球加蓝
//       2-加入了对玩家高度高于目标二层时下落一层时行走方向的再次判断
//       3-对层次判断提取为一个子函数
//V1.3   最终版--解决最右边层蓝球的问题和对左边怪物攻击方式的判断
//**************************************************************************
UserVar HpPer = 50 使用血瓶的血量百分比
UserVar MpPer = 30 寻找蓝球时的百分比
UserVar UseSkillMpPer = 70 平时使用技能的蓝量百分比
//定义变量与初始化
Dim hWnd, ClientRect, Ret(4), HpStep, HpX, HpY, MpX, MpY, UseSkillMpX, UseSkillMpY
Dim GameLeft, GameTop, GameRight, GameButtom
Dim MonX, MonY, PlayerX, PlayerY, BallX, BallY
Dim MonFloor, PlayerFloor, BallFloor, tempHigh, tempFloor
Dim HPColor, MpColor, MonColor, PlayerColor, FloorColor, SideColor, BallColor
Dim AttackMaxDis, MagicDis, AttackedDis, RelativeDis, GameState, FindBallState, MonDir, KeyNum
//MonColor 怪物的特征色--棒子 PlayerColor 人物的特征色--手臂 FloorColor 每层高度的特征色--绿色 MonFloor 怪物所在的高度层 PlayerFloor-玩家所在的高度层
HpColor = "0066FF": MpColor = "FF6600": MonColor = "4C7299": PlayerColor = "0033CC": FloorColor = "0B8648": SideColor = "004E88": BallColor = "CC6601"
MonFloor = 0: PlayerFloor = 0: BallFloor = 0
//GameState --含义 -1 没有发现怪物 0 发现怪物 1 普通攻击 2 魔法攻击
AttackMaxDis = 125: MagicDis = 330: AttackedDis = 104: GameState = -1: FindBallState = -1: MonDir = 1: KeyNum = 39: HpStep = 0.88: MpStep = 0.88
//--------------------------------------------------------------
//获得游戏窗口句柄和位置尺寸等信息以便操作
Plugin hWnd = Window.mousepoint()
Plugin ClientRect = Window.GetClientRect(hWnd)
//以下语句判断是否获得的是游戏窗口(游戏窗口尺寸是550x400)
If StrComp(Right(ClientRect, 7), "550|400") <> 0
    Messagebox("请将鼠标放在游戏窗口内启动脚本。")
    EndScript 
EndIf 
Rect = Split(ClientRect,"|",-1,1)
GameLeft = CInt(Rect(0))
GameTop = CInt(Rect(1))
GameRight = CInt(Rect(0)) + CInt(Rect(2))
GameButtom = CInt(Rect(1)) + CInt(Rect(3))
HpX = GameLeft + 80 + CInt( HpStep * HpPer)
HpY = GameTop + 31
MpX = GameLeft + 80 + CInt( MpStep * MpPer)
MaxMpX = GameLeft + 80 + CInt( MpStep * 90)
MpY = GameTop + 61
UseSkillMpX = GameLeft + 80 + CInt( MpStep * UseSkillMpPer)
UseSkillMpY = GameTop + 61
//系统和窗口初始化完毕------------------------------------------
While True
    Gosub AddHp
    Gosub PlayerMove
    Gosub GetMonInfo
    Gosub GetPlayerInfo
    Gosub MoveToMon
    Gosub MoveToBall
    Gosub AttackMon
EndWhile 
//左右移动
Sub PlayerMove
    If GameState = -1
        //判断地图边界则是通过地图最下面的二颗树的枝来判断的 //MinDir 行动方向, 1 向右 -1 向左
        VBSCall FindColorEx(GameLeft + 140, GameButtom - 3, GameRight - 140, GameButtom - 1, SideColor, 0, 0.9, SideX, SideY)
        If SideX > 0
            KeyUp KeyNum, 1
            If SideX < GameLeft + 200
                MonDir = 1
            Else 
                MonDir = -1
            EndIf 
        EndIf 
        KeyNum = 38 + MonDir
        KeyDown KeyNum, 1
    EndIf 
Return PlayerMove
//得到怪物信息
Sub GetMonInfo
    VBSCall FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, MonColor, 0, 0.9, MonX, MonY)
    Delay 2
    If MonY >0
        //得到怪物X中心坐标
        MonX = MonX + 15
        tempHigh = MonY
        Gosub GetFloor
        MonFloor = tempFloor
    EndIf 
Return GetMonInfo
//得到玩家信息
Sub GetPlayerInfo
    VBSCall FindColorEx(GameLeft, GameTop + 60, GameRight, GameButtom - 60, PlayerColor, 0, 0.9, PlayerX, PlayerY)
    Delay 2
    If PlayerY>0
        PlayerDir = 1
        // 默认认为玩家面象为右边,这里通过玩家特征点的坐标加偏移找玩家背后的衣服边框来判断面象DFDFDF
        //PlayerX + 12, PlayerY - 15, PlayerX + 16, PlayerY - 19
        VBSCall FindColorEx(PlayerX + 5, PlayerY - 4, PlayerX + 6, PlayerY - 3, "000000", 0, 0.9, HeadX, HeadY)
        If HeadX >0
            PlayerDir = 0