Ren'Py にはウェブ上の Ren'Py ホストから自動でダウンロードして更新をするアップデーターが含まれています。これは大規模なゲームを最新に保つのに便利です。
Ren'Py アップデーターは自動的に次のステップを実行します。
差分ファイルのインデックスをダウンロードします。
ユーザーに更新するか尋ねます。
ディスク上のファイルからアーカイブを生成します。
zsync をサーバーからダウンロードします。
zsync を使用してアーカイブをサーバー上のバージョンにアップデートします。 zsync は自動的に2つのファイルの差分を計算し、変更部分のみをダウンロードしようとします。
アーカイブを解凍し、ディスク上のファイルを置き換えます。
新旧間で除去されたファイルを削除します。
ゲームを再起動します。
Ren'Py アップデーターはこの間、更新画面を表示してユーザーに続行を促したり、適切にキャンセルできるようにします。
アップデーターにはあなた自身によるホストの提供を必要とします。適切な URL から直接アップデートファイルをダウンロード出来るようにして、サーバーが HTTP の範囲の問い合わせをサポートする必要があります。
HTTPSはパッチ用途にはサポートされません。
( 「共有」サイトは必要な機能をサポートしない傾向にあるので、ウェブホスティングのために代金を払う必要があります )
patch パラメーターが False に設定されるか https url が指定されるととアップデーターはゲームにパッチを当てようとしません。代わりに完全なアーカイブをダウンロードし、アップデートを解凍します。これはダウンロードサイズを大きくしますが、より多くのウェブサーバーで動作するようになります。
アップデートは配布物がビルドされると自動的にビルドされます。アップデートのビルドには options.rpy で build.include_update
を True に設定して、ランチャーの「 Build Distributions 」 にある「 Build Updates 」オプションをアンロックしてください。このオプションをチェックすると Ren'Py はアップデートファイルを作成します。
アップデートファイルは以下で構成されます :
利用可能なアップデートとそのバージョンのインデックス
そのパッケージの各ブロックのチェックサム
特定のパッケージのアップデートデータを含んでいます。
DLC をダウンロードするとき、アップデーターが使用する各パッケージのファイルのリストが含まれます。
これは zsync によってダウンロードを管理するために使用される制御ファイルです。
これらすべてのファイルをウェブサーバーのひとつのディレクトリーにアップロードしなければなりません。
アップデートを実行するために、updater.update か updater.Update アクションを実行してください。
updater.
Update
(*args, **kwargs) linkupdater.update()
を呼び出すアクションです。すべての引数は記憶されてその関数に渡されます。
updater.
UpdateVersion
(url, check_interval=21600, simulate=None, **kwargs) linkこの関数は url のサーバーにアクセスし、その url でソフトウェアの最新版が利用可能かを判定します。存在すればこれは新しいバージョンを返し、そうでなければ None を返します。
サーバーへのアクセスには時間が掛るため、この関数はバックグラウンドでスレッドを起動すると共に最後にサーバーにアクセスしたときのバージョンか、サーバーにアクセスしていなければ None を返します。バックグラウンドスレッドは一旦サーバーにアクセス出来たら現在のインタラクションを再開し、この関数を呼び出すスクリーンを更新します。
せいぜい Ren'Py のセッション毎に 1 回、多くとも check_interval 秒毎に 1 回各 url に接続します。サーバーの応答がない場合はキャッシュされたデータが返されます。
追加のキーワード引数 (simulate を含む) はそれらが updater.update()
に渡されたようにアップデート機構に渡されます。
updater.
can_update
(base=None) linkアップデートが可能なら、 True を返します。アップデートが総合的に不可能 ( 例えばアップデーターのディレクトリーが削除された ) なら、 False を返します。
これはアップデーターが実際に使用可能かを確定しないことに注意してください。そのためには updater.UpdateVersion()
を使用してください。
updater.
get_installed_packages
(base=None) linkインストールされた DLC パッケージの名前のリストを返します。
アップデートのためのベースディレクトリーです。デフォルトでは現在のプロジェクトのベースディレクトリーです。
updater.
update
(url, base=None, force=False, public_key=None, simulate=None, add=[], restart=True, confirm=True, patch=True) linkこの Ren'Py ゲームを最新のバージョンにアップデートします。
updates.json ファイルへの URL です。
アップデートされるベースディレクトリーです。デフォルトでは現在のゲームのベースディレクトリーです ( これは無視される可能性があります)。
バージョン番号が同じでも強制アップデートします( テストのために使われます)。
アップデートの署名をチェックするために使用される、公開鍵を含んだ PEM ファイルへのパスです( これは通常無視できます)。
これは実際にアップデートを実行せずにアップデート GUI をテストするために使われます。これは以下を受け取られます:
アップデートを実行する None
アップデートが実行可能な場合をテストする "available"
アップデートが実行できない場合をテストする "not_available"
アップデートエラーをテストする "error"
このアップデートの間に加えられるパッケージのリスト。これは DLC のためにのみ必要です。
アップデート後にゲームを再起動します。
Ren'Py はユーザーにアップデートの確認を求めますか? False なら、確認なしでアップデートが実行されます。
True なら Ren'Py はゲームにパッチを当てようと試み、変更データのみをダウンロードします。 False なら Ren'Py はゲームの完全なコピーをダウンロードし、そこからアップデートします。これは url が "http:" で始まらなければ自動的に False に設定されます。
アップデーターの見た目を変更するためには、 updater
スクリーンを上書きしてください。デフォルトのスクリーンは common/00updater.rpy に定義されています。