Skip to content

دليل التطوير ​

تشرح هذه الوثيقة كيفية مواصلة التطوير على jrpm. جميع الأنماط مأخوذة من الكود المطبق فعلياً في هذا المشروع (يمكن مقارنتها مع الـ commits في git log).

نظرة سريعة على تنظيم الكود ​

الدليلالمسؤولية
src/جميع كود C++ (المستوى العلوي مسماة حسب النظام: rail_cmd.cpp، group_gui.cpp...)
src/network/الشبكات (خادم/عميل/UDP/HTTP/تنزيل المحتوى)
src/script/إطار البرامج النصية (Squirrel)؛ api/ هو فئات API لـ AI/GS
src/table/settings/*.iniمصدر تعريف الإعدادات (يتم توليد الكود بواسطة settingsgen)
src/lang/english.txtتعريف السلاسل النصية (يتم توليدها بواسطة strgen)
src/sl/saveload_common.hتعداد إصدار الحفظ (SLV)
bin/ai/برامج AI النصية (GlobalAI هو مثال)

أنماط التطوير الشائعة ​

البناء ​

bash
cmake -B build ..
cmake --build build -j

ملاحظات التطوير ​

  1. الترميز: بعد تغيير الكود المصدري/الوثائق التي تحتوي على الصينية، انتبه إلى UTF-8 (أدوات Write/Edit المحلية قد أنتجت ترميز GBK سابقاً، يمكن إصلاحه باستخدام jgrpp-features/_fix_utf8.py)؛
  2. رسالة الـ commit: يوصى بالإنجليزية (لتجنب مشاكل ترميز الطرفية)؛
  3. الإدراج في منتصف تعداد الأمر سيزيح معرفات الأوامر اللاحقة——الثنائي القديم سيكون غير متوافق مع الجديد عند الاتصال، هذا أمر طبيعي داخل fork، الترقية تحتاج إلى مزامنة؛
  4. إصدار الحفظ: عند تغيير هيكل الحفظ، أضف إدخال SLV_* جديداً في src/sl/saveload_common.h وحدّث SAVEGAME_VERSION؛
  5. الملفات الجديدة: يجب إضافة .cpp إلى قائمة مصادر CMakeLists.txt المقابلة (src/CMakeLists.txt أو دليل فرعي/script/api/CMakeLists.txt)؛ script_*.hpp يتم اكتشافه تلقائياً بواسطة file(GLOB)، لا يحتاج إلى تسجيل؛
  6. السلاسل الجديدة: أضف في src/lang/english.txt (اللغات الأخرى تعود تلقائياً إلى الإنجليزية عند عدم وجود ترجمة)؛
  7. توافق NewGRF/الحفظ: تغيير _openttd_content_version / رقم إصدار NewGRF يجب أن يكون بحذر (يؤثر على توافق الشبكة والمحتوى).

اقتراحات الاختبار الانحداري (مهم) ​

الفرع الحالي لم يتم تجميعه على جهاز فعلي، بعد أول بناء يوصى بالاختبار الانحداري بهذا الترتيب:

  1. الأساسيات: openttd-jrpm -v يعرض jrpm-0.1.0؛
  2. الحفظ: افتح حفظاً محلياً وشغّل 1-2 سنة؛
  3. الشبكة: اتصال عملاء jrpm ببعضهم؛ انضمام عملاء jgrpp/pxp؛
  4. الميزات الجديدة: فك القاطرة (فك/ربط/عكس)، مطار معياري (تعديل التخطيط)، تنزيل متوازي، تجميع تلقائي، تلميح البناء، GlobalAI؛
  5. اختبار الميزات القديمة: الإشارات، tracerestrict، جدولة مجدولة، استبدال القوالب.