DBC

Материал из YTDB DataBase

(Различия между версиями)
Перейти к: навигация, поиск
(Удалено содержимое страницы)
 
Строка 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)

Источник — «http://wiki.ytdb.ru:89/index.php/DBC»
Личные инструменты