Как пользоваться патчами для игр

Как пользоваться патчами для игр

После написания первой игры перед нами встала задача, о которой мы даже не задумывались ранее. Это разработка патчера к игре. Для нашего патчера мы определили следующие требования:

  • Поддержка юнити игр
  • Дружелюбность к пользователю
  • Отображение игровых новостей
  • Универсальность для всех игр разработанных нашей студией
  • Гибкость настройки
  • И самое важное: умение делать небольшие патчи для больших файлов

Ссылка на исходники патчера в конце статьи.

Как обычно перед тем как изобретать велосипед, я ищу готовые решения проблемы. Но либо я плохо гуглил, либо единственное что удовлетворяло требованием это M2H Patcher с Unity Asset Store.
На внедрение мы потратили несколько дней, и пропользовались им около месяца (до первой и одновременно последней поломки). В один прекрасный день патчер отказался делать патч. Потратив несколько часов на разбирательство я выяснил причину.
Дело в том что этот патчер использовал для работы утилиты bsdiff & bspatch. Для работы утилиты bsdiff нужно max(17*n,9*n+m)+O(1) памяти. Так уж получилось что на самой лучшей машине в офисе было всего 4 Гб оперативки, а файл с ресурсами был уже более 600 Мб. Вообщем bsdiff отказывался с ним работать (до этого время создания патча составляло непотребные 30+ минут).

Тогда то я решил все-таки собрать велосипед.

Алгоритм

Теперь предстояло нагуглить алгоритм сравнения больших бинарных файлов. Достойных кандидатов оказалось два. Это Rsync и алгоритм сортировки суффиксов из bsdiff.
Так как со вторым уже были проблемы, то я остановился на первом.
Его суть заключается в следующем. Разбиваем исходный файл на куски равного размера (далее чанки от англ. chunk).
Для каждого чанка считаем два хэша: сильный и слабый. Сильный хэш — это обычный MD5. Слабый хэш — это кольцевой хэш. Его особенность в том, что если хэш от n до n+S-1 равняется R, то последовательность байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала.
Точно так же нужно посчитать результирующий файл. На выходе у нас должно получится две последовательности хешированных чанков.
Далее мы начинаем сравнивать слабые хэши в файлах в поисках одинаковых чанков. Если хэши совпали, то сравниваем сильные хэши. Ключом алгоритма является создание двух сигнатур — быстрой и стойкой. Быстрая используется как фильтр. Стойкая используется для более точной проверки.
На выходе мы имеем список отличающихся чанков, которые и записываем в патч.

Создание патча

Для наших игр хорошо подходит система, где номер версии обозначается целым числом. Таким образом обычно мы имеем кучу папок с разными версиями текущего проекта: 1, 2, 3, и т.д.

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

и ведем список изменений. Если файл добавился, то считаем md5. Если изменился, то считаем новый и старый md5. Эти хэши нужны будут для того, чтобы определить можно ли применить патч и корректно ли он установился.
Эти данные собираются в архив с максимальным сжатием через SharpZipLib. В конце мы дописываем туда файлик patch_info.txt в котором хранятся данные о размере чанка, список файлов с их хэшами и действиями.
Пример:

* R — removed, A — added, M — modified
В зависимости от действия там лежит либо сам файл, либо патч к старой версии.
Теперь этот патч можно выложить на любой веб хостинг. Я тестил на дропбоксе.

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

Читайте также:  Доказать что производная четной функции функция нечетная

Патчер

При старте патчер считывает файл настроек по пути ./patcher/configuration.xml и проверяет на валидность.
Пример файла с комментариями:

Первым делом патчер проверит свою версию из файла ./patcher/version.txt. Потом он проверит последнюю версию игры по ссылке из настроек. Если последняя версия больше то запускается процесс обновления по схеме:

Чтобы применить патч, сначала нужно получить список измененных файлов. Поэтому первым делом достаем из скачанного архива patch_info.txt, парсим его и пробегаем циклом по файлам.
Если файл подлежит удалению, то удаляем. Если добавлен, то распаковываем из архива. Если изменен то применяем патч если хэши совпадают (чтобы не испортить его).
В конце не забываем проверить новый md5 хэш.

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

Статистика

Для проверки я сразу же засунул в него клиент нашей игры на Unity3D, с которым отказался работать bsdiff.
Клиент версия 1 — 1669 Mb
Клиент версия 2 — 1692 Mb (мы добавили модельку с пачкой текстур)
Размер патча при размере чанка 1 Кб и максимальном сжатии архива — 11.8 Mb, что очень похоже на результаты работы патчера с bsdiff’ом
Время создания патча на моей машине меньше минуты, а применения около 10 секунд.

Как установить патч?

Патч – это обновления к программному обеспечению или к целевому комплексу программ. Например, разработчики ОС Windows стабильно создают новые патчи, для того чтобы исправлять некоторые сбои или «дыры» в системе безопасности.

