外挂想找到游戏中的人物、怪物、事件、宝藏或其他物件和消息,无外乎通过三种方法:
1、用钩子钩住游戏进程,截获游戏中的消息和数据,经过分析找到相关目标;
2、截获通讯报文(监听技术),然后解码,解读游戏底层的交互数据,找到相关目标;
3、对屏幕上的像素、色彩、图形进行取点,分析图形含义,进而找到相关的目标。
我使用的就是第三个方法----最为笨拙的方法,对屏幕像素进行分析来寻找目标。举个简单的例子:
游戏上人物、NPC、怪物的头顶都有一个血条,NPC的血条是蓝色的、人物和怪物的血条是红色的。观察不难发现,游戏中纯红色的除了血条之外,基本没有了。也就是说,只要对屏幕进行扫描,找到红色像素坐标、再经过一个小小的偏移,就能够找到一个目标人物或怪物。
再举个例子,打死怪物之后掉落的宝藏,如果在游戏选项中选择"显示宝物",游戏过程中所有掉落在地上的宝藏上面,都会有一个褐色的宝物名称的文字描述,这个褐色的像素便成为了寻找宝藏的特征。
有了以上的基本依据,便可实现自动寻找怪物和宝藏的机制了。但是值得注意的是这款游戏的可视范围为800*600、但是游戏操作视角并没有这么大,基本上屏幕下三分之一都是控制台,所以对于扫描怪物和宝藏模块而言,只需要对800*400的屏幕范围进行扫描。
另外还可能有一个需要注意的问题,对于宽屏用户而言,屏幕分辨率还是不是800*600我并不确定,因为我没有宽屏的测试环境。
进一步对寻宝、寻怪进行优化,可将扫描坐标进行归类----挂物的红血条并不会出现在任意位置、而只会出现在固定的位置上,因为这个游戏的"步进坐标"是固定的,并不会出现"走半步"这种情况。
因为寻怪是通过红色的血条特征值寻找,因而还可能找到其他玩家,或其他玩家带的英雄或宠物,这怎么解决呢?我的代码写的比较简单----不进行处理,无论找到的是人是妖,一概当作怪物处理,用鼠标左键点它一下,然后Sleep三、五秒钟。即便点到了正常玩家身上,也不会有任何影响、更不会去PK玩家。
点击怪物之后,游戏角色就会跑动起来、并过去杀怪。这里有三点需要进一步考虑的:
一、等待多长时间?不同的怪物被杀死的时间并不相同,不能一概而论。比较智能的做法是,开始杀怪之后,继续用取像素功能判断怪物头顶的血条长度变化,根据这个长度变化去判断怪物被杀死了?还是这个怪物太难打、杀不死;
二、人物和怪物之间有障碍物怎么办?依然是通过取像素功能,只需要在点击了怪物之后等待一小段时间、再判断怪物在哪里,若已经到了人物周围,则说明走到了怪物身边;若人物周围没有出现红色特征值,便说明人物没有走到那个怪物身边,放弃目标、寻找下一个目标即可;
三、找怪的策略对人物走动的影响:找怪过程是一个对屏幕扫描的过程,根据扫描规则的不同,人物走动将出现不同的特征。若从左上角开始逐行扫描、人物将逐渐向地图左上方移动;反之亦反。从左上角逐行扫描的方法会出现问题,试想人物周围都是怪物、而偏偏左上角有一个单独的怪物,这时候我们的英雄会傻傻的跑向左上角、还不一定能跑过去,因为可能被身边的怪物障碍住。
综上而言,对怪物的寻找应该从人物中心开始,以螺旋发散开的路径进行扫描,找到怪物之后记住其原始坐标(Xa,Ya),自动点击其坐标,之后等待3秒钟,再次对屏幕进行中心开始的发散扫描,此时再次找到怪物,其坐标若仍为(Xa,Ya)则继续寻找、若坐标变化成(Xb,Yb),且(Xb,Yb)与中心人物距离为固定值(贴近人物身体),则开始判断怪物血量下降速度......
最后当(Xb,Yb)的血条特征消失后,再以(Xb,Yb)为中心发散扫描宝物特征像素,之后去捡宝(我只捡金币和高级装备、用游戏中的捡宝过滤机制配合实现)。
《热血传奇自动杀羊机器人开发日志》目录列表:
热血传奇自动杀羊机器人开发日志(1)----引子,为什么要写这个程序;
热血传奇自动杀羊机器人开发日志(2)----钩子技术与反外挂技术是对攻防较量;
热血传奇自动杀羊机器人开发日志(3)----实现一个不用钩子技术的简单外挂;
热血传奇自动杀羊机器人开发日志(4)----如何找寻怪物、宝藏、玩家和NPC;
热血传奇自动杀羊机器人开发日志(5)----走动范围的控制与修正;
热血传奇自动杀羊机器人开发日志(6)----如何获取当前坐标、如何确定当前HP和MP值;
热血传奇自动杀羊机器人开发日志(7)----更智能的走动范围控制和自动补红、补蓝;
热血传奇自动杀羊机器人开发日志(8)----又是验证码识别技术;
热血传奇自动杀羊机器人开发日志(9)----至此,应该基本完成了,但还有许多可进一步完善的地方、人工智能。
1、用钩子钩住游戏进程,截获游戏中的消息和数据,经过分析找到相关目标;
2、截获通讯报文(监听技术),然后解码,解读游戏底层的交互数据,找到相关目标;
3、对屏幕上的像素、色彩、图形进行取点,分析图形含义,进而找到相关的目标。
我使用的就是第三个方法----最为笨拙的方法,对屏幕像素进行分析来寻找目标。举个简单的例子:
游戏上人物、NPC、怪物的头顶都有一个血条,NPC的血条是蓝色的、人物和怪物的血条是红色的。观察不难发现,游戏中纯红色的除了血条之外,基本没有了。也就是说,只要对屏幕进行扫描,找到红色像素坐标、再经过一个小小的偏移,就能够找到一个目标人物或怪物。
再举个例子,打死怪物之后掉落的宝藏,如果在游戏选项中选择"显示宝物",游戏过程中所有掉落在地上的宝藏上面,都会有一个褐色的宝物名称的文字描述,这个褐色的像素便成为了寻找宝藏的特征。
有了以上的基本依据,便可实现自动寻找怪物和宝藏的机制了。但是值得注意的是这款游戏的可视范围为800*600、但是游戏操作视角并没有这么大,基本上屏幕下三分之一都是控制台,所以对于扫描怪物和宝藏模块而言,只需要对800*400的屏幕范围进行扫描。
另外还可能有一个需要注意的问题,对于宽屏用户而言,屏幕分辨率还是不是800*600我并不确定,因为我没有宽屏的测试环境。
进一步对寻宝、寻怪进行优化,可将扫描坐标进行归类----挂物的红血条并不会出现在任意位置、而只会出现在固定的位置上,因为这个游戏的"步进坐标"是固定的,并不会出现"走半步"这种情况。
因为寻怪是通过红色的血条特征值寻找,因而还可能找到其他玩家,或其他玩家带的英雄或宠物,这怎么解决呢?我的代码写的比较简单----不进行处理,无论找到的是人是妖,一概当作怪物处理,用鼠标左键点它一下,然后Sleep三、五秒钟。即便点到了正常玩家身上,也不会有任何影响、更不会去PK玩家。
点击怪物之后,游戏角色就会跑动起来、并过去杀怪。这里有三点需要进一步考虑的:
一、等待多长时间?不同的怪物被杀死的时间并不相同,不能一概而论。比较智能的做法是,开始杀怪之后,继续用取像素功能判断怪物头顶的血条长度变化,根据这个长度变化去判断怪物被杀死了?还是这个怪物太难打、杀不死;
二、人物和怪物之间有障碍物怎么办?依然是通过取像素功能,只需要在点击了怪物之后等待一小段时间、再判断怪物在哪里,若已经到了人物周围,则说明走到了怪物身边;若人物周围没有出现红色特征值,便说明人物没有走到那个怪物身边,放弃目标、寻找下一个目标即可;
三、找怪的策略对人物走动的影响:找怪过程是一个对屏幕扫描的过程,根据扫描规则的不同,人物走动将出现不同的特征。若从左上角开始逐行扫描、人物将逐渐向地图左上方移动;反之亦反。从左上角逐行扫描的方法会出现问题,试想人物周围都是怪物、而偏偏左上角有一个单独的怪物,这时候我们的英雄会傻傻的跑向左上角、还不一定能跑过去,因为可能被身边的怪物障碍住。
综上而言,对怪物的寻找应该从人物中心开始,以螺旋发散开的路径进行扫描,找到怪物之后记住其原始坐标(Xa,Ya),自动点击其坐标,之后等待3秒钟,再次对屏幕进行中心开始的发散扫描,此时再次找到怪物,其坐标若仍为(Xa,Ya)则继续寻找、若坐标变化成(Xb,Yb),且(Xb,Yb)与中心人物距离为固定值(贴近人物身体),则开始判断怪物血量下降速度......
最后当(Xb,Yb)的血条特征消失后,再以(Xb,Yb)为中心发散扫描宝物特征像素,之后去捡宝(我只捡金币和高级装备、用游戏中的捡宝过滤机制配合实现)。
《热血传奇自动杀羊机器人开发日志》目录列表:
热血传奇自动杀羊机器人开发日志(1)----引子,为什么要写这个程序;
热血传奇自动杀羊机器人开发日志(2)----钩子技术与反外挂技术是对攻防较量;
热血传奇自动杀羊机器人开发日志(3)----实现一个不用钩子技术的简单外挂;
热血传奇自动杀羊机器人开发日志(4)----如何找寻怪物、宝藏、玩家和NPC;
热血传奇自动杀羊机器人开发日志(5)----走动范围的控制与修正;
热血传奇自动杀羊机器人开发日志(6)----如何获取当前坐标、如何确定当前HP和MP值;
热血传奇自动杀羊机器人开发日志(7)----更智能的走动范围控制和自动补红、补蓝;
热血传奇自动杀羊机器人开发日志(8)----又是验证码识别技术;
热血传奇自动杀羊机器人开发日志(9)----至此,应该基本完成了,但还有许多可进一步完善的地方、人工智能。
Leave a comment