الفرع:
jrpm| الإصدار: jrpm-0.1.0 (موسوم، 2026-08-14) ناتج البناء:openttd-jrpm(اسم الملف التنفيذي)
علاقة الإصدارات
jgrpp-0.73.1 (السلف المشترك)
/ \
jgrpp branch (63 commit) pulsexlb px-patch (152 commit)
├ tracerestrict وغيرها من التحديثات ├ jgrpp-decouple (فك القاطرة)
├ 5 وظائف ملكي (d4c45740) └ jgrpp-multitile-airport (مطار معياري)
└ تغيير اسم الإصدار jrpm-0.1.0 (425e7207)
\ /
jrpm branch (merge 71fe214c + توافق cb9848b)محتوى الدمج
1. pulsexlb/OpenTTD-patches (px-patch كامل 152 commit) ← تم الدمج
| الوظيفة | الوصف | الملفات الرئيسية |
|---|---|---|
| فك القاطرة (decouple) | فصل/ربط القطارات: أوامر الفك، نقل العلامات، حدود طول/سرعة الربط، قاطرتين، ربط NewGRF، توجيه الربط (YAPF/NPF)، جدولة مستقلة بعد الفك | train_cmd.cpp، order_cmd.cpp، order_gui.cpp، train.h، yapf/npf |
| مطار معياري (multitile-airport) | إعادة هيكلة نظام المطار متعدد البلاطات: نظام أنواع air (air.h/air_type.h/newgrf_airtype.)، جدولة PBS الجوية (pbs_air.)، توجيه YAPF الجوي، station.allow_modify_airports (تعديل تخطيط المطار)، gui.default_air_type، سبرايتات مطار متعدد البلاطات | air.، pbs_air.، aircraft_cmd.cpp (إعادة هيكلة 3600 سطر)، airport_cmd/gui، station_cmd |
معالجة التعارض: تعارض ملفا رأس فقط (aircraft.h / airport.h)——إعادة هيكلة طيران pulsexlb حذفت أنواعاً ميتة غير مشار إليها في مساحة العمل (VehicleAirFlags bitset، AirportMovingDataFlag)، تم أخذ جانب الحذف من pulsexlb، وتم التأكد من عدم وجود ملفات أخرى تشير إليها.
2. Openttd-Cluster (مشروع Rust العنقودي للمستخدم) ← استعارة انتقائية
| التصحيح | المعالجة | الوصف |
|---|---|---|
| 0006 vanilla-native-server (توافق إصدارات متعددة للعملاء) | ✅ تم الدمج (cb9848b7) | خادم jrpm يقبل عملاء jrpm / jgrpp الأصلي (jgrpp-) / pulsexlb (pxp) في نفس الوقت؛ إصدار NewGRF لا يزال يُتحقق بدقة |
| 0001 revision-handshake / 0005 version-metadata | ✅ الفكرة تم اعتمادها | يستخدم jrpm سلسلة مراجعة موسومة مستقلة jrpm-0.1.0، مصافحة الشبكة معزولة عن jgrpp/pxp، مما يحقق "إصدار جديد مناسب للاتصال عبر الشبكة" |
| 0007 parallel-download (تجمع خيوط HTTP + تنزيل مجزأ Range، 30KB) | 📝 مرجعي بدون دمج | له نفس الموضوع مثل F1 لهذا المشروع "توازي على مستوى الملف + مرايا متعددة" ويغير نفس مجموعة الملفات؛ تم تسجيل تجمع خيوط طبقة النقل/التنزيل المجزأ من 0007 كاتجاه تحسين مستقبلي لـ F1 |
| 0002-0004 snapshot/command/FFI bridge | 📝 مرجعي معماري | يعتمد على كامل زمن تشغيل otc-engine Rust (ربط ثابت FFI)، هو "تكامل كلي بعيد المدى" وليس دمجاً على مستوى التصحيح؛ jrpm حالياً يبقى ثنائي C++ خالص |
3. حصري لـ jrpm (الوظائف الخمس السابقة، d4c45740) ← موجود بالفعل في فرع jrpm
تنزيل متوازي (مرايا متعددة + 4 جلسات متزامنة)، تجميع تلقائي، تلميح البناء، ذكاء اصطناعي يدرك اللعبة بأكملها (ScriptGlobal + GlobalAI)، إعدادات المرآة/خادم المحتوى.
استراتيجية الشبكة ("إصدار جديد مناسب للاتصال عبر الشبكة")
- jrpm هو إصدار موسوم:
IsNetworkCompatibleVersionيتطلب تطابقاً تاماً لسلسلة المراجعة ← عميل jrpm يتصل فقط بخادم jrpm، معزول تماماً عن jgrpp 0.73.x / pxp؛ - الخادم يرخي: خادم jrpm يقبل بالإضافة إلى ذلك عملاء
jgrpp-*وpxp*(IsJgrppNativeNetworkRevision/IsPxpNetworkRevision، يجب أن يكون إصدار NewGRF متطابقاً)؛ - لذلك: مضيف خادم jrpm يفتح الخادم = يستقبل فقط لاعبي jrpm (افتراضي)؛ عندما يحتاج إلى توافق مع عملاء قدامى، يمكنه استقبال لاعبي jgrpp/pxp دون تغيير التكوين.
البناء والتحقق (ينفذه المستخدم على جهازه)
# أول مرة (يحتاج CMake + تبعيات، راجع COMPILING.md)
cmake -B build ..
cmake --build build -j
# الناتج: build/openttd-jrpm.exeأولويات التحقق:
openttd-jrpm -vيعرضjrpm-0.1.0؛- افتح حفظاً محلياً وشغّل 1-2 سنة (الدمج يتضمن تغييرات كبيرة في train/airport + إصدار الحفظ قد يزيد بسبب allow_modify_airports وغيرها)؛
- بعد فتح الخادم: انضمام عميل jrpm ✓؛ تجربة انضمام عميل jgrpp 0.73.x الأصلي (متوقع الدخول، عندما يكون NewGRF متطابقاً)؛
- فك القاطرة: أضف أوامر فك/ربط للقطار، تحقق من جدولة مستقلة للقطارين بعد الفك؛ مطار معياري: فعّل
station.allow_modify_airportsثم عدّل تخطيط المطار؛ - اختبار انحداري للوظائف الخمس السابقة (تنزيل متوازي، تجميع تلقائي، تلميح البناء، GlobalAI).
المخاطر المعروفة
- لم يتم التحقق من التجميع: الكود المدمج+المعدّل لم يتم تجميعه على الجهاز (لا توجد سلسلة أدوات)، التجميع الأول على الجهاز الفعلي قد يكون لديه تغييرات واجهة مفقودة (خاصة التغييرات الكبيرة في أنظمة aircraft/airport/train الثلاثة)؛
- إصدار الحفظ: px-patch قد يزيد SLV (ذكر M9 gate إصدار savegame)، حفظ jrpm قد لا يُقرأ مع حفظ jgrpp 0.73.x (مثل اصطلاح jgrpp، متوافق مع حفظ trunk للإصدارات الأقدم)؛
- الدمج يجلب كل تاريخ pulsexlb، إذا كنت بحاجة إلى تتبع ملكية الوظائف استخدم
git log --oneline pulsexlb/px-patch.
سجل الدمج: 2026-09-28 (jgrpp-0.73.3 + px-patch 2609.x)
تكريتات الدمج: jgrpp 94 تكريداً (حتى
jgrpp-0.73.3) + px-patch 113 تكريداً (حتى بعدpxp-2609.10).
الجديد: من pulsexlb — نقل المركبات البرية (RoRo، انظر الميزات)، 128 نوع حمولة (CargoTypes على Uint128، عبر XSLFI_CARGO_TYPES_128)، دفعة إصلاحات الفصل/الاقتران وتحسينات الجداول؛ من jgrpp — سحب وإفلات الطلبات/النقر المزدوج، السفن ذات الطرفين (XSLFI_DOUBLE_ENDED_SHIPS)، والعديد من الإصلاحات العامة.
معالجة التعارضات الرئيسية: طبقة الحفظ لدى pulsexlb تعتمد نظام ماكرو SLE_ القديم بينما jrpm/jgrpp 0.73.3 يستخدم VarFileType/VarMemType + VarTypes؛ أُعيدت كتابة كل تعارضات saveload/ وsl/ بالنظام الحديث مع إضافة دعم U128 (VarFileType::U128=13، VarMemType::U128، SLE_UINT128)؛ الإصداران 367/368 المحجوزان لjrpm بقيا والجديدان من المنبع انتقلا إلى 369/370؛ توافق حفظ المنبع يمر عبر الكتلة الفرعية XSLFI_UPSTREAM_VERSION؛ CT_VEHICLES كسلسلة، مقارنة grfid عبر GrfID، وكتلتا autogroup + RORO_DEBUG_COMMANDS محفوظتان.
الحالة: بناء MinGW ninja ناجح، المخرج build/openttd-jrpm.exe؛ اختبار سريع للعبة جديدة ناجح.
سجل الدمج: 2026-10-07 (jgrpp 0.73.3+89 + px-patch 2610.3)
تكريتات الدمج: jgrpp 23 تكريداً (بعد
jgrpp-0.73.3، حتى6318727b02) + px-patch 55 تكريداً (حتىpxp-2610.3،4a4d0724b5).
الجديد: من pulsexlb — عبّارة القطارات (السفن تُعدّل لنقل قاطارات كاملة، شحنة RAIL/CT_RAILVEHICLES مخصّصة، التحميل لكل عربة)، ونظام المطر (weather.cpp بفترات مطر عشوائية، وتعتيم تدريجي للعالم، وقطرات تتكيّف مع التقريب؛ خيار difficulty.rain؛ ورمز غش صحراوي يفرض الطقس؛ وتُحفظ حالة الطقس في كتلة WTHR/XSLFI_WEATHER)، والخروج بعد الفصل في الاتجاه نفسه مع انتظار الجزء الآخر، وعرض حمولة كل صندوق سفينة وكل عربة، واختيار لافتة القطار/المركبة في خيارات RoRo، وإزالة توقّف البحث عن المسار عند التوصيل (فحص الشحن مسبقاً مع تراجع عند الفشل)، وبناء Android مع نشر APK؛ ومن jgrpp — النوع القوي StringID، ورفض أسماء الشركات المكررة، وحساب الحجم المفضّل للعناصر، وإعادة هيكلة وإصلاحات عامة متعددة.
معالجة التعارضات الرئيسية: أكبر عقبة في البناء كانت الأنواع القوية لـ Label/StringID — حُوِّلت كل التسميات الحرفية ذات الأربعة محارف في كود jrpm إلى إنشاء سلسلة (CT_RAILVEHICLES{"RAIL"})، وصارت مقارنات تسميات أنواع الطرق في afterload.cpp بالشكل RoadTypeLabel{"ROAD"}، وحقول السلاسل الفارغة في AirTypeInfo في airport.cpp تستخدم STR_NULL، وفروع switch الخاصة بـ STR_CHEAT_RAIN في cheat_gui.cpp تستخدم .base()؛ ووُضع النوع القديم CH_TABLE في كتلة الطقس الجديدة WTHR على ChunkType::Table؛ وأُبقي في جدول الغش نوع VarMemType وحارس InflationCheat الخاص بـ jrpm مع إضافة سطر المطر الجديد؛ واستُبدل SetStringTip(SPR_GOTO_LOCATION, …) في jrpm_watch_gui.cpp بـ SetSpriteTip؛ وفي train_cmd.cpp أُبقي شرط enable_decouple واعتُمد إصلاح المنبع الذي لا يعكس إلا عند مرور مقدمة القطار (if (v->IsMovingFront())) مع رايات الخروج في الاتجاه نفسه؛ وفي order_cmd.cpp اعتُمدت دلالة DrivingBackwards الجديدة عبر TCF_NO_DRIVING_CAB مع الإبقاء على متغير DecouplePart؛ وبُني deploy-docs.yml الخاص بـ VitePress ونشر GitHub Pages، كما أُبقيت علامة jrpm التجارية في README/.gitignore/.ottdrev-vc؛ ويظل SL_UPSTREAM_VERSION مثبّتاً على 368 (DoubleEndedShips) وينجح static_assert في src/saveload/engine_sl.cpp، مع بقاء الإصدارين 367/368 المحجوزين.
الحالة: بناء MinGW ninja (-j3) ناجح، المخرج build/openttd-jrpm.exe؛ اختبار خادم مخصص -D ناجح — توليد خريطة → حفظ → تحميل → حفظ مجدد → خروج دون أي تأكيد أو انهيار في SetupEngines، وتعمل بوابات الإصدارات لكتل المنبع بشكل صحيح.