ঘন ঘন পরিবর্তিত গেমের জন্য আপনি কীভাবে একটি রেকর্ড / রিপ্লে সিস্টেম ডিজাইন করেন?


10

আমি একটি ফ্রি এমএমওআরপিজিতে কাজ করছি এবং আমার একটি সমস্যা আছে।

আমি (অন্যান্য লোকের সাথে) গেমটির জন্য একটি ভিডিও রেকর্ডিং সিস্টেম বিকাশ করছি। ধারণাটি মূলত: আমরা পাঠানো ও প্রাপ্ত সমস্ত প্যাকেজ টাইমস্ট্যাম্পগুলি সহ ক্লায়েন্টের কাছ থেকে কিছু স্থানীয় ডেটা রেকর্ড করি এবং তারপরে এটি একটি ফাইলে ফেলে ফেলি। ভিডিওটি প্লে করার জন্য, আমরা কেবলমাত্র ফাইলটিতে থাকা সমস্ত কিছু অনুকরণ করি। আমাদের কাছে এফএফএমপিএগ সহ এভিআইতে রফতানি করার একটি বিকল্প রয়েছে।

সমস্যাটি হ'ল: আমরা যখন গেমের সংস্করণগুলির মধ্যে পরিবর্তন করি তখন ভিডিওটির পিছনে সামঞ্জস্যতা (কমান্ডগুলি যুক্ত / সরানো, ফাংশন পরিবর্তন ইত্যাদি) বজায় রাখা শক্ত। এই সমস্যাটি হ্যান্ডেল করার কি কোনও ভাল উপায় আছে? বিভিন্ন খেলোয়াড়ের একগুচ্ছ হওয়ার পরিবর্তে এবং ভিডিও ফাইলের প্রতিটি সংস্করণের জন্য সঠিক একটিটি বেছে নিন?

অন্যান্য গেমস কীভাবে এই পরিস্থিতিটি পরিচালনা করে তা জেনে রাখা সহায়ক হবে।

সাহায্যের জন্য ধন্যবাদ, আমার ইংরেজি জন্য দুঃখিত।


গুগলিং / গবেষণার জন্য যেমন আরও কিছু খাদ্য: আপনি যেভাবে এটি করছেন ঠিক সেভাবেই সার্ভার প্যাকেজগুলি ক্যাপচার করে আইডি-র কোয়েক গেমস ডেমোস রেকর্ড করেছিল। যতদূর আমি অবগত যে তারা কখনই সামঞ্জস্যের সমস্যাগুলি সমাধান করেনি।
মাইকেল স্টাম

আমি এই প্রশ্নের শিরোনাম পরিবর্তন করেছি- এটি এমএমওগুলি সম্পর্কে সত্যই নয়, কেবলমাত্র এমএমওগুলিই প্রায়শই পরিবর্তিত গেমগুলি বাদে।

উত্তর:


8

আমাদের মৌলিক নিয়মটি কোনও বিদ্যমান প্যাকেটের ধরণটি কখনও পরিবর্তন না করা change হয় সমস্ত একটি বিদ্যমান বিদ্যমান বা একটি নতুন কমান্ড শেষে যুক্ত করা হয়। এটি দু'জনের পক্ষে একে অপরের কাজের প্রতিবন্ধকতা সৃষ্টি করার সম্ভাবনাও অনেক কম করে।


