Веб-обновление (Web Updater)
Ren'Py включает в себя инструмент для обновления, который может автоматически скачивать и устанавливать обновления для игр, созданных на этом движке и размещенных на сайте. Это может быть полезно для поддержания большой по объему игры в актуальном состоянии.
Инструмент обновления работает автоматически, выполняя следующие действия:
- Скачивание индексного файла, который управляет процессом обновления.
- Направление запроса пользователя для подтверждения начала процесса обновления.
- Создание файла архива из файлов, расположенных на локальном диске.
- Скачивание файла, управляющего процессом обновления, с помощью утилиты zsync с сервера.
- Использование утилиты zsync для обновления файла архива до версии, которая расположена на сервере. Zsync автоматически вычисляет различия между двумя файлами и пытается скачать только те части, которые были изменены.
- Распаковка архива, замена файлов на локальный диск.
- Удаление промежуточных файлов между старой и новой версией.
- Перезагрузка игры.
Во время этого процесса инструмент обновления отображает экран обновления, предлагая пользователю продолжить или отменить процесс, когда это необходимо.
Требования к серверу (Server Requirements)[править | править код]
Для корректного функционирования инструмента обновления необходимо разместить игру на собственном хостинге. У вас должна быть возможность напрямую скачивать файлы обновления, переходя по соответствующему URL-адресу, а также ваш сервер должен поддерживать запросы диапазона HTTP. Это означает, что вам потребуется оплачивать хостинг, так как файлообменные сайты обычно не поддерживают необходимые функции.
Сборка обновления (Building an Update)[править | править код]
Обновления создаются автоматически при построении дистрибутивов игры. Чтобы создать обновление, установите значение True для переменной build.include_update, расположенной в файле options.rpy. Это разблокирует опцию «Обновить сборку» в разделе «Построить дистрибутивы», расположенном в Ren'Py Launcher. Поставьте галочку напротив этой опции и Ren'Py создаст файлы обновления.
Файлы обновления состоят из:
- updates.json
- Индекс доступных обновлений и их версий.
- package.sums
- Содержит контрольные суммы для каждого блока в пакете.
- package.update.gz
- Содержит данные обновления для данного пакета.
- package.update.json
- Содержит список файлов в каждом пакете, который инструмент обновления использует при загрузке DLC.
- package.zsync
- Управляющий файл, используемый zsync для управления процессом скачивания файлов.
Вы должны загрузить все эти файлы в один каталог на вашем сервере.
Функции (Functions)[править | править код]
Для запуска процесса обновления вызовите либо action updater.update, либо action updater.Update.
updater.Update(*args, **kwargs)
- Действие, которое вызывает updater.update(). Все аргументы сохраняются и передаются в эту функцию.
updater.UpdateVersion(url, check_interval=21600, simulate=None, **kwargs)
- Эта функция связывается с сервером по url и определяет наличие более новой версии программного обеспечения, доступного по этому URL-адресу. Если есть, эта функция возвращает новую версию. Иначе функция возвращает значение None.
- Так как установление связи с сервером может занять некоторое время, эта функция запускает поток в фоновом режиме и немедленно возвращает версию, которая была доступна при последнем обращении к серверу, либо возвращает None, если к серверу не обращались. Поток, запущенный в фоновом режиме, перезапустит текущее взаимодействие, как только будет установлено соединение с сервером, что приведёт к обновлению экранов, вызывающих эту функцию.
- Каждый URL-адрес будет связываться с сервером не более одного раза за сеанс Ren'Py и не более одного раза через каждый интервал, определенный в секундах переменной check_interval. Если сервер не отвечает, кэшированные данные будут возвращены.
- Дополнительные именованные аргументы (включая simulate) передаются в механизм обновления, как если бы они были заданы функцией updater.update().
updater.can_update(base=None)
- Возвращает значение True, если обновление может быть выполнено успешно. Возвращает значение False, если обновление полностью невозможно. Например, если директория с обновлениями была удалена.
- Заметьте, что эта функция не определяет действительно ли доступно обновление. Для этих целей используйте updater.UpdateVersion().
updater.get_installed_packages(base=None)
- Возвращает список установленных имён пакетов DLC.
- base
- Основная директория для обновления. По умолчанию используется основная директория текущего проекта.
updater.update(url, base=None, force=False, public_key=None, simulate=None, add=[], restart=True, confirm=True)
- Обновляет игру, созданную на движке Ren'Py, до последней версии.
- url
- URL-адрес расположения файла updates.json.
- base
- Основная директория, которая будет обновлена. По умолчанию используется директория текущей игры (обычно это можно проигнорировать).
- force
- Производит принудительное обновление, даже если номера версий совпадают (используется для тестирования).
- public_key
- Путь к файлу PEM, содержащему открытый ключ, по которому проверяется подпись обновления (обычно это можно проигнорировать).
- simulate
- Используется для тестирования обновления графического интерфейса пользователя без фактического выполнения обновления. Может принимать следующие значения:
- None для выполнения обновления.
- "available" для проверки тех случаев, когда обновление доступно.
- "not_available" для тестирования тех случаев, когда обновление не доступно.
- "error" для проверки ошибки обновления.
- add
- Список пакетов, добавляемых во время обновления. Необходимо только для DLC.
- restart
- Перезагружает игру после обновления.
- confirm
- Должен ли Ren'Py предложить пользователю подтвердить обновление? Если принимает значение False, обновление будет продолжено без подтверждения.
Экран (Screen)[править | править код]
Для настройки внешнего вида инструмента обновления, можно изменить экран updater. Экран по умолчанию определяется в файле common/00updater.rpy.
Источник[править | править код]
Статья "Web Updater" на английском языке.
На главную страницу | Официальная документация движка | Вернуться к началу статьи |