DBC
Материал из YTDB DataBase
Mayss (Обсуждение | вклад) (Удалено содержимое страницы) |
Mayss (Обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
+ | =DBC= | ||
+ | DBC (DataBaseClient) файлы - clientside базы данных, содержащие данные, NPCs, окружающей среде, мире и многое другое. | ||
+ | =Таблица содержания структуры= | ||
+ | Эта страница описывает структуру файлов DBC. Поскольку список существующих файлов DBC и их содержания имеет под категории [[:Category:DBC|DBC]], [[:Category:DBC_Vanilla|Vanilla]], [[:Category:DBC_BC|Burning Crusade]], [[:Category:DBC_WotLK|Wrath of the Lich King]], [[:Category:DBC_Cataclysm|Cataclysm]] и [[:Category:DBC_MoP|Mists of Pandaria]]. Если Вы добавляете документацию для определенной категории, пожалуйста, добавьте правильные категории (так же заполнить правильно) также. | ||
+ | |||
+ | =Структура= | ||
+ | struct dbc_header | ||
+ | { | ||
+ | uint32_t magic; // всегда 'WDBC' | ||
+ | uint32_t record_count; // делает запись за файл | ||
+ | uint32_t field_count; // область за отчет | ||
+ | uint32_t record_size; // sum (sizeof (field_type_i)) | 0 <= i < field_count. field_type_i is НЕ определен в файлах. | ||
+ | uint32_t string_block_size; | ||
+ | }; | ||
+ | |||
+ | template<typename record_type> | ||
+ | struct dbc_file | ||
+ | { | ||
+ | dbc_header header; | ||
+ | // static_assert (header.record_size == sizeof (record_type)); | ||
+ | record_type records[header.record_count]; | ||
+ | char string_block[header.string_block_size]; | ||
+ | }; | ||
+ | |||
+ | =Блок последовательности= | ||
+ | DBC записи могут содержать строки. Строки не хранятся в записи, а в качестве дополнительного строки блока.Запись содержит смещение в этом блоке. Строки нулем (с строки) и может быть нулевой длины.Строку нулевой длины, то содержит только один байт равно нулю. | ||
+ | |||
+ | Таким образом, если | ||
+ | typedef uint32_t string_offset_type; | ||
+ | struct example_record | ||
+ | { | ||
+ | uint32_t id; | ||
+ | string_offset_type name; | ||
+ | }; | ||
+ | Вывод идентификатора и имени записи я могу вывести так | ||
+ | // dbc_file<example_record> file; | ||
+ | printf ("record %u: %u, %s\n", file.records[i].id, file.string_block[file.records[i].name]); | ||
+ | или следуя по смещениям: | ||
+ | // const char* file; | ||
+ | uint32_t record_count = *(uint32_t*) (file + 1 * sizeof (uint32_t)); | ||
+ | uint32_t record_size = *(uint32_t*) (file + 3 * sizeof (uint32_t)); | ||
+ | const char* records = file + 5 * sizeof (uint32_t) /* header */; | ||
+ | const char* string_block = records + record_size * record_count; | ||
+ | printf ("record %u: %u, %s\n", *(uint32_t*)(records + i * record_size /* id */), string_block + *(uint32_t*)(records + i * record_size + sizeof (uint32_t) /* name */)); | ||
+ | |||
+ | =Локализация= | ||
+ | DBC записи могут содержать локализованные строки. Локализованные строки множество одного струнного блока смещения плюс битовой маски до Cataclysm. Начиная с Cataclysm, есть только одно поле, содержащее одну единственную строку смещения, таким образом, обеспечивая отключение нескольких локализаций в одном файле. | ||
+ | |||
+ | Количество и порядок локали полей можно найти на [[Localization]]. Описание запись может либо пометить количество столбцов в локализованной области (например, 1-16) |
Текущая версия на 10:26, 7 мая 2015
Содержание |
DBC
DBC (DataBaseClient) файлы - clientside базы данных, содержащие данные, NPCs, окружающей среде, мире и многое другое.
Таблица содержания структуры
Эта страница описывает структуру файлов DBC. Поскольку список существующих файлов DBC и их содержания имеет под категории DBC, Vanilla, Burning Crusade, Wrath of the Lich King, Cataclysm и Mists of Pandaria. Если Вы добавляете документацию для определенной категории, пожалуйста, добавьте правильные категории (так же заполнить правильно) также.
Структура
struct dbc_header { uint32_t magic; // всегда 'WDBC' uint32_t record_count; // делает запись за файл uint32_t field_count; // область за отчет uint32_t record_size; // sum (sizeof (field_type_i)) | 0 <= i < field_count. field_type_i is НЕ определен в файлах. uint32_t string_block_size; }; template<typename record_type> struct dbc_file { dbc_header header; // static_assert (header.record_size == sizeof (record_type)); record_type records[header.record_count]; char string_block[header.string_block_size]; };
Блок последовательности
DBC записи могут содержать строки. Строки не хранятся в записи, а в качестве дополнительного строки блока.Запись содержит смещение в этом блоке. Строки нулем (с строки) и может быть нулевой длины.Строку нулевой длины, то содержит только один байт равно нулю.
Таким образом, если
typedef uint32_t string_offset_type; struct example_record { uint32_t id; string_offset_type name; };
Вывод идентификатора и имени записи я могу вывести так
// dbc_file<example_record> file; printf ("record %u: %u, %s\n", file.records[i].id, file.string_block[file.records[i].name]);
или следуя по смещениям:
// const char* file; uint32_t record_count = *(uint32_t*) (file + 1 * sizeof (uint32_t)); uint32_t record_size = *(uint32_t*) (file + 3 * sizeof (uint32_t)); const char* records = file + 5 * sizeof (uint32_t) /* header */; const char* string_block = records + record_size * record_count; printf ("record %u: %u, %s\n", *(uint32_t*)(records + i * record_size /* id */), string_block + *(uint32_t*)(records + i * record_size + sizeof (uint32_t) /* name */));
Локализация
DBC записи могут содержать локализованные строки. Локализованные строки множество одного струнного блока смещения плюс битовой маски до Cataclysm. Начиная с Cataclysm, есть только одно поле, содержащее одну единственную строку смещения, таким образом, обеспечивая отключение нескольких локализаций в одном файле.
Количество и порядок локали полей можно найти на Localization. Описание запись может либо пометить количество столбцов в локализованной области (например, 1-16)