zoffline เปิดใช้งานการใช้ Zwift ออฟไลน์โดยทำหน้าที่เป็นการใช้งานเซิร์ฟเวอร์ Zwift บางส่วน โดยค่าเริ่มต้น zoffline นั้นมีไว้สำหรับผู้เล่นคนเดียวเท่านั้น ดูขั้นตอนที่ 6: เปิดใช้งานผู้เล่นหลายคนสำหรับวิธีเปิดใช้งานการรองรับผู้ใช้/โปรไฟล์หลายราย
zoffline ยังเสนอการขี่ต่อสู้กับผีด้วย (การขี่ครั้งก่อนของคุณ) เปิดใช้งานฟีเจอร์นี้โดยทำเครื่องหมายที่ "เปิดใช้งาน ghosts" ในตัวเรียกใช้งานของ zoffline ดูผีและบอทสำหรับรายละเอียดเพิ่มเติม
นอกจากนี้ Launcher ของ zoffline ยังช่วยให้สามารถเลือกแผนที่เฉพาะเพื่อขี่ต่อไปได้โดยไม่ต้องใช้ไฟล์กำหนดค่า
การตั้งค่า zoffline ต้องใช้สองขั้นตอนหลัก ขั้นแรก ต้องติดตั้ง zoffline และรันบนระบบก่อนใช้งาน Zwift (ไม่ว่าจะบนระบบที่ใช้ Zwift หรือบนระบบเครือข่ายท้องถิ่นอื่น) ประการที่สอง ต้องกำหนดค่า Zwift ให้ใช้ zoffline แทนเซิร์ฟเวอร์ Zwift อย่างเป็นทางการ
มีสามวิธีในการติดตั้งและรัน zoffline ขึ้นอยู่กับแพลตฟอร์มของคุณ:
pace_partners
ไปยังโฟลเดอร์เดียวกับที่ zoffline อยู่server-ip.txt
ในไดเรกทอรี storage
ที่มีที่อยู่ IP ของพีซีที่ใช้งาน zofflinestorage
ในโฟลเดอร์เดียวกับที่จัดเก็บความคืบหน้าของ Zwiftpip3 install -r requirements.txt
pip install -r requirements.txt
C:UsersAppDataLocalProgramsPythonPythonScriptspip.exe
แทนที่จะใช้เพียง pip
server-ip.txt
ในไดเรกทอรี storage
ที่มีที่อยู่ IP ของพีซีที่ใช้งาน zofflinesudo ./standalone.py
sudo python3 standalone.py
python standalone.py
C:UsersAppDataLocalProgramsPythonPythonpython.exe
แทนที่จะเป็นเพียง python
storage
ไว้ มันมีสถานะความคืบหน้าของ Zwift ของคุณสามารถติดตั้ง zoffline บนเครื่องเดียวกับ Zwift หรือเครื่องอื่นได้
docker create --name zwift-offline -p 443:443 -p 80:80 -p 3024:3024/udp -p 3025:3025 -p 53:53/udp -v :/usr/src/app/zwift-offline/storage -e TZ= zoffline/zoffline
-v :/usr/src/app/zwift-offline/storage
หากคุณไม่สนใจว่าสถานะความคืบหน้าของ Zwift ของคุณจะยังคงอยู่ในการอัปเดต zoffline หรือไม่ (ไม่น่าเป็นไปได้)-v
จะต้องเป็นแบบสากลที่สามารถอ่านและเขียนได้
ที่ถูกต้อง (เช่น America/New_York) ได้ที่นี่--restart unless-stopped
จะทำให้ zoffline เริ่มตอนบู๊ตถ้าคุณมี Docker v1.9.0 หรือสูงกว่าserver-ip.txt
ในไดเร็กทอรี
ที่มีที่อยู่ IP ของพีซีที่ใช้งาน zofflinedocker start zwift-offline
docker-compose.yml
ใน repo นี้ซึ่งจะสร้างจาก Dockerfile หรือใช้ไฟล์เขียนตัวอย่างนี้: 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
ในไดเรกทอรี storage
ที่มีที่อยู่ IP ของพีซีที่ใช้งาน zofflinedocker-compose up -d
C:Program Files (x86)ZwiftZwift_ver_cur.xml
ไปยัง cdn/gameassets/Zwift_Updates_Root/
ของ zoffline โดยเขียนทับไฟล์ที่มีอยู่certutil.exe -importpfx Root cert-zwift-com.p12
C:Program Files (x86)Zwiftdatacacert.pem
ssl/cert-zwift-com.pem
ต่อท้าย cacert.pemC:WindowsSystem32Driversetchosts
us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com launcher.zwift.com
คือที่อยู่ IP ของเครื่องที่ใช้งาน zoffline หากทำงานบนเครื่องเดียวกันกับ Zwift ให้ใช้ 127.0.0.1
เป็น ip)hosts
ไม่เปลี่ยนแปลง ยกเว้นเมื่อใช้ zoffline โดยเฉพาะ คุณอาจเลือกใช้สคริปต์ launch.bat ภายในไดเร็กทอรี scripts
เพื่อเปิดใช้ zoffline แทนการใช้ Zwift Launcher ปกติ ดู #121 สำหรับรายละเอียดเหตุผล: เราจำเป็นต้องเปลี่ยนเส้นทาง Zwift เพื่อใช้ zoffline และโน้มน้าวให้ Windows และ Zwift ยอมรับใบรับรองที่ลงนามด้วยตนเองของ zoffline สำหรับชื่อโดเมนของ Zwift อย่าลังเลที่จะสร้างใบรับรองของคุณเองและทำเช่นเดียวกัน
~/Library/Application Support/Zwift/ZwiftMac_ver_cur.xml
ไปยัง cdn/gameassets/Zwift_Updates_Root/
ของ zoffline เขียนทับไฟล์ที่มีอยู่sed -n '29,53p' cert-zwift-com.pem >> ~/Library/Application Support/Zwift/data/cacert.pem
/etc/hosts
us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com launcher.zwift.com
คือที่อยู่ IP ของเครื่องที่ใช้งาน zoffline หากทำงานบนเครื่องเดียวกันกับ Zwift ให้ใช้ 127.0.0.1
เป็น ip)เหตุผล: เราจำเป็นต้องเปลี่ยนเส้นทาง Zwift เพื่อใช้ zoffline และโน้มน้าวให้ macOS และ Zwift ยอมรับใบรับรองที่ลงนามด้วยตนเองของ zoffline สำหรับชื่อโดเมนของ Zwift อย่าลังเลที่จะสร้างใบรับรองของคุณเองและทำเช่นเดียวกัน
ZofflineObb.apk
จากที่นี่app-Github-release.apk
จากที่นี่hosts.txt
เพื่อใช้กับแอป (คุณสามารถใช้แอปแก้ไขข้อความหรือสร้างไฟล์ออนไลน์ด้วยเครื่องมือออนไลน์เช่นนี้) ไฟล์จะต้องมีลักษณะเช่นนี้ (แทนที่
ด้วยที่อยู่ IP ของเครื่องที่ใช้งาน zoffline): us-or-rly101.zwift.com
secure.zwift.com
cdn.zwift.com
hosts.txt
ที่สร้างขึ้นfake-dns.txt
ในไดเร็กทอรี storage
และตั้งค่า "DNS 1" ของการเชื่อมต่อ Wi-Fi ในโทรศัพท์ของคุณเป็นที่อยู่ IP ของพีซีที่ใช้ zofflineAndroid Settings > Applications > Zwift
และล้างข้อมูลหรือถอนการติดตั้งและติดตั้งแอปอีกครั้งZofflineObb
และเรียกใช้ (อนุญาตให้เข้าถึงที่เก็บข้อมูล)เหตุผล: เราจำเป็นต้องเปลี่ยนเส้นทาง Zwift ไปใช้ zoffline (ซึ่งทำได้โดยแอป Virtual Hosts) และโน้มน้าวให้ Zwift ยอมรับใบรับรองที่ลงนามด้วยตนเองของ zoffline สำหรับชื่อโดเมนของ Zwift (ซึ่งทำได้โดยเครื่องมือแก้ไข ZofflineObb)
ssl/cert-zwift-com.pem
ต่อท้าย /data/data/com.zwift.zwiftgame/dataES/cacert.pem
บนอุปกรณ์adb 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
ของอุปกรณ์ us-or-rly101.zwift.com secure.zwift.com cdn.zwift.com
คือที่อยู่ IP ของเครื่องที่ใช้งาน zoffline)adb pull /etc/hosts
adb push hosts /etc/hosts
hosts
ของคุณเหตุผล: เราจำเป็นต้องเปลี่ยนเส้นทาง Zwift ไปใช้ zoffline และโน้มน้าวให้ Zwift ยอมรับใบรับรองที่ลงนามด้วยตนเองของ zoffline สำหรับชื่อโดเมนของ Zwift อย่าลังเลที่จะสร้างใบรับรองของคุณเองและทำเช่นเดียวกัน
หากต้องการใช้ Zwift ออนไลน์เหมือนปกติ ให้ใส่เครื่องหมายความคิดเห็นหรือลบบรรทัดที่เพิ่มลงในไฟล์ hosts
ก่อนเริ่ม Zwift จากนั้นตรวจสอบให้แน่ใจว่าปิด Zwift เรียบร้อยแล้ว (คลิกขวาที่ไอคอนถาดระบบ Zwift แล้วออก) แล้วรีสตาร์ท Zwift
หากคุณไม่ได้รับโปรไฟล์ Zwift ปัจจุบันก่อนที่จะเริ่ม Zwift โดยเปิดใช้งาน zoffline เป็นครั้งแรก คุณจะได้รับแจ้งให้สร้างโปรไฟล์ใหม่ (ส่วนสูง น้ำหนัก เพศ) โปรไฟล์ของคุณสามารถปรับแต่งเพิ่มเติมและเปลี่ยนแปลงได้ผ่านเมนูในเกม (เช่น ชื่อ สัญชาติ การเปลี่ยนแปลงน้ำหนัก ฯลฯ)
หากต้องการรับโปรไฟล์ปัจจุบันของคุณ:
scripts/get_profile.py -u
get_profile.exe
ที่ได้รับจาก https://github.com/oldnapalm/zoffline-helper/releases/latest แทน scripts/get_profile.py
profile.bin
, achievements.bin
และ economy_config.txt
(บันทึกไว้ในไดเร็กทอรีใดก็ตามที่คุณเรียกใช้ get_profile.py ใน) ไปยังไดเร็กทอรี storage/1
storage/1
ภายในโฟลเดอร์เดียวกันกับ zoffline.exe หากยังไม่มี1
ควรอยู่ในเส้นทางที่คุณส่งไปยัง -v
launcher.zwift.com
แทน และใช้ปุ่ม "การตั้งค่า - Strava" ในหน้าต่างตัวเรียกใช้งาน (เฉพาะ Windows และ macOS เท่านั้น)scripts/strava_auth.py --client-id CLIENT_ID --client-secret CLIENT_SECRET
strava_auth.exe
ที่ได้รับจาก https://github.com/oldnapalm/zoffline-helper/releases/latest แทน scripts/strava_auth.py
strava_token.txt
ผลลัพธ์ (บันทึกไว้ในไดเร็กทอรีใดก็ตามที่คุณเรียกใช้ strava_auth.py
) ลงในไดเร็กทอรี storage/1
pip install garth
garmin_domain.txt
ในไดเร็กทอรี storage
ที่มีโดเมนgarmin.cn
garmin_credentials.txt
ในไดเร็กทอรี storage/1
ที่มีข้อมูลรับรองการเข้าสู่ระบบของคุณ
หากต้องการเปิดใช้งานการสนับสนุนสำหรับผู้ใช้หลายรายให้ทำตามขั้นตอนด้านล่าง:
multiplayer.txt
ในไดเร็กทอรี storage
server-ip.txt
ในไดเรกทอรี storage
ที่มีที่อยู่ IP ของพีซีที่ใช้งาน zofflineapk-mitm/dist/tools/apktool.js
(รัน npm root -g
เพื่อค้นหาตำแหน่งของมัน) และแก้ไขดังนี้: decode ( inputPath , outputPath ) {
return this . run ( [
'decode' ,
'-resm' , // add this
'dummy' , // add this
inputPath ,
'--output' ,
outputPath ,
'--frame-path' ,
this . options . frameworkPath ,
] , 'decoding' ) ;
}
zca.apk
) ไปยังตำแหน่งที่รู้จักapk-mitm --certificate cert-zwift-com.pem zca.apk
zca-patched.apk
ไปยังโทรศัพท์ของคุณแล้วติดตั้งapp-Github-release.apk
จากที่นี่hosts.txt
เพื่อใช้กับแอป (คุณสามารถใช้แอปแก้ไขข้อความหรือสร้างไฟล์ออนไลน์ด้วยเครื่องมือออนไลน์เช่นนี้) ไฟล์จะต้องมีลักษณะเช่นนี้ (แทนที่
ด้วยที่อยู่ IP ของเครื่องที่ใช้งาน zoffline): us-or-rly101.zwift.com
secure.zwift.com
cdn.zwift.com
ไปที่ hosts.txt
Companion จำเป็นต้องดาวน์โหลดภาพจากเซิร์ฟเวอร์อย่างเป็นทางการhosts.txt
ที่สร้างขึ้นfake-dns.txt
ในไดเร็กทอรี storage
และตั้งค่า "DNS 1" ของการเชื่อมต่อ Wi-Fi ในโทรศัพท์ของคุณเป็นที่อยู่ IP ของพีซีที่ใช้ zofflinecdn-proxy.txt
ในไดเร็กทอรี storage
วิธีนี้จะใช้ได้เฉพาะเมื่อคุณใช้งาน zoffline บนเครื่องอื่นที่ไม่ใช่ไคลเอนต์ Zwiftdisable_proxy.txt
ในไดเร็กทอรี storage
gmail_credentials.txt
ในไดเร็กทอรี storage
ที่มีข้อมูลรับรองการเข้าสู่ระบบของบัญชี Gmail คุณต้องเข้าถึง https://security.google.com/settings/security/apppasswords และสร้างรหัสผ่านสำหรับแอปเพื่ออนุญาตการเข้าสู่ระบบจากเซิร์ฟเวอร์pip3 install discord.py
และสร้างไฟล์ discord.cfg
ในไดเร็กทอรี storage
ที่มี [discord]
token =
webhook =
channel =
welcome_message =
help_message =
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
enable_ghosts.txt
ภายในโฟลเดอร์ storage
https:///login/
ทำเครื่องหมายที่ "เปิดใช้งาน ghosts" แล้วคลิก "เริ่ม Zwift" เพื่อบันทึกตัวเลือกstorage//ghosts//
ครั้งต่อไปที่ขี่เส้นทางเดิมผีจะโหลด.regroup
ในการแชทเพื่อจัดกลุ่มผีใหม่ghost_profile.txt
ภายในโฟลเดอร์ storage
สามารถใช้สคริปต์ find_equip.py
เพื่อเติมไฟล์นี้ได้ enable_bots.txt
ภายในโฟลเดอร์ storage
เพื่อโหลดโกสต์เป็นบอท พวกมันจะขี่ต่อไปไม่ว่าคุณจะขี่เส้นทางใดก็ตามenable_bots.txt
สามารถมีค่าตัวคูณได้ (โปรดระวัง หากจำนวนบอทที่ได้ผลลัพธ์สูงเกินไป อาจทำให้เกิดปัญหาด้านประสิทธิภาพหรือไม่ทำงานเลย)bot.txt
ภายในโฟลเดอร์ storage
สคริปต์ get_pro_names.py
และ get_strava_names.py
สามารถใช้เพื่อเติมไฟล์นี้ได้bot_editor.py
สามารถใช้เพื่อแก้ไข profile.bin
(ชื่อชุด, ID ผู้เล่น และ ID เส้นทาง) และ route.bin
(ตัดจุดที่เกินออกเพื่อสร้างการวนซ้ำที่สมบูรณ์แบบ).bookmark
ในการแชทall_time_leaderboards.txt
ในไดเร็กทอรี storage
unlock_entitlements.txt
ในไดเร็กทอรี storage
unlock_all_equipment.txt
แทน กรุณาเข้าร่วมชุมชนที่รองรับเซิร์ฟเวอร์ Discord และ Strava club
นักเทียบท่า
-หรือ-
การอัปเดต Zwift ในอนาคตอาจทำให้ zoffline เสียหายจนกว่าจะมีการอัปเดต ในขณะที่เปิดใช้งาน zoffline การอัปเดต Zwift จะไม่ถูกติดตั้ง หากการอัปเดต zoffline ทำลายบางสิ่ง ให้ตรวจสอบ CHANGELOG
เพื่อดูการเปลี่ยนแปลงที่เป็นไปได้ที่จำเป็นต้องดำเนินการ
อย่าเปิดเผย zoffline บนอินเทอร์เน็ต มันไม่ได้ได้รับการออกแบบโดยคำนึงถึงเรื่องนั้น
หมายเหตุ: ไม่มีการรับประกันว่าการอัปเดต Zwift ที่ยังไม่ผ่านการทดสอบจะทำงานร่วมกับ zoffline ได้ อย่างไรก็ตาม ในอดีต การอัปเดตของ Zwift ไม่ค่อยทำให้ zoffline เสียหาย
Zwift เป็นเครื่องหมายการค้าของ Zwift, Inc. ซึ่งไม่มีส่วนเกี่ยวข้องกับผู้สร้างโครงการนี้ และไม่สนับสนุนโครงการนี้
ชื่อผลิตภัณฑ์และบริษัททั้งหมดเป็นเครื่องหมายการค้าของเจ้าของที่เกี่ยวข้อง การใช้สิ่งเหล่านี้ไม่ได้หมายความถึงความเกี่ยวข้องหรือการรับรองจากพวกเขา