Неважно, для какого вида программ вы хотите установить патч, это всегда делается одинаково. Сначала убедитесь в том, что у вас есть самая последняя версия обновления для программного обеспечения. Это можно узнать только на официальном сайте. Для этого загрузите страницу производителя программы в интернете и посмотрите в разделе «Обновления» или Download’s наличие последних версий.

Если у вас нет таких обновлений, то их можно быстро загрузить при помощи специального менеджера закачек, например Download Master. Для этого нажмите правой кнопкой мыши на требуемую ссылку, при условии, что не сработала автоматическая загрузка, и выберите «Скопировать ссылку». В окне менеджера закачек нажмите «+»(Add), потом выберите папку, где нужно сохранить файл.

После успешной загрузки патча, нужно его распаковать, если он заархивирован, и потом запустить. На мониторе появится окно, в котором нужно нажать «Далее». Если мастер установки спрашивает вас о местонахождении утилиты, то нажмите «Обзор» и выберите папку, где находится файл с расширением exe.

Потом вам будет предложено пару вариантов установки. Если выбирать нужно будет из 3 вариантов, то всегда нажимайте Typical. Далее совершайте действия, следуя подсказкам мастера установки. В конце нажмите «Готово».

После установки компьютер попросит вас перезагрузки. Если нет, то все равно перезагрузите его сами. Для этого зайдите в «Пуск», выберите «Выключение», а потом кнопку «Перезагрузка» (для Windows XP) или нажмите на треугольник около этой кнопки и выберите «Перезагрузка»

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

Читайте также:  Как настроить домашний медиа сервер для телевизора

Все о Lucky Patcher для Android и как им пользоваться

Что такое Root-права на Android и как их получить мы на нашем сайте рассказывали уже очень давно. Способов получения Root-прав существует великое множество, и мы в этой статье собрали наиболее известные и универсальные из них. Мы также уже рассказывали о приложениях, ради которых стоит получить Root-права на Android. И сегодня я бы хотел рассказать о еще одном очень популярном и функциональном приложении, о котором нельзя не рассказать. Lucky Patcher — универсальный патчер для игр. Подробнее о том, что он умеет и как им пользоваться мы расскажем в этой статье.

Внимание (еще раз). Для работы приложения необходимы Root-права!

Начну с краткого описания возможностей приложения.

Возможности Lucky Patcher

Предыстория. Часть игр и приложений имеют стандартный код взаимодействия с Google Play Market, однако это не мешает существованию очень сильных инструментов защиты это кода, то есть – защиты программы от ее полного или частичного изменения.

После получения разрешения на рут-права Lucky Patcher первым делом сканирует ваше ненаглядное устройство, будь то смартфон или планшет, на все установленные программы. После этого Lucky Patcher классифицирует их на две группы: на те приложения, которые можно пропатчить, и на те, что нельзя. После этого формируется список, в котором расположены программы в порядке убывания полезности патча. Вы можете применить патч к чему-либо, и, если он сработает, то вы будете иметь полностью зарегистрированное приложение. Кстати, в крайних версиях LP добавлена возможность блокировки назойливой рекламы в приложениях, правда, срабатывает эта функция не во всех случаях. И еще, перед применением патча просто жизненно необходимо сделать бэкап приложения (эту функцию можно включить в меню патчей)!

Функционал и возможности Lucky Patcher

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

1. Встроенный ChangeLog.

Каждый раз при запуске Lucky Patcher с включенным интернетом информация в списке изменений обновляется. И если появится что-то новое, например, обновление программы, отчеты об ошибках или просто какие-то новости от разработчика, то приложение вам все само выдаст.

2. Автоматическое обновление.

Лично я считаю большим плюсом возможность обновить LP не выходя из него.

3. Список действий

Если вы выберете какое-либо приложение из предложенного вам Lucky Patcher списка, то появится меню возможных действий, которые можно совершить над программой.

Список включает в себя такие пункты, как:

  • «Информация о приложении»: при нажатии на этот пункт вам покажет всю возможную информацию о приложении, включая обычный кэш и dalvik-кэш.
  • «Запуск приложения»: как вы понимаете, этот пункт отвечает за включение выбранной программы.
  • «Меню патчей»: появится список возможных патчей (см. ниже).
  • «Инструменты»: появляется список всего, что можно совершить над этим приложением, то есть – восстановление из резервной копии, клонировать приложение, сделать резервную копию и так далее (см. ниже).
  • «Удалить приложение»: вы не поверите… Если сюда нажать, то случится непоправимое (но резервная копия вам в помощь) – приложение удалится.
  • «Очистить данные»: так называемый, сброс настроек и данных приложения (опять же, резервная копия поможет).
  • «Перенести на sdcard»: перенесет приложение на флэш-карту вашего устройства.
  • «Панель управления»: с помощью магии священного Android вас перенесет в настройки приложения, что находится по адресу «телефон – настройки – приложения — …название приложения…».

