يتيح zoffline استخدام Zwift دون اتصال بالإنترنت من خلال العمل كتطبيق جزئي لخادم Zwift. بشكل افتراضي، zoffline مخصص للاعب واحد فقط. راجع الخطوة 6: تمكين تعدد اللاعبين للتعرف على كيفية تمكين الدعم لمستخدمين/ملفات تعريف متعددة.
يقدم zoffline أيضًا الركوب ضد الأشباح (رحلاتك السابقة). قم بتمكين هذه الميزة عن طريق تحديد "تمكين الأشباح" في مشغل zoffline. راجع الأشباح والروبوتات للحصول على تفاصيل إضافية.
بالإضافة إلى ذلك، يتيح مشغل zoffline تحديد خريطة معينة للركوب عليها دون العبث بملفات التكوين.
يتطلب إعداد zoffline خطوتين أساسيتين. أولاً، يجب تثبيت zoffline وتشغيله على النظام قبل تشغيل Zwift (إما على النظام الذي يقوم بتشغيل Zwift أو على نظام آخر متصل بالشبكة المحلية). ثانيًا، يجب تكوين Zwift لاستخدام zoffline بدلاً من خادم Zwift الرسمي.
هناك ثلاث طرق لتثبيت zoffline وتشغيله اعتمادًا على نظامك الأساسي:
pace_partners
إلى نفس المجلد الموجود فيه zoffline.server-ip.txt
في دليل storage
الذي يحتوي على عنوان IP للكمبيوتر الذي يقوم بتشغيل zoffline.storage
في نفس المجلد الموجود به لتخزين تقدم Zwift الخاص بك.pip3 install -r requirements.txt
pip install -r requirements.txt
C:UsersAppDataLocalProgramsPythonPythonScriptspip.exe
بدلاً من pip
فقطserver-ip.txt
في دليل storage
الذي يحتوي على عنوان IP للكمبيوتر الذي يقوم بتشغيل zoffline.sudo ./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 للكمبيوتر الذي يقوم بتشغيل zoffline.docker start zwift-offline
docker-compose.yml
في هذا الريبو الذي سيتم إنشاؤه من ملف 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 للكمبيوتر الذي يقوم بتشغيل zoffline.docker-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 لاستخدام zwift وإقناع Windows وZwift بقبول شهادات zwift الموقعة ذاتيًا لأسماء نطاقات 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 بقبول شهادات zwift الموقعة ذاتيًا لأسماء نطاقات 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 لاستخدام zwift (يتم ذلك عن طريق تطبيق Virtual Hosts) وإقناع Zwift بقبول شهادات zwift الموقعة ذاتيًا لأسماء نطاقات 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 لاستخدام zwift وإقناع Zwift بقبول شهادات zwift الموقعة ذاتيًا لأسماء نطاقات 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
واستخدام زر "Settings - 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 للكمبيوتر الذي يقوم بتشغيل zoffline.apk-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 على جهاز مختلف عن عميل Zwift.disable_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/
، وحدد "تمكين الأشباح" وانقر على "بدء 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
(اسم المجموعة ومعرف اللاعب ومعرف المسار) و route.bin
(قص النقاط الزائدة لإنشاء حلقة مثالية)..bookmark
في الدردشة.all_time_leaderboards.txt
في دليل storage
.unlock_entitlements.txt
في دليل storage
.unlock_all_equipment.txt
بدلاً من ذلك. يرجى الانضمام إلى خادم Discord المدعوم من المجتمع ونادي Strava.
عامل ميناء
-أو-
قد تؤدي تحديثات Zwift المستقبلية إلى قطع zoffline حتى يتم تحديثه. أثناء تمكين zoffline، لن يتم تثبيت تحديثات Zwift. إذا أدى تحديث zoffline إلى تعطل شيء ما، فراجع CHANGELOG
لمعرفة التغييرات المحتملة التي يجب إجراؤها.
لا تعرض zoffline للإنترنت، فهو لم يتم تصميمه مع أخذ ذلك في الاعتبار.
ملحوظة: ليس هناك ما يضمن أن تحديث Zwift الذي لم يتم اختباره سيعمل مع zoffline. ومع ذلك، تاريخيًا، نادرًا ما تؤدي تحديثات Zwift إلى كسر zoffline.
Zwift هي علامة تجارية لشركة Zwift, Inc.، وهي ليست تابعة لصانع هذا المشروع ولا تؤيد هذا المشروع.
جميع أسماء المنتجات والشركات هي علامات تجارية مملوكة لأصحابها. استخدامها لا يعني أي انتماء لهم أو تأييدهم.