टक्कर का पता लगाने के लिए सर्वर-साइड किया जाना चाहिए या क्लाइंट / सर्वर के बीच सहकारी रूप से किया जाना चाहिए?


24

मैं एक ऑनलाइन गेम पर काम कर रहा हूं जिसमें बहुत भारी टक्कर का पता लगाने की प्रक्रिया होगी। प्लेयर मॉडल अन्य खिलाड़ियों, मॉब, स्ट्रक्चर्स, इलाक़े और ठोस ऑब्जेक्ट्स से टकराएंगे जो केवल सर्वर साइड में मौजूद होते हैं (क्लाइंट क्लाइंट फ़ाइलों में संग्रहीत नहीं)।

सुरक्षा उद्देश्यों के लिए, क्या मुझे सभी टकराव का पता लगाने वाले सर्वर-साइड करना चाहिए? या मुझे पता होना चाहिए कि क्लाइंट का पता लगाना चाहिए और सर्वर का किसी भी तरह से पालन करना चाहिए? मुझे ऐसा लगता है कि यह सर्वर द्वारा स्वयं के लिए बहुत अधिक होगा (मैं एक सर्वर पर सैकड़ों खिलाड़ियों के लिए इंजन डिजाइन कर रहा हूं)।

क्या किसी को पता है कि मुख्यधारा के MMO कैसे करते हैं? मुझे पता है कि अभी लगभग सभी MMOs भौतिकी हैक के लिए अतिसंवेदनशील हैं और आमतौर पर हैक का पता लगाकर और लोगों पर प्रतिबंध लगाकर उनसे निपटते हैं। मैं इसके बजाय हैक्स कम से कम भौतिकी घटक के लिए काम नहीं करता।

जवाबों:


21

ऐसा लगता है कि स्पष्ट उत्तर आपके अधिकांश ग्राहक-पक्ष (चिकनाई के लिए) का पता लगाने के लिए है, और फिर आप सर्वर को क्या कहते हैं, अगर आपका ग्राहक बहुत दूर है, तो आप इसे प्रक्षेपित करते हैं। सर्वर क्लाइंट की तुलना में कम लगातार दर पर टिक करेगा (जैसे, 10 हर्ट्ज), और शायद कुछ बुनियादी होने की आवश्यकता होगी "क्या यह खिलाड़ी उस स्थान पर पहुंच सकता है जहां वह कहता है कि वह वर्तमान में अपने अंतिम ज्ञात स्थान" कोड से है, जिसका अर्थ है नौसेना जाल प्रकार के समाधान और pathfinding के कुछ प्रकार।

यह आपकी आवश्यकताओं के आधार पर निषेधात्मक रूप से धीमा हो सकता है। उदाहरण के लिए, आप सर्वर पर खिलाड़ी-खिलाड़ी के टकराव की परवाह नहीं करने के लिए एक डिज़ाइन निर्णय ले सकते हैं। अधिकांश खेल, जहाँ तक मुझे पता है, क्लाइंट पर भी इसका ध्यान नहीं है। यह वास्तव में इस बात पर निर्भर करता है कि आपकी जरूरतें क्या हैं।

लेकिन अंगूठे का नियम यह है कि आपको कभी भी ग्राहक पर भरोसा नहीं करना चाहिए। यदि यह गेमप्ले को प्रभावित करता है, तो आपको कम से कम इसे सर्वर पर सत्यापित करना होगा।


24

तो, यहाँ कुछ जवाब।

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

  • सर्वर-साइड टक्कर सुरक्षा के दृष्टिकोण से आदर्श है। आपके ग्राहकों को "डंबल टर्मिनलों" के जितना करीब मिलता है, आपका खेल उतना ही कम शोषक होता है। एक कारण यह है कि कोई भी पाठ-आधारित MUD नहीं बजाता है, उसे वाल्हाक्स या स्पीडहक्स के बारे में चिंता करनी पड़ती है - यह इसलिए है क्योंकि ग्राहक उल्लेख के लायक कुछ भी नहीं कर रहा है।

  • दोनों करना लगभग हर मामले में "आदर्श" है। ग्राहकों को उनकी बात करने दें, फिर यह सुनिश्चित करने के लिए कि लोग धोखा नहीं दे रहे हैं, सर्वर पर डबलचेक करें। कमियां जटिलता, तुल्यकालन (वास्तव में क्या कर रहे हैं कर आप दो असहमत है), और सरासर सर्वर CPU उपयोग।

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

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


