日服1.2.3

修改可以从返回HP,ATK等数据的URL入手,比如搜索”quests/execute”这样的关键字。因为游戏返回的是json数据,肯定有个解析的过程,跟踪几部后就会发现游戏是使用一个Document类来存放数据,取出数据是使用如document.i(“hp”, 0)形式的代码,所以搜索关键字就能定位到Piece这个类Init函数。
从函数名上就能看出这是初始化数据用的函数,所以可以直接在这里修改,但是由于游戏的MainCharacter(主线人物),Monster(怪物),Unit(玩家的人物)这3个类都是继承于Piece这个类,直接修改的话会导致怪物和人物的值一起修改,原来还想着要不要找其他地方,结果发现在Init函数中官方已经帮忙写了一个判断
QQ截图20150805001501
这下好了,直接在这个else里修改,就只会对自己的人物生效了
首先修改HP,在Init里官方已经展示了HP的存储方法

this.hp = this.maxHp = this.originalHp = (int) (this.document.i("hp", 0) * this.PowerUpRate);

所以就在else里添加一段

this.hp = this.maxHp = this.originalHp = 99999999;

但是实际修改的时候发现这3个变量都是EncryptInt型,官方写的时候是直接用op_Implicit,也就是隐式转换
QQ截图20150805002339
然而这个在Reflexil里没法做到,原本想试试强转,后来翻了下EncryptInt类的代码发现有Value这样一个变量,想都不用想就知道这能控制EncryptInt类中的值,刚好Init里也有一个EncryptInt型的局部变量,所以修改的思路就是先把99999999用Value存进这个局部变量后,再存到hpmaxHporiginalHp里,所以最后修改HP的IL代码就是
QQ截图20150805003338
c#代码

num2.Value = 0x5f5e0ff;
this.originalHp = num2;
this.hp = num2;
this.maxHp = num2;

好了,接下来修改攻击力,攻击力存放的位置是在Piece下的_parameter变量里,跟攻击有关的数值都存放在这里,不过神奇的是,_parameter是一个PieceParameter类型的数组,难道一个人物的攻击力还有多种吗。。。数组大小是由数据包里的formCount控制的,但是我截取了各种数据包也没发现这个值,所以这数组大小就是默认的1,修改攻击力的代码就是这样

this._parameter[0].originalAt = 0x3567e0;

IL代码
QQ截图20150805004344
至此HP和攻击力就修改完了

再扯几个其他的修改方案

Unit类中

LevelUp函数在每次点击人物时调用,可以直接修改成一次30guts

base.level += 30;

LoadHpByLevel函数用于载入升guts以后的血量,这里修改其中num的值也可以达到修改血量的效果
LoadStatusByLevel函数用于载入升guts以后的攻击速度,这里可以修改攻击速度

Piece类中
calcDamage函数用于计算我方人物攻击怪物时的伤害,所以直接修改也等于修改攻击力
メルクストーリア对于作弊还是有抓的,目前来看主要是raid和公会战。对于公会战,因为有空气盾的存在,所以只修改HP达到理论伤害是非常稳的一种修改方法
最后丢一个修改好的Assembly-CSharp.dll
hp 99999999
atk 3500000
http://pan.baidu.com/s/1bnFclFh

BanG Dream修改相关

版本:1.1.0 好久没有写游戏修改的文章了,最主要的原因是没有感兴趣入坑的游戏。这次新出的BanG Dream个人还是挺喜欢的,除了上拉note感觉有点反人类。然后...

阅读全文

超简单的il2cpp游戏修改教程

本文较旧,已不适合参考 锁链战记3.0版本也是换上了il2cpp,所以刚好就用它来写一篇简单的il2cpp修改教程 使用的是日服3.0.1版的锁链战记 首先要使用一款工具...

阅读全文

Fate/Grand Order的那些事

日服v1.15 在一个月的时间里经历了太多事情,现在终于可以慢慢的写下这篇马后炮了。 调试 Fate/Grand Order在v1.11换了个保护并禁止了root过的手机,其实当时...

阅读全文

6 条评论

欢迎留言

9 + 4 =