Обновление Warface. Как это происходит? Не так давно (хотя уже давно) выходили ответы на вопросы, где игрок спрашивал: «Почему у меня так долго устанавливается обновление игры?», где ему ответили: Потому что твой SSD/HDD на грани поломки... Тогда я раскритиковал данный ответ и спросил у вас, хотите ли вы увидеть пост про то, как именно происходит обновление игры и почему оно такое долгое, вы ответили, что хотите. Поэтому спустя большое количество времени (моей лени) я готов вам всё это рассказать. Ниже вы узнаете, как формируется обновление, как происходит его установка и почему всё это затягивается на продолжительное количество времени. ВНИМАНИЕ! Данный пост написан на основе знаний автора сообщества и специального изучения данной темы на основе имеющейся информации. С большой вероятностью в тексте могли быть допущены фактические ошибки, заранее прошу прощения, так как они сделаны не специально. Формирование обновления Сначала немного определений: Дистрибутив – пакет, включающий в себя все файлы клиента игры. Патч – пакет, включающий в себя все изменения файлов клиента игры между предыдущим дистрибутивом и новым. В первую очередь разработчики собирают дистрибутив. На компьютерах разработчиков игра выглядит иначе, чем у нас, они в неё также могут играть, но и параллельно могут сразу вносить правки в код. Для нас же игру нужно скомпилировать, то есть: исключить ненужные для игроков программы и файлы, зашифровать некоторые исходники (преимущественно это Lua-скрипты), собрать PAK-архивы и зашифровать их, и собрать в исполняемые файлы и файлы библиотек основной код (C++ и другой, в это не углублялся). На этом этапе ничего такого нет, игрокам данный дистрибутив нужен, если вы собираетесь установить игру или проверить игру на целостность. Но для разработчиков он нужен для следующего этапа, а именно формирования патча. Патч необходим, чтобы игрокам после каждого обновления не приходилось устанавливать всю игру заново, а всего лишь можно было внести правки в существующую версию. Патч формируется следующим образом: 1. Собирается дистрибутив новой версии игры; 2. Затем он сравнивается при помощи специального программного обеспечения (для VK Play это «GameCenterUploader» или «bstool») с дистрибутивом прошлой версии; 3. На основе результата сравнения формируются два архива «app.7z» и «patch.7z», а также файл «manifest.xml»; 4. На последнем этапе архивы «app.7z» и «patch.7z» делят на части, чтобы их вес по отдельности не превышал 2 ГБ, а именно на «app.7z.001» и «patch.7z.001», если вес превышает 2 ГБ, то добавляют либо «app.7z.002», либо «patch.7z.002» и так далее, а файл «manifest.xml» засовывают в GZ-архив (при необходимости все архивы шифруют). Немного пояснений по файлам: «app.7z» — содержит новые файлы, которых не было в предыдущем дистрибутиве; «patch.7z» — содержит патч-файлы, которые необходимы ИЦ для внесения правок в существующие файлы; «manifest.xml» — содержит необходимые инструкции и значения для ИЦ при обновлении (какие файлы нужно пропатчить, какие удалить, а какие добавить); На этом этапе сборка обновления завершена, затем его загружают в ИЦ и проверяют на работоспособность, а через некоторое время, если проблем не обнаружится, открывают к нему доступ для всех игроков. Далее идёт этап скачивания и установки патча игроками. Скачивание и установка патча игроками После того, как админы открывают доступ к скачиванию обновления, игровой центр игроков проверяет наличие данного обновления, как только он его находит, он начинает его скачивать. После того, как он его скачает, он проверяет его на целостность и сможет ли обновление установиться вообще, если всё хорошо, то начитается установка, которая идёт в несколько этапов: 1. Чтение файлов патча; 2. Распаковка в директорию игры архива «app.7z» (если таковой имеется); 3. Патчинг лёгких файлов (происходит обновление наиболее лёгких файлов при помощи файлов из архива «patch.7z», если таковой имеется) — это процесс до 50%; 4. Патчинг тяжёлых файлов (происходит обновление наиболее тяжёлых файлов при помощи файлов из архива «patch.7z», если таковой имеется) — это процесс после 50%; 5. Завершение установки и проверка игры на целостность (сверяется хэш каждого файла клиента, если какой-то не сходится, то файл скачивается с нуля). Почему же обновления ставятся так долго? Вся проблема заключается в том, что при формировании патча, патч-файлы формируются даже тогда, когда у сравниваемых файлов содержимое идентично, но отличаются метаданные (или же, в пример, всем нам знакомая строчка «Дата последнего изменения»). Из-за этого формируются, на мой взгляд, «лишние» патчи, которые и создают всю проблему с долгими обновлениями. Ведь чтобы внести патч в файл нужно: прочитать патч, прочитать обновляемый файл, обновить его и сохранить, а с файлами нашей игры, которые преимущественно весят по 1-2 ГБ (если не считать уровни, то в папке Game в общей сложности 64 PAK-архива), это затягивается на продолжительное время.