按键精灵游戏脚本开发教程:自动逛地图打怪

按键精灵游戏脚本开发教程:自动逛地图打怪

2023年6月22日发(作者:)

按键精灵游戏脚本开发教程:自动逛地图打怪

来源:按键学院 【按键精灵】

学院实战班目前在教授的是回合制游戏 《神武》的脚本功能

小编凑热闹,也跟着去玩了玩

今天在这里和大家分享下,自动战斗功能的脚本编写流程~

流程

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 数组(0)

这样写显然是错误的,会提示参数个数不对,那怎么办呢?

不怕,我们有 Execute函数

Execute " " & 数组(0)

这样写就可以执行了

然后,我们前面说的要随机点

只要将数组下标进行随机就可以了

例如:

Execute " " & 数组( Int(10* Rnd))

关于Execute函数、随机函数的详细内容

请参阅相关院刊

【院刊】-【201410期】 神奇的Execute语句

【院刊】-【201411期】细说 Rnd随机函数

随机点完地图的坐标,就等着人物移动过去

那怎么才能知道人物已经到了那个点了呢?

这就要用到大漠的 IsDisplayDead 函数了

当人物在移动的过程中,坐标肯定在不停的变化,当坐标一段时间不变

则说明已经到了目的地,

或者前方有障碍物过不去

不管是到了目的地 还是有障碍物过不去

我们的处理方式都是 点击下一个随机坐标点

所以,我们使用 IsDisplayDead 函数监视坐标的变化即可

但是!在战斗画面里,坐标是一直不变的

所以,利用 IsDisplayDead 函数监视坐标变化时,我们要先排除战斗画面,在战斗画面我们就不做监视操作。

遇到怪物则打怪

小编的号是新号,所以选择的是 《清河镇外》 这个0-10级的练级地图,

在这个地图里走来走去,在走动的过程,走着走着就会进入战斗画面

小编是通过判断红框里的那个黄色三角形,来判断到了战斗画面了没

如果到了,则按下Ctrl+A键 开始自动战斗

代码

Global Hwnd

Call 注册大漠()

HwndEx = ("神 武 - ")

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_ret = h("c:test_game")

dm_ret = ndow(句柄, "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)

n 17

Delay 20

ss 65

Delay 20

17

Do

If 找图(518,1,558,30,"战斗.bmp") = "没找到" Then

Exit Do

End If

Loop

Else

TracePrint "不在战斗画面"

Call 逛地图()

End If

Else

'判断是否停下来

If (layDead(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 = c(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 "打开地图窗口"

ss 9

Delay 300

End If

Delay 300

Loop

'随机点击一组坐标

坐标组 = split(, "|")

随机元素 = 随机(0, UBound(坐标组))

TracePrint 坐标组(随机元素)

Execute " " & 坐标组(随机元素)

Delay 20

ick

End Function

Function 随机(最小值, 最大值)

Randomize

随机 = Int((最大值 - 最小值 + 1) * Rnd + 最小值)

End Function

Function 注册大漠()

Dim i

'释放附件内容

PutAttachment "C:test_game", "*.*"

Set ws = createobject("")

For i = 0 To 20

'注册atl跟dm插件

("regsvr32 -s")

("regsvr32 C:test_ -s")

Delay 200

Set ws = nothing

Set dm = createobject("")

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 = Window()

End Sub

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687424314a9046.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信