Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Tools (http://mangos.ytdb.ru/forumdisplay.php?f=22)
-   -   DBC Viewer (http://mangos.ytdb.ru/showthread.php?t=2801)

TOM_RUS 02.11.2010 13:17

DBC Viewer
 
Вложений: 1
Утилита для просмотра DBC файлов клиента. Изначально планировалась поддержка только DBC формата, но позже была также добавлена поддержка форматов DB2 ('WDB2', клиент 4.х+), ADB ('WCH2', клиент 4.х+) и WDB.

Для открытия файла требуется указать его структуру в файле dbclayout.xml. В данный момент имеются структуры лишь для небольшого числа dbc файлов.

Имеется возможность экспорта в sql, а так же интерфейс для написания плагинов экспорта в другие форматы (csv, xml и т.д.) Для примера можно посмотреть исходник экспортера в sql.

Репозиторий тут (github mirror тут).

Бинарники можно взять тут.

Для запуска утилиты требуется Microsoft .NET Framework 4.0.

Konctantin 25.11.2010 13:13

В классе WDBReader есть такой участок кода, но при количестве записей == 0, он будет выдавать ошибку, потому что reader.BaseStream.Position будет на 4 байта меньше чем reader.BaseStream.Length :
Код:

if (entry == 0 && size == 0 &&  reader.BaseStream.Position == reader.BaseStream.Length)
    break;

может лучше так:
Код:

if ((entry == 0 && size == 0) || reader.BaseStream.Position == reader.BaseStream.Length)
    break;


SergiK_KilleR 01.12.2010 11:12

можно ли добавить в программу поддержку dbc-файлов с форматом PTCH ?

отличается ли чем-то файл Cache\ADB\ruRU\Item-sparse.adb от locale-ruRU.MPQ\DBFilesClient\Item-sparse.db2 (по структуре) ?
этот вопрос к тому, что первый файл открывается корректно программой, а со вторым файлом проблемы: все поля типа string заполнены текстом:
Цитата:

n Shortsword

tempura 01.12.2010 11:34

Цитата:

Сообщение от SergiK_KilleR (Сообщение 16729)
можно ли добавить в программу поддержку dbc-файлов с форматом PTCH ?

Нет. Это не DBC, а патч файл.

TOM_RUS 01.12.2010 14:04

Цитата:

Сообщение от SergiK_KilleR (Сообщение 16729)
можно ли добавить в программу поддержку dbc-файлов с форматом PTCH ?

отличается ли чем-то файл Cache\ADB\ruRU\Item-sparse.adb от locale-ruRU.MPQ\DBFilesClient\Item-sparse.db2 (по структуре) ?
этот вопрос к тому, что первый файл открывается корректно программой, а со вторым файлом проблемы: все поля типа string заполнены текстом:

Видимо отличаются. Т.к. Файл из locale-ruRU.MPQ\DBFilesClient\Item-sparse.db2 от билда 12880, а последний билд щас 13329...

P.S. Исправил, теперь и старые db2 файлы должны открываться нормально. Т.к. точного номера билда, в котором хидер изменили я не помню, сделал просто build > 12880...

TOM_RUS 02.12.2010 20:41

Кстати, для получения обновленных файлов я использую свою тулзу Blizzard.Patcher. Для работы требуется файл предыдущей версии и PTCH файл-обновление. Все обновления применяются последовательно.

TOM_RUS 09.04.2011 20:22

Небольшой апдейт: с выходом патча 4.1 оказалось, что структура DB2 файлов была некорректна, что было исправлено, при этом было выяснено назначение двух неизвестных полей в хидере файлов.

Chameleon 05.08.2011 09:30

У меня есть идея к проекту, но времени сейчас нету ее реализовать, так что напишу тут и может кто соберется.
Идея в следующем: насколько я вижу в DBC файлах поля всегда по 4 байта и имеют один из 3х типов - int, float, string. Соответственно мы могли бы добавить автоматичнское распознавание типов колонок в DBC, например как это делает MyDbcEditor.
Это упростило бы просмотр файлов с неопределенным форматом и также упростило бы создание форматов т.к. им останется включать только имена колонок, а типы уже в редких случаях.
Я немного пореверсил MyDbcEditor, чтобы понять как он с этим справляется и вот результат.
Для различения float/int рассматриваются первые 1000 записей в колонке с int значением > 1. Затем
Код:

if ( count <= 0 || AvgAbs <= 50000000 || AvgBitsSet <= 4.0 )
    // INT
else
    // FLOAT

Там так же определяются флаги как отдельный тип от обычных чисел, чтобы их можно было показывать в хексе вместо десятичного вида. Для этого формула уже сложнее, но тоже в той же функции.

Однако сейчас DBC Viewer проходит по содержимому файла только 1 раз, что придется изменить (или сделать отдельную копию в памяти) для предварительного сбора статистики перед выводом содержимого.

RomanRom2 05.08.2011 10:25

поля не всегда по 4 байта.

TOM_RUS 05.08.2011 10:25

Поля не всегда 4 байта, бывают и 1 байт и 8 байт.

Chameleon 05.08.2011 11:11

Цитата:

Сообщение от TOM_RUS (Сообщение 24525)
Поля не всегда 4 байта, бывают и 1 байт и 8 байт.

Посмотрев на дамп DBC структур из 4.0.0 я нашел только 4 файла из 255, которые имеют поля byte.
Так что в большинстве случаев идея все равно работает. А для специальных случаев можно по-прежнему задать тип вручную.


Текущее время: 08:17. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS