[教程] 冷血课堂1--如何通过读取颜来认识数字?
记得很久以前曾经跟兄弟论坛上的一个朋友说过,猎手确实就是一个读的脚本,根本没有涉及读取内存。不是按键精灵不支持读取内存地址(按键精灵从内存地址中读取一个数字,还是很简单的,一条命令就可以实现),也不是说游戏中的数值多么难以得到,以热血江湖为例,那些常用数值的地址,全是固定地址,要到那些地址,实在是太简单了,相对于那些采取动态地址的网络游戏,寻热血江湖的地址就是小儿科了。当然,这不是本文的重点,今天,我不是来教大家地址的,而是教大家如何通过另外一种方法得到游戏中我们需要的数值,那就是通过读取屏幕上的颜。
猎手为什么要写成一个纯颜挂,这跟热血江湖这个网络游戏有关。热血在刚推出来的时候,反外挂的措施是很严厉的,那时候别说什么真正的修改游戏客户端、拦截游戏封包的外挂,就是使用按键精灵的脚本,也存在被封号的危险。为了保证脚本的有效性--别一出来就被列为打击的对象啊--猎手采取了纯颜的脚本思路,绝对不涉及内存数据的读取与修改。它不修改任何内存数据,仅仅靠读取屏幕上各种颜,达到挂机、解放双手的目的。当然了,现在的热血江湖,外挂满天飞,BUG满天飞,使用热血嘉年华、热血超辅、热血智辅的比比皆是,不过我也知道,免费的猎手仍然有一定的市场,不过由于很多号级别都很高了,原版猎手不支持垃圾石头过滤,导致经常仓库满而停挂,也有一些人不用猎手改用别的去了。我也注意到,有些朋友使用插件而实现了垃圾石头过滤,不过,猎手当时已经留下了过滤垃圾石头的种子,所以我来说一说,不使用任何读字插件,依照猎手以前的脚本思路继续写下去,来完成垃圾石头过滤的功能。

在正式开讲之前,冷血先作几点说明:
1,这里讲的,是脚本写作的技术性问题,而不是现成的脚本,我希望你看完本帖之后,能解开你心中的疑惑:凭什么只读颜就能识别数字呢?
2,如果自认为是高手,就不要看此帖子了;如果不想学脚本的编程思路,只要现成的脚本,也不必看此帖子,更不必回帖了。
3,阅读此帖子需要有猎手使用经验,此贴并非猎手使用入门教程。

如何过滤垃圾石头,其实一点也不难,不过我想,看此帖子的朋友水平可能参差不齐,那么我就从最基础的讲起吧。先说说,如何通过读取屏幕上的颜,达到识别数字的目的。以后的几课,再继续讲如何识别汉字、如何过滤垃圾石头。另外,如何使宠物隐身(只看见宠物的名字,看不见宠物)、如何删除竹林(只看见怪,看不见竹林)、如何双库补给(让猎手同时支持个人仓库、综合仓库补给,使原来支持最多9999个红蓝,升级到能够支持9999×219998个红蓝)、如何3D定位(如何得到3D游戏里面的坐标与显示器屏幕上位置的转换公式,确保在斜视角下,想走到哪里就能走到哪里)等等。后面的内容,有时间再写。

好啦,现在言归正传。如果你使用过猎手,却不明白为什么开挂时,猎手能正确的报出自己的坐标,那么看完此帖子,我相信你就会明白其中的道理。先简单介绍一下,以下所称猎手的脚本,指的是两个部分:一是_热血江湖挂机升级1.txt,二是FindMon.vbs,前者是主要的脚本内容,后者是一些函数。采取脚本+函数的方式,主要的目的就是使整个脚本看起来清晰、明了。大家以后写程序,也要有一个好的习惯,不要把程序写的像一锅粥。

要使脚本读出坐标点,首先要确认坐标位置、颜稳定,如果某一个数字的位置忽东忽西,颜时红时蓝,那么要识别这个数字就比较麻烦,幸好,我们现在要识别的坐标数字,位置是相对固定的,颜也是相对固定的。看图一:


下载 (33.3 KB)
2007-12-6 11:21



