MMOs में सर्वर साइड में हर ऑब्जेक्ट के निर्देशांक को संग्रहीत करना


12

एक MMORPG में:

टकराव का पता लगाने के लिए सर्वर साइड में हर पेड़, बुश रॉक .. आदि के निर्देशांक को स्टोर करना विशिष्ट या संभव है?

यदि हां, तो इतनी बड़ी संख्या में निर्देशांक (डेटा संरचनाओं और इस तरह, प्रदर्शन मुद्दों से निपटने) को संग्रहीत करने के लिए क्या संभव तरीका होगा?

यदि नहीं, तो क्या इस प्रकार की टक्कर का पता पूरी तरह से क्लाइंट साइड में होता है, जिसमें सर्वर बिल्कुल भी जांच नहीं करता है?

या क्लाइंट चेक टकराव और सर्वर की जाँच के साथ एक बीच का मैदान है? यदि हां, तो सर्वर में निर्देशांक रखे बिना भी सर्वर उसी को कैसे सत्यापित करेगा?


2
मुझे इस बारे में पर्याप्त जानकारी नहीं है कि एक अच्छा जवाब देना है, लेकिन यदि आप केवल क्लाइंट की तरफ से टकराव का पता लगाते हैं, तो चीटर्स को हर चीज के माध्यम से क्लिप करने, या उनसे दूर रहने वाले पावरअप लेने का एक तरीका मिल जाएगा।
पीथोर

2
-1 "प्रश्न कोई शोध प्रयास नहीं दिखाता है"।
वेलनकोर्ट


वास्तव में, शायद कोई डुप्लिकेट नहीं है, मैंने स्पेसियल विभाजन योजनाओं और स्थानिक डेटा संरचनाओं के बारे में सीखा जो अन्य प्रश्न नहीं था
साजिथ दिलशान जमाल

जवाबों:


15

व्यवहार्यता से स्वतंत्र (हाँ, पैमाने पर निर्भर करता है) अक्सर बेहतर या आसान तरीके होते हैं।

उदाहरण के लिए, आपके विशिष्ट MMO में, सर्वर को वास्तव में AI और खिलाड़ी पाथफाइंडिंग द्वारा उपयोग किए जाने वाले मोटे नेविगेशन मानचित्र के बारे में जानने की आवश्यकता होती है। एक पेड़ के स्थान को संचय करने के बजाय, आप इसके बजाय पेड़ के स्थान पर नाव में छेद काट सकते हैं। इसी तरह किसी भी अन्य बड़ी बाधाओं के लिए।

यहां तक ​​कि ऐसे गेम जिनमें गहराई से टकराव का पता लगाने की आवश्यकता होती है, आप अक्सर इसे सर्वर- और क्लाइंट-साइड डिटेक्शन में तोड़ सकते हैं। सर्वर केवल मोटे रास्ते के साथ ही चिंता कर सकता है जबकि ग्राहक अधिक एनीमेशन-संवेदनशील टक्कर का पता लगाता है। उदाहरण के लिए, एक घायल खिलाड़ी दुश्मनों से छिपने की जगह खोजने के लिए एक बड़ी चट्टान के साथ रेंगने की कोशिश करता है। सर्वर निर्धारित करता है कि एक खिलाड़ी के चट्टान के किनारे के साथ चल सकता (सर्वर पता नहीं है कि वहाँ है है , जबकि ग्राहक जानता है कि रॉक मौजूद है एक चट्टान, वहाँ एक रास्ता खिलाड़ी एक unpathable क्षेत्र के बगल में ले जा सकते हैं है सिर्फ इतना है कि) और चरित्र का एक एनीमेशन निभाता है जो रॉक के खिलाफ ही चलता है। ध्यान दें कि ग्राहक गतिमान नहीं हैइस मामले में किसी भी तरह से चरित्र या प्रभावकारी गेमप्ले; यह सिर्फ एक एनीमेशन के साथ पास की वस्तुओं पर प्रतिक्रिया कर रहा है।

आप निश्चित रूप से सर्वर पर बड़ी संख्या में ऑब्जेक्ट स्टोर कर सकते हैं। यह किसी भी खुली दुनिया के खेल से अलग नहीं है। एक अच्छी स्थानिक विभाजन योजना का उपयोग करें और अपनी वस्तुओं के मेमोरी फुटप्रिंट को जितना हो सके उतना हल्का रखें। ध्यान दें कि हमारे पास हमारे प्रमुखों में "बड़ी संख्या" के विभिन्न संस्करण हो सकते हैं: यदि आपका मतलब है कि आप खेल में हर छोटी कंकड़ या चट्टानी टक्कर को एक अलग वस्तु के रूप में संग्रहित करना चाहते हैं, तो यह केवल मूर्खतापूर्ण है, यहां तक ​​कि एकल खिलाड़ी खेल के लिए भी । :)


7

हाँ - यह संभव है। MMOs अक्सर खेल की दुनिया को कई क्षेत्रों में विभाजित करते हैं, क्योंकि यह काम को आसान बनाता है, लेकिन आप अभी भी इसे 1 बड़े क्षेत्र के साथ कर सकते हैं - आपको बस एक अच्छी स्थानिक विभाजन योजना का उपयोग करने की आवश्यकता है।

क्योंकि MMOs में अधिकांश ऑब्जेक्ट नहीं चलते हैं, आप एक प्रीप्रोसेसिंग पास भी कर सकते हैं जहाँ टकराव की जाँच करने के लिए वस्तुओं का उपयोग किया जाता है।

जब तक आप इंस्टैंसिंग का उपयोग करते हैं, तब तक मेमोरी फ़ुटप्रिंट यहां बहुत बड़ा मुद्दा नहीं है। प्रति वस्तु तैरती एक जोड़ी चीजों की भव्य योजना में कुछ भी नहीं है। एक मामूली पीसी में आजकल 4 गीगाबाइट होंगे, जबकि एक स्थिति को स्टोर करने पर सिर्फ 3 फ्लोट्स (या 3 डबल्स) होते हैं - जो आसानी से खेल में कई मिलियन संग्रहीत ऑब्जेक्ट्स की अनुमति देगा।

प्रत्येक खिलाड़ी के लिए इन्वेंट्री जैसी चीजें संग्रहीत करना निस्संदेह अधिक डेटा लेगा - हालांकि यह आसानी से डिस्क में कैश्ड हो सकता है और केवल तभी लोड किया जा सकता है जब कोई खिलाड़ी लॉग इन करता है।

आप क्लाइंट के साथ-साथ सर्वर पर भी टकराव की जाँच करना चाहते हैं, क्योंकि यह क्लाइंट को पर्यावरण के प्रति अधिक जिम्मेदारी से प्रतिक्रिया करने की अनुमति देगा। यदि कोई खिलाड़ी एक दीवार में चलता है, तो आप चाहते हैं कि वे तुरंत आगे बढ़ना बंद कर दें - जब सर्वर प्रतिक्रिया देता है तो आधे सेकंड के बाद नहीं।

आप केवल आधिकारिक चीजों के लिए भी सर्वर का उपयोग करना चाहते हैं। उदाहरण के लिए, आप क्लाइंट पर केवल पाथफाइंडिंग का प्रदर्शन करेंगे, क्योंकि आप कम कुशल रास्ता अपनाकर धोखा नहीं दे सकते हैं!


स्थानिक विभाजनकारी योजनाओं के बारे में टिप के लिए धन्यवाद, मैंने कुछ नया सीखा
सजीत दिलशान जमाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.