zoffline permite el uso de Zwift sin conexión actuando como una implementación parcial de un servidor Zwift. Por defecto, zoffline es solo para un jugador. Consulte el Paso 6: Habilitar el modo multijugador para saber cómo habilitar la compatibilidad con múltiples usuarios/perfiles.
zoffline también ofrece montar contra fantasmas (tus paseos anteriores). Habilite esta función marcando "Habilitar fantasmas" en el iniciador de zoffline. Consulte Fantasmas y robots para obtener más detalles.
Además, el iniciador de zoffline permite seleccionar un mapa específico para viajar sin tener que lidiar con archivos de configuración.
Configurar zoffline requiere dos pasos principales. Primero, zoffline debe instalarse y ejecutarse en un sistema antes de ejecutar Zwift (ya sea en el sistema que ejecuta Zwift o en otro sistema en red local). En segundo lugar, Zwift debe configurarse para utilizar zoffline en lugar del servidor oficial de Zwift.
Hay tres formas de instalar y ejecutar zoffline según su plataforma:
pace_partners
en la misma carpeta en la que se encuentra zoffline.server-ip.txt
en el directorio storage
que contenga la dirección IP de la PC que ejecuta zoffline.storage
en la misma carpeta en la que se encuentra para almacenar su progreso de Zwift.pip3 install -r requirements.txt
pip install -r requirements.txt
C:Users<username>AppDataLocalProgramsPythonPython<version>Scriptspip.exe
en lugar de solo pip
server-ip.txt
en el directorio storage
que contenga la dirección IP de la PC que ejecuta zoffline.sudo ./standalone.py
sudo python3 standalone.py
python standalone.py
C:Users<username>AppDataLocalProgramsPythonPython<version>python.exe
en lugar de solo python
storage
. Contiene su estado de progreso de Zwift.zoffline se puede instalar en la misma máquina que Zwift u otra máquina local.
docker create --name zwift-offline -p 443:443 -p 80:80 -p 3024:3024/udp -p 3025:3025 -p 53:53/udp -v </path/to/host/storage>:/usr/src/app/zwift-offline/storage -e TZ=<timezone> zoffline/zoffline
-v </path/to/host/storage>:/usr/src/app/zwift-offline/storage
si no te importa si tu estado de progreso de Zwift se conserva en las actualizaciones de zoffline (poco probable).-v
deba ser legible y escribible en todo el mundo.<timezone>
válidos (por ejemplo, América/Nueva_York) aquí.--restart unless-stopped
hará que zoffline se inicie al arrancar si tiene Docker v1.9.0 o superior.server-ip.txt
en el directorio </path/to/host/storage>
que contenga la dirección IP de la PC que ejecuta zoffline.docker start zwift-offline
docker-compose.yml
en este repositorio que se compilará a partir del Dockerfile, o utilice este archivo de redacción de ejemplo: version: "3.3"
services:
zoffline:
image: zoffline/zoffline:latest
container_name: zoffline
environment:
- TZ=Europe/London
volumes:
- ./storage/:/usr/src/app/zwift-offline/storage
ports:
- 80:80
- 443:443
- 3024:3024/udp
- 3025:3025
restart: unless-stopped
server-ip.txt
en el directorio storage
que contenga la dirección IP de la PC que ejecuta zoffline.docker-compose up -d
C:Program Files (x86)ZwiftZwift_ver_cur.xml
al cdn/gameassets/Zwift_Updates_Root/
de zoffline sobrescribiendo el archivo existente.certutil.exe -importpfx Root cert-zwift-com.p12
C:Program Files (x86)Zwiftdatacacert.pem
ssl/cert-zwift-com.pem
a cacert.pemC:WindowsSystem32Driversetchosts
<zoffline ip> us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com launcher.zwift.com
<zoffline ip>
es la dirección IP de la máquina que ejecuta zoffline. Si se ejecuta en la misma máquina que Zwift, use 127.0.0.1
como ip).hosts
sin cambios, excepto cuando use zoffline específicamente, puede usar opcionalmente el script launch.bat dentro del directorio scripts
para iniciar zoffline en lugar de usar el iniciador de Zwift normal. Consulte el n.° 121 para obtener más detalles.Por qué: Necesitamos redirigir a Zwift para que use zoffline y convencer a Windows y Zwift de que acepten los certificados autofirmados de zoffline para los nombres de dominio de Zwift. Siéntase libre de generar sus propios certificados y hacer lo mismo.
~/Library/Application Support/Zwift/ZwiftMac_ver_cur.xml
al cdn/gameassets/Zwift_Updates_Root/
de zoffline sobrescribiendo el archivo existente.sed -n '29,53p' cert-zwift-com.pem >> ~/Library/Application Support/Zwift/data/cacert.pem
/etc/hosts
<zoffline ip> us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com launcher.zwift.com
<zoffline ip>
es la dirección IP de la máquina que ejecuta zoffline. Si se ejecuta en la misma máquina que Zwift, use 127.0.0.1
como ip).Por qué: Necesitamos redirigir a Zwift para que use zoffline y convencer a macOS y Zwift de que acepten los certificados autofirmados de zoffline para los nombres de dominio de Zwift. Siéntase libre de generar sus propios certificados y hacer lo mismo.
ZofflineObb.apk
desde aquíapp-Github-release.apk
desde aquíhosts.txt
para usarlo con la aplicación (puede usar una aplicación de edición de texto o crearlo en línea con una herramienta en línea como esta). El archivo debe verse así (reemplace <zoffline ip>
con la dirección IP de la máquina que ejecuta zoffline): <zoffline ip> us-or-rly101.zwift.com
<zoffline ip> secure.zwift.com
<zoffline ip> cdn.zwift.com
hosts.txt
creadofake-dns.txt
en el directorio storage
y configurar el "DNS 1" de la conexión Wi-Fi de su teléfono a la dirección IP de la PC que ejecuta zoffline.Android Settings > Applications > Zwift
y borre los datos o desinstale y vuelva a instalar la aplicación.ZofflineObb
y ejecútela (permita el acceso al almacenamiento)Por qué: Necesitamos redirigir a Zwift para que use zoffline (esto se hace mediante la aplicación Virtual Hosts) y convencer a Zwift de que acepte los certificados autofirmados de zoffline para los nombres de dominio de Zwift (esto se hace mediante la herramienta de parche ZofflineObb).
ssl/cert-zwift-com.pem
a /data/data/com.zwift.zwiftgame/dataES/cacert.pem
en el dispositivoadb push ssl/cert-zwift-com.pem /data/data/com.zwift.zwiftgame/dataES/
adb shell
: cd /data/data/com.zwift.zwiftgame/dataES/
adb shell
: cat cert-zwift-com.pem >> cacert.pem
/etc/hosts
del dispositivo<zoffline ip> us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com
<zoffline ip>
es la dirección IP de la máquina que ejecuta zoffline).adb pull /etc/hosts
adb push hosts /etc/hosts
hosts
.Por qué: Necesitamos redirigir a Zwift para que use zoffline y convencer a Zwift de que acepte los certificados autofirmados de zoffline para los nombres de dominio de Zwift. Siéntase libre de generar sus propios certificados y hacer lo mismo.
Para usar Zwift en línea como de costumbre, comente o elimine la línea agregada al archivo hosts
antes de iniciar Zwift. Luego, asegúrese de que Zwift esté completamente cerrado (haga clic con el botón derecho en el icono de la bandeja del sistema de Zwift y salga) y reinicie Zwift.
Si no obtiene su perfil actual de Zwift antes de iniciar Zwift por primera vez con zoffline habilitado, se le pedirá que cree un nuevo perfil (altura, peso, sexo). Tu perfil se puede personalizar y cambiar aún más a través del menú del juego (por ejemplo, nombre, nacionalidad, cambio de peso, etc.).
Para obtener su perfil actual:
scripts/get_profile.py -u <your_zwift_username>
get_profile.exe
obtenido de https://github.com/oldnapalm/zoffline-helper/releases/latest en lugar de scripts/get_profile.py
profile.bin
resultante, achievements.bin
y economy_config.txt
(guardados en cualquier directorio en el que haya ejecutado get_profile.py) al directorio storage/1
.storage/1
dentro de la misma carpeta que zoffline.exe si aún no existe.1
debe estar en la ruta que pasó a -v
launcher.zwift.com
y usar el botón "Configuración - Strava" en la ventana del iniciador (solo Windows y macOS).scripts/strava_auth.py --client-id CLIENT_ID --client-secret CLIENT_SECRET
strava_auth.exe
obtenido de https://github.com/oldnapalm/zoffline-helper/releases/latest en lugar de scripts/strava_auth.py
strava_token.txt
resultante (guardado en cualquier directorio en el que haya ejecutado strava_auth.py
) al directorio storage/1
.pip install garth
garmin_domain.txt
en el directorio storage
que contiene el dominio.garmin.cn
garmin_credentials.txt
en el directorio storage/1
que contenga sus credenciales de inicio de sesión. <username>
<password>
Para habilitar el soporte para múltiples usuarios, realice los pasos a continuación:
multiplayer.txt
en el directorio storage
.server-ip.txt
en el directorio storage
que contenga la dirección IP de la PC que ejecuta zoffline.apk-mitm/dist/tools/apktool.js
(ejecute npm root -g
para encontrar su ubicación) y edítelo de esta manera: decode ( inputPath , outputPath ) {
return this . run ( [
'decode' ,
'-resm' , // add this
'dummy' , // add this
inputPath ,
'--output' ,
outputPath ,
'--frame-path' ,
this . options . frameworkPath ,
] , 'decoding' ) ;
}
zca.apk
) en una ubicación conocida.apk-mitm --certificate cert-zwift-com.pem zca.apk
zca-patched.apk
a su teléfono e instáleloapp-Github-release.apk
desde aquíhosts.txt
para usarlo con la aplicación (puede usar una aplicación de edición de texto o crearlo en línea con una herramienta en línea como esta). El archivo debe verse así (reemplace <zoffline ip>
con la dirección IP de la máquina que ejecuta zoffline): <zoffline ip> us-or-rly101.zwift.com
<zoffline ip> secure.zwift.com
cdn.zwift.com
a hosts.txt
, Companion necesita descargar imágenes del servidor oficialhosts.txt
creadofake-dns.txt
en el directorio storage
y configurar el "DNS 1" de la conexión Wi-Fi de su teléfono a la dirección IP de la PC que ejecuta zoffline.cdn-proxy.txt
en el directorio storage
. Esto solo puede funcionar si está ejecutando zoffline en una máquina diferente al cliente Zwift.disable_proxy.txt
en el directorio storage
.gmail_credentials.txt
en el directorio storage
que contenga las credenciales de inicio de sesión de una cuenta de Gmail. Debe acceder a https://security.google.com/settings/security/apppasswords y crear una contraseña de aplicación para permitir el inicio de sesión desde el servidor.pip3 install discord.py
y cree un archivo discord.cfg
en el directorio storage
que contiene [discord]
token =
webhook =
channel =
welcome_message =
help_message =
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
enable_ghosts.txt
dentro de la carpeta storage
.https://<zoffline_ip>/login/
, marque "Habilitar fantasmas" y haga clic en "Iniciar Zwift" para guardar la opción.storage/<player_id>/ghosts/<world>/<route>
. La próxima vez que recorras la misma ruta, se cargará el fantasma..regroup
en el chat para reagrupar a los fantasmas.ghost_profile.txt
dentro de la carpeta storage
. El script find_equip.py
se puede utilizar para completar este archivo. enable_bots.txt
dentro de la carpeta storage
para cargar fantasmas como robots, seguirán viajando independientemente de la ruta que esté recorriendo.enable_bots.txt
puede contener un valor multiplicador (tenga cuidado, si el número resultante de bots es demasiado alto, puede causar problemas de rendimiento o no funcionar en absoluto).bot.txt
dentro de la carpeta storage
. Los scripts get_pro_names.py
y get_strava_names.py
se pueden utilizar para completar este archivo.bot_editor.py
se puede utilizar para modificar profile.bin
(establecer nombre, ID de jugador e ID de ruta) y route.bin
(cortar los puntos sobrantes para crear un bucle perfecto)..bookmark <name>
en el chat.all_time_leaderboards.txt
en el directorio storage
.unlock_entitlements.txt
en el directorio storage
.unlock_all_equipment.txt
. Únase al servidor Discord y al club Strava respaldados por la comunidad.
Estibador
-o-
Las futuras actualizaciones de Zwift pueden interrumpir zoffline hasta que se actualice. Mientras zoffline esté habilitado, las actualizaciones de Zwift no se instalarán. Si una actualización de zoffline rompió algo, consulte el CHANGELOG
para ver posibles cambios que deban realizarse.
No expongas zoffline a Internet, no fue diseñado con eso en mente.
Nota: no hay garantía de que una actualización de Zwift no probada funcione con zoffline. Sin embargo, históricamente, las actualizaciones de Zwift rara vez interrumpen la conexión.
Zwift es una marca comercial de Zwift, Inc., que no está afiliada con el creador de este proyecto y no respalda este proyecto.
Todos los nombres de productos y empresas son marcas comerciales de sus respectivos propietarios. El uso de ellos no implica ninguna afiliación o respaldo por parte de ellos.