本文的人物数据结构方面可以做参考,但地址是变动的,所以不能依照本文的地址直接修改。
仙剑4数据存储原理和地址规律
不想看原理的可以直接看最下面。
首先,系统下程序可用的内存地址是00400000-7FFFFFFF,但这回仙4的大部分人物属性相关地址都保存在接近7FFFFFFF的位置。
现在所有数据都是4字节宽度,但最大值还是不能超过7FFFFFFF,就是2147483647,但在一些情况下最好别取这个值,后面再说。
仙4的人物属性数据分4块
战斗临时数据:仙4中战斗时所调用的地址,但是这个地址是会变的,地址范围也是很靠后,但应该在7F966880之前,这个等地卷解决。
人物基础数据
人物现有MAX数据(就是在人物属性界面所看到的,但精气神保存的是最大值)
人物现有数据(同上,但精气神保存的是现有值)
接下来重点说每个部分,这里按云天河的内存地址为例(这里数据采用了2次收录,数据有差异,但位置没变)
以下地址在实际游戏修改中是变动的。
人物基础数据,人物最基础的几个属性,这里的属性是人物的原始值,就是没加装备前的。依我判断,这里的值加上装备的加成就生成了[人物现有MAX数据]中的攻击。修改这里最有效,但人物升级后这里的值也跟着变回原样了,那么有2点可以肯定,他的计算方法是,等级*增幅值+初始值,如果把这里直接锁定掉也可以。前面还有一些数据,没仔细研究。
7F966880
———————-精———-?———–气
7F966890 F7 00 00 00 AF 00 00 00 CB 00 00 00 DC 00 00 00
———-功———-防———-速———–运
由于这里的功是人物基础值,基础值+装备加成才会=真正的输出攻击力,所以推荐这里基础值不要设到65535,容易溢出。如果想最大攻击输出,那就FFFF减该人物拿着的武器攻击力的16位值,得出来的就可以添在这。
7F9668A0 99 00 00 00 CD CC 4C 3E AE 47 E1 3D 00 00 00 00
———-灵———-4字节为一组的数据,暂时还不知道是什么
7F9668B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F9668C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F9668D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F9668E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F9668F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966900 00 00 00 00 00 00 00 00 00 00 00 13 00 00 00 00
——————————————-待确认
7F966910 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966930 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
人物现有MAX数据,这里的值都是按照人物基础值+装备加成后的值,所以大部分都是动态生成的,比如功,防,在这里修改是没用的,因为这里只是显示在游戏中人物状态里的结果,当进入新的战斗后,战斗中的攻击会重新计算,而不是直接调用这里值。
7F966950 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00
———————————————-等级
7F966960 99 8E 00 00 00 00 00 00 00 00 00 00 00 00 00 00
———-总经验值
7F966970 00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 80 3F
7F966980 00 00 80 3F 00 00 00 00 00 00 80 3F 00 00 80 3F
7F966990 00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 80 3F
7F9669A0 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 00 00
这一大段可能是分割符的作用
7F9669B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F9669C0 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00
———————————-未知
7F9669D0 00 00 00 00 09 06 00 00 05 00 00 00 61 00 00 00
———————-精MAX——?———-气MAX
7F9669E0 21 01 00 00 AF 00 00 00 B3 00 00 00 BF 00 00 00
———-攻值——–防值———速值——–运值
7F9669F0 84 00 00 00 9A 99 99 3E CD CC CC 3D 00 00 00 00
———-灵值——–这4个字节是武器,后4个字节就不知道了,而且这个武器我觉得,可能只是调用位置,而不是武器代码。
比如CD CC 4C 3E铸云铁,9A 99 99 3E峰岭刃,但下面有个土属性戒指也是9A 99 99 3E。
7F966A00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
———————————-水装备加成—火装备加成
这里是指环的装备地址,4字节,9A 99 99 3E是2个相同装备,9A 99 19 3E是1个,但到底还有什么规律呢?
7F966A40 00 00 00 00 00 00 00 00 9A 99 99 3E 00 00 00 00
———-雷装备加成—风装备加成—土装备加成–水属性值
各属性值就是5灵的值,双字节,之间间隔2个字节,但直接改这里仍然对战斗中无影响
7F966A50 00 00 00 00 00 00 00 00 00 00 00 00 1F 00 00 00
———-火属性值—–雷属性值—-风属性值—–土属性值
7F966A60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7F966A90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
人物现有数据,是人物现有的状态,比如还剩多少血就在这里。也就是锁定这里的最大精就可以战斗结束后自动满精了。
7F966AA0 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00
———————————————-现在等级
7F966AB0 99 8E 00 00 00 00 00 00 09 06 00 00 64 00 00 00
———-现有总经验—————现有精——现有气
7F966AC0 52 00 00 00 00 00 80 3F 00 00 80 3F 00 00 80 3F
———-现有神
之后是装备数据,修改这里的装备代码会让人物的装备位直接穿上装备,但程序本身可能没有验证功能,所以可以让6个装备位都装上武器,当然攻击力就是基础值+所有已装备的武器攻击。但有一点要注意,游戏本身具有开启新道具,武器这个属性,所以如果是没有接触过的新武器,来进行直接添加的话,是无法显示的。
战斗临时数据,是随机产生的,但应该有个范围,我抓了2次,分别在6FB2CB94,78BD2FdC附近。数据的结构和人物现有MAX数据里的一样,可以参考。
如果你在战斗临时数据中修改了人物的攻击力,之后受到加攻击或减攻击等法书的影响,那这个值将会从人物基础数据处+装备加成+法术中得出,再赋值给战斗临时数据。而且战斗临时数据在结束战斗后就消失,下场开始时再动态生成一个新的地址范围,所以锁定无用。
所以,仙4的人物数值可以这么来理解:
人物基础数据+装备加成=人物现有MAX数据里显示的
人物现有数据<->战斗临时数据是互导的关系,也就是战斗结束后HP为1004,会保存在人物现有数据中的7F966AB8,然后再次进入战斗模式时,会把这个值赋回给战斗临时数据中的HP地址。那么战斗中的数值是赋值给动态地址的,所以还没办法战斗中进行锁定。
对于其他人物,他们之间的间隔为B14,也可以说一个人物的所有数据占用了B14,就是2836字节。
按照这个可以想到,如果你想建立一个已经离队的人物,你起码得自己建起2836字节的数据。
那么,其他人的地址分别如下,如果想要韩菱纱的攻击,只要云天河的攻击地址7F966890+B14=7F9673A4,就是韩菱纱的基础攻击地址。
韩菱纱 7F967394
柳梦璃 7F967EA8
慕容紫英 7F9689BC
现在还没确认的就是这个排列是否固定,我现在玩得人物少一个慕容紫英。
如果要真正能够锁定精,气,神,则需要找到战斗临时数据地址生成的规律,锁定了就可以。对了,如果HP锁定后被一击必杀打中(比如淮南王的夺魂)……不死亡(可以想到必杀的方程式不是,怪物攻击输出的值(显示用)=人物的剩余血量,状态=死亡(直接死亡);可能是怪物攻击输出的值=人物的剩余血量,人物的剩余血量=人物的剩余血量-怪物攻击输出的值,再 if 人物的剩余血量=0 then 状态=死亡)
地卷待解决的问题
1。对于64位系统而言,是否地址会随着变更?
2。在32位对于XP和VISTA的内存地址是否会变更?(可能性小)
3。战斗时的内存地址范围是多少,只见是否有个规律?
可恶的淮南王,要不是我连续OVER了3次,我不会来研究如果制服你的~
常用 东方不败III
请问,桑总使用的是什么工具探索的?望不吝赐教