闪电下载吧 最新软件 免费软件 绿色软件

教程资讯 软件专题

您的位置:SD124 > 网络资源 > 软件教程 > U3D魔法密码(IL2游戏学习进阶版)详细学习图文教程(2)

U3D魔法密码(IL2游戏学习进阶版)详细学习图文教程(2)

软件教程 发布日期:2019-01-12  浏览: 次 网友评论
纯文本查看 复制代码
?
1
.text:00A9BC4C 14 10 94 E5                 LDR             R1, [R4,#20]
修改成
[Asm] 纯文本查看 复制代码
?
1
.text:00A9BC4C 14 10 94 E5                MOV             R1,  99      当前等级不就变成了99了?
经过修改后发现,这个函数其实是每个等级需要的经验数,那么我们将修改的99换成1,每一级升级只需要等级1的经验也是100左右,我现在29级,还是只需要100.
------------------------------------------------------------------------------------------------------------------------------------------------------------
经验值修改3:

public uint get_restExpToNextLevel(); // RVA: 0xA8EBE4-----------------------这个是剩余升级的经验,就是经验条灰色部分。

.text:00A8EBE4             sub_A8EBE4   
.text:00A8EBE4 10 4C 2D E9                 STMFD           SP!, {R4,R10,R11,LR}
.text:00A8EBE8 08 B0 8D E2                 ADD             R11, SP, #8
.text:00A8EBEC 00 40 A0 E1                 MOV             R4, R0  ;
.text:00A8EBF0 09 34 00 EB                 BL              sub_A9BC1C ;          看到这个是不是很熟悉啊get_requiredExpToNextLevel(),上一个修改。(需求经验)
.text:00A8EBF4 18 10 94 E5                 LDR             R1, [R4,#0x18]       ------------  获得的经验
.text:00A8EBF8 01 00 50 E0                 SUBS            R0, R0, R1              需求的经验-获得的经验  ,
.text:00A8EBFC 00 00 A0 93                 MOVLS           R0, #0                  结果≤0那么,结果就等于0   (  result = 0;)
.text:00A8EC00 10 8C BD E8                 LDMFD           SP!, {R4,R10,R11,PC}     如果是大于0,结果R0-R1(需求的经验-获得的经验)(  result = v2 - v3;)==剩余升级经验(图片灰色部分)


伪代码:
unsigned int __fastcall sub_A8EBE4(int a1)
{
  int v1; // r4
  unsigned int v2; // r0
  unsigned int v3; // r1
  bool v4; // cf
  unsigned int result; // r0
---------------------------------------------------------------------
  v1 = a1;
  v2 = sub_A9BC1C(a1);                               v1 = sub_A9BC1C(a1);
  v3 = *(v1 + 24);
  v4 = v2 >= v3;                         修改后       v2 = v1 >= v1 - 1;     
  result = v2 - v3;                                         result = 1;
  if ( result == 0 || !v4 )                                if ( !v2 )
    result = 0;                                               result = 0;
  return result;                                             return result;
}

那么我们只需要将结果都改成1,

[Asm] 纯文本查看 复制代码
?
1
.text:00A8EBF4 18 10 94 E5                 LDR             R1, [R4,#0x18]
修改成:
[Asm] 纯文本查看 复制代码
?
1
.text:00A8EBF4 01 10 40 E2                 SUB             R1, R0, #1 ;
说明下:
.text:00A8EBF0 09 34 00 EB                 BL              sub_A9BC1C ;                   需求经验
.text:00A8EBF4 01 10 40 E2                 SUB             R1, R0, #1 ;        ------------  获得的经验=需求经验-1
.text:00A8EBF8 01 00 50 E0                 SUBS            R0, R0, R1         ---------     需求的经验-获得的经验 =1 ,(v2 - v3)
.text:00A8EBFC 00 00 A0 93                 MOVLS           R0, #0             ------     因为值=1不会<0,跳过
.text:00A8EC00 10 8C BD E8                 LDMFD           SP!, {R4,R10,R11,PC}     值大于0,那么结果就是R0-R1的值(  result = v2 - v3;)

比如需求经验100 ,(SUB      R1, R0, #1 ;)100-1=99, 获得的经验就是99,    result = v2(100) - v3(99);   代码就变成了这个   result = 1;

修改测试并没有任何变化,可能有其他原因限制,因此这个修改为理论!
-----------------------------------------------------------------------------------------------------------------------------------------------------------
三.HP修改
public uint get_maxHp(); // RVA: 0xA9BC78 Offset: 0xA9BC78       ----------本函数在IDA对应的是loc_A9BC78

这是不能F5,所以就需要慢慢去查看了

找到关键的跳转:

 
[Asm] 纯文本查看 复制代码
?
1
.text:00A9BD34 AA 1C 02 EA                 B               loc_B22FE4
跳转后找到的关键点:



.text:00B230D4 00 10 A0 E1                 MOV             R1, R0            ------------当前血量
.text:00B230D8 00 00 A0 E3                 MOV             R0, #0
.text:00B230DC 01 20 A0 E3                 MOV             R2, #1         --------------- MINHP
.text:00B230E0 0F 37 02 E3                 MOV             R3, #9999 ;------------------MAXHP
.text:00B230E4 00 40 8D E5                 STR             R4, [SP]
.text:00B230E8 52 9D FD EB                 BL              sub_A8A638 ;


看到加粗的地方是不是又熟悉了,dump文件里面的函数

public const uint maxHp = 9999; // 0x0

只需要将


[Asm] 纯文本查看 复制代码
?
1
.text:00B230D4 00 10 A0 E1                 MOV             R1, R0            ------------当前血量


修改成
[Asm] 纯文本查看 复制代码
?
1
.text:00B230D4 00 10 A0 E1                 MOV             R1, 9999            ------------当前血量

----------------------------------------------------------------------------------------------------------------------------------------------------------

四.MP修改
看到MP和HP的汇编语言差不多因此尝试和HP一样的修改方式

本文地址:http://www.sd124.com/article/2019/0112/228048.html
《U3D魔法密码(IL2游戏学习进阶版)详细学习图文教程(2)》由闪电下载吧整理并发布,欢迎转载!

相关电脑软件

本周热点
本月热点
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站标签
有任何意见或者建议请联系邮箱:858898909[at]qq.com 本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
Copyright © 2012 SDBETA.com. All Rights Reserved 豫ICP备12021367号 豫公网安备 41019702002546号闪电下载吧