• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201503期】简单几步学会自动逛地图打怪脚本[后台多开... [复制链接]

1#

自动逛地图遇怪打怪


本文按键学院提供技术支持








按键学院交流群(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键 开始自动战斗





代码
  1. Global Hwnd
  2. Call 注册大漠()
  3. HwndEx = Plugin.Window.Search("神 武 - ")
  4. arr1 = split(HwndEx, "|")

  5. For i = 0 To UBound(arr1) - 1
  6. TracePrint arr1(i)
  7. Hwnd = arr1(i)
  8. 线程ID = BeginThread(主程序)
  9. Next

  10. Sub 主程序()
  11. 句柄 = Hwnd
  12. Set dm = createobject("dm.dmsoft")
  13. dm_ret = dm.setpath("c:\test_game")
  14. dm_ret = dm.bindwindow(句柄, "dx3", "dx", "dx", 0)
  15. If dm_ret = 1 Then
  16. TracePrint "绑定窗口成功"
  17. Do
  18. '判断地图是否打开
  19. If 找图(101,491,143,536, "地图.bmp") = "没找到" Then
  20. Delay 1800
  21. '判断是否有在战斗界面
  22. If 找图(518,1,558,30,"战斗.bmp") = "找到" Then
  23. '自动出招(Ctrl+A)
  24. dm.KeyDown 17
  25. Delay 20
  26. dm.KeyPress 65
  27. Delay 20
  28. dm.KeyUp 17
  29. Do
  30. If 找图(518,1,558,30,"战斗.bmp") = "没找到" Then
  31. Exit Do
  32. End If
  33. Loop
  34. Else
  35. TracePrint "不在战斗画面"
  36. Call 逛地图()
  37. End If
  38. Else
  39. '判断是否停下来
  40. If (dm.IsDisplayDead(112, 6, 190, 21, 3) = 1) and (找图(518,1,558,30,"战斗.bmp") = "没找到") Then
  41. TracePrint "不走了"
  42. Call 逛地图()
  43. Else
  44. TracePrint "行走中"
  45. End If
  46. End If
  47. Delay 300
  48. Loop
  49. Else
  50. TracePrint "绑定失败"
  51. End If
  52. End Sub

  53. Function 找图(x1, y1, x2, y2, 图片)
  54. dm_ret = dm.FindPic(x1, y1, x2, y2,图片,"000000",0.9,0,intX,intY)
  55. If intX >= 0 and intY >= 0 Then
  56. 找图 = "找到"
  57. Else
  58. 找图 = "没找到"
  59. End If
  60. End Function

  61. Function 逛地图()
  62. Do
  63. If 找图(101,491,143,536, "地图.bmp")="找到" Then
  64. Exit Do
  65. Else
  66. '打开地图窗口
  67. TracePrint "打开地图窗口"
  68. dm.KeyPress 9
  69. Delay 300
  70. End If
  71. Delay 300
  72. Loop
  73. '随机点击一组坐标
  74. 坐标组 = split(form1.inputbox1.text, "|")
  75. 随机元素 = 随机(0, UBound(坐标组))
  76. TracePrint 坐标组(随机元素)
  77. Execute "dm.MoveTo " & 坐标组(随机元素)
  78. Delay 20
  79. dm.LeftClick

  80. End Function

  81. Function 随机(最小值, 最大值)
  82. Randomize
  83. 随机 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)
  84. End Function

  85. Function 注册大漠()
  86. Dim i
  87. '释放附件内容
  88. PutAttachment "C:\test_game", "*.*"
  89. Set ws = createobject("Wscript.Shell")
  90. For i = 0 To 20
  91. '注册atl跟dm插件
  92. ws.run("regsvr32 atl.dll -s")
  93. ws.run ("regsvr32 C:\test_game\dm.dll -s")
  94. Delay 200
  95. Set ws = nothing
  96. Set dm = createobject("dm.dmsoft")
  97. ver = dm.ver()
  98. '输出版本号
  99. If ver Q文件下载:
    您所在的用户组无法下载或查看附件



    本文按键学院提供技术支持

    零基础学按键精灵2015年开始招生!

    全面系统回合制脚本教学




    已有4评分我要评分查看所有评分

    本主题由 超级版主 瑞祥幽冥狼 于 2023/8/16 16:48:21 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    看看 学习下

    3#

    感受一下

    4#

    谢谢分析。。。。。。。。。。。。。。。。。。。。。。。。。。。

    5#

    方法反反复复方法反反复复

    6#


    7#

    取那个区域里的图片

    8#

    454545454

    9#

    地对地导弹

    10#

    笑嘻嘻

    承接各类脚本
    QQ:184068599

    11#

    1111111111111

    12#

    201503期】简单几步学会自动逛地图打怪脚本[后台多开]

    办公脚本
    自动操作
    网页填表
    数据库
    棋牌类游戏
    游戏练级任务主线
    模拟器,手机app操作脚本定制
    职业作者定制脚本
    13#

    64444446666

    14#


    15#

    42343545

    16#

    学习学习。感谢。

    17#

    来学习了

    18#

    xiexiefnixnag

    19#

    888888888888888888888888888888

    20#

    感謝LZ分享

    发新话题 回复该主题