web更新器 link

Ren’Py包含一個更新器(updater),可以從Ren’Py項目所在的網站上自動下載和安裝更新。在可以用於讓一個大型遊戲保持更新。

Ren’Py更新器自動實施下列步驟:

  1. 下載控制更新內容的索引文件。
  2. 詢問用戶是否需要執行更新。
  3. 生成一個當前磁碟文件的歸檔。
  4. 從伺服器下載一個zsync控制文件。
  5. 使用zsync工具將歸檔文件更新到伺服器版本。zsync會自動計算兩份歸檔文件的差別,並嘗試下載有差別的部分。
  6. 歸檔文件解包,並替換原來磁碟上的文件。
  7. 刪除新版本中已經移除的舊版本文件。
  8. 重啟遊戲。

Ren’Py更新器在處理過程會顯示一個更新界面,提示用戶處理並允許用戶退出更新。

伺服器要求 link

更新器要求創作者有自己的服務主機。用戶需要可以通過URL直接下載升級文件,所以創作者的伺服器必須支持HTTP請求。

(這意味著需要為伺服器付費。共享文件類型的網站並不支持這種更新。)

生成更新 link

生成分發版時會自動生成更新。將options.rpy中的build.include_update項設置為True,就可以生成升級包了。這樣做會解鎖啟動器(launcher)中“生成分發版”的“生成更新”選項。勾選這項,Ren’Py就會生成更新文件。

更新文件包含下列內容:

updates.json
可用更新和版本號的索引。
package.sums
包含包(package)中每個區塊(block)的校驗和。
package.update.gz
指定包的升級數據。
package.update.json
包含每個包的文件列表,當用戶下載DLC時會被更新器使用。
package.zsync
zsync用於管理下載的控制文件。

創作者必須把所有這些文件都上傳到web伺服器的單一目錄下。

函數 link

要觸發更新時,需要調用updater.update函數或updater.Update行為(action)。

updater.Update(*args, **kwargs) link

這個行為調用 updater.update() 函數。所有入參會存儲並傳入那個函數。

updater.UpdateVersion(url, check_interval=21600, simulate=None, **kwargs) link

這個函數會連接 url 的伺服器,並判斷是否有可用的新版本。如果有可用更新就返回新版本號,否則返回None。

由於連接伺服器需要消耗一些時間,這個函數在後台啟動一個執行緒,連接伺服器成功後立刻返回版本號,如果連不上伺服器則返回None。 後台執行緒一旦連線到伺服器會重啟當前交互行為,會讓調用更新函數的界面更新。

對應每個連接的url都需要分配至少1個Ren’Py會話(session),並在每個 check_interval 秒的週期內保持會話。如果不能連接伺服器,就返回快取數據。

額外的關鍵字入參(包括 simulate )會如同傳給 updater.update() 一樣,傳給更新機制使用。

updater.can_update(base=None) link

如果可以更新成功則返回True。如果無法完全更新(比如update目錄被刪除了),就返回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) link

將這個Ren’Py遊戲更新到最新版。

url
update.json文件的URL地址。
base
更新的基目錄。預設為當前遊戲的基目錄。(這項通常會忽略。)
force
就算版本號相同也強制更新。(用於測試。)
public_key
檢查更新簽名的公鑰PEM文件路徑。(這項通常會忽略。)
simulate

這項用於測試GUI,而不是真的實行更新。這項可能的值為:

  • None表示實行更新。
  • “available”表示有可用更新時進行測試。
  • “not_available”表示無可用更新時進行測試。
  • “error”表示測試更新報錯。
add
本次更新添加的包(package)列表。DLC必須要有這個列表。
restart
更新後重啟遊戲。

界面 link

如果要訂製更新器(updater)的外觀,創作者可以重寫 update 界面。默認界面定義在common/00updater.rpy中。

s