এই গেমটিতে এটি ঘটে .. প্যাকেটগুলি যুক্ত করা হয়, সরানো হয়, সরানো হয় (উদাহরণস্বরূপ, কিছু সময় আগে, আমরা জিএম-কমান্ড সম্পর্কিত সমস্ত প্যাকেটগুলিকে একটি "বর্ধিত প্যাকেটে" স্থানান্তরিত করার সিদ্ধান্ত নিয়েছি, সম্ভবত যখন আবার লিখি তখন গিল্ডস সিস্টেম .. কমান্ড / ফাংশন সম্পাদনা (এর কার্যকারিতা পরিবর্তন করা) এর সম্ভাবনা কম, তবে আপনি এটি বলবেন না যে এখন থেকে আমাদের কোনও প্যাকেজ অপসারণ করা উচিত নয়, কমান্ডগুলি মুছে ফেলা উচিত যা তাদের কেবল অপ্রয়োগযোগ্য সার্ভারের দিক থেকে দেওয়া উচিত? ধন্যবাদ আপনার উত্তরের জন্য!
মার্কো

1
হ্যাঁ, হ্রাস করুন এবং তাদের সেখানে রেখে দিন। শেষ পর্যন্ত পুরানো জিনিসগুলি সরানো যেতে পারে, তবে এটি সাধারণত এক বা দুই বছর পরে।
কোডরেঞ্জার

1
এছাড়াও, কিছু অতিরিক্ত পরিকল্পনা সাহায্য করবে। আপনি এখন আপনার প্যাকেটগুলি আরও ভাল পরিকল্পনা করবেন, ভবিষ্যতে আপনার আরও কম পরিবর্তন আনতে হবে।
কাইলোটন

সমস্যাটি হ'ল গেমটি সর্বদা পরিবর্তিত হয়। আমরা প্রায় প্রতি মাসে একটি নতুন প্যাকেট যুক্ত করি (আমরা নতুন বৈশিষ্ট্য যুক্ত করি)। এবং তবুও, আমাদের পুরাতন প্যাকেটগুলির পুনর্লিখনের বৈশিষ্ট্যগুলিতে অনেকগুলি পরিবর্তন করতে হবে এবং তাই .. তবে আমি অনুমান করি যে আমরা সেখানে পদ্ধতিগুলি রেখে দিতে পারি এবং সেগুলি সরাতে এক বছর অপেক্ষা করতে পারি।
মার্কো

3
আরও জেনেরিক প্যাকেট ধরণের ব্যবহার আপনাকে এখানে অনেক সাহায্য করবে। আপনার প্রয়োগ করা প্রতিটি নতুন বৈশিষ্ট্যের জন্য আপনাকে নতুন বার্তা যুক্ত করার দরকার নেই।
কাইলোটন

5

এটি অবিশ্বাস্য নয়, বিশেষত একটি পিসিতে, যে তারা কেবল গেমপ্লে কোডটি সংস্করণ করে এবং যখন তারা এমন কোনও পরিবর্তন করে যা পুনরায় খেলতে সিস্টেমকে প্রভাবিত করে তখন সংস্করণটিকে টুকরো টুকরো করে। যদি রিপ্লে ফাইলটি গেমপ্লে কোডের সংস্করণ দিয়ে ট্যাগ করা থাকে তবে এটি তৈরি করা হয়েছিল এবং ক্লায়েন্টটির এখনও সেই সংস্করণটিতে অ্যাক্সেস রয়েছে যে এটি ঠিকঠাক কাজ করবে।


এটি আমি বাস্তবে এটি কীভাবে দেখেছি, গেম লগের সাথে সংস্করণ নম্বরটি সংরক্ষণ করি। তারপরে অবশ্যই আপনার পূর্ববর্তী লগগুলি পুনরায় খেলতে পূর্ববর্তী সফ্টওয়্যার সংস্করণগুলিও রাখতে হবে, উদাহরণস্বরূপ একটি উত্স কোড সংগ্রহস্থলগুলিতে, তবে আপনার সম্ভবত এটি করা উচিত।
ইয়ান শ্রায়বার

আপনার উত্তরের জন্য ধন্যবাদ, গেমটি নিখরচায় (জিপিএল লাইসেন্সবিহীন), যাতে কেউ পুরানো গেমের সংস্করণগুলিতে অ্যাক্সেস করতে পারে এবং ক্লায়েন্টকে সংকলন করতে পারে যাতে এর সমস্ত বিভিন্ন সংস্করণ থাকতে সমস্যা হয় না। এটি খুব ব্যবহৃত হয়, সমস্ত বিকল্প সার্ভারগুলি লেটস সংস্করণ ব্যবহার করে না, এমন সার্ভারগুলি রয়েছে যা ২০০৪ থেকে সংস্করণগুলি চালায় ..
মার্কো

@ মার্কো: আমার সন্দেহ হয় যে এসসি 2 কীভাবে কাজ করে তা হ'ল এটি প্রায় সমস্ত কোড একটি ডিএলএলে রাখে। যখন এটি একটি রিপ্লে লোড করে, এটি সংস্করণটি পরীক্ষা করে এবং সেই সংস্করণটির জন্য ডিএলএল লোড করে এবং চালায়। এটি বেশ খানিকটা জটিল, তবে ব্যবহারকারীর কেবল একটি ইনস্টল প্রয়োজন, এবং একটি এক্সই সমস্ত পুরানো রিপ্লে চালাতে পারে।
মাকিং হাঁস

1

এটি মোকাবেলার একটি উপায় "গেমসের নায়কদের নতুনত্ব" নামক একটি গেমের ধারায়। (যা প্রতি +/- 2 সপ্তাহের মধ্যে পরিবর্তন হয়) আমি যা বলতে পারি সেগুলি থেকে:

  1. গেম এবং পুনর্নির্মাণের জন্য ডিফ প্যাচিং ব্যবহার করুন।
  2. সমস্ত রিপ্লে ক্লাউডে সঞ্চিত। শেষ পর্যন্ত তাদের মেয়াদ শেষ হয়ে যায়।
  3. ব্যবহারকারী যদি কোনও পুরানো ডাউনলোড করা রিপ্লে দেখতে চান তবে তাদের প্রথমে "তুলনামূলক" বোতামটি ব্যবহার করা দরকার।
  4. দেখে মনে হচ্ছে এটি হয় সর্বশেষতম সংস্করণে দূরবর্তী থেকে পৃথক হয়; বা ইভেন্টে যে রিপ্লে আর সঞ্চয় করা হয় না, এটিকে আপলোড করে এবং তারপরে দূরবর্তীটি পৃথক হয়।

কারণ আমি এস 2 তে কাজ করি না আমি স্পষ্টভাবে বলতে পারি না এটি অবশ্যই কাজ করে। তবে আমি রিপ্লেয়ের বয়সের সাথে সম্পর্কিত একটি চিহ্নিত ডাউনলোড আকারের প্রবণতা লক্ষ্য করেছি।

হয় যেটি হয়, বা তারা পুনরায় প্লেতে সত্তা প্যাচগুলি যুক্ত করে (উদাহরণস্বরূপ স্পেলের এক্স এর জেড এফেক্টের পরিবর্তে ওয়াই এফেক্ট থাকে)। যদি প্যাকেট সম্পর্কিত তথ্য সত্তা কনফিগারেশনেও সংরক্ষণ করা থাকে তবে এই সত্তা হট-প্যাচিং আপনাকে পুরানো প্যাকেটগুলিও বুঝতে দেয়।

আমি অবশ্যই ক্লায়েন্টের উপর historicalতিহাসিক আচরণ সঞ্চয় করব না কারণ এটি খুব দ্রুত প্রচুর আকার ধারণ করতে পারে। বিশেষত যখন ক্লায়েন্টটি উদাহরণস্বরূপ 10.1.0 থেকে 10.2.0 থেকে আপডেট হচ্ছে (তাদের চূড়ান্ত প্যাচের পরিবর্তে দুটি সংস্করণগুলির মধ্যে প্রতিটি প্যাচ ডাউনলোড করতে হবে)।

গুগল প্রোটোবুফ সিরিয়ালাইজেশন স্তর হিসাবে একটি ভাল ধারণা কারণ এটি নকশার মাধ্যমে এ জাতীয় স্টাফ সমর্থন করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.