Python做脚本,python写脚本教程
在编目效果编码过程中,首先利用环境实现键盘模拟图像分析截图的相对位置移动。
影响
GIF大小限制很少记录,过程中加入了操作延迟*2以保证稳定性。
)如果判断速度太快,会误判当前位置,不仔细判断直接进行双延时处理))))。
每隔0.1-0.2秒采集并扫描一次窗口句柄的截图,获得人物的坐标X1和Y1以及左上角第一项的坐标X2和y2;
优先级(钱道具装备)
2.判断坐标差,计算大概的击键时间。
1)如果)两者都远离像素5)回到第一步,继续获取坐标。
2)如果)两者都远离像素5)跳到步骤3
3.运行模拟键X以拾取工具。如果数据仍然存在,请重新运行offset -1或12(此过程是为了避免某些项目的名称过长)。
p:如果是自动打怪物的脚本,可以先映射怪物,然后获取人和怪物的坐标,维护每个技能的钥匙(范围x,范围y,冷却时间)的钥匙映射对象。
如果判断在范围内,按技能责备。如果不可疑,就拿起道具。如果没有工具,则该图已被执行。
Emmmm,应该是全自动的吧…?
这里就不多讨论了。只是一时兴起。以游戏为例来实现这样一个想法。
前言在此声明,本博客仅作学习交流使用,不可用于任何商业途径与任何违法途径。如有侵权,请联系删除。
这个博客只说一个实现思路,不会贴出完整的代码,所以想要完整脚本的人要右转,不劳而获的人要右转,想从中获利的人要右转。不要在我无聊的博客上浪费你宝贵的时间。
从小就喜欢游戏,就算有时间也在想能不能用编程做一些辅助程序。于是我在网上摸索资料来实现。
这个简单的演示脚本是因为一点兴趣写的。我想通过编程做出真正有用的东西。对了,还可以增加自己的技能,对让人进步感兴趣。
使用环境语言:Python
使用的软件包:PIL,Win32,WinIO
环境:WinIO只能模拟PS/2键盘。是最早的圆口接口键盘。笔记本电脑一般是PS/2,台式机是外置的。我看到我的电脑没有PS/2接口,我做不到。
要实现键盘模拟的第一关,必须模拟鼠标键盘的输入,达到操作游戏的水平。一开始用java调用JNA,用几个winapi模拟,完美实现了游戏外的键盘操作。但在游戏中,通常会使用几种机制来阻止这些虚拟键生效,并调查了大量数据。
一开始用java模拟WinIO并不顺利。调用java脚本和一些基本方法总会有问题。例如,Use32在获得句柄后可以获得通用窗口,但不能获得DNF的界面句柄。此外,在使用WinIO的API时,键盘模拟总是丢失或延迟。百度查询失败可能导致缓存数据丢失或冲突。
重复输入abcdefg的结果如下
abefgabcdefabcefabcebcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgabcdefgacdfg放弃Java转Python后可以成功获取句柄,键盘模拟无损耗。Python的软件包是rabird.winio的参考资料
WinIO驱动级仿真向驱动发送命令,主要有两个端口。
KEY _密钥_命令=0x64命令端口
KBC密钥数据=0x60数据端口
完整的关键模拟方法包参考自网络。下面是发键盘按的那段。
defkey _ down(scancode):winio=_ _ get _ winio)(wait _ for _ buffer _ empty);winio . set _ port _ byte(KBC _ key _ cmd,0x D2);wait _ for _ buffer _ empty(;winio . set _ port _ byte(KBC _ key _ data(getscancode)scan code))scan code是一个键盘扫描代码。
自我参照
3359号
图像分析通过程序完成键盘模拟后,我知道简单的事情也可以通过编程来实现。要实现自动化,需要获取并分析人和怪物的坐标位置,掉落的工具的坐标位置等。最直观的方法当然是读取和检索内存。与其获取并修改游戏内存防止我被屏蔽,不如找个大图小图不就更好了吗?
虽然已经调查了大量的信息,但是通过相似性来比较大小因像素而异的两幅图像似乎不是很好。不知道有没有可能用字符识别代替人物地图,用字符识别读取人物坐标。我实际试过,发现马赛克的识别率和雪崩一样高效!
于是,他手写了一个在大图中找小图的演示。其实强行对比像素。当找到缩略图左上角第一个相同的像素时,比较四个角,然后比较中间的N个随机点。如果重合度在90以上,记录坐标。简单测试,效率还不错。从截图中找出小截图,创建。
电量基本100%,记录坐标只需要0.5秒。
关键问题马上就出现了,DNF的图像,只要你移动,图像肉眼看起来是一样的,但是!他内部像素有一些波动,比如同样是金色,但是RGB在一定范围内都是金色……找小图定位大图坐标的想法破灭了。
于是直接就改用了大图找某一像素的方式,一张图内如果出现某一个像素就直接定位该坐标,而这个像素,可以通过补丁插件强行用画图软件点一个点上去,图像分析是可以定位出像素点的。
截图,作为一种限制效率的方式,立刻暴露在截屏中。如果你的电脑每3秒截图一次,你做什么脚本?Python正好有一个window API,可以在0.2秒左右完成界面的截图,但是我需要的只是DNF的界面,这个时间压缩到了0.05-0.1秒。
快速截图如下
def window_capture(文件名):hwnd=win32gui。FindWindow(None,dundons and Warriors )#获取设备上下文DC(divice context)hwn DDC=win32 GUI。GetWindowDC (hwnd) Win32GUI。SetForegroundWindow (hwnd) #根据窗口的DC,得到MFC DC MFC DC=Win32UI。CreateDCFromhandle(HWNDDC)# MFC DC创建兼容的DC SaveDC=MFC DC。CreateCompatible DC () #创建bigmap保存图片save bitmap=win 32 ui . Create bitmap()#获取监视器信息left,top,right,bottom=win32gui。GetWindowRect(hwnd)width=right-left height=bottom-top # moniter dev=win 32 API。EnumDisplayMonitors(None,None)# w=moniter dev[0][2][2]# h=moniter dev[0][2][3]# printw,h # image size #为位图保存腾出空间位图。CreateCompatibleBitmap (MFC DC,宽度,高度)# height saveDC,将截图保存到saveDC。选择对象(saveBitmap) #剪切图片SavedC。Bitblt ((0,0),(宽度,高度),MFC DC,(0,0)从左上角(0,0),Win32。src复制)保存位图。savebitmapfile (savedc,filename)返回宽度,高度你在0.05-0.1秒内得到图片后,可以通过图像分析找到像素并定位,直接返回。不需要分析整张图片的像素,所以坐标获取只需要0.2秒。
相对位置移动这种获取坐标的方式是高效的,完全可以一直花一个周期来获取坐标。
根据获得的角色位置和相对位置,进行关键模拟和打怪物或捡的动作,直到地图上怪物和道具的坐标循环完毕,我就不贴太多代码了。结束。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。