Zeitlind 是 Windows x64 下的游戏成就导出工具
已通过AI Slop认证
由 @Masterain98 使用GPT生成
支持情况:
| 游戏 | 国服 | 国际服 |
|---|---|---|
| 原神 | 🟢 | 🔴 |
| 崩坏:星穹铁道 | 🟢 | 🔴 |
| 绝区零 | 🟢 | 🔴 |
Warning
本项目是与米哈游及相关游戏官方无关的第三方开源工具,仅供个人成就数据备份与迁移使用。工具运行时会向所选游戏进程加载临时 Hook;此类行为可能违反游戏用户协议、运营规则或被反作弊系统识别,并可能导致账号警告、限制、封禁,以及数据或其他损失。
使用者应在使用前自行了解并遵守所在地法律法规、游戏用户协议及相关规则,自行判断和承担全部风险。项目作者及贡献者不对因下载、安装、运行、修改或传播本工具而产生的账号处罚、封禁、数据丢失、财产损失或其他直接、间接损失承担责任。若无法接受上述风险,请勿使用本工具。
GUI为 Windows x64 自包含单文件 Zeitlind_v<version>_Release_desktop.exe。无需安装,也无需预装 .NET 或 Windows App SDK。
- 完全退出需要导出的游戏,双击 GUI EXE,允许启动时的 Windows 管理员权限请求。
- 在游戏列表中点击“导出成就”。列表显示注册表检测到的绝区零、崩坏:星穹铁道和原神国服,可点击“刷新列表”重新检测。状态区会分别提示检测数量、未检测到安装、路径无效和读取失败;具体原因显示在对应游戏卡片中。
- 如果没有检测到安装,点击“选择游戏 EXE…”打开文件选择器,进入游戏安装目录,选择
ZenlessZoneZero.exe、StarRail.exe或YuanShen.exe。选择成功后再点击“导出成就”。 - 正常登录并进入游戏。窗口会显示读取进度;得到完整快照后,会请求本次启动的游戏正常退出,10 秒超时后再强制关闭。
- 选择导出格式并点击“保存文件”。结果写入 EXE 旁边的
Exports文件夹,可直接打开输出目录;保存失败时数据仍保留在当前窗口,可以重试。
连接游戏、准备读取和等待登录会显示不同进度;连接等待上限为 30 秒,连接后读取组件的就绪等待上限为 135 秒。等待用户登录和完整成就数据期间可随时取消。点击取消或关闭窗口后,程序会先结束本次采集并清理临时资源。
CLI继续作为独立的 NativeAOT 单 EXE 提供,文件名为 Zeitlind_v<version>_Release_cli.exe。Release 用于日常导出;Debug 保留更详细的诊断日志。参数与交互菜单保留:
- 完全退出正在运行的游戏。
- 双击运行本程序。
- 在游戏菜单中选择注册表检测到的安装,或选择需要导出成就的游戏。菜单会直接显示每款游戏的注册表检测状态。
- 同意程序请求的 Windows 管理员权限。Zeitlind 会在提权后保留已选择的游戏、导出格式和输出目录。
- 正常登录并进入所选游戏。Zeitlind 从启动后新增的本地游戏日志确认当前 UID,并从 Hook 捕获的明文包中识别完整成就响应;两者都取得后会请求本次启动的游戏正常退出,10 秒内没有退出时才会强制关闭该游戏及其子进程。
- 选择需要导出的格式:备份、Liyin 或 UIAF。原神提供备份、正式 UIAF v1.1 和实验性 UIAF v1.2,没有 Liyin。
- 导出成功后按 Enter 退出。等待成就数据时可按
Ctrl+C取消。
# 指定游戏目录
.\Zeitlind_v<version>_Release_cli.exe --game "D:\Games\ZenlessZoneZero Game"
# 直接指定 EXE
.\Zeitlind_v<version>_Release_cli.exe --game "D:\Games\Star Rail\Games\StarRail.exe"
# 原神国服
.\Zeitlind_v<version>_Release_cli.exe --game "D:\Games\Genshin Impact Game\YuanShen.exe" --format uiaf
# 非交互导出;目标目录不存在时会自动创建
.\Zeitlind_v<version>_Release_cli.exe --game "D:\Games\Star Rail\Games\StarRail.exe" `
--format liyin `
--output "D:\AchievementBackups\2026"完整参数:
Zeitlind.exe [--game "游戏目录或 exe 路径"]
[--format backup|liyin|uiaf|uiaf12]
[--output "输出目录"]
Zeitlind.exe --help
Zeitlind.exe --version
如果没有 --game,交互模式显示游戏选择菜单;输入被重定向时,注册表必须恰好检测到一款游戏,否则需要显式传入 --game。--output 默认为启动 Zeitlind 时的当前目录;目录不存在时会创建。
| 游戏 | EXE | 注册表路径 |
|---|---|---|
| 绝区零国服 | ZenlessZoneZero.exe |
HKCU\Software\miHoYo\HYP\1_1\nap_cn\GameInstallPath |
| 崩坏:星穹铁道国服 | StarRail.exe |
HKCU\Software\miHoYo\HYP\1_1\hkrpg_cn\GameInstallPath |
| 原神国服 | YuanShen.exe |
HKCU\Software\miHoYo\HYP\1_1\hk4e_cn\GameInstallPath |
开发需要 global.json 指定的 .NET 10 SDK,以及 Visual Studio 的 C++ 桌面开发工具链和 Windows SDK(用于构建原生 Hook)。
# 单独发布 Desktop 单 EXE,先构建三个原生 Hook
.\build-desktop.ps1
# 构建全部 GitHub 发布产物:CLI Release、CLI Debug、Desktop Release
.\build-all.ps1
# 单独构建 CLI 的 Release 和 Debug 版本
.\build.ps1
# 只改界面或共享 Host 代码时,复用已有 Hook,仅重新发布 Desktop
.\build-desktop.ps1 -SkipHookBuild
# 单独重新构建三个 Release Hook
.\build-hooks.ps1
# 常规编译,不作为含 Hook 的正式发布产物
dotnet build .\Zeitlind.slnx -c ReleaseGUI位于 artifacts\desktop\Zeitlind_v<version>_Release_desktop.exe,CLI 位于 artifacts\build。build-desktop.ps1 会检查发布目录递归仅包含一个 EXE,并校验版本资源;如果出现附带 DLL、配置文件或其他文件,会直接报错。
build-all.ps1 只构建一次三个 Hook,再分别发布 CLI 和 Desktop。两个独立入口都支持 -SkipHookBuild,缺少缓存 DLL 时会提示重新构建;修改 Hook、Hook.Common、Core 或 SDK/构建配置后,应先执行 build-hooks.ps1 或省略这个开关。版本读取与 Windows 版本资源校验共用 tools/build-common.ps1。原来的 build-desktop.ps1 -IncludeCliDebug 仍可用于组合构建。
GitHub Release 和 Actions artifact 同时包含三份独立 EXE:Zeitlind_v<version>_Release_cli.exe、Zeitlind_v<version>_Debug_cli.exe、Zeitlind_v<version>_Release_desktop.exe。GUI公开发布 Release;需要诊断版时可在本地执行 .\build-desktop.ps1 -Configuration Debug,生成 Zeitlind_v<version>_Debug_desktop.exe。
文件名会包含新版名称与游戏 ID,避免两个游戏的结果混在一起:
Zeitlind-<game>-achievements-日期时间.json:Zeitlind v1 备份格式,保留游戏标识、协议探测信息、服务端记录及尚未解释的原始字段;Zeitlind-<game>-liyin-日期时间.json:对应游戏的 Liyin 导入格式;Zeitlind-<game>-uiaf-日期时间.json:星铁 / 绝区零为实验性 UIAF v1.2;原神为正式 UIAF v1.1。Zeitlind-gi-cn-uiaf12-日期时间.json:原神实验性 UIAF v1.2(hk4e+ UID)。
Warning
程序日志位于可执行文件所在目录,文件名为 Zeitlind-YYYY-MM-DD.log。日志可能包含游戏路径、导出路径和 UID,并且不会自动删除;向他人分享日志前,请先检查其中是否包含不希望公开的个人信息。
运行时提取的 Hook DLL 位于本次运行专用的受保护临时目录;导出成功、取消或发生可处理异常后会自动删除。若进程被强制终止而来不及清理,遗留目录不会由后续管理员进程全局扫描,以避免清理不属于当前进程的路径。
ZZZ、星铁和原神共用 GitHub Actions 工作流 Check Achievement Metadata(.github/workflows/update-metadata.yaml),每天北京时间 10:17 通过矩阵分别检查三款游戏,也可在 Actions 页面手动运行。有变化时为对应游戏创建或更新独立 PR,供人工核对后合并;不会自动合并或发布。每款游戏沿用原来的更新分支,一款游戏检查失败不会取消其他游戏的检查。
ZZZ 每次同时检查 Liyin GitHub 目录 和网站当前目录,按目录内最高 Version 的数字大小选择较新的数据;版本相同时优先 GitHub。单个来源下载或校验失败时使用另一个有效来源;不会用低于本地版本的数据覆盖目录,也会拒绝条目数缩减超过 20% 的候选目录。两个来源都不可用时检查失败。Actions 摘要和 PR 会记录来源比较、所选 URL、SHA-256,以及适用的 GitHub commit/blob。网站旧路径 /src/jsons/ 可能继续返回过期数据,因此使用 /jsons/。
原神数据来自 Yae 的 schicksal/metadata Protobuf 接口,按上游 AchievementInfo.proto 转换为 GenshinAchievementInfo.json,只同步成就目录。Version 表示目录快照版本,不是各项成就的首次上线版本。
本地可用 Python 3 运行,无需额外依赖:
# 比较 ZZZ 两个来源,只检查差异
python tools/update-zzz-metadata.py --check
# 获取、校验并更新 ZZZ 本地目录
python tools/update-zzz-metadata.py
# 只检查差异
python tools/update-genshin-metadata.py --check
# 获取、校验并更新本地目录
python tools/update-genshin-metadata.py项目设计参考了 Yae。感谢 HolographicHat 与 Yae 项目贡献者提供的实现思路。
绝区零元数据来自 zzz.liyin.space,星铁元数据来自 liyin.space,原神成就目录来自 Yae schicksal/metadata。实验性成就交换格式参考 UIAF 及其多游戏分组思路,提案链接。原神 --format uiaf 仍导出正式 UIAF v1.1;--format uiaf12 为带 UID 的实验性 v1.2。
本仓库采用 GNU GPL v3,详见 LICENSE。