Python教程

当前位置:小码王 > 学习教程 > Python教程

python语言中简单的DNF脚本
导读:python语言可以说是现在比较流行的一种语言,作为少儿编程的同学可以掌握一些简单的python编程,那么大家要如何掌握python呢,今天小码王少儿编程python培训机构为大家介绍下python的DNF脚本。键盘模拟第一层想到的要能

  python语言可以说是现在比较流行的一种语言,作为少儿编程的同学可以掌握一些简单的python编程,那么大家要如何掌握python呢,今天小码王少儿编程python培训机构为大家介绍下python的DNF脚本。


  键盘模拟


  第一层想到的要能到操作游戏的层面肯定是要模拟鼠标键盘的输入了。一开始用java调用JNA来使用一些winapi来进行模拟,在游戏外能完美实现键盘的操作,但是游戏内部通常采用了一些机制来防止这些虚拟按键的生效,于是在查阅了许多资料后找到了WinIO的方式来进行驱动级的按键模拟。


  一开始用java模拟WinIO并不顺利,java在脚本以及一些底层方法的调用上总是存在问题,比如Use32获取句柄能获取到一般的窗口但是获取不到DNF的界面句柄,又比如在使用WinIO的API时键盘模拟总是会丢失或者延迟,百度查询未果,可能是缓存数据丢失或者冲突。


  重复输入abcdefg结果如下

1.png

  弃用Java转用Python后句柄能正常获取并且键盘模拟没有出现过任何丢失情况,Python中的包为rabird.winio可查阅资料。


  WinIO驱动级模拟是给驱动发送指令,主要是两个端口,


  KBC_KEY_CMD=0x64命令端口


  KBC_KEY_DATA=0x60数据端口


  完整的按键模拟方法包引用自网络,以下为发送键盘按下的一段。

2.png

  图像分析


  DNF的图像,只要你一动,图片肉眼看上去长的是一样的,但是!!!!他的内部像素点就出现了一些波动,比如同样是金色,但是RGB在某一个范围内都是金色…大图找小图来定位坐标的想法破灭。


  于是直接就改用了大图找某一像素的方式,一张图内如果出现某一个像素就直接定位该坐标,而这个像素,可以通过补丁插件强行用画图软件点一个点上去,图像分析是可以定位出像素点的。


  屏幕快照


  于是制约效率的方式马上就暴露在了屏幕快照上,如果你电脑3秒钟截图一次,那还做什么个脚本呢?正巧Python有一个window的API能在0.2秒左右完成界面的截图,而我需要的只是DNF的界面,这个时间就压缩到了0.05-0.1秒。


  快速截图方式如下

3.png

  在0.05-0.1秒内获取到图片后就可以通过图片分析找到像素并定位直接返回,也不需要对整张图片的像素进行分析,于是坐标获取就是0.2秒一次


  相对位置移动


  按这种获取坐标的方式效率,完全可以采取循环来一直获取坐标


  根据获取到的人物位置与相对位置来进行按键模拟并执行打怪或拾取的动作,直到地图上没有怪物及道具的坐标循环结束,过多的代码我就不贴了,完结。

4.png

  以上便是南京小码王培训机构对于python的简单介绍,如果您相对python有更多的了解,可以和我们的在线联系,南京小码王少儿编程培训机构,我们这里有丰富的趣味课程让孩子在玩的过程中,就可以学到编程知识。