迷失领域吧 关注:928贴子:19,363
  • 30回复贴,共1

英雄无敌3mod制作教程汇编

只看楼主收藏回复

追踪生物战场位置数据,按防御后ai自动行动,分析追踪到的数据,找到首先把生物战场位置改为02(02为最终站位)的代码。即005317C8 - mov [edx+38],eax这个代码
在这个代码的eax的值由ebp+08写入,分析整个函数也没有写入ebp+08的代码,只要读取ebp+08的代码,所以只能是上级函数修改这个堆栈数据
在005317C8 - mov [edx+38],eax这里断点,会发现往上4层函数都已经有这个02了,可能在4d2b13那里就已经有公式在计算生物的站位。
试试在上一层那里分析代码,返回上一层函数的地址,退出战场,读档,放火墙,在函数开头断点,点防御,发现函数刚开始ebp+08这里就已经是02了。刚好也印证了上面的分析。
返回4d2b13这个函数这里分析代码,那里的代码如下:
push 00
mov edx,[ebp-04]
mov eax,[edx+40]
push eax
mov ecx,[ebp-08]
call 004060AF
在push 00那里断点,发现push eax那里eax的值刚好就是02,而压入堆栈的值为ebp-64,把ebp-64的值改为,定位到ebp-64的地址,步进进入call 004060AF,发现ebp-64的地址会变为ebp+8的地址,按f9运行游戏,飞马的站位改变了,所以4d2b13这层函数有可能与生物最终站位有关。这个eax的值由ebp-04地址处的数据有关,修改这个ebp-04只要函数开头004D2AB9 - mov [ebp-04],ecx
退出战场,读档,放火墙,在函数开头004D2AB9 - mov [ebp-04],ecx
断点,点防御,发现函数开头那个02已经计算好了
把17ee8b0地址添加到列表,退出战场,读档,放火墙,右键看看什么改写了这里,点防御。发现0044DD12 - mov [eax+40],ecx这个代码改写了地址17ee8b0的值。ecx的值由ebp-20写入,用翻页功能去到函数开头,搜索代码ebp-20,发现只有4个地方改写了ebp-20,分别在这4个地方断点。退出战场,读档,放火墙,点防御。程序在0044D935 - mov [ebp-20],eax这里断开,eax的值刚好就是02。按f9运行,看看其他地方有没有断开,发现断开的地方也是这里,而且位置的数据是其他几队飞马的。
即call 0040949E代码修改了[ebp-20]的值,估计计算生物最终站位的代码是一个循环代码,用来计算最佳结果,在0044D935 - mov [ebp-20],eax下面有一个代码0044D960 - jmp 0044D46A,在转到44d46a那里,发现有加add *,1指令和jnl指令,是典型的循环代码。在44D46A这里搜索代码发现有四个地方有call 0040949E这个指令,分别在这4个地方断点,应该可以找到为什么贴身就可以识别的代码了。退出战场,读档,贴身放火墙,点防御,发现只会在0044D7EC - cmp esi,[ebp+eax*4-00000324]这里断开,eax的值刚好就是生物的最终站位,而且运行指令后直接回到循环的地方,并没有去到0044D935 - mov [ebp-20],eax这个把计算结果作为生物最终站位的代码那里。如果把0044D7F3 - jnl 0044D7FA改为jmp,应该生物就无法识别火墙了,经测试果真如此。猜测所以只要改这里,生物就可以识别火墙了。
44d7fa--jmp 44dd37(只能从这里插入,因为隔一隔放火墙会跳到这里)
cmp eax,0
jng 44dd7d最后
cmp eax,ba
jnl 44dd7d最后
mov ebx,eax(生物站位备份)
push 01(双格属性)
mov ecx,[ebp+08](兵种地址,用兵种内存地址)
call 0040B32A(是否有双格属性,兵种地址+84)
and eax,000000FF(计算过程,只留1字节,可以无视)
test eax,eax(计算过程,判断数值是否与双格属性相等,可以无视)
je 44dd7d(无双格属性时跳转到最后)
mov eax,ebx(生物站位还原)
mov ecx,[826c28]
add ecx,c39c
cmp [ebp+08],ecx(攻防判断)
jnl 44dd6e跳转到防守方代码处
dec eax(攻击方站位-1)
jmp 44dd6f跳到火墙判断
inc eax(防守方站位+1)
火墙判断
cmp esi,[ebp+eax*4-00000324]
jnl 44dd7d跳到最后
jmp 0044D46A
最后
push 64
push 4B
call 004019F6
jmp 44d803


