Skip to content

कमांड रिकॉर्डिंग और रीप्ले (Command Record / Replay) ​

cmclient कमांड रीप्ले पोर्ट (पाँचवाँ बैच, कमिट f113acce28)। cmclient की कमांड ऑब्जेक्ट लेयर को पोर्ट नहीं किया गया — सीधे jrpm के अंतर्निहित कमांड सीरियलाइज़ेशन बुनियादी ढाँचे (DynBaseCommandContainer) का उपयोग किया गया, "कमांड ऑब्जेक्ट लेयर" को पूरी तरह बायपास किया गया।

कंसोल कमांड ​

cmdrecord [start [file]]    # रिकॉर्डिंग शुरू करें (डिफ़ॉल्ट फ़ाइल cmdrecord.jrcm, व्यक्तिगत निर्देशिका में संग्रहीत)
cmdrecord stop              # रोकें (कमांड कतार खाली होने के लिए 10 टिक विलंब के बाद डिस्क पर लिखता है)
cmdreplay <file>            # रीप्ले: डिसीरियलाइज़ करें और प्रत्येक कमांड को तुरंत निष्पादित करें

कार्यान्वयन बिंदु ​

  • रिकॉर्ड हुक: CommandRecordLog DoCommandPInternal के कमांड निष्पादन के बाद लगाया गया है — यह स्थानीय, नेटवर्क और रीप्ले कमांड का एकमात्र वास्तविक निष्पादन बिंदु है, दोहरा रिकॉर्ड नहीं होगा।
  • सीरियलाइज़ेशन: cmd / tile / error_msg / payload / company को DynBaseCommandContainer::Serialise के साथ बिना हानि के सीरियलाइज़ किया जाता है; फ़ाइल प्रारूप JRCM magic + version + count + एंट्री।
  • विलंबित रोक: cmdrecord stop 10 टिक विलंब चिह्नित करता है, StateGameLoop प्रति फ्रेम जाँच करता है (CommandRecordTick) यह सुनिश्चित करने के लिए कि पहले से कतारबद्ध कमांड भी कैप्चर हो गए हैं, फिर flush करता है।
  • रीप्ले निष्पादन: प्रत्येक कमांड को सर्वर कमांड पथ (DCIF_NETWORK_COMMAND) के साथ तुरंत निष्पादित किया जाता है, भले ही रीप्ले फ़ाइल का count हेडर अपडेट न हुआ हो, वास्तविक डेटा के अनुसार पढ़ा जा सकता है।

सत्यापन ​

समर्पित सर्वर E2E: pause रिकॉर्ड करें → 26 बाइट रिकॉर्ड फ़ाइल → नए मानचित्र पर रीप्ले → Game paused (manual) + Replay finished: 1 executed, 0 failed।

विशिष्ट उपयोग ​

cmdrecord start build1     # रिकॉर्डिंग शुरू करें
# ... गेम में रेलवे बिछाएं, स्टेशन बनाएं ...
cmdrecord stop             # रोकें और डिस्क पर लिखें
# मानचित्र बदलें या क्रैश रिकवरी के बाद:
cmdreplay build1           # एक क्लिक में सभी कार्यों का पुनर्निर्माण