服务端客户端文件基础知识篇

pak文件就是游戏的一种资源打包模式。我们所需要的资源基本都是PAK提取而来。

DNT是简易数据库,具体修改方法,参考我的单独教程。

PAK打包格式:

struct INDEX

{

char Name[0x38];               //文件名

unsigned long offset;           //文件数据偏移量

unsigned long size;             //文件大小

}

struct pak

{

char MagicNumber[4];           //pak文件头标记“PACK”

unsigned long offsetIndex;     //目录索引表的绝对地址

unsigned long SizeIndex;       //目录索引表中有多少索引项

}

<data......>                    //文件数据

struct INDEX index[SizeIndex]   //目录索引表

DN中的PAK文件属于EYE自定义的格式,其文件结构为:
[头部]
总计1024字节
头部结构:
char szID[256];//文件ID, 占256字节
DWORD dwVer;//版本或识别码, 占4字节
DWORD dwRecordNum;//包内文件总数, 占4字节
DWORD dwRecordOffset;//第一个尾部文件信息块的偏移, 占4字节
BYTE dbReserved[756];//保留, 占756字节
[中段]
压缩数据,以78 01开始,属于典型的zlib普通压缩(一种开源的算法)
[尾部]
每个文件信息占316字节,故总字节数=316×文件总数
文件信息块结构:
char szFilename[256];//文件相对路径, 占256字节,ASCII文本,CodePage=949
DWORD dwPackedSize;//压缩后大小, 占4字节
DWORD dwTrueSize;//实际大小, 占4字节
DWORD dwOccupationSize;//在包文件内占据的大小, 占4字节
DWORD dwOffset;//在包文件内偏移, 占4字节
DWORD dwFlag;//标记, 占4字节
BYTE dbReserved[40];//保留, 占40字节

PAK文件解压方法简介:
1.打开文件,读取文件头,获得文件总数和一个尾部文件信息块的偏移
2.定位文件指针到尾部文件信息块,分配内存,从文件读取全部的文件信息块
3.对文件信息块按[在包文件内偏移]进行排序(可选,目的是为了加快解压速度)
4.循环处理所有的文件信息块
4.1 定位文件指针到[在包文件内偏移]
4.2 分配内存,字节数为[压缩后大小],从文件读取压缩数据块
4.3 分配内存,字节数为[实际大小],调用zlib解压缩函数进行解压
4.4 从[文件相对路径]中获取目录名,递归创建完整的目录
4.5 根据[文件相对路径]创建新文件,将解压数据保存到改文件

PAK文件创建方法简介:
1.遍历选定路径下所有的文件,提取文件相对路径和文件实际大小
2.创建PAK文件,写入头部块,包内文件总数和第一个尾部文件信息块的偏移暂时不填
3.读取每一个待压缩文件,调用zlib压缩函数进行压缩(采用普通压缩)
4.将压缩后的数据保存到PAK文件,同时跟新文件信息块的内容
5.压缩数据完成后,把文件总数和当前位置更新到头部块,然后将所有的文件信息块保存到PAK文件
7.定位PAK文件指针到头部,再次写入头部块,保存并关闭

基本资源路径:

背景音乐——mapdata\resource\sound\bgm(背景音乐是OGG格式的 替换时要注意)
loading — —resource\ui\loading(龙之谷中的背景图 一般都是.jpg格式的)
界面——resource\ui(看文件名字就是到了ui的东西)
各职业服装。脸型。发型——resource\char\player(各个职业的ani 动作文件也在这里)
怪物——resource\char\monster
NPC——resource\char\npc
坐骑——resource\char\vehicle(全都可以通过文件名字很容易找到的 有木有)
饰品——resource\item\cash_item(翅膀 耳环 什么的全在这里)
技能——resource\particle(除了魔导的镜子外 其他的技能SKN MSH DDS PTC都在这)
武器——resource\weapon    除了武器文件夹里有ACT外
resource\stateeffect里也有(职业技能的效果ACT也在这里)
字体——resource\fonts
声音——resource\sound(各职业技能声音 NPC 过场等 全在这里 还有技能效果音)
EXT表——resource\ext
天气——mapdata\resource\envi
地图——mapdata\grid
纹身——resource\char\player\decal
宠物——resource\char\pet

DNT文件,又名【Dragon Nest Table file】,由原EXT文件改进而来,是一种较为简单的二维数据表,在DN中,所有的DNT文件构成了一个简易的数据库,供客户端使用。

DNT文件属于EYE自定义的格式,其文件结构为:
【头部】
总计10字节
DWORD dwNull;//空字节,占4字节
WORD wFieldNum;//字段个数(列数),占2字节
DWORD dwRecordNum;//数据个数(行数),占4字节

【字段描述块】
变长,每个字段描述块结构如下:
WORD wTextLen;//字段名称的长度,占2字节
char szText[wTextLen];//字段名称,占wTextLen字节
BYTE dbFieldType;//字段类型,占1字节,其含义如下:
1:字段类型为普通变长文本
2:字段类型为布尔型(以32位整型存放)
3:字段类型为32位整型
4:字段类型百分比(该字段为单精度浮点型,但要除以100)
5:字段类型单精度浮点型

【数据块】
变长,前置PKID,后面按照字段描述块定义的字段顺序排列
每一行数据结构如下:
DWORD dwPKID;//主键(32位整型)
以下根据字段描述块定义的类型分为以下3种:
★如字段类型为1,该数据为普通变长文本,结构如下:
WORD wLen;//文本的长度,占2字节
char szText[wLen];//文本,占wLen字节
★如字段类型为2,该数据为32位整型,占4字节,但其值只有0(假)和1(真)两种。
★如字段类型为3,该数据为32位整型,占4字节。
★如字段类型为4,该数据为单精度浮点型,占4字节,但结果要除以100。
★如字段类型为5,该数据为单精度浮点型,占4字节。

DNT文件处理方法简介:
1.打开文件,读取头部,获得字段个数和数据个数
2.根据字段个数,分配内存,读取每一个字段的描述信息,获得字段名和字段类型
3.根据数据个数,分配内存,先读取主键,然后根据字段描述信息中的字段类型,依次读取数据

PAK文件与DNT文件的关系:

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注