「Zwift-offline」折腾记

前言

Zwift是一个大型多人在线自行车和跑步体能训练程序,使用户能够在虚拟世界中进行互动、训练和比赛。Zwift每月的订阅费用是14.99$,折合人民币约100¥。Zwift主打用户间的社交,如果你像我一样只是用Zwift看风景,让自己的踩骑行台不那么无聊的话,那么这个月费就显得不那么值了。很遗憾的是Zwift没有提供「离线模式」这样的功能。这是因为其采用了「服务端-客户端」架构,必须全程联网才能使用。好在有人发起了一个叫做「Zwift-offline」项目,这个项目提供了一个Zwift服务端的实现,这才让「离线模式」成为可能。废话少说,今天就来尝试部署一下这个「Zwift-offline」

4

Zoffline

Zoffline是这么介绍自己的

zoffline enables the use of Zwift offline by acting as a partial implementation of a Zwift server.

「Zwift-offline」基于python,可以在Linux,Windows和Mac OS X上(以源代码)运行,并额外提供了Windows 二进制文件、Docker镜像和Docker Compose,涵盖了所有的桌面系统。

我的操作系统是Windows,并且我喜欢折腾,所以就选择用源代码运行了。

我在这里仅仅列出自己的步骤,其他操作系统可以参考官方的安装步骤,写的非常详细

安装Zoffline

配置依赖

Zoffline的依赖可能会与系统自带的Python冲突,所以我选择新建一个conda环境:

1
2
conda create -n zoffline python=3.9
conda activate zoffline

按照官方流程,安装依赖

1
pip install flask flask_sqlalchemy flask-login pyjwt gevent protobuf protobuf3_to_dict stravalib

下载源码

我从源代码运行,所以直接clone就可以了

1
https://github.com/zoffline/zwift-offline.git

完事后先运行一次zoffline,让其完成初始化后结束进程

1
python ./standalone.py

配置zwift客户端

调整服务端版本号

我的zwift版本比1.0.100427新,所以要改一下zoffline的版本号

复制C:\Program Files (x86)\Zwift\Zwift_ver_cur.xmlzoffline/cdn/gameassets/Zwift_Updates_Root/,覆盖已有的文件

导入证书

管理员权限运行终端,执行命令

1
2
cd zoffline/ssl
certutil.exe -importpfx Root cert-zwift-com.p12

密码留空即可

接下来已管理员权限启动notepad,将ssl/cert-zwift-com.pem的内容粘贴在C:\Program Files (x86)\Zwift\data\cacert.pem的尾部

这一步的目的是让zwift客户端信任服务端

修改hosts

我不想动hosts,官方提供了对应的启动脚本(zoffline/scripts/launch.bat),所以这一步可以跳过

获取zwift用户信息(可选)

运行

1
2
cd zoffline
python scripts/get_profile.py -u <your_zwift_username>

其中<your_zwift_username>是你的zwift账户邮箱

将得到的profile.bin移动到zoffline/storage目录下

以离线方式启动zwift客户端

启动前确保zoffline在运行 打开终端,执行zoffline/scripts/launch.bat 如果随便输个密码就可以进游戏,则说明配置成功。 但是现在的记录仅仅保留在zoffline中,若要上传到strava,还要进一步配置。

6

自动同步到strava(可选)

退出zwift客户端

1
2
cd zoffline/scripts
python strava_auth

在打开的浏览器窗口中登录你的strava账号,将得到的strava_token.txt移动到zoffline/storage/<player_id>目录下。<player_id>是一串数字,在上一步中由zoffline生成

开启新版Home页面

用任意文本编辑器打开zoffline/zwift_offline.py,定位到 def experimentation_v1_variant()函数,找到对应的配置,改成如下

1
2
('game_1_17_noesis_enabled', 1, None),
('game_1_20_home_screen', 1, None),

重新打开zwift就能用到新版Home界面了 7

你还在等什么,快来zwift中挥洒汗水吧!

手动上传至Strava

由于众所周知的原因,有时与strava的自动上传会失效。这时不必惊慌,因为zwift客户端会把每次活动.fit文件保存在本地。打开Documents/Zwift/Activities,按照strava官网右上角那个大大的加号里的步骤描述就好了😃

使用 Hugo 构建
主题 StackJimmy 设计