zgyjk 发表于 2020-1-2 01:04

对PKD文件结构的再次分析,应该可以直接提取内部文件了

本帖最后由 zgyjk 于 2020-1-2 01:14 编辑

PKD文件应该是可一个类似资源打包的文件,可以把一堆cdb文件打包到一个大文件中



以上是CellAttributeList.pkd中的数据,其中红色方框是pkd中cdb文件的数量,此例中有2个,第一行的剩下12个数据是固定的
第二行前4位3F 00 00 00代表接下来的数据中作为pkd文件头的数据量,即从绿色方框开始到BatterBgList.cdb截止的数据总量(包含末尾的00),这些数据分为cdb文件地址数据和cdb文件名数据

绿色方框是第一个cdb文件的数据,头4位是文件起始地址00000080h
橙色方框是第二个cdb文件的数据,同样头4位是文件起始地址
紧接着就是这两个cdb文件的文件名,以00分割,然后直到达到蓝色方框指定的数据总量截止,然后填充一堆00000000,紧接着就是第一个cdb文件的数据了
目前还没找到每个cdb文件的描述数据中后8位数据的意义和填00000000的规律



pengle98 发表于 2020-1-2 01:15


感谢楼主分享

58418 发表于 2020-1-2 08:08

看不懂 纯支持

StrollerRalphy 发表于 2020-1-2 08:55

如果只是要解包提取,并不一定非要知道每个序列的含义

可以参考这个 https://blog.csdn.net/u012276970/article/details/97731793的思路,直接做资源提取工具

zgyjk 发表于 2020-1-2 20:44

StrollerRalphy 发表于 2020-1-2 08:55
如果只是要解包提取,并不一定非要知道每个序列的含义

可以参考这个 https://blog.csdn.net/u012276970/ar ...

这个mpk的数据结构不太一样,pkd貌似更复杂一些,数据解析是没问题的,我想的是从pkd分析数据量等

StrollerRalphy 发表于 2020-1-2 21:27

本帖最后由 StrollerRalphy 于 2020-1-2 21:29 编辑

zgyjk 发表于 2020-1-2 20:44
这个mpk的数据结构不太一样,pkd貌似更复杂一些,数据解析是没问题的,我想的是从pkd分析数据量等
...
我简单看了一下文件结构,显然你走进死胡同了,你演示的这个CellAttributeList.pkd并不是很多cdb的封包文件,而是单独一个cdb文件的伪装,直接用ansys就能打开,里面就是一个list表,如文件名说的那样。

这游戏的pkd文件很多,其实都只是伪装,真实的文件格式就在文件头部几行之内。还有更多zip伪装成pkd的,直接用普通压缩文件就能打开。

ethereal32 发表于 2020-1-2 21:32

赞,这下终于有办法给更多的机体加变身了{:3_123:}

ethereal32 发表于 2020-1-2 21:34

StrollerRalphy 发表于 2020-1-2 21:27
我简单看了一下文件结构,显然你走进死胡同了,你演示的这个CellAttributeList.pkd并不是很多cdb的封包文 ...

请问下大佬你说的那个ansys的全名叫啥啊……我去百度了一下发现是一个仿真驱动软件{:3_100:}

AIO1 发表于 2020-1-2 21:35

如果能把自定义修改成作品角色两套立绘就好了

StrollerRalphy 发表于 2020-1-2 21:47

ethereal32 发表于 2020-1-2 21:34
请问下大佬你说的那个ansys的全名叫啥啊……我去百度了一下发现是一个仿真驱动软件
...
你找的没有错,ansys是比较专业的软件,一般人用不上,如果没听说过,那就算给你也不会用。

如果你只是想提取立绘或影像之类的,根本不需要解包这个文件,这只是一个表格数据库文件。

这游戏的pkd文件没有通用的解法,因为虽然看上去格式都是pkd但编码都不一样,如果你对文件的封包/解包工作不熟悉,要明白一点,文件的格式只是表面,编码才是关键。比如我把AVI文件名换成MP4的,其实没什么变化,但把编码从MPEG4换成X265就不一样了。这个道理放任何文件格式上都是适用的。

具体到这个游戏上,要用十六进制编辑器先查看到pkd文件的真实格式,然后该干嘛干嘛,就行了。

ethereal32 发表于 2020-1-2 23:03

本帖最后由 ethereal32 于 2020-1-2 23:04 编辑

StrollerRalphy 发表于 2020-1-2 21:47
你找的没有错,ansys是比较专业的软件,一般人用不上,如果没听说过,那就算给你也不会用。

如果你只是想 ...
{:3_101:}其实我就是要改这个表格数据库文件……通过16进制编辑器看到的是pkd里面有一批cdb文件,如果我想提取这些cdb的话应该怎么做?把pkd重新命名成cdb文件打开吗,还是说可以直接用cdb文件相关的软件打开这个pkd?ansys我稍微看了一下就觉得这实在不是我的水平能研究的东西……