3

Warcraft की दुनिया खिलाड़ियों / भीड़ के बीच टकराव का पता लगाने नहीं करता है। इस निर्णय के पीछे तकनीकी कारण हो सकते हैं या नहीं भी हो सकते हैं, लेकिन वास्तव में, यह एक तकनीकी निर्णय की तुलना में गेम डिज़ाइन निर्णय का अधिक होना है:

कल्पना कीजिए कि यह खिलाड़ी-बनाम-खिलाड़ी स्थितियों में कितना शोषक हो सकता है। या अगर बैंक (नीलामी घर / मेलबॉक्स) का उपयोग करना कितना कठिन होगा यदि अन्य (अक्सर बेकार) खिलाड़ियों ने आपके आंदोलन को अवरुद्ध कर दिया!

क्लाइंट बनाम सर्वर आधारित टक्कर का पता लगाने के लिए - वास्तव में, जब तक कि गति बहुत धीमी नहीं होती है, यह मुख्य रूप से क्लाइंट-साइड होना है, इसलिए यह प्रत्येक क्लाइंट के लिए सही लगता है। लैगी / विलंबित टकराव की प्रतिक्रिया, और / या 'अदृश्य' वस्तुओं से टकराना काफी अप्रिय होगा।


1
हालाँकि यह सवाल नहीं है कि खिलाड़ी बनाम डकैत / खिलाड़ी टक्कर खराब गेम डिज़ाइन है या नहीं, मैं सुझाव दूंगा कि डार्कफॉल ऑनलाइन जैसे गेम जहाँ सब कुछ ठोस हो। यह गेमप्ले में एक नया आयाम जोड़ता है और आपको गेम के साथ बहुत ही दिलचस्प चीजें करने की अनुमति देता है। मैं अपने खेल में बैंकों जैसी चीजों को अवरुद्ध करने वाले खिलाड़ियों के बारे में चिंता नहीं करूंगा क्योंकि हमेशा एक छोटा अंतराल होगा जहां खिलाड़ी ऑब्जेक्ट को खोलने के लिए देख सकते हैं।
बारकटएक्स 2

आप खिलाड़ियों को किसी भी चीज पर हमला कर सकते हैं और वे जिस चीज पर हमला नहीं कर सकते, उसे वे बस रोक सकते हैं। उदाहरण के लिए, खिलाड़ी मॉब से नहीं चल पाएंगे क्योंकि वे मॉब पर हमला कर सकते हैं। वे भी खिलाड़ियों के माध्यम से चलने में सक्षम नहीं होंगे, जबकि वे पीवीपी के लिए ध्वजांकित होते हैं क्योंकि वे पीवीपी को ध्वजांकित करते हैं। एक खिलाड़ी जो पीवीपी को झंडी नहीं देता है, वह किसी भी खिलाड़ी के माध्यम से चल सकता है, यहां तक ​​कि उन लोगों को भी नहीं छोड़ा गया है, जो पीवीपी को चिह्नित नहीं करते हैं, क्योंकि वे उन खिलाड़ियों पर हमला नहीं कर सकते हैं।
अजराल

2

यदि आप हैक के बारे में चिंतित हैं और इसका खेल खेल में बड़ा प्रभाव है तो इसका उत्तर हां है।

मेरे ब्राउज़र आधारित गेम में जो "सिटी बिल्डिंग" तरह का गेम है, मुझे हैक्स के बारे में परेशान नहीं किया जाता है क्योंकि जब मैं सहेजे गए गेम स्टेट को लेआउट करता हूं तो क्लाइंट इंजन फेल नहीं होता है।

हालांकि यह संभावित रूप से गेमप्ले का दुरुपयोग कर सकता है क्योंकि खिलाड़ी को अधिक घरों / भवनों के निर्माण के लिए खेल के क्षेत्र का विस्तार करने के लिए खेल के सिक्के (या प्रीमियम नकद) खर्च करने की आवश्यकता होती है। इसलिए, मैं नए जोड़े गए भवन से कब्जा कर ली गई टाइलों की एक साधारण जांच को फिर से लागू करने जा रहा हूं कि कितनी मुफ्त टाइलें उपलब्ध हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.