- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2015-03-11 22:34
|
|只看楼主
自动逛地图遇怪打怪 本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403 零基础学按键精灵群(2群):372671254
学院实战班目前在教授的是回合制游戏 《神武》的脚本功能 小编凑热闹,也跟着去玩了玩 今天在这里和大家分享下,自动战斗功能的脚本编写流程~
|
| 流程 1、打开地图 (快捷键Tab) 2、随机点击地图上的坐标点 3、如果遇到怪物则打怪(自动打怪快捷键Ctrl+A)
技术难点: 1、随机移动过程中,如何判断人物是否已经移动到了指定坐标点。 2、随机点击一组坐标的实用写法。 | 绑定游戏窗口今天我们要写的脚本有使用到大漠插件。 | 因为是多开脚本,所以查找句柄使用的是Search命令 后台绑定模式: 图色模式:dx3 鼠标模式:dx 键盘模式:dx 关于Search命令的详细说明以及大漠绑定模式如何获知 请参阅相关院刊:【院刊】-【201501期】沙盘后台绑定游戏打开地图《神武》游戏支持点击大地图进行移动的方式。打开地图的快捷键为Tab键。 | 为了避免地图已经打开的情况 我们要先判断地图有没有打开,没有打开的话才去按Tab键打开地图 这里要注意一点 那就是,地图没打开的情况下有两种情况 1、没进入战斗画面 2、进入了战斗画面所以,打开地图的判断步骤如下1、地图没打开——>在不在战斗画面? 在战斗画面——>开始战斗 不在战斗画面——>打开地图——>随机点击地图上的坐标点2、地图打开了——>人物在不在移动? 在移动(说明还没到目的坐标)——> 不做任何操作 不在移动(说明到了目的坐标 或者 遇到了阻碍物停止了移动)——> 点击下一个随机坐标
本例子中,是通过找图方式来判断地图窗口是否出现
- 您所在的用户组无法下载或查看附件
小编找的是红框框里的图片 蓝色框的区域里,经常会出现系统的横条提示信息,会遮挡住地图框影响找图,所以不取那个区域里的图片
随机点击地图上的坐标点
- 您所在的用户组无法下载或查看附件
在QUI上画一个文本输入框 输入框里的内容为要移动的坐标信息 坐标与坐标之间用 | 隔开
随后在脚本中,我们读取文本输入框的内容 读取之后用分割函数 split 依据 | 分隔符 将其分割 Split函数分割之后,会将分割的内容存放在数组里 这里注意下 通过 第一次分割,假如 数组(0) 存放的是: 28,29 dm.MoveTo 数组(0) 这样写显然是错误的,会提示参数个数不对,那怎么办呢?
不怕,我们有 Execute函数 Execute "dm.MoveTo " & 数组(0) 这样写就可以执行了
然后,我们前面说的要随机点 只要将数组下标进行随机就可以了 例如: Execute "dm.MoveTo " & 数组( Int(10* Rnd)) 关于Execute函数、随机函数的详细内容 请参阅相关院刊【院刊】-【201410期】 神奇的Execute语句【院刊】-【201411期】细说 Rnd随机函数随机点完地图的坐标,就等着人物移动过去 那怎么才能知道人物已经到了那个点了呢?
| 这就要用到大漠的 IsDisplayDead 函数了
命令名称 | IsDisplayDead
| 命令功能 | 判断指定的区域,在指定的时间内(秒),图像数据是否一直不变.(卡屏).
| 命令参数 | x1 :区域的左上X坐标 y1 :区域的左上Y坐标 x2 :区域的右下X坐标 y2 :区域的右下Y坐标 t :需要等待的时间,单位是秒
| 返 回 值 | 0 : 没有卡屏,图像数据在变化. 1 : 卡屏. 图像数据在指定的时间内一直没有变化.
|
当人物在移动的过程中,坐标肯定在不停的变化,当坐标一段时间不变 则说明已经到了目的地, 或者前方有障碍物过不去 不管是到了目的地 还是有障碍物过不去 我们的处理方式都是 点击下一个随机坐标点 所以,我们使用 IsDisplayDead 函数监视坐标的变化即可 但是!在战斗画面里,坐标是一直不变的所以,利用 IsDisplayDead 函数监视坐标变化时,我们要先排除战斗画面,在战斗画面我们就不做监视操作。
- 您所在的用户组无法下载或查看附件
遇到怪物则打怪小编的号是新号,所以选择的是 《清河镇外》 这个0-10级的练级地图, 在这个地图里走来走去,在走动的过程,走着走着就会进入战斗画面 - 您所在的用户组无法下载或查看附件
小编是通过判断红框里的那个黄色三角形,来判断到了战斗画面了没 如果到了,则按下Ctrl+A键 开始自动战斗代码- Global Hwnd
- Call 注册大漠()
- HwndEx = Plugin.Window.Search("神 武 - ")
- arr1 = split(HwndEx, "|")
- For i = 0 To UBound(arr1) - 1
- TracePrint arr1(i)
- Hwnd = arr1(i)
- 线程ID = BeginThread(主程序)
- Next
- Sub 主程序()
- 句柄 = Hwnd
- Set dm = createobject("dm.dmsoft")
- dm_ret = dm.setpath("c:\test_game")
- dm_ret = dm.bindwindow(句柄, "dx3", "dx", "dx", 0)
- If dm_ret = 1 Then
- TracePrint "绑定窗口成功"
- Do
- '判断地图是否打开
- If 找图(101,491,143,536, "地图.bmp") = "没找到" Then
- Delay 1800
- '判断是否有在战斗界面
- If 找图(518,1,558,30,"战斗.bmp") = "找到" Then
- '自动出招(Ctrl+A)
- dm.KeyDown 17
- Delay 20
- dm.KeyPress 65
- Delay 20
- dm.KeyUp 17
- Do
- If 找图(518,1,558,30,"战斗.bmp") = "没找到" Then
- Exit Do
- End If
- Loop
- Else
- TracePrint "不在战斗画面"
- Call 逛地图()
- End If
- Else
- '判断是否停下来
- If (dm.IsDisplayDead(112, 6, 190, 21, 3) = 1) and (找图(518,1,558,30,"战斗.bmp") = "没找到") Then
- TracePrint "不走了"
- Call 逛地图()
- Else
- TracePrint "行走中"
- End If
- End If
- Delay 300
- Loop
- Else
- TracePrint "绑定失败"
- End If
- End Sub
- Function 找图(x1, y1, x2, y2, 图片)
- dm_ret = dm.FindPic(x1, y1, x2, y2,图片,"000000",0.9,0,intX,intY)
- If intX >= 0 and intY >= 0 Then
- 找图 = "找到"
- Else
- 找图 = "没找到"
- End If
- End Function
- Function 逛地图()
- Do
- If 找图(101,491,143,536, "地图.bmp")="找到" Then
- Exit Do
- Else
- '打开地图窗口
- TracePrint "打开地图窗口"
- dm.KeyPress 9
- Delay 300
- End If
- Delay 300
- Loop
- '随机点击一组坐标
- 坐标组 = split(form1.inputbox1.text, "|")
- 随机元素 = 随机(0, UBound(坐标组))
- TracePrint 坐标组(随机元素)
- Execute "dm.MoveTo " & 坐标组(随机元素)
- Delay 20
- dm.LeftClick
-
- End Function
- Function 随机(最小值, 最大值)
- Randomize
- 随机 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
- End Function
- Function 注册大漠()
- Dim i
- '释放附件内容
- PutAttachment "C:\test_game", "*.*"
- Set ws = createobject("Wscript.Shell")
- For i = 0 To 20
- '注册atl跟dm插件
- ws.run("regsvr32 atl.dll -s")
- ws.run ("regsvr32 C:\test_game\dm.dll -s")
- Delay 200
- Set ws = nothing
- Set dm = createobject("dm.dmsoft")
- ver = dm.ver()
- '输出版本号
- If ver Q文件下载:
- 您所在的用户组无法下载或查看附件
本文由按键学院提供技术支持 零基础学按键精灵2015年开始招生!
全面系统回合制脚本教学
|