4. Возможность компиляции и декомпиляции приложения

Читайте также:  Как красиво сделать репост

– можно распаковать и запаковать приложение через встроенный в LP скрипт.

Вот так. Но это если очень кратко. Теперь приступим к разбору «Меню патчей».

1. «Удаление проверки лицензии».

Эта функция предназначена для получения верной лицензии от Google Play. Объясняю. Всем пользователям Android хорошо известна ситуация, когда некоторая жадность и маниакальность наших дорогих разработчиков выходит за рамки нормального, а именно – ограничение нас в использовании купленного приложения (или не купленного) без интернета, что вполне себе допустимо для разного рода браузеров, анекдотов или радио, но не совсем нормально для простого проигрывателя музыки, карточным оффлайновым играм, оффлайн гоночкам и прочего похожего. Эта функция поможет нам избавиться от назойливости девелоперов – патч вырубит постоянное требование интернета. От себя добавлю, что эту функцию я использовал везде, где только можно, но не во всех случаях все было нормально. Иногда бывали небольшие несостыковки, например, сразу после патча для корректной работы требовалось хотя бы раз зайти в приложение со включенным интернетом.

2. «Удаление рекламы».

Читайте такжe подробную инструкцию с подборкой приложений для отключения рекламы:

  • Как убрать рекламу в приложениях и браузерах на Android

Этот пункт как раз для той группы людей, которые терпеть не могут рекламу и для тех, кому она немного мешает играть или работать. После этого патча в приложении пропадает реклама на веки вечные (до переустановки). Но, опять же, вероятность сбоя патча примерно равна 1 к 10.

3. «Патч поддержки InApp и LVL эмуляции».

Простым языком, этот патч позволяет совершать покупки внутри приложения через Google Play.

Проверено на Hill Climb Racing, Subway Surfers, Traffic Racer/Rider, Ski Safari.

НЕ РАБОТАЕТ В ОНЛАЙН-ИГРАХ!

4. «Изменение компонентов приложения»:

  • «Отключить компоненты вручную» – предоставляется возможность самому выбрать, какие компоненты можно отключить. Правда, приложение может включить обратно, если потребуется.
  • «Изменить разрешения с сохранением оригинальной подписи» – можно изменить разрешения приложения, к примеру, разрешить или запретить доступ в Интернет, совершать пользователю внутриигровые покупки, записывать на SD-карту, переводить устройство в спящий режим или наоборот и т.д.

«Изменить разрешения и активити с сохранением оригинальной подписи» – можно изменить и разрешения и компоненты одновременно. Так же есть возможность после этого собрать и переустановить приложение.

5. «Создать измененный apk»:

Все автоматизировано. Позволяет собрать приложение на основе пользовательского патча, или с вырезанной проверкой лицензии, или с вырезанной рекламой Google, или с измененными разрешениями и активити, или пересобрать для максимально корректной работы с InApp и LVL эмуляции.

С «Меню патчей» разобрались. Теперь просветлю вас о пункте «Инструменты».

1. «Клонировать приложение» – после этого с вероятностью 90% у вас на устройстве будет установлено два одинаковых приложения.

2. «Удалить выбранные сохраненные покупки» – удаляет покупки, которые совершил пользователь.

3. «Отключить приложение (заморозить)» – чаще всего применяется для отключения системных или встроенных приложений, которые либо мешают пользователю, либо занимают нужную память, либо жрут батарею, либо не нужны.

4. «Перенести в /system/app» – делает установленное приложением похожим на системное. Не пользовался – не знаю.

5. «Сделать резервную копию» – создает бэкап и установочного файла, и настроек приложения.

6. «Поделиться приложением» – рассказать кому-то о том, какое же это приложение классное.

И с «Инструментами» покончено.

Пользуйтесь наздоровье! Удачных патчей! И помните, администрация сайта никакого отношения к данному продукту не имеет и ответственность за все совершаемые вами действия не несет.

Ссылка на основную публикацию
Как подключить принтер к сети вай фай
Пусть локальная (домашняя) сеть состоит из нескольких компьютеров, связанных через беспроводную сеть wifi. И встал вопрос о том, как в...
Как переустановить ворд на компьютер
Приветствую вас ,читатели и просто посетители моего сайта! Вы знакомы с текстовым редактором Microsoft Word? Если да, то отлично! Если...
Как переустановить танки world of tanks
Во время установки игры могут происходить различные неприятные моменты с файлами игры, и из-за этого, играя в World of Tanks,...
Как подключить принтер к компьютеру через wifi
Последнее десятилетие прошло под эгидой мобильности, а посему производители начали потихоньку переходить на беспроводные технологии. Средства вывода информации не стали...
Adblock detector