В данном посте постараюсь подробно рассказать про наш билдер для файлов, зачем он нужен, и как собрать патч для своего апдейтера.

Билдер – это программа которая подготавливает файлы к тому чтобы с ними мог работать апдейтер. Подготовка происходит в несколько основных этапов:

  1. Считывание информации о файлах и папках.
  2. Синхронизация с созданным ранее патчем.
  3. Построение карты файлов для апдейтера.
  4. Удаление из патча не участвующих файлов.
  5. Запаковка всех файлов по отдельности.
главное окно Patch Builder — сборщика патчей для апдейтера лаунчера
patch builder

Сбор информации

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

Hash сумма – это специфичный идентификатор файла, который высчитывается математическими алгоритмами на основе информации которая содержится в нем. В данный момент мы используем алгоритм CRC32 с точки зрения оптимизации и ускорения процесса сбора информации. При любом изменении файла его хеш-сумма изменится даже если размер останется прежним.

Пример строки с информацией о файле, где 4144 это размер в байтах, а dbc44dcf это хеш сумма: L2.ini 4144 dbc44dcf

Синхронизация

Если вы уже создали патч для своего клиента не спешите его удалять. В нашем билдере присутствует система синхронизации которая сравнивает прошлый патч с новыми файлами. Магия происходит после сравнения виртуального дерева файлов нового патча с картой файлов ранее созданного патча (UpdateInfo.xml). Результат синхронизации отображается на виртуальном дереве файлов цветовыми индикаторами:

виртуальное дерево файлов с цветовыми индикаторами синхронизации в Patch Builder
цветовые индикаторы: зелёный новый, синий изменённый, чёрный нетронутый, красный удалённый
  • Зеленый – новый файл.
  • Синий – измененный файл.
  • Черный – нетронутый файл.
  • Красный – удаленный файл.

Сборка

Сборка начинается с превращения виртуального дерева файлов в плоский вид тестового файлика формата xml, назовем ее картой файлов апдейта. В этом файлике содержится вся информация которая потребуется апдейтеру для успешного обновления. Подробнее можно узнать в посте про Updater.

пример карты файлов UpdateInfo.xml — результат сборки Patch Builder

После чего сначала удаляются файлы которые уже не участвуют в новом патче. И наконец происходит запаковка каждого файла в архив с помощью Zip алгоритма с параметром best compression.

Как же пользоваться?

Запустите UpdateBuilder.exe. В левой части выберите или перетащите папку с новым патчем. После выбора начнет загружаться информация о файлах. Подробная информация о происходящем пишется в окно логирования.

UpdateBuilder.exe — выбор папки с исходными файлами для сборки патча

После построения виртуальной карты файлов пора выбрать папку в которую сохранять результат патча. Если вы уже делали билд выбирайте ту же папку для синхронизации файлов. Если делаете патч в первый раз выбирайте пустую папку.

выбор папки для сохранения результата патча в Patch Builder

Синхронизация прошла, и мы получили полную информацию о файлах, что же дальше? А дальше мы можем приступить к настройке параметров файлов в обновлении. В нашей системе есть два вида параметров:

  1. Участвует ли файл в быстрой (критической) проверке.
  2. Требуется ли проверять файл на размер и хеш-сумму при обновлении.

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

переключатели параметров файла: быстрая проверка и проверка хеш-суммы CRC32

Подробнее про быстрое и критическое обновление

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

настройки быстрого и полного критического обновления в Patch Builder

Подробнее про проверку на размер и Hash

Все настройки по умолчанию включены.

После того как все синхронизовано и настроено остается нажать на кнопку “Начать упаковку” и запусть сборку. Вся информация так же отображается в логе, а папка с результатом откроется автоматически.

кнопка Начать упаковку — запуск сборки патча для лаунчера в Patch Builder

Останется только скопировать файлы на хост и дать ссылку мне.

В заключении

Напомню всем что исходники билдера находятся в общем доступе на GitHub, буду рад любой активности.

Что ж на этом все, спасибо за внимание! Теперь вы немного узнали как создать апдейтер л2 и как работает наш билдер файлов патча lineage 2 (и не только) . Надеюсь вопросов не осталось, но если все же есть – welcome на форму связи