StrollerRalphy 发表于 2020-1-2 23:11

本帖最后由 StrollerRalphy 于 2020-1-2 23:14 编辑

ethereal32 发表于 2020-1-2 23:03
其实我就是要改这个表格数据库文件……通过16进制编辑器看到的是pkd里面有一批cdb文件,如果我想 ...
我都说了不需要提取,其本身就是一个加了DKP文件头的cdb文件,欺骗成pkd文件,其实就是cdb。

看你要改什么了,如果只是想把表格中的什么HG_001~999、GW_001~999 这类资源数值改成自己制作的MOD资源名称,让游戏在加载资源时不加载默认资源,而是加载自己的资源,那就直接在16进制编辑器里改就是了,文件名都不需要换,直接拉到相应的数值区改就是了。只不过要注意的是,想要实现上述效果的话,并非只改这一个文件里的数值而已。



ethereal32 发表于 2020-1-3 10:10

本帖最后由 ethereal32 于 2020-1-3 10:11 编辑

StrollerRalphy 发表于 2020-1-2 23:11
我都说了不需要提取,其本身就是一个加了DKP文件头的cdb文件,欺骗成pkd文件,其实就是cdb。

看你要改什 ...
我是想在cdb的已有数据的基础上额外再添加一些数据,把一些机体被阉割了的武器/功能重新加回去。修改现有条目的话可以用静态修改器弄,但是现在要新加条目我就不太会了……(想改的不是这个pkd,不过方法应该都是一样的吧……?)

问题主要是用16位编辑器打开之后除了这里一小段之外上下显示的全是乱码……这个有什么办法处理吗?还是说只能像主楼写的那样对着乱码改……

DKCL 发表于 2020-1-3 10:47

ethereal32 发表于 2020-1-3 10:10
我是想在cdb的已有数据的基础上额外再添加一些数据,把一些机体被阉割了的武器/功能重新加回去。修改现有 ...

添加武器不得加动画吗?虽然想法是很好

ethereal32 发表于 2020-1-3 11:12

DKCL 发表于 2020-1-3 10:47
添加武器不得加动画吗?虽然想法是很好

先解决有没有的问题再解决有没有动画的问题,你看橙命运王道异端天照异端PC版本上都没有动画但还是好多人用了{:3_116:}

StrollerRalphy 发表于 2020-1-3 11:20

本帖最后由 StrollerRalphy 于 2020-1-3 11:29 编辑

ethereal32 发表于 2020-1-3 10:10
我是想在cdb的已有数据的基础上额外再添加一些数据,把一些机体被阉割了的武器/功能重新加回去。修改现有 ...
看来我上面都白写了。如果想改的不是楼主例子里的pkd的话,方法就不一样。“这游戏的pkd文件没有通用的解法”,10楼我写的很清楚。

你这个pkd是直接从主程序里链接来的资源库文件,如果你想添加新的条目,除了修改资源库的表单,还要修改exe(或者配合静态修改),你把主程序exe也拉进16进制编辑器里搜cdb就知道了。


ethereal32 发表于 2020-1-3 11:54

StrollerRalphy 发表于 2020-1-3 11:20
看来我上面都白写了。如果想改的不是楼主例子里的pkd的话,方法就不一样。“这游戏的pkd文件没有通用的解 ...

在主程序里搜索cdb能找到不少结果,但是搜具体的文件名(比如MachineSpecList)却又搜不到……

旁边有都是乱码也没法参考着改{:3_99:}不知道哪里有这种16进制编辑的教程可以看吗,我这样的程序白直接看这个真的是毫无头绪

断罪翼 发表于 2020-1-3 14:59

很想提取游戏的立绘和机体,不过完全看不懂你们讨论的技术……

jk19891219 发表于 2020-1-3 16:34

太高深了,膜拜大神

zgyjk 发表于 2020-1-4 17:01

StrollerRalphy 发表于 2020-1-2 21:27
我简单看了一下文件结构,显然你走进死胡同了,你演示的这个CellAttributeList.pkd并不是很多cdb的封包文 ...

老哥ansys具体是哪个 求个关键字

zgyjk 发表于 2020-1-4 17:04

StrollerRalphy 发表于 2020-1-3 11:20
看来我上面都白写了。如果想改的不是楼主例子里的pkd的话,方法就不一样。“这游戏的pkd文件没有通用的解 ...

但是我看了几乎所有的pkd,都是符合我这个例子中的数据结构的,另外我静态修改器里已经有直接给cdb添加新条目并测试可用了,按照这个理论应该是可以给pkd填新条目的

zgyjk 发表于 2020-1-4 17:06

StrollerRalphy 发表于 2020-1-2 21:47
你找的没有错,ansys是比较专业的软件,一般人用不上,如果没听说过,那就算给你也不会用。

如果你只是想 ...

我用UE查看了火线纵横所有PKD都是符合我帖子给出的格式的,都是做的cdb的封包,并没有其他情况

zgyjk 发表于 2020-1-4 17:07

StrollerRalphy 发表于 2020-1-3 11:20
看来我上面都白写了。如果想改的不是楼主例子里的pkd的话,方法就不一样。“这游戏的pkd文件没有通用的解 ...

今晚准备研究能不能添新条目给机体加变型机构,我觉得是可以做到的

StrollerRalphy 发表于 2020-1-4 17:56

zgyjk 发表于 2020-1-4 17:06
我用UE查看了火线纵横所有PKD都是符合我帖子给出的格式的,都是做的cdb的封包,并没有其他情况
...

这个封包是假封包,改的都是表单list,都是\data\resident里的文件,格式当然一样了,而我说的是游戏资源中所有的pkd格式文件呀。你去看看游戏里有多少pkd撒,我看你帖子就写了个解pkd,没写是什么pkd,自然就要说明一下了。

StrollerRalphy 发表于 2020-1-4 17:57

zgyjk 发表于 2020-1-4 17:07
今晚准备研究能不能添新条目给机体加变型机构,我觉得是可以做到的

添加条目当然可以,但不是通过解包思路去做的,直接编辑就行了呃。

zgyjk 发表于 2020-1-4 19:18

StrollerRalphy 发表于 2020-1-4 17:57
添加条目当然可以,但不是通过解包思路去做的,直接编辑就行了呃。

直接编辑工作量太大,不仅要添加新的数据,还要更新每个cdb在pkd头中的地址索引

StrollerRalphy 发表于 2020-1-4 19:33

zgyjk 发表于 2020-1-4 19:18
直接编辑工作量太大,不仅要添加新的数据,还要更新每个cdb在pkd头中的地址索引 ...
或否换个思路,在现有的list索引中只加个新的指向性标识小数据,指向你要做的新条目文件就可以,然后你自己用的比较习惯的格式来写新资源条目,就跟外挂一样,能明白我意思不{:3_61:} 这样更新维护也方便。你是不是想创作新的技能/特性啥的才要解包这个?


其实至今我都不太明白你要做的新条目是指什么,个人认为单纯修改表单也就是做一些数据上的微调、把A机体上的a特性给加到本来没a特性的B机体上之类的,如果是这样那只编辑list就行了;如果想原创一个b特性,还是需要自己写新资源文件的。

zgyjk 发表于 2020-1-4 19:59

StrollerRalphy 发表于 2020-1-4 19:33
或否换个思路,在现有的list索引中只加个新的指向性标识小数据,指向你要做的新条目文件就可以,然后你自 ...

这么说吧,比如机体换装/变型数据一共是188条,在MachineSpecList.pkd内部包含的MachineConversionList.cdb中,每条数据占20byte
如果我现在需要添加一个新的换装,给00增加一个变型机构,使用后变成ELS00,就需要添加第189条数据出来,明白吗?
但是如果添加这条数据出来,那么MachineConversionList.cdb的头部总数据数就需要改变,又由于这个文件多出了20byte,那么这个pkd中的后续cdb的地址就需要全部后移20byte,后移后又会影响pkd文件头部的每个cdb的地址
所以想添加数据需要更改很多地方,工作量很大的

zgyjk 发表于 2020-1-4 20:02

StrollerRalphy 发表于 2020-1-4 19:33
或否换个思路,在现有的list索引中只加个新的指向性标识小数据,指向你要做的新条目文件就可以,然后你自 ...

再比如机体能力/个人能力/OP等数据,如果想要创建出新的出来,就需要了解有关的数据结构,目前我能做到的是给tbl文件新增数据和新增技能效果数据,因为这两个数据基本解析的差不多了,目前在解析机体换装的pkd文件

StrollerRalphy 发表于 2020-1-4 20:51

zgyjk 发表于 2020-1-4 19:59
这么说吧,比如机体换装/变型数据一共是188条,在MachineSpecList.pkd内部包含的MachineConversionList.cdb ...
原来你想达到这样的效果,晓得了。
那可以明确告诉你,技术上并不难,只是略费体力而已。就用你的例子,想让00添加变形机能,在00和ELS之间相互变形,对吧?
Machine表单中已经给所有的机体的特性安排好空间了,在变形栏添加数据不会占用字符位的,但比较麻烦的是要找到变形的控制字符,还有00和ELS的代码。机体太多了,找起来很费劲,最笨的是一个一个去试。


直接在pkd里看的是不准确的,因为数据是整理过的。
页: [1] 2
查看完整版本: 对PKD文件结构的再次分析,应该可以直接提取内部文件了