魔兽争霸3的MapHack制作教程(二)去除战争迷雾

 

魔兽争霸3的MapHack制作教程   转自  果子林

 

http://alzzl.spaces.live.com/blog/cns!C1FF77E38059705D!281.entry

 

很抱歉再次将果子林的文章给翻出来...还请原谅我多情的打扰...


本文内容完全原创,如需转载请使用如下引用通告,谢谢
或者插入本站网址:
如果顺利的话以后的文章将以以下的提纲进行更新:
魔兽争霸3的MapHack制作教程(一)显示敌对单位
魔兽争霸3的MapHack制作教程(二)去除战争迷雾
魔兽争霸3的MapHack制作教程(三)去除小地图的战争迷雾
魔兽争霸3的MapHack制作教程(四)获得敌对单位视野
魔兽争霸3的MapHack制作教程(五)。。。。。
 
 
上次通过学习Chaotic的教程,了解了查找内存地址的基本方法,并成功地使敌对单位显示出来,可惜他的MH教程出了这个之后就再也没有更新。传言ShadowFrench出于种种原因决定不再制作新的WarCraft3的MapHack了,并将在不就之后公布他做的MH源代码,其实MH源代码无非是一个内存补丁而已,公不公布都无所谓,重要的是那些需要修改的内存地址是怎么找到的,经过反复的试验我找到了实现去除战争迷雾的方法,可惜的是通过对ShadowFrench的MH的跟踪,发现我和他貌似用的不是一个思路(所修改的内存地址不同),他的想法我仍然无法推断出来。

下面正式介绍下我找到的去除战争迷雾的实现方法。
猜测原理:
战争迷雾应该是一块一块的色块,它在内存中因该是一个二维数组,覆盖了整张地图的范围,他的值可能就是迷雾的Alpha值。当我们有一个单位的视野的控制权后,该单位为圆心,以该单位的视野为半径,计算出一个圆,在该圆范围内的数组元素的值将被改变为不显示状态,如果该元素的值真的是其Alpha,并且为1Byte的长度的话,那么这是那个值现在不是0就是255。

实现方法:
1.选择一个区域作为搜索目标,可以找个好记的地方比如一棵草
2.拉开你的单位使那个区域被战争迷雾覆盖
3.搜索Unknow initial value。
4.移动你的单位使那个区域可见
5.搜索0(0为该块迷雾的alpha值为透明)
6.再拉开你的单位使那个区域被战争迷雾覆盖
7.再搜索128(128为该块半透明,即曾经探索过,现在因没有视野而被迷雾遮盖了,未探索过的为255,全黑)
8.反复4~7步,缩小搜索范围,当然,最好同时搜索几个Unchanged value,以缩小范围。
9.最后你会搜索到一组地址,很多并且是连续的,这就是上面提到的那个数组的一小部分。
10.任意锁定一个地址为0,你会发现如图的效果,中间锁定的地方是可见的,周围全黑。
11.查找那条语句对其写入,发现这句 6f406b68-880c17-mov[edi+ecx],cl看来WC3将迷雾的值通过cl寄存器写入那个数组,往上看几行,发现这句 6f406b56-8a89bc2c836f-mov cl,[ecx+6f832cbc],这下简单了吧,只要使cl的值为0那么迷雾就不可见了,改掉,改成mov cl,0,切回游戏看看吧主屏幕上的战争迷雾全没了!
修改完成,虽然战争迷雾没了,可是不在视野范围内的敌对单位仍然不会显示如图,

上篇文章改的不就是这个吗,改下,最后成果如图所示。


至此对于主屏幕的MH基本功能完成了,敬请等待下一篇文章,希望多多关注果子林的猫窝,谢谢。

可能是果子林前辈不想玩MH了,后面的文章也就未能面世...

你可能感兴趣的:(hack)