MMORPGs के बहुमत में एक संसारों की प्रणाली है जो हर X घंटे में एक बार सभी वर्णों को बचाएगा। मुझे लगता है कि इसका कारण प्रदर्शन है। तो वियोग पर एक चरित्र को बचाने की तुलना में यह बेहतर, प्रदर्शन बुद्धिमान क्यों है?
MMORPGs के बहुमत में एक संसारों की प्रणाली है जो हर X घंटे में एक बार सभी वर्णों को बचाएगा। मुझे लगता है कि इसका कारण प्रदर्शन है। तो वियोग पर एक चरित्र को बचाने की तुलना में यह बेहतर, प्रदर्शन बुद्धिमान क्यों है?
जवाबों:
यह प्रदर्शन के लिए नहीं है। यह एक असफल है। यदि दुनिया हर कुछ मिनटों को बचाती है, तो अगर सर्वर पर कुछ होता है और यह सबको बंद कर देता है, तो केवल कुछ मिनटों की प्रगति समाप्त हो जाएगी।
डिस्कनेक्ट पर सहेजने से, यदि सर्वर में कोई समस्या है, तो हर कोई अपना सबकुछ खो देगा क्योंकि उन्होंने लॉग ऑन किया था। खासतौर से लंबे प्ले सेशन पर (जैसा कि पैराग्राफ में आम है), वे डेटा की एक महत्वपूर्ण राशि खो देंगे।
वे बड़े पैमाने पर डेटा हानि के जोखिम को दूर करने के लिए थोड़ा प्रदर्शन करते हैं।
बेशक, आप ग्राहक मशीनों पर नेटवर्क ट्रैफ़िक को कम करके आसानी से प्लेयर डेटा स्टोर कर सकते हैं। यहां मुद्दा यह है कि यह हैकिंग के लिए खुला है। एक बार जब कोई व्यक्ति धोखा देने के लिए काम करता है, तो वे इसे साझा करते हैं और हर कोई इसे कर रहा है।
संपादित करें: जैसा कि @Pippipp ने बताया है, यह आइटमों को डुप्लिकेट करने की क्षमता को भी हटाता है। सेव-ऑन-डिसकनेक्ट सिस्टम के साथ यदि सर्वर क्रैश से पहले लेन-देन किया जाता है और क्रैश से पहले एक व्यक्ति लॉग आउट होता है, तो दोनों खिलाड़ी अंतिम बार जब वे लॉग आउट होते हैं, तो आइटम को हटाते हैं या उन्हें डुप्लिकेट करते हैं।
आरंभिक सिस्टम जो केवल डिस्कनेक्ट पर सहेजे जाते थे, समय-समय पर खिलाड़ी को सक्रिय रहते हुए भी बचाते थे। उन प्रणालियों में, आमतौर पर MUDs (मल्टी-यूजर डंगे), चरित्र को स्मृति में बनाए रखा जाता था जब तक कि उन्हें समय-समय पर किसी फ़ाइल में डंप नहीं किया जाता था।
इसका मतलब यह था कि अगर कोई उपयोगकर्ता "शिविर" के बिना डिस्कनेक्ट हो जाता है, तो वे आमतौर पर खुद को कई कमरों से दूर पाते हैं और पिछली बार जब वे बचते हैं, तो लूट, एक्सपी, आदि का एक गुच्छा गायब होता है। उस संबंध में, यह बहुत व्यवहार करता है कि कैसे कंसोल आरपीजी आज खेलते हैं (आपको कंसोल को बंद किए बिना अपने गेम को सहेजना होगा, या आप पिछली बार जब आप बच गए थे तब से सब कुछ खो देते हैं)।
सिस्टम ने अपने इच्छित उद्देश्य के लिए काम किया, क्योंकि वर्ण एक दूसरे के साथ बातचीत नहीं कर सकते हैं, संभवतः "मेल" प्रणाली के माध्यम से जहां वे एक दूसरे को संदेश और आइटम भेज सकते थे। आइटम खोने का मौका और प्रगति काफी महत्वपूर्ण है, लेकिन ज्यादातर मामलों में एक समय में केवल एक चरित्र को प्रभावित किया।
विश्वव्यापी विशेषता के बारे में आया क्योंकि अक्षर अंततः एक-दूसरे के साथ सीधे बातचीत करने में सक्षम थे, इसलिए सभी पात्रों को एक सुसंगत स्थिति में होना चाहिए, या आइटम दोहराव और विलोपन हो सकता था। यह MUD परिदृश्य में कोई समस्या नहीं थी, क्योंकि इस तरह से सिस्टम का दुरुपयोग करना मुश्किल था, जिसके परिणामस्वरूप आइटम या मुद्रा दोहराव था, लेकिन शुरुआती MMO MUD में ऐसा करना अविश्वसनीय रूप से आसान था। प्लेयर ए खिलाड़ी बी को एक आइटम देता है, खिलाड़ी बी को बचाता है और खिलाड़ी ए को बचाने के बिना डिस्कनेक्ट करता है। झटपट दोहराव।
वर्ल्डसएव एक प्रदर्शन लाभ नहीं है, लेकिन धोखाधड़ी को रोकने के लिए डिज़ाइन किया गया है। मुझे याद है कि उन प्रणालियों पर खेलना जहां विश्वव्यापी घटना की सचमुच घोषणा की गई थी, और अक्सर एक मिनट के लिए पूरे सिस्टम को लटका दिया जाता था, जब सर्वर अपनी सभी फाइलों को अपडेट करता था। जबकि इसने धोखाधड़ी को रोका, यह इन प्रणालियों के उपयोगकर्ताओं के लिए बहुत सुविधाजनक नहीं था।
यह हमें मामलों की वर्तमान स्थिति की ओर ले जाता है। आज, हम दुनियावी प्रकार के कार्यों का उपयोग नहीं करते हैं। हम डेटाबेस का उपयोग करते हैं। यह हमें यह सुनिश्चित करने की अनुमति देता है कि दोहराव और विलोपन को यथासंभव कम से कम किया जाए। वर्ण एक डेटाबेस में रिकॉर्ड के रूप में मौजूद हैं, और खिलाड़ियों के बीच प्रत्येक लेनदेन एक शाब्दिक डेटाबेस लेनदेन है; या तो कार्रवाई पूरी तरह से प्रतिबद्ध है या इसे वापस चालू किया जाएगा।
सिस्टम में असामान्य बगों को छोड़कर, आपको व्यक्तिगत चरित्र फ़ाइलों को सहेजने के फायदे (त्वरित बचत समय) और या तो कमियों के बिना (महत्वपूर्ण प्रगति और आइटम दोहराव खोने) के बिना विश्वस्तरीय (कोई धोखा नहीं) के लाभ मिलते हैं।
एक आधुनिक MMO डिजाइन करते समय, आप डेटाबेस में संग्रहीत कार्यविधियाँ बनाना चाहेंगे, और लेनदेन करने के लिए उन प्रक्रियाओं का उपयोग करेंगे। उदाहरण के लिए, दो खिलाड़ियों के बीच व्यापार करते समय, यह इस तरह दिख सकता है:
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 के पास अभी भी मूल आइटम हैं, जबकि प्रतिबद्ध होने के बाद, व्यापार पूरा हो गया है। दोहराव के लिए कोई अवसर नहीं है, क्योंकि वर्ण उसी समय सहेजे जाते हैं, जैसा कि डेटाबेस द्वारा गारंटीकृत है।