কমান্ড রেকর্ড ও রিপ্লে (Command Record / Replay)
cmclient কমান্ড রিপ্লে পোর্ট (পঞ্চম ব্যাচ, কমিট f113acce28)। cmclient-এর কমান্ড অবজেক্ট লেয়ার পোর্ট করা হয়নি——সরাসরি jrpm-এর নিজস্ব কমান্ড সিরিয়ালাইজেশন পরিকাঠামো (DynBaseCommandContainer) ব্যবহার করে, "কমান্ড অবজেক্ট লেয়ার" পুরোপুরি বাইপাস করা হয়েছে।
কনসোল কমান্ড
cmdrecord [start [file]] # রেকর্ডিং শুরু (ডিফল্ট ফাইল cmdrecord.jrcm, ব্যক্তিগত ডিরেক্টরিতে সংরক্ষিত)
cmdrecord stop # বন্ধ (১০ টিক দেরি করে কমান্ড কিউ খালি হওয়ার পর ডিস্কে লেখে)
cmdreplay <file> # রিপ্লে: ডিসিরিয়ালাইজ করে প্রতিটি কমান্ড তাৎক্ষণিকভাবে নির্বাহ করেবাস্তবায়ন পয়েন্ট
- রেকর্ডিং হুক:
CommandRecordLogDoCommandPInternal-এর কমান্ড নির্বাহের পরে সংযুক্ত——এটি লোকাল, নেটওয়ার্ক ও রিপ্লে কমান্ডের একমাত্র প্রকৃত নির্বাহ বিন্দু, পুনরাবৃত্তি রেকর্ডিং হবে না। - সিরিয়ালাইজেশন:
cmd / tile / error_msg / payload / companyDynBaseCommandContainer::Serialiseব্যবহার করে ক্ষতিহীন সিরিয়ালাইজড; ফাইল ফরম্যাটJRCMmagic + version + count + এন্ট্রি। - বিলম্বিত বন্ধ:
cmdrecord stop১০ টিক বিলম্ব চিহ্নিত করে,StateGameLoopপ্রতি ফ্রেমে চেক করে (CommandRecordTick) নিশ্চিত করে যে ইতিমধ্যে সারিবদ্ধ কমান্ডও ক্যাপচার হয়েছে তারপর ফ্লাশ। - রিপ্লে নির্বাহ: প্রতিটি কমান্ড সার্ভার কমান্ড পাথ (
DCIF_NETWORK_COMMAND) দিয়ে তাৎক্ষণিকভাবে নির্বাহ করা হয়, রিপ্লে ফাইলের কাউন্ট হেডার আপডেট না হলেও প্রকৃত ডেটা অনুযায়ী পড়া যায়।
যাচাইকরণ
ডেডিকেটেড সার্ভার E2E: রেকর্ড pause → ২৬ বাইট রেকর্ড ফাইল → নতুন ম্যাপে রিপ্লে → Game paused (manual) + Replay finished: 1 executed, 0 failed।
সাধারণ ব্যবহার
cmdrecord start build1 # রেকর্ডিং শুরু
# ... গেমে রেল铺设, স্টেশন নির্মাণ ...
cmdrecord stop # বন্ধ ও ডিস্কে লেখা
# ম্যাপ পরিবর্তন বা ক্র্যাশ পুনরুদ্ধারের পর:
cmdreplay build1 # এক ক্লিকে সব অপারেশন পুনর্নির্মাণ