Skip to content

विकास गाइड ​

यह दस्तावेज़ बताता है कि jrpm पर आगे कैसे विकास करें। सभी पैटर्न इस परियोजना में वास्तव में कार्यान्वित कोड से आते हैं (git log में कमिट के साथ तुलना करें)।

कोड संगठन त्वरित अवलोकन ​

निर्देशिकाजिम्मेदारी
src/सभी C++ स्रोत कोड (शीर्ष स्तर सिस्टम के अनुसार नामित: rail_cmd.cpp, group_gui.cpp…)
src/network/नेटवर्किंग (सर्वर/क्लाइंट/UDP/HTTP/सामग्री डाउनलोड)
src/script/स्क्रिप्ट फ्रेमवर्क (Squirrel); api/ AI/GS API क्लासेज़
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. कमिट संदेश: अंग्रेज़ी सुझाव (टर्मिनल एन्कोडिंग समस्याओं से बचने के लिए);
  3. कमांड एनम में मध्य सम्मिलन बाद के कमांड ID को स्थानांतरित करेगा — पुराने संस्करण बाइनरी और नए संस्करण मल्टीप्लेयर में असंगत होंगे, यह fork के अंदर सामान्य है, अपग्रेड करते समय समकालिक रूप से करें;
  4. सेव संस्करण: सेव संरचना बदलते समय src/sl/saveload_common.h में नया SLV_* आइटम जोड़ें और 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, शेड्यूल्ड डिस्पैच, टेम्पलेट प्रतिस्थापन।