HTTPS/HTTP Updater link
Ren'Py にはウェブ上のホストから自動でゲームの更新をダウンロードしてインストールするアップデーターがあります。このアップデーターは macOS を除くデスクトッププラットフォームで動作します。
Ren'Py アップデーターはこの間、更新画面を表示してユーザーに続行を促したり、適切にキャンセルできるようにします。
二つのアップデートフォーマットがサポートされています。現代的なフォーマットは rpu と呼ばれ、 Ren'Py 8.2 で導入されました。古いフォーマットの zsync は廃止されましたが、以前のバージョンを更新するために生成できます。
サーバー要件 link
アップデーターにはあなた自身によるホストの提供を必要とします。適切な URL から直接アップデートファイルをダウンロード出来るようにして、サーバーが HTTP の範囲の問い合わせをサポートする必要があります。
アップデートのビルド link
アップデートは配布物がビルドされると自動的にビルドされます。アップデートのビルドには options.rpy で build.include_update
を True に設定して、ランチャーの「 Build Distributions 」 にある「 Build Updates 」オプションをアンロックしてください。このオプションをチェックすると Ren'Py はアップデートファイルを作成します。
アップデートファイルは以下で構成されます :
- updates.json
利用可能なアップデートとそのバージョンのインデックス
- updates.ecdsa
updates.json の署名です。改竄されていないかを確認するのに使用出来ます。
- rpu/
rpu ディレクトリーはメタデータと更新に使用するデータを含みます。
これらすべてのファイルをウェブサーバーの同じ場所にアップロードしなければなりません。
関数 link
アップデートを実行するために、updater.update か updater.Update アクションを実行してください。
- updater.Update(*args, **kwargs) link
updater.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 パッケージの名前のリストを返します。
- base
アップデートのためのベースディレクトリーです。デフォルトでは現在のプロジェクトのベースディレクトリーです。
- updater.update(url, base=None, force=False, public_key=None, simulate=None, add=[], restart=True, confirm=True, patch=True, prefer_rpu=True, allow_empty=False, done_pause=True, allow_cancel=True, screen='updater') link
この Ren'Py ゲームを最新のバージョンにアップデートします。
- url
updates.json ファイルへの URL です。
- base
アップデートされるベースディレクトリーです。デフォルトでは現在のゲームのベースディレクトリーです ( これは無視される可能性があります)。
- force
バージョン番号が同じでも強制アップデートします( テストのために使われます)。
- public_key
アップデートの署名をチェックするために使用される、公開鍵を含んだ PEM ファイルへのパスです( これは通常無視できます)。
- simulate
これは実際にアップデートを実行せずにアップデート GUI をテストするために使われます。これは以下を受け取られます:
アップデートを実行する None
アップデートが実行可能な場合をテストする "available"
アップデートが実行できない場合をテストする "not_available"
アップデートエラーをテストする "error"
- add
このアップデートの間に加えられるパッケージのリスト。これは DLC のためにのみ必要です。
- restart
True なら、ゲームはアップデート完了後にそのゲームを再起動します。 "utter" なら、
renpy.utter_restart()
が代わりに呼ばれます。 False なら、アップデートは単に終了します。- confirm
Ren'Py はユーザーにアップデートの確認を求めますか? False なら、確認なしでアップデートが実行されます。
- patch
True なら Ren'Py はゲームにパッチを当てようと試み、変更データのみをダウンロードします。 False なら Ren'Py はゲームの完全なコピーをダウンロードし、そこからアップデートします。これは url が "http:" で始まらなければ自動的に False に設定されます。
これは RPU アップデートフォーマットが使用されていれば無視されます。
- prefer_rpu
True なら、 zsync と RPU の両方が利用可能ならば Ren'Py は RPU フォーマットをアップデートで優先します。
- allow_empty
True なら、 Ren'Py はベースディレクトリーにアップデート情報が含まれていなくても、アップデートを処理します(この場合 add が指定されなければいけません )。
- done_pause
True なら、ゲームアップデート完了後、ゲームがポーズします。 False なら、すぐに処理されます(再起動するか、処理を返します)。
- allow_cancel
True なら、ユーザーはアップデートを停止できます。 False なら、出来ません。
- screen
使用するスクリーンの名前です。
スクリーン link
アップデーターの見た目を変更するためには、 updater
スクリーンを上書きしてください。こちらはスクリーンの例です
screen updater(u=None):
add "#000"
frame:
style_group ""
has side "t c b":
spacing gui._scale(10)
label _("Updater")
fixed:
vbox:
if u.state == u.ERROR:
text _("An error has occured:")
elif u.state == u.CHECKING:
text _("Checking for updates.")
elif u.state == u.UPDATE_NOT_AVAILABLE:
text _("This program is up to date.")
elif u.state == u.UPDATE_AVAILABLE:
text _("[u.version] is available. Do you want to install it?")
elif u.state == u.PREPARING:
text _("Preparing to download the updates.")
elif u.state == u.DOWNLOADING:
text _("Downloading the updates.")
elif u.state == u.UNPACKING:
text _("Unpacking the updates.")
elif u.state == u.FINISHING:
text _("Finishing up.")
elif u.state == u.DONE:
text _("The updates have been installed. The program will restart.")
elif u.state == u.DONE_NO_RESTART:
text _("The updates have been installed.")
elif u.state == u.CANCELLED:
text _("The updates were cancelled.")
if u.message is not None:
null height gui._scale(10)
text "[u.message!q]"
if u.progress is not None:
null height gui._scale(10)
bar value (u.progress or 0.0) range 1.0 style "_bar"
hbox:
spacing gui._scale(25)
if u.can_proceed:
textbutton _("Proceed") action u.proceed
if u.can_cancel:
textbutton _("Cancel") action u.cancel
updater スクリーンには一つのパラメーターが渡され、それは u と名付けられた Updater オブジェクトです。 Updater オブジェクトは次のフィールドを持ち、スクリーンを設定出来ます :
- class updater.Updater link
- state link
アップデーターの現在の状態です。取り得る値とその意味については、上記の例を参照してください。値はすべてUpdater オブジェクトの定数です。
- message link
None またはユーザーに表示されるメッセージです。
- progress link
None または 0.0 と 1.0 の浮動小数で表される現在の処理の進行度です。
- can_proceed link
True なら、スクリーンはユーザーが更新の処理を進めるボタンを表示するよう要求されます。
- proceed link
can_proceed が True の場合、ユーザーが proceed ボタンを押したときに実行されるアクションです。
- can_cancel link
True の場合、ユーザーがアップデートをキャンセルするためのボタンを表示するようスクリーンは要求されます。
- cancel link
can_cancel が True の場合、ユーザーがキャンセルボタンを押したときに実行されるアクションです。
- old_disk_total link
None または、アップデート開始時にゲームが消費したディスクの総バイト数を示す整数です。
- new_disk_total link
None またはアップデート終了時にゲームが消費するディスクの総バイト数を示す整数です。
- download_total link
None または、アップデート中にダウンロードされる総バイト数を示す整数です。
- download_done link
None またはアップデート中にダウンロードされたバイト数を示す整数です。
- write_total link
None または、アップデート中にディスクに書き込まれる総バイト数を示す整数です。
- write_done link
None またはアップデート中にディスクに書き込まれたバイト数を示す整数です。