-
关注Ta
-
- 注册时间 2014-10-29
- 最后登录 2016-05-06
-
- 发帖84
- 在线41小时
- 精华0
- DB768
- 威望0
- 保证金0
- 桃子0
- 鲜花0
- 鸡蛋0
-
访问TA的空间加好友用道具
|
自动逛地图遇怪打怪 零基础学按键精灵群(2群):372671254 流程 绑定游戏窗口 引用 今天我们要写的脚本有使用到大漠插件。 因为是多开脚本,所以查找句柄使用的是Search命令 后台绑定模式: 图色模式:dx3 鼠标模式:dx 键盘模式:dx 关于Search命令的详细说明以及大漠绑定模式如何获知 请参阅相关院刊:【院刊】-【201501期】沙盘后台绑定游戏 打开地图引用 《神武》游戏支持点击大地图进行移动的方式。打开地图的快捷键为Tab键。 为了避免地图已经打开的情况 我们要先判断地图有没有打开,没有打开的话才去按Tab键打开地图 这里要注意一点 那就是,地图没打开的情况下有两种情况 1、没进入战斗画面 2、进入了战斗画面 所以,打开地图的判断步骤如下1、地图没打开——>在不在战斗画面? 在战斗画面——>开始战斗 不在战斗画面——>打开地图 ——>随机点击地图上的坐标点2、地图打开了——>人物在不在移动? 在移动(说明还没到目的坐标)——> 不做任何操作 不在移动(说明到了目的坐标 或者 遇到了阻碍物停止了移动)——> 点击下一个随机坐标 本例子中,是通过找图方式来判断地图窗口是否出现 小编找的是红框框里的图片 蓝色框的区域里,经常会出现系统的横条提示信息,会遮挡住地图框影响找图,所以不取那个区域里的图片
随机点击地图上的坐标点 在QUI上画一个文本输入框 输入框里的内容为要移动的坐标信息 坐标与坐标之间用 | 隔开
随后在脚本中,我们读取文本输入框的内容 读取之后用分割函数 split 依据 | 分隔符 将其分割 Split函数分割之后,会将分割的内容存放在数组里 这里注意下通过 第一次分割,假如 数组(0) 存放的是: 28,29 dm.MoveTo 数组(0)这样写显然是错误的,会提示参数个数不对,那怎么办呢? {:4_95:} 不怕,我们有 Execute函数 Execute "dm.MoveTo " & 数组(0) 这样写就可以执行了
然后,我们前面说的要随机点 只要将数组下标进行随机就可以了 例如: Execute "dm.MoveTo " & 数组( Int(10* Rnd)) 关于Execute函数、随机函数的详细内容 请参阅相关院刊【院刊】-【201410期】 神奇的Execute语句 【院刊】-【201411期】细说 Rnd随机函数 引用 随机点完地图的坐标,就等着人物移动过去 那怎么才能知道人物已经到了那个点了呢?
这就要用到大漠的 IsDisplayDead 函数了
当人物在移动的过程中,坐标肯定在不停的变化,当坐标一段时间不变 则说明已经到了目的地, 或者前方有障碍物过不去 不管是到了目的地 还是有障碍物过不去 我们的处理方式都是 点击下一个随机坐标点 所以,我们使用 IsDisplayDead 函数监视坐标的变化即可 但是!在战斗画面里,坐标是一直不变的所以,利用 IsDisplayDead 函数监视坐标变化时,我们要先排除战斗画面,在战斗画面我们就不做监视操作。 遇到怪物则打怪小编的号是新号,所以选择的是 《清河镇外》 这个0-10级的练级地图,[/indent][indent] 在这个地图里走来走去,在走动的过程,走着走着就会进入战斗画面  小编是通过判断红框里的那个黄色三角形,来判断到了战斗画面了没 如果到了,则按下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 <> "" Then
- Exit For
- End If
- Next
- If i >= 20 Then
- TracePrint "大漠插件注册失败!"
- EndScript
- End If
- Set dm = nothing
- Delay 10
- End Function
- Sub OnThreadExit()
- '解绑
- dm_ret = dm.UnBindWindow()
- End Sub
Q文件下载: 神武-自动逛地图打怪.rar[点击下载](752 K) 下载次数:1 累计下载获得 DB 2 刀本文由按键学院提供技术支持 零基础学按键精灵2015年开始招生! 全面系统回合制脚本教学
[ 此帖被mimi_rice在2015-03-12 10:33重新编辑 ]
|