具体解析参考:http://wowdev.org/wiki/index.php/DBC.
dbc文件是wow文件中比较简单的文件格式,一个dbc文件分为三段:文件头,数据表和字符串表.
1.文件头:
偏移 |
类型 |
描述 |
0x00 |
char[4] |
总是 'WDBC' (不包含'\0') |
0x04 |
uint32 |
nRecords - 数据表的记录数(行数) |
0x08 |
uint32 |
nFields - 数据表的域数(列数) |
0x0C |
uint32 |
recordSize = nFields * 4 (不一定为真!) |
0x10 |
uint32 |
字符串表大小 |
(由于某些dbc文件不是每个域都为4字节,所以有可能recordSize < nFields * 4 )
2.数据表:
数据表的开始位置接着文件头(0x14开始),占nRecords * recordSize.
每一个域都有特定的含义(域含义可参考http://wowdev.org/wiki/index.php/DBC,wow的每一次更新都可能修改域的含义),而且有三种可能的类型(整型,单精度,空终止字符串偏移量).
3.字符串表:
字符串表的开始位置接着数据表(0x14 + nRecords * recordSize开始).
字符串表的索引是从0开始的,而且是空终止字符串,因此不需要字符串长度.
4.关于修改dbc的说明:
根据上面的说明可知,如果域的类型是整型或单精度,则随便改都可以(变态SF中改法伤值就是改spell.dbc的相应域);而要改的域是字符串则要注意.如果新字符串长度小于或等于原来的,则补'\0';否则就是大工程了,改文件头中描述字符串表大小的值,后面的字符串域都要增加相应的偏移.