脚本源文件下载:- 您所在的用户组无法下载或查看附件
核心原理窗口定位:网络游戏窗口化之后左上角都有该游戏的LOGO,利用这个LOGO我们可以定位窗口的位置。当然也可以利用游戏窗口内某个固定UI来定位窗口,比如等级之类的。
射击动作触发:FPS射击类游戏一般都有个开枪的通用方法,就是判断准星附近是否出现红名。利用游戏窗口中准星相对画面位置固定的特点,可以在固定区域中判断是否出现红名,如果发现,则触发开枪操作。
游戏环境:windows7X32位系统
游戏默认设置,分辨率1280X768
步骤:1、体验手动操作游戏玩几个小时,深层次体验游戏机制。体验实际游戏操作的各个流程和一些小细节(当然要注意适当休息)
- 您所在的用户组无法下载或查看附件
2、操作分析体验过程中发现触发人工开枪操作的一般是准星附近出现红名,所以对于自动开枪这个主功能就有了实现的思路——特定区域出现红色后进行相关操作。
在使用**连射时枪口会向上自动偏移,遂打开按键精灵录制功能录制了手动压枪口的鼠标操作,完毕后对其分析,初步研究出压枪动作的基本原理:有规律地向下相对移动鼠标,以抵消游戏内偏移。
3、获取素材进入正题,由于盒子在游戏全屏后无法找色,所以直接写窗口化状态下的盒子脚本。这时候只需要获取一些特定情况下的截图即可
平常状态下,将游戏窗口移到坐标为0.0的位置上(不清楚如何移动窗口的请站内搜索如何移动窗口到0,0位置),然后截图
- 您所在的用户组无法下载或查看附件
4、素材处理素材已备好,现在可以从上面获取所需的相关信息了
首先是左上角的LOGO截取
截取左上角的LOGO后,打开画图软件,将画布尺寸调到最小,如图(白色部分):
- 您所在的用户组无法下载或查看附件
然后将截取的LOGO黏贴进去
- 您所在的用户组无法下载或查看附件
使用放大镜将图片放到最大
- 您所在的用户组无法下载或查看附件
将LOGO附近不需要识别的位置涂成某个单一颜色(个人习惯涂成深绿色),并且适当缩小此图片,让外边框尽量越窄越好,LOGO图片本身不一定要原封不动,可以对此做适当剪裁,但是要保持特征
- 您所在的用户组无法下载或查看附件
处理完毕之后另存为“逆战.bmp”,新建盒子脚本并且添加此图片为附件,在脚本中编写找图命令:
- FindPic 0,0,1280,768,"Attachment:\逆战3.bmp",0.85,x,y
- If x >= 0
- MessageBox x&","&y
- End If
复制代码写入盒子中,切出游戏窗口,运行盒子,弹窗中的既是此定位图的坐标,脚本中的其他坐标都需以此坐标为原点
5、关键位置坐标获取画图软件有个非常好用的功能,鼠标移到图像任意位置,左下角的状态栏都会显示该处的像素位置,如果是全屏幕截图,则像素位置就是该点坐标。
下图中显示鼠标所指的位置为107,85的像素位置,图片尺寸为1920X1080
利用这个特性我们就可以轻易定位我们想要的特征区域的坐标。
- 您所在的用户组无法下载或查看附件
然后利用鼠标在下图所示区域内获取区域左上角和右下角的坐标,并且与之前得到的弹窗坐标相差。即可得出此处相对于定位LOGO图的相对坐标。
- 您所在的用户组无法下载或查看附件
如法炮制准星的区域左上角和右下角坐标
- 您所在的用户组无法下载或查看附件
6、代码编写- //游戏使用默认设置,游戏窗口分辨率为:1280X768
- //进入房间前运行脚本,如果进入房间后请按ESC,再运行脚本
- t1=Rnd Mod 5
- FindPic 0,0,1280,768,"Attachment:\逆战.bmp",0.85,x,y
- If x <= 0
- MessageBox "未找到游戏窗口"
- End If
- While 1=1
- //判断绿色准星是否存在,以此判定是否使用狙击枪
- FindColorEx x + 616, y + 360, x + 650, y + 400,&H00FD00,0,0.85,x1,y1
- If x1 > 0
- Gosub 多发
- Else
- Gosub 单发
- End If
- Delay 30
- EndWhile
- Sub 多发
- FindColorEx x + 596, y + 457, x + 678, y + 476,&H0101DF,0,0.85,x1,y1
- If x1 > 0
- //使用压枪打法,间隔时间下压枪口
- Delay 10+t1
- LeftDown 1
- For i=0 To 10 Step 1
- Delay 40
- MoveR 0,1
- Next
- LeftUp 1
- End If
- End Sub
- Sub 单发
- FindColorEx x + 596, y + 457, x + 678, y + 476,&H0101DF,0,0.85,x1,y1
- If x1 > 0
- //一次只开一枪
- Delay 10+t1
- LeftClick 1
- End If
- End Sub
复制代码