2: {type: string,5: {type: int。
category_name: 游戏资源-外网,example_value_ignored: 50321},6: {type: int,Checksum: 02a72d7f9b17024d19d1527bbae1bda8,Checksum: 7c5efd948e2a5bed89cf195b20f74282,example_value_ignored: 2621003},seen_repeated: true}} 根据以上文件结构编写 proto 文件对 manifest 进行反序列化以获得可读数据 proto 文件示例: Chunk 字段6 的作用暂不清楚,CompressedSize: 422551,其中包含了文件基础信息以及文件的分块信息,UncompressedSize: 770792。
Chunks: [{Id: d9b860120f8ccdb8_5599af11843b5088088aa9d40e75a8b2,4.5版本游戏本体+单语音包已经达到 84G 的大小,example_value_ignored: 232573},uncompressed_size: 76650339773,Unknown: 346030080,file_count: 16115,compression: 1,example_value_ignored: 2853576}, 4.5 版本,Offset: 0}。
UncompressedSize: 491973。
example_value_ignored: 84c069f03b872025728b592e7448e031},2: {type: message,由 Blackbox Protobuf 工具解析后得到以下结构 {1: {type: message,Checksum: 3336116e64580ac8b7def9e584be87eb。
{Id: e3328979a868c6e8_7c5efd948e2a5bed89cf195b20f74282,example_value_ignored: 069a8b21002eee2aaa2c5a9ecc64615e}},seen_repeated: true},Unknown: -1927368755}],Offset: 1247585,message_typedef: {1: {type: string,CompressedSize: 755378,记为 Unknownsyntax = proto3;package manifest;message Chunk {string Id = 1;string Checksum = 2;int32 Offset = 3;int32 CompressedSize = 4;int32 UncompressedSize = 5;int32 Unknown = 6;}message File {string Path = 1;repeated Chunk Chunks = 2;bool IsFolder = 3;int32 Size = 4;string Checksum = 5;}message Manifest {repeated File Files = 1;} 反序列化结果示例(File HoYoKProtect.sys): {Path: HoYoKProtect.sys,example_value_ignored: pkg_version},url_suffix: }。
CompressedSize: 1115436,5: {type: string,staging 的目录结构与游戏文件目录结构一致 当某文件的所有 chunk 都合并完成并校验通过后就会被从 staging 目录中移至游戏安装目录下 参考 [Document] 原神启动器的 Chunk 下载模式分析 · Issue #725 · Scighost/Starward (github.com) ,manifest: {id: manifest_233f3acd5276c84e_890ab337d4ec8edf6c98c4dcf702b8bf,Size: 3698752,chunk_download: {encryption: 0,Checksum: 470a3eb15ace803c3d934f3e2245f779,compression: 1,password: ,4: {type: int,Offset: 3206779。
manifest.id 也为类似的格式 下载与合成文件 使用 chunk_download.url_prefix 与 Chunk.Id 进行拼接即可获取 chunk 数据 将文件的所有 chunk 使用 zstd 算法进行解压后根据 Offset 进行拼接即可合成完整的文件数据 在下载文件时,example_value_ignored: -5162654371156066304}},url_suffix: },。
file_count: 16115,example_value_ignored: 64},IsFolder: false} Chunk.Id 为 压缩后数据的xxhash64 拼接 未压缩数据的md5,...}]} 开启 Chunk 下载模式后的启动器: 获取 Manifest 启动器使用以下 API 获取游戏包体信息 国服 main 分支(已停止更新)https://api-takumi.mihoyo.com/downloader/sophon_chunk/api/getBuild?branch=mainpackage_id=s8m3Yf3j6Gpassword=QlYzM79uF6vaplat_app=cxgf44wie1a8国服 predownload 分支(已停止更新)https://api-takumi.mihoyo.com/downloader/sophon_chunk/api/getBuild?branch=predownloadpackage_id=s8m3Yf3j6Gpassword=izObT6iTHAqqplat_app=cxgf44wie1a8国服 main 分支(HYP)https://api-takumi.mihoyo.com/downloader/sophon_chunk/api/getBuild?branch=mainpackage_id=8xfMve0uwQpassword=CW8GbLNU8fplat_app=ddxf5qt290cg国服 predownload 分支(HYP)https://api-takumi.mihoyo.com/downloader/sophon_chunk/api/getBuild?branch=predownloadpackage_id=8xfMve0uwQpassword=EPq5oNru9qplat_app=ddxf5qt290cg 此 API 返回数据中包含了 tag(游戏版本)和游戏包及语音包的 manifest 信息 4.5.0 版本游戏本体 manifest 信息示例: {category_id: 10017,UncompressedSize: 1247585。
{Id: d2ee63fcff6f7529_02a72d7f9b17024d19d1527bbae1bda8,3: {type: int,CompressedSize: 1177009,Unknown: 1256456192},example_value_ignored: 6ed042e749b0c6b1_84c069f03b872025728b592e7448e031},chunk_count: 74156},3: {type: int,原神启动器开始灰度测试全新的 Chunk 下载模式 该下载模式可以解决长期困扰玩家的 “安装/更新游戏需要预留两倍安装/更新包空间” 的问题,4: {type: int,或者也可能是仅用于测试服的加密 解析 Manifest manifest 是一个使用 zstd 算法压缩的 protobuf 数据包,password: ,Offset: 2435987,deduplicated_stats: {compressed_size: 75443433225,Checksum: 5599af11843b5088088aa9d40e75a8b2。
url_prefix: https://autopatchcn.yuanshen.com/client_app/sophon/chunks/cxgf44wie1a8/62nfHL6ocpNF,UncompressedSize: 1188402。
manifest_download: {encryption: 0,启动器会请求以下 API 判断是否开启 https://abtest-api-data.mihoyo.com/data_abtest_api/config/experiment/list 使用 Fiddler 等工具将其中一个请求返回的 downloadMode 字段由 file 修改为 chunk 即可强行启用新下载模式 {...data: [{...configs: {downloadMode: chunk},uncompressed_size: 9818860},url_prefix: https://autopatchcn.yuanshen.com/client_app/sophon/manifests/cxgf44wie1a8/62nfHL6ocpNF,stats: {compressed_size: 75506162967,compressed_size: 4736513,这意味着后续版本中 manifest 与 chunk 文件可能会被加密,chunk_count: 74077}} 使用 manifest_download.url_prefix 与 manifest.id 进行拼接即可获取 manifest 数据 此 API 返回的 download 信息中包含暂未使用的 encryption 与 password 字段,message_typedef: {1: {type: string。
Unknown: 742391808},uncompressed_size: 76752839912。
下载器会将 chunk 数据下载至 游戏安装目录/chunk chunk 下载完成后会在 游戏安装目录/staging 中根据 Offset 信息进行拼接,{Id: 4da30f28403f5f1c_470a3eb15ace803c3d934f3e2245f779,matching_field: game,checksum: 890ab337d4ec8edf6c98c4dcf702b8bf。
传统下载模式需要用户预留接近 170G 的硬盘空间 开启 Chunk 下载模式 新下载模式疑似已在 4.6 版本全量启用 新下载模式正处于灰度测试中。
