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 update.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 またはアップデート中にディスクに書き込まれたバイト数を示す整数です。