登录游戏之后,就会在右上角的小地图上,看到红字写的一串数字,那就是人物角在游戏里的坐标。在这个例子里,人物坐标是X=554Y2223。两者之间,是一个红的小数点。我们对这里所有的点的颜进行分析,就可以得到该点颜的值。为方便理解,我这里取十进制来表示颜,红:181189,绿04,蓝0(任何颜的取值范围都是0255,如果使用十六进制来表示,则为0FF)。

在这里,有一个非常关键的概念:基准点。你也可以称它为核心点不变点。这是什么意思呢?就是说,不论游戏里的数值如何变换,但是总有某个特点是不变的!不论是坐标、位置,还是颜。它就类似于我们人的双脚所踩的地面,你若想跳到高处,首先就必须保证自己脚踩的地方是稳定的。如果脚都踩不稳,想跳到别的地方那是不可能的了。具体到热血江湖这个游戏里,什么是基准点呢?中间那个小数点呢?显然不是:前一张图片中,小数点排在第4个位置,后一张图片,小数点排在第5个位置。我们看到的那个数值554,是吗?不是。因为它也不是固定不变的,在游戏里,它可以变成54,也可以变成5554。请看图二:
下载 (43.72 KB)
2007-12-6 11:24


这副图片中,X坐标变成了6740X的数值是随时变换的,可能是1位数,也可能是4位数,可能是正整数,也可能是负整数。

在这里,我们要经过仔细分析,如果你仔细对比一下,可以发现有一个特点却是固定的:X坐标的第一个数字出现的位置,也就是图一中的5,图二中的6,由实际的测试得知:它们出现的位置是固定不变的。

现在,我们把上面举例的图一放大8倍来看:
下载 (41.37 KB)
2007-12-6 11:24


看上图,我们看到的除了数字,还有什么呢?还有点阵,这是一个非常重要的技术点!脚本不论是识别数字汉字,归根结底,其实就是在识别一个一个的
如果你还是不明白的话,我再举个例子:现在我们经常使用的打印机,大都是激光或者喷墨打印机。有没有哪个朋友使用过针式打印机的?就是那种使用针头,打印的时候吱吱响的那种打印机。打印机认识汉字吗?当然是不认识的。那么它为什么能打印出汉字呢?其实对于打印机来说,它并没有认为自己打印出汉字,实际上,它打印的是点阵:打印的是一个一个的
还是以上面那个数字5为例,一共由40个点组成,当打印机要打印出这个5字的时候:

1
打印机先在规定的位置连续打印5个点,也就是数字5上面的那一行;
2
然后第二行只打印第一个点,后面4个点不打印;
3
第三行也只打印第一个点,后面4个点不打印;
4
第四行连续打印4个点,第五个点不打印;
5
第五行前4个点不打印,只打印第五个点;
6
第六行同第五行一样,前4个点不打印,只打印第五个点;
7
第七行打印第一个点,第二、第三、第四点不打印,第五点打印;
字符串是什么颜8
第八行第一点不打印,第二、第三、第四点打印,第五点不打印。

我这里说的很罗嗦,当然,打印机在实际的打印过程中,打印速度还是很快的。我罗里罗嗦一大段话,打印机执行起来一瞬间而已。你们在看我上面那一段话的同时,也可以拿出一张纸和一只笔,在纸上画一个5×8的网格,要打印的地方,你就写一个阿拉伯数字1,不打印的地方,你就写一个阿拉伯数字0。全部写完之后,你看看手中的纸,上面写的是类似于1111110000的数字,你如果想象力够好的话,现在就可以看出纸上面写的是什么了。什么,还是看不懂?就算你现在还是看不出来,没关系,你现在把所有的写1的网格,都涂成黑,所有的写0的网格,不要涂任何颜。现在你再看看你手中的纸,看不清就把纸稍微放远一点看,是不是看到一个阿拉伯数字5呢?

说到这里,相信朋友们应该明白了吧?如果你能看懂我上面所说的内容,那么恭喜你,可以继续往下看了。如果看不懂,那你就要反复多看几遍了。点阵的概念,是我们这一课以及以后几课的基础。

现在我们反过来想一想:能不能通过读取一个一个的点,来识别数字呢?
2.jpg (43.72 KB)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。