IP属地:广东1楼2019-05-30 21:41回复
    用push 宝物id找到48d4ac - push 22,根据代码规律可以判断为组合宝的组合公式
    *****修改宝物储存id初始地址(原来那个地址在丰收之角就被其他代码利用了,必须转移地址),追踪储存天使联盟的那个地址(0048D4DB - mov edi,*),就是那个*的地方,很容易就可以找到代码了,把3fbe20改为:101382=宝物储存id初始地址地址,只要找一个空白的地方而且够空间储存数据就可以了。
    *****修改下面地方:
    0048D4DB - mov edi,00821310 : [00000081]
    0048D50B - mov edi,00821328 : [00000082]
    0048D53E - mov edi,00821340 : [00000083]
    0048D576 - mov edi,00821358 : [00000084]
    0048D5B0 - mov edi,00821370 : [00000085]
    0048D5F2 - mov edi,00821388 : [00000086]
    0048D62A - mov edi,008213A0 : [00000087]
    0048D65E - mov edi,008213B8 : [00000088]
    0048D694 - mov edi,008213d0 : [00000089]
    0048D6CA - mov edi,008213E8 : [0000008a]
    0048D700 - mov edi,00821400 : [0000008b]
    0048D738 - mov edi,00821418 : [0000008c]
    ******
    48d73f
    push 42
    push 43
    push 44
    push 03
    lea ecx,[ebp-0000023c] 与前段代码+2c
    push ecx
    call 0040BD4D
    add esp,14 (2宝物=10,3宝物=14,4宝物=18)
    push eax
    push 0000008d(组合后的宝物id)
    lea ecx,[ebp-00000228] 与前段代码+2c 比前面ebp的小14
    call 00409A2A
    mov esi,eax
    mov ecx,00000006
    mov edi,00821430(宝物id储存地址)
    repe movsd
    push 39
    push 3a
    push 3b
    push 03
    lea ecx,[ebp-00000268] 与前段代码+2c
    push ecx
    call 0040BD4D
    add esp,14 (2宝物=10,3宝物=14,4宝物=18)
    push eax
    push 0000008e(组合后的宝物id)
    lea ecx,[ebp-00000254] 与前段代码+2c 比前面ebp的小14
    call 00409A2A
    mov esi,eax
    mov ecx,00000006
    mov edi,00821448(宝物id储存地址)
    repe movsd
    push 07
    push 0d
    push 13
    push 19
    push 04
    lea ecx,[ebp-00000294] 与前段代码+2c
    push ecx
    call 0040BD4D
    add esp,18 (2宝物=10,3宝物=14,4宝物=18)
    push eax
    push 0000008f(组合后的宝物id)
    lea ecx,[ebp-00000280] 与前段代码+2c 比前面ebp的小14
    call 00409A2A
    mov esi,eax
    mov ecx,00000006
    mov edi,00821460(宝物id储存地址)
    repe movsd
    push 0b
    push 11
    push 17
    jmp 48da50
    48da50
    push 1d
    push 04
    lea ecx,[ebp-000002c0] 与前段代码+2c
    push ecx
    call 0040BD4D
    add esp,18 (2宝物=10,3宝物=14,4宝物=18)
    push eax
    push 00000080(组合后的宝物id)
    lea ecx,[ebp-000002ac] 与前段代码+2c 比前面ebp的小14
    call 00409A2A
    mov esi,eax
    mov ecx,00000006
    mov edi,00821478(宝物id储存地址)
    repe movsd
    pop edi
    pop esi
    pop ebx
    mov esp,ebp
    pop ebp
    ret
    *****
    还有一个地方要注意,我们要修改0048D4A3 - sub esp,*这个地方,因为我们写代码的时候有这个代码lea ecx,[ebp-000002ac] ,很明显超过了原来代码定义的堆栈空间。
    0048D4A3 - sub esp,00000310(堆栈空间)
    写完上面代码,宝物仍然无法组合,在定义外交官斗篷id的地址821430也没有写入8d这个id,所以在组合天使联盟的时候,追踪什么访问了地址821310,得到读取宝物id的地址,得到下面代码:
    0057C1D7 - mov edx,[ecx+eax](组合时)
    00571416 - mov ecx,[eax+edx](拆解时)
    读取组合时宝物id的返回地址573975,通过步过功能,可以确定指令00573970 - call 00409B97为出现是否组合宝物的界面代码
    再分析一下组合宝物时的代码,在分散组件的时候,右键宝物组件,在573840处作跳转分析:
    鬼王斗篷的跳转情况:
    5738e9
    外交官斗篷的跳转情况:
    5738e9
    57394c
    代码00573948 - cmp dword ptr [ebp-20],-01决定57394c的跳转,则改变ebp-20的值即可,右键鬼王斗篷组件时,ebp-20都是01。找到当右键外交官组件时,005738DE - mov edx,[ecx+eax+18]那个地址处的数据修改为0c即可组合
    鬼王斗篷那个edx的数据是这样的:
    8206d8-----01000000
    8206f8-----01000000
    820718-----01000000
    外交官斗篷应该修改成下面这样,修改后果然可以组合为外交官斗篷
    820858----0c000000
    820878----0c000000
    820898----0c000000
    上面那个是测试的时候用内存修改数据,必须要让程序自己生成这些数据,
    用od的硬件断点,追踪什么写入鬼王斗篷这个地址8206d8,找到48e0bf - mov dword prt[ecx+18],dex这个代码会在8206d8这个地址写入01000000,猜测有代码会绕过这里,然后往上翻就找到这个代码了。
    ****
    0048DF8A - cmp dword ptr [ebp-6C],0C(可以判断为限制组合宝物数量的代码,修改这个就可以了,把那个0c改为10)
    0048DF8E - jnl 0048E0E9
    静态修改后,进入游戏测试,821430那个地方有写入8d,而且820858也有写入0c,即修改成功。用地图修改器把外交官斗篷配件装英雄身上也可以组合。
    但强制修改为0c000000后,如果从行囊那里往英雄身上装备外交官斗篷组件会出错,应该还有其他地方限制组合宝物数量,追踪英雄装备栏,然后再往英雄身上装备外交官斗篷组件,然后程序跳出了,追踪代码那里最后那条代码就是得到出错的那个地方,是571624。
    解决办法:
    用断点分析代码,步进进入571624里面发现下面代码(就在571624那里闪退,所以要进入代码里面分析):
    005660EC - cmp dword ptr [ebp+08],0C(修改这个就可以了,改为10)
    005660F0 - jb 005660FA
    把外交官斗篷从行囊放英雄身上也会出错
    组合外交官斗篷最后一个组件也会出错,用上面的方法
    0056602C - cmp dword ptr [ebp+08],0C(修改这个就可以了,改为10)
    00566030 - jb 0056603A
    接下来,只要再写代码定义宝物的功能就可以了,这个就在这里省略不提了。
    添加外交官斗篷、抗魔坠饰、复仇之盾:
    把3fbe20改为101382,
    把8d4a0改为558BEC81EC100300005356576A226A206A1F6A236A216A246A068D45D450E88AE8F7FF83C4205068810000008D4DE8E856C5F7FF8BF0B906000000BF10138200F3A56A386A376A366A038D4DA851E85AE8F7FF83C4145068820000008D4DBCE826C5F7FF8BF0B906000000BF28138200F3A56A5E6A606A5F6A038D957CFFFFFF52E827E8F7FF83C4145068830000008D4D90E8F3C4F7FF8BF0B906000000BF40138200F3A56A0E6A1A6A086A146A048D8550FFFFFF50E8F2E7F7FF83C4185068840000008D8D64FFFFFFE8BBC4F7FF8BF0B906000000BF58138200F3A56A7A6A796A786A776A766A058D8D24FFFFFF51E8B8E7F7FF83C41C5068850000008D8D38FFFFFFE881C4F7FF8BF0B906000000BF70138200F3A56A286A296A2D6A256A276A266A2A6A2B6A2C6A098D95F8FEFFFF52E876E7F7FF83C42C5068860000008D8D0CFFFFFFE83FC4F7FF8BF0B906000000BF88138200F3A56A126A1E6A0C6A186A048D85CCFEFFFF50E83EE7F7FF83C4185068870000008D8DE0FEFFFFE807C4F7FF8BF0B906000000BFA0138200F3A56A476A7B6A028D8DA0FEFFFF51E80AE7F7FF83C4105068880000008D8DB4FEFFFFE8D3C3F7FF8BF0B906000000BFB8138200F3A56A3E6A3D6A3C6A038D9574FEFFFF52E8D4E6F7FF83C4145068890000008D8D88FEFFFFE89DC3F7FF8BF0B906000000BFD0138200F3A56A4B6A4A6A496A038D8548FEFFFF50E89EE6F7FF83C41450688A0000008D8D5CFEFFFFE867C3F7FF8BF0B906000000BFE8138200F3A56A4D6A4E6A4C6A038D8D1CFEFFFF51E868E6F7FF83C41450688B0000008D8D30FEFFFFE831C3F7FF8BF0B906000000BF00148200F3A56A716A6E6A6D6A6F6A048D95F0FDFFFF52E830E6F7FF83C41850688C0000008D8D04FEFFFFE8F9C2F7FF8BF0B906000000BF18148200F3A56A426A436A446A038D8DC4FDFFFF51E8FAE5F7FF83C41450688D0000008D8DD8FDFFFFE8C3C2F7FF8BF0B906000000BF30148200F3A56A396A3A6A3B6A038D8D98FDFFFF51E8C4E5F7FF83C41450688E0000008D8DACFDFFFFE88DC2F7FF8BF0B906000000BF48148200F3A56A096A0F6A156A1B6A048D8D6CFDFFFF51E88CE5F7FF83C41850688F0000008D8D80FDFFFFE855C2F7FF8BF0B906000000BF60148200F3A56A0B6A116A17E962020000
    把8da50改为6A1D6A048D8D40FDFFFF51E8EDE2F7FF83C4185068800000008D8D54FDFFFFE8B6BFF7FF8BF0B906000000BF78148200F3A55F5E5B8BE55DC3
    把8df8d改为10,
    把1660ef改为10,
    把16602f改为10


    IP属地:广东2楼2019-05-30 21:41
    收起回复
      追踪事件加兵的兵数量得到代码005189F6 - lea edi,[ebp-000000A0](把事件加兵的兵数量放置到调整兵力界面的代码)
      在005189F6处断点,一路按步过功能,直到出现调整兵力界面,定位到代码00518C2A - add esp,0C
      用518C2A的返回地址519493作跳转分析,看看是518C25处的代码产生bug还是上层指令的另外一个子指令产生bug
      519493的跳转分析:
      正常情况时的跳转过程
      5194df
      519503
      bug时的跳转过程
      5194a0
      5194df
      519503
      分析是什么原因让5194a0跳转
      发现正常情况下和bug时0051948E - call 0040A92A让edx产生不同的值
      即518C2A处的函数的上级指令及其子指令与产生bug无关,是518C25该处的指令或其下级指令产生bug
      由于上面提到的edx是ebp+0c处记录的地址处的数据,所以要我们要分析ebp+0c记录的地址处的数据,
      从519473处断点,重新去碰触加兵事件,直到断开,然后把查看内存字节那里定位到ebp+0c记录的地址处
      然后一路步过,然后按正常加兵,退出界面,ebp+0c记录的地址处的数据一直没有改变
      重新从519473处断点,字节查看器定位到ebp+0c记录的地址处,碰触事件,一路按步过,按bug的方法加兵,发现进入英雄界面瞬间ebp+0c处的数据变化了。这时,我们就找到了bug产生的原因了,就是那个ebp+0c记录的地址处的数据改变造成了bug。
      按上一步的步骤,追踪ebp+0c记录地址处的数据,看看是什么代码改变了这里的数据,发现0056A8D9 - mov [ecx],edx改变了该处的数据。
      上面分析到是518C2A该处的指令或其下级指令产生bug,而56A8D9是改变ebp+c数据的元凶,518C25该处的指令应该有一个途径到达56A8D9这个地方,我们截断这个途径就可以了。
      在这之前我们先把指令0056A8D9 - mov [ecx],edx的返回地址记录一下,返回地址的意思是返回上一层指令,这些一层层的上级指令应该与bug的产生有一个连接的途径。
      56A8D9的返回地址:
      0042A8BD
      0043CBCA
      00579FEF
      006EF708
      006E96CE
      0042305B
      0072A06E
      0073024E
      00729F99
      006EA072
      00518C2A
      00519493
      004E833F
      00426C4E
      00429CC6
      004289C7
      004279FF
      0052C965
      0058D4E3
      现在看到什么了吧?0056A8D9的返回地址刚好有一个00518C2A,而我们刚才分析过是518C25该处的指令或其下级指令产生bug。
      从指令开始,用断点和代码分析的方法(就是在函数开始的地方断点,一边按步过,一边分析代码描述的寄存器数据情况,以及分析代码的含义),根据56A8D9的返回地址逐层分析子指令,发现逐层指令都没有特殊的跳转,也不用怎么分析,直接下一层指令。发现返回地址006E96CE有一个代码006E96A9 - jmp dword ptr [ecx*4+006E987A],是点击根据兵力调整界面的不同格子,edx有不同的数据产生,且根据这些不同的数据跳转到不同的地方。可以判断为这条代码判断玩家点击的格子。其中点击英雄头像时edx固定为09,我们可以让代码当edx为09时跳转到没有意义的地方,就可以修复这个bug了。
      现在我们可以开始写代码了:
      6e96a3-----jmp 6e95ef
      mov cl,[edx+006E9882]
      cmp edx,09
      je 006E96DA
      jmp 6e96a9
      6E9700----jmp 6e955a
      mov cl,[edx+006E98B2]
      cmp eax,09
      je 006E97A6
      jmp 6e9706
      最后转换为机器码:
      把2e96a3改为E947FFFFFF90,把2e95ef改为8A8A82986E0083FA090F84DC000000E9A6000000
      把2E9700改为E955FEFFFF90,把2e955a改为8A8AB2986E0083F8090F843D020000E998010000


      IP属地:广东3楼2019-05-30 21:42
      收起回复
        驱散受抗魔影响的修改思路:
        魔法属性的地址计算公式:
        69c288根据魔法id跳转相应代码处
        迟缓大法施法后,在69c288断点,会跳转到的地方有如下调用指令:
        0069D2D6 - call 0040CF22
        0069D2E8 - call 0040DBED
        0069D303 - call 004065F5
        抵抗术上限地址17d978,在此处断点,施展迟缓大法后,发现有以下返回代码:
        0069D2D6 - call 0040CF22
        综上,可以知道call 0040CF22为抗魔作用代码,
        用魔法跳转公式跳转到驱散魔法那里,发现没有call 0040CF22这个指令,并且发现代码0069DBC2 - mov byte ptr [edx+ecx+0000547C],01。经过分析(把[edx+ecx+0000547C]地址处的数据改为00,则魔法动画无效),此代码驱散魔法的动画强制有效的。
        可以取消驱散的动画强制有效代码,添加魔法受生物抗魔影响计算,并把魔法是对该生物否有效作为魔法动画是否有效的判断条件。
        可以写下面代码,为驱散魔法添加抗魔作用代码:
        -----------------------------------------------------
        0069DBAe - jmp 0069DAEC(取消驱散的动画强制有效)
        69daea
        jmp 0069DAF8
        add dword ptr [ebp-00000198],01
        jmp 0069ec0b(魔法是否有效的判断)
        jmp 0069EBE5(魔法是否有效计算过程)
        69ebe5
        魔法受生物抗魔影响计算过程:
        mov edx,[ebp+10]
        push edx
        mov eax,[ebp-10]
        mov ecx,[eax+000132C0]
        push ecx
        mov edx,[ebp-30]
        push edx
        mov eax,[ebp-24]
        push eax
        mov ecx,[ebp+08]
        push ecx
        mov edx,[ebp-18]
        push edx
        mov ecx,[ebp-10]
        call 0040CF22(要在分析一下那个00与01产生的原因)
        魔法是对该生物否有效的判断过程:
        mov eax,[ebp-00000194](计算过程)
        imul eax,eax,14(计算过程)
        mov ecx,[ebp-00000198](计算过程)
        add ecx,eax(计算过程)
        mov edx,[ebp-10](计算过程)
        cmp byte ptr [edx+ecx+0000547C],00(01有效,00无效)
        je 0069DAEC(魔法被抗魔影响则直接下次循环,即魔法是对下一队生物否有效的判断过程)
        mov ecx,[ebp-00000194]
        jmp 0069Db01
        ------------------------------------------------------------
        经过上面代码修改,驱魔大法仍然强制有效,需要对魔抗作用代码进行深入分析。
        迟缓大法被抗魔影响的代码分析:
        进入call 0040CF22分析,006A4EB6 - je 006A4EE6被抗魔影响会有不同的跳转,可以判断是否魔抗,006A4EAA - call 00407B62为魔抗计算代码
        进入call 00407B62分析,代码006A7EC7 - setle dl是根据esi的值和eax作比较,其他魔法时这两个值都是小于64的随机数,如果用驱散魔法则eax永远都是64,即esi永远都小于eax,dl永远会设定为1,所以可以断定这个代码是用来作为抗魔是否有效的代码。产生eax数据的有两个call,其中进入006A7EB3 - call 0040D17A后发现cmp *,23和push 5c之类的代码,可以知道这些都是关于魔法的设定,23为驱散魔法,5c为永恒之球。代码006A7EBE - call 007623C8,进入后可以看到一些浮点运算指令,应该是把浮点转换为整数的代码。所以代码006A7EB3 - call 0040D17A一定是为魔抗计算代码
        进入call 0040D17A,用驱散和冰环这两个魔法作跳转分析,
        发现施展驱散后会运行下面代码006A7772 - fld dword ptr [007B06C0] : [(float)1.0000],可以判断时驱散强制有效代码。
        可以写下面代码进行测试,让驱散的跳转变得和冰环一样:
        ----------------------------------------------------------------------
        006A7772-------jmp 6a7c28
        ----------------------------------------------------------------------
        经过上面代码修改,驱散还是不受抗魔影响,就算跳转一样,驱散仍然是强制有效,经过修改后,函数最后必须经过一条代码006A7C38 - call 00407991,可以判断这条代码也是用来计算抗魔几率的,需要对这个代码再进行分析。
        进入call 00407991分析代码:
        发现代码0048A131 - fld dword ptr [007B06C0] : [(float)1.0000]与上次发现的代码一样,也是100%之类的代码,可以判断为驱散强制有效代码
        可以写下面代码,跳过驱散强制有效的代码:
        ------------------------------------------------------------------------
        0048A111 - je 0048A13c
        0048A124 - je 0048A13c
        ------------------------------------------------------------------------
        经过上面代码修改,终于让抗魔终于对驱散有影响了,50%抗魔的英雄部分部队不受驱散影响,但部队会被添加上一个“驱魔大法”的状态属性,但要取消这个状态的修改已经非常简单了。
        追踪搜索“驱魔大法”状态回合数,得到一个代码0048256B - mov [edx+ecx*4+00000198],eax,这时可以看看上级函数到底有什么关键代码,在这个代码断点,重新释放驱散魔法,该代码的返回地址为006A4ECB - call 0040A056与之前分析到的代码006A4EAA - call 00407B62是同一个函数,而且该前面有一个条件跳转,改为jmp后就没有“驱魔大法”状态添加了,但其他所以魔法都不能为兵种添加状态,把call 0040A056改为nop后,“驱魔大法”状态也不会添加了,而且其他魔法也可以正常添加状态,虽然用目前的测试改为nop没问题,但为了避免其他无法预料的情况发生,改为当遇到驱散魔法就不执行这个call就可以了。
        可以写下列代码:
        -----------------------
        006A4ECB-jmp 6a4efa
        cmp edx,23
        je 6a4ed0
        call 0040A056
        jmp 6a4ed0
        ---------------------
        经过多次测试后,驱魔大法可以被抗魔影响了,而且一切正常。
        最后为了方便大家修改,把代码转换为机器码:
        把29DBAe改为E939FFFFFF90,
        把29daea改为EB0C838568FEFFFF01E913110000E9E810000090909090,
        把29ebe5改为,8B5510528B45F08B88C0320100518B55D0528B45DC508B4D08518B55E8528B4DF0E817E3D6FF8B856CFEFFFF6BC0148B8D68FEFFFF01C18B55F080BC117C540000000F84BFEEFFFF8B8D6CFEFFFFE9C9EEFFFF,
        把2A7772改为E9B104000090,
        把8A111改为7429,
        把8A124改为7416,
        把2A4ECB改为EB2D909090,
        把2a4efa改为83FA2374D1E85251D6FFEBCA
        就此,教程结束。


        IP属地:广东4楼2019-05-30 21:43
        收起回复
          写代码教程(用英雄特长和宝物的速度加成可以用来养步的修改来作例子)
          下面是代码分析:
          载入兵种的原速度用以计算英雄行动力(我们要修改的代码)
          57df5d
          mov ecx,[ebp-14]-----读取英雄带兵栏
          mov edx,[ebp-04]-----读取英雄地址
          mov eax,[edx+ecx*4+00000091]-----计算并读取英雄带兵栏地址里面的兵种id
          mov [ebp-18],eax-----兵种id存入寄存器
          mov ecx,[ebp-18]-------载入兵种id
          imul ecx,ecx,74----------原速度地址计算过程(每个兵种id的属性占16进制的74个字节)
          mov edx,[00806090]--------原速度地址计算过程(所有兵种id属性的开始地址)
          mov eax,[edx+ecx+50]-----计算原速度地址并读取兵种原速度
          mov [ebp-1C],eax----------载入原速度
          ......后面都是计算英雄移动力的代码
          是什么改写了兵种的战场速度(我们要参考的代码)
          57f8ac
          mov ecx,[ebp-04]-------读取英雄地址
          call 0040DAF8------------这条指令是用来计算英雄特长和宝物的速度加成并存入eax
          mov ecx,[ebp+0C]-----载入兵种在战场的地址
          mov edx,[ecx+50]-----载入兵种原速度
          add edx,eax--------------兵种原速度与速度加成相加
          mov eax,[ebp+0C]-------(后面都是关于战场的代码,所以对本次修改无意义了)
          mov [eax+50],edx
          下面是写代码(在原来的地方添加速度加成):
          57df79-----需要利用来修改的地方
          jmp 57e0eb----跳转空白处
          mov edx,[edx+ecx+50]-----(不再分析了,只是上面代码的修改,下同。PS:因为下面调用指令会存入eax,所以这里要使用后面不会再利用到的寄存器来替换eax)
          mov [ebp-1c],edx
          mov ecx,[ebp-04]
          call 0040DAF8
          add [ebp-1c],eax
          jmp 57df80-----跳回原代码
          最后转换为机器码:
          把17df79改为E96D0100009090,把17E0EB改为8B5411508955E48B4DFCE8FEF9E8FF0145E4E97EFEFFFF


          IP属地:广东6楼2019-05-30 21:47
          收起回复
            学习了,谢谢!


            IP属地:江苏8楼2019-05-31 15:10
            收起回复
              这真不是一般人能搞的。。。


              IP属地:江苏来自Android客户端9楼2019-06-03 10:31
              收起回复
                对外行小白来说真的好难。如果有具体教程可学就好了。比如让大法师的技能保留(射手属性、有穿墙攻击优势、无近战惩罚),新增技能(永远正士气、不可反击,双击,环击,免疫火系魔法,龙属性,对丧尸射击伤害翻倍,攻击带有驱散有益魔法效果)


                IP属地:广西11楼2019-06-05 01:54
                回复
                  其实个人倾向于开发新英雄技能,要不打法太固定,不多变


                  IP属地:贵州来自iPhone客户端12楼2019-08-01 23:41
                  回复
                    我只看见了第一句话 我就头晕了 不过顶


                    IP属地:四川14楼2019-11-08 15:19
                    回复
                      老哥有wog版双C的代码教学吗


                      IP属地:广东16楼2021-02-01 10:54
                      收起回复
                        T帅费心了,让迷失领域成为国内第一的H3mod指日可待。
                        MOD大致分2大类:1种是乱魔改,og中文网有2个封Xmod,但是那种也就魔改设定,素材抄都抄不像,可能有1,2个会ps的,但完全没有懂画的人的参与,而且也没像样的自主剧情。
                        另1种就是深渊号角这类,完全是奔着资料片的样式去的,迷失领域目前可能就是缺少自有画师,宝藏图和剧情图片没法专门设计,自己掏钱找画师也不太合适,祝愿有画师加入你们。


                        IP属地:上海17楼2021-05-05 19:45
                        收起回复
                          现在的游戏估计是随着硬件配置的提高,进城都是秒进,还记得很早以前玩的时候进城都要黑三分之一秒钟这样子。
                          由此带来一个小麻烦,就是英雄按空格进城时,经常空格没弹起来就加载出城镇并和城镇里的英雄交换位置。
                          请问大神有没有办法增加一下进城的延迟呢?大概延迟200ms这样。


                          IP属地:广西19楼2023-04-11 23:45
                          收起回复