বেশিরভাগ এমএমওআরপিজিএসের একটি ওয়ার্ল্ডস্যাভ সিস্টেম রয়েছে যা প্রতি X ঘন্টার মধ্যে একবারে সমস্ত অক্ষর সংরক্ষণ করবে। আমি অনুমান করি কারণটি পারফরম্যান্স। তাহলে সংযোগ বিচ্ছিন্নভাবে একটি চরিত্র সংরক্ষণের চেয়ে এটি আরও ভাল, পারফরম্যান্স বুদ্ধিমান কেন?
বেশিরভাগ এমএমওআরপিজিএসের একটি ওয়ার্ল্ডস্যাভ সিস্টেম রয়েছে যা প্রতি X ঘন্টার মধ্যে একবারে সমস্ত অক্ষর সংরক্ষণ করবে। আমি অনুমান করি কারণটি পারফরম্যান্স। তাহলে সংযোগ বিচ্ছিন্নভাবে একটি চরিত্র সংরক্ষণের চেয়ে এটি আরও ভাল, পারফরম্যান্স বুদ্ধিমান কেন?
উত্তর:
এটি পারফরম্যান্সের জন্য নয়। এটি একটি ব্যর্থতা বিশ্ব যদি প্রতি কয়েক মিনিটে সঞ্চয় করে, তবে সার্ভারের সাথে যদি কিছু ঘটে থাকে এবং সবাই বন্ধ হয়ে যায় তবে কয়েক মিনিটের অগ্রগতি হারাবে।
সংযোগ বিচ্ছিন্ন করে সংরক্ষণ করে, সার্ভারে যদি সমস্যা হয় তবে লগ-ইন করার পরে প্রত্যেকে যা কিছু করেছে তা হারাবে। বিশেষত দীর্ঘ প্লে সেশনের ক্ষেত্রে (যেমন এমএমওগুলিতে প্রচলিত), তারা উল্লেখযোগ্য পরিমাণে ডেটা হারাবেন।
তারা ডেটা লোকসানের ঝুঁকি অপসারণ করতে সামান্য পারফরম্যান্স ত্যাগ করে।
অবশ্যই, আপনি সহজেই ক্লায়েন্ট মেশিনে প্লেয়ার ডেটা সঞ্চয় করতে পারবেন, নেটওয়ার্ক ট্র্যাফিক হ্রাস করতে। এখানে সমস্যাটি হ্যাকিংয়ের জন্য উন্মুক্ত। একবার কোনও ব্যক্তি কীভাবে প্রতারণা করতে পারে তা নিয়ে কাজ করার পরে তারা এটিকে ভাগ করে দেয় এবং প্রত্যেকে এটি করে।
সম্পাদনা: @ ফিলিপিস যেমন উল্লেখ করেছে, এটি আইটেমগুলিকে নকল করার ক্ষমতাও সরিয়ে দেয়। কোনও সার্ভার ক্রাশের আগে লেনদেন হয়ে গেলে এবং কোনও ব্যক্তি ক্র্যাশের আগে লগ আউট হওয়ার পরে, সেভ-অন-সংযোগ বিচ্ছিন্ন সিস্টেমের সাহায্যে উভয় খেলোয়াড় আইটেমগুলি মোছা বা ডুপ্লিকেট করে শেষবার লগ-আউট করে ফিরে আসে।
প্রারম্ভিক সিস্টেমগুলি যা কেবল সংযোগ বিচ্ছিন্নভাবে সংরক্ষণ করে সেগুলি প্লেয়ার সক্রিয় থাকাকালীন সময়ে পর্যায়ক্রমে সংরক্ষণও করত। এই সিস্টেমে সাধারণত MUDs (মাল্টি-ইউজার ডুনজিওনস), অক্ষরগুলিকে পর্যায়ক্রমে কোনও ফাইলে ডাম্প করা না হওয়া অবধি স্মৃতিতে রক্ষণ করা হয়।
এর অর্থ হ'ল কোনও ব্যবহারকারী যদি "শিবির" ছাড়াই সংযোগ বিচ্ছিন্ন হয়ে থাকেন তবে তারা সাধারণত বেশ কয়েকটি কক্ষ দূরে খুঁজে পেয়েছিলেন এবং শেষ বারের সময় থেকে সেগুলি সংরক্ষণ করে একগুচ্ছ লুট, এক্সপি ইত্যাদি অনুপস্থিত ছিল। এই শ্রদ্ধায়, এটি অনেকটা আচরণ করেছিল যেমন আজ আরপিজি কীভাবে খেলছে (আপনার কনসোলটি বন্ধ না করেই আপনার খেলা বাঁচাতে হবে, বা শেষ বার আপনি যখন সংরক্ষণ করেছিলেন তখন থেকে আপনি সবকিছু হারাবেন)।
সিস্টেমটি তার উদ্দেশ্যযুক্ত উদ্দেশ্যে কাজ করেছিল, কারণ অক্ষরগুলি একে অপরের সাথে যোগাযোগ করতে পারে না, সম্ভবত "মেল" সিস্টেমের মাধ্যমে যেখানে তারা একে অপরকে বার্তা এবং আইটেম প্রেরণ করতে পারে। আইটেমগুলি হারাতে এবং অগ্রগতি হওয়ার সুযোগটি বেশ তাৎপর্যপূর্ণ ছিল, তবে বেশিরভাগ ক্ষেত্রে এক সময় কেবল একটি চরিত্রকে প্রভাবিত করে।
ওয়ার্ল্ডস্যাভ বৈশিষ্ট্যটি এসেছে কারণ চরিত্রগুলি অবশেষে একে অপরের সাথে সরাসরি ইন্টারঅ্যাক্ট করতে সক্ষম হয়েছিল, সুতরাং যে সমস্ত চরিত্র বাজানো হয়েছে তার সবগুলিই একটি সামঞ্জস্যপূর্ণ অবস্থায় থাকতে হয়েছিল, বা আইটেমের সদৃশতা এবং মোছা ঘটতে পারে। এটি এমইউডি দৃশ্যে কোনও সমস্যা ছিল না, কারণ আইটেম বা মুদ্রার সদৃশতার ফলে সিস্টেমটিকে এমনভাবে ব্যবহার করা কঠিন ছিল, তবে প্রথমদিকে এমএমও এমইউডিতে এটি করা অবিশ্বাস্যরকম সহজ ছিল। প্লেয়ার এ প্লেয়ার বি কে একটি আইটেম দেয়, প্লেয়ার বি সংরক্ষণ করে এবং প্লেয়ার একটি সংরক্ষণ না করে সংযোগ বিচ্ছিন্ন করে। তাত্ক্ষণিক সদৃশ।
Worldsave হয় না একটি কার্যকারিতা লাভ কিন্তু প্রতারণার প্রতিরোধ পরিকল্পিত। আমি এমন সিস্টেমে খেলার কথা মনে করি যেখানে ওয়ার্ল্ডস্যাভ ইভেন্টটি আক্ষরিকভাবে আগেই ঘোষণা করা হয়েছিল এবং প্রায়শই পুরো সিস্টেমটি এক মিনিটের জন্য স্তব্ধ করে দেয় যখন সার্ভার তার সমস্ত ফাইল আপডেট করে। এটি প্রতারণা ঠেকানোর সময়, এই সিস্টেমগুলির ব্যবহারকারীদের পক্ষে এটি খুব সুবিধাজনক ছিল না।
এটি আমাদের বর্তমান অবস্থার দিকে নিয়ে যায়। আজ, আমরা ওয়ার্ল্ডসভে টাইপ ফাংশন ব্যবহার করি না। আমরা ডাটাবেস ব্যবহার করি। এটি আমাদের নিশ্চিত করতে দেয় যে নকলকরণ এবং মুছে ফেলা যতটা সম্ভব কমিয়ে আনা হয়েছে। অক্ষরগুলি একটি ডাটাবেসে রেকর্ড হিসাবে উপস্থিত থাকে এবং খেলোয়াড়দের মধ্যে প্রতিটি লেনদেন আক্ষরিক ডাটাবেস লেনদেন হয়; হয় কর্মটি পুরোপুরি প্রতিশ্রুতিবদ্ধ বা এটি আবার ঘুরিয়ে দেওয়া হবে।
সিস্টেমে অস্বাভাবিক ত্রুটিগুলি বাদ দিয়ে আপনি স্বতন্ত্র চরিত্রের ফাইলগুলি সংরক্ষণের (দ্রুত সাশ্রয় করার সময়) এবং ওয়ার্ল্ডস্যাভস (কোনও প্রতারণা নয়) এর সুবিধাগুলি পাবেন, কোনওটির অপূর্ণতা ছাড়াই (উল্লেখযোগ্য অগ্রগতি এবং আইটেমের নকল)।
একটি আধুনিক এমএমও ডিজাইন করার সময়, আপনি একটি ডাটাবেসে সঞ্চিত পদ্ধতি তৈরি করতে এবং লেনদেন সম্পাদন করতে সেই পদ্ধতিগুলি ব্যবহার করতে চান। উদাহরণস্বরূপ, দুটি খেলোয়াড়ের মধ্যে বাণিজ্য করার সময় এটি দেখতে এটির মতো হতে পারে:
start transaction;
insert into inventory (playerid, itemid) values (111, 222);
delete from inventory where playerid=111 and itemid=444;
insert into inventory (playerid, itemid) values (333, 444);
delete from inventory where playerid=333 and itemid=222;
commit;
(দ্রষ্টব্য: এই এসকিউএল, ব্যবহারিক উপায়ে লেখা হয়নি এবং এটি কেবল উদাহরণ হিসাবে বোঝানো হয়েছে)।
এইভাবে, যদি প্রতিশ্রুতি দেওয়ার আগে কোনও ক্র্যাশ হয়, সিস্টেমটি এমন অবস্থায় ফিরে আসে যেখানে প্লেয়ার 111 এবং প্লেয়ার 333 এর মধ্যে এখনও মূল আইটেম থাকে, প্রতিশ্রুতির পরে, বাণিজ্য শেষ হয়। সদৃশ হওয়ার কোনও সুযোগ নেই কারণ ডাটাবেস দ্বারা গ্যারান্টিযুক্ত অক্ষরগুলি একই সময়ে সংরক্ষণ করা হয়।