एक एआईजी में एआई गणना कौन करता है?


30

मैं एक MMO बना रहा हूं और एनपीसी जोड़ना चाहता हूं। बात यह है कि मैं मूल डिजाइन नहीं जानता। गणना, ग्राहक या सर्वर क्या करता है? मैं घटनाओं और प्रतिक्रियाओं की गणना करने वाले सर्वर को समझूंगा, लेकिन जब यह पथप्रदर्शक और स्थिति और खिलाड़ी के आंदोलन के लिए नीचे आता है, तो कौन गणना करता है?

एआई को सर्वर या क्लाइंट की गणना कौन करता है? मैं पथप्रदर्शक, स्थिति, गति और इतने पर गणना करने वाले सर्वर की कल्पना नहीं कर सकता था। कृपया मुझे यह समझने में मदद चाहिए, धन्यवाद, कुछ भी मदद करेगा।


2
अपनी शब्दावली के साथ सावधान - NPCs खिलाड़ी नहीं हैं, उदाहरण के लिए।
काइलोटन

जवाबों:


25

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

स्कैलिफ़स का बदुम्ना ( http://www.scalify.com/badumna.php ) क्लाइंट पर इसका कुछ हिस्सा ऑफ-लोड करने की कोशिश करता है कि वे क्लाइंट-साइड की गणना करेंगे और एक-दूसरे को भेजे जाएंगे; कुछ डेटा को एक अधिकृत सहकर्मी को भी भेजा जाता है, जो ग्राहकों को दिए जाने से पहले, एक समर्पित सर्वर की तरह ही मान्य होता है। मुद्दा यह है कि मल्टीप्लेयर गेम में सभी डेटा को एक आधिकारिक साथी के माध्यम से भेजा जाना चाहिए, अगर आप धोखा देना चाहते हैं। मैंने बदुम्ना को उतारा, क्योंकि आप जो चाहते थे, उसके सबसे करीब लग रहा था, लेकिन यहां तक ​​कि वह सिनेमाघरों को पकड़ने में सक्षम नहीं होगा - यह कुछ को पकड़ सकता है, लेकिन कुछ भी महत्वपूर्ण (यानी, सब कुछ, बहुत ज्यादा) सर्वर किया जाना है- पक्ष।

मैं बदुम्ना पर कुछ का विस्तार कर सकता हूं, क्योंकि यह अभी भी कुछ हो सकता है जो आपको उपयोगी लगेगा (लेकिन मैं आपसे अनुरोध करता हूं कि आप ग्राहकों पर किसी भी महत्वपूर्ण चीज पर पुनर्विचार करें, क्योंकि क्लाइंट धोखा देंगे)।

बदुम्ना डेटा संचालन के लिए एक संकर वास्तुकला प्रदान करता है। यह डेवलपर को यह तय करने में पूरा नियंत्रण प्रदान करता है कि क्या महत्वपूर्ण है (और सत्यापित किया जाना चाहिए) और क्या नहीं (और इसलिए विकेंद्रीकृत नेटवर्क द्वारा भेजा जा सकता है)।

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

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

मैंने वास्तव में बदुम्ना की खोज नहीं की है, इसलिए मैं इस मुद्दे और विशेषताओं से अनभिज्ञ हूं, लेकिन मैं इससे अनभिज्ञ हूं, लेकिन कम से कम मैंने इस पर एक सरसरी निगाह डाली है।

tl; dr: क्लाइंट को वास्तव में सिर्फ एक कीबोर्ड और माउस होना चाहिए, जो इंटरनेट तक पहुंच जाए।


9

संक्षिप्त उत्तर यह है कि एक मानक MMO के लिए, AI गणना हमेशा सर्वर द्वारा की जाती है।

कुछ खेलों में ग्राहक को एआई की भविष्यवाणी करने की कोशिश होगी, ताकि एनपीसी अधिक तेज़ी से प्रतिक्रिया दे सके, लेकिन यह सिर्फ एक भ्रम है; असली NPC हमेशा सर्वर द्वारा नियंत्रित होती है।


5

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

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

यह वास्तव में शर्म की बात है, क्योंकि एआई को क्लाइंट्स में बांटना स्केलेबिलिटी को प्रभावित कर सकता है।


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

2

आमतौर पर सर्वर को क्लाइंट से प्राप्त या प्राप्त हर डेटा की गणना या सत्यापन करना चाहिए। लेकिन यह इस बात पर निर्भर करता है कि आप क्लाइंट पर कितना भरोसा कर सकते हैं और यह गणना कितनी महत्वपूर्ण है। कभी-कभी मुख्य गणना क्लाइंट पर की जा सकती है और सर्वर परिणामी डेटा को मान्य करने के लिए एक सरल विधि का उपयोग करने में सक्षम हो सकता है।


1

अन्य उत्तरों पर निर्माण करने के लिए, "ऑफलोड और सत्यापित" रणनीति वास्तव में उपयोगी हो सकती है, उन स्थितियों में जहां मूल गणना की तुलना में सत्यापन आसान है (या जहां कभी-कभी स्पॉट चेक केवल थिएटरों को पकड़ने के लिए पर्याप्त होगा)।

उदाहरण के लिए, यदि आपके पास क्लाइंट A * pathfinding है और परिणाम सर्वर को भेजते हैं, तो सभी सर्वर को यह जांचना होगा कि a) पथ वैध है, और b) कोई छोटा रास्ता नहीं है। पथ की वैधता की जाँच करना आसान होना चाहिए, और इष्टतमता की जाँच करना शुरू करने के लिए इष्टतम पथ खोजने की तुलना में आसान हो सकता है, क्योंकि अब आपके पास उन रास्तों की लंबाई पर ऊपरी बाउंड है, जिनकी आपको जाँच करने की आवश्यकता है। (विशेष रूप से, यदि ग्राहक एक सीधी-रेखा वाला मार्ग लौटाता है, तो जाहिर है कि यह तब तक इष्टतम है जब तक यह वैध है।) ईमानदार होने के लिए, मुझे नहीं पता कि यह विशेष चाल अभ्यास में उपयोगी होगी, लेकिन मुझे कोई मौलिक बाधा नहीं दिखती है यह करने के लिए।

हालांकि, ध्यान दें कि यदि आप एनपीसी एआई को ग्राहकों को लोड करते हैं, तो एक हैक किया गया ग्राहक संभावित रूप से एनपीसी व्यवहार की भविष्यवाणी करने के लिए इसका उपयोग कर सकता है। कुछ प्रकार के खेल या स्थितियों के लिए यह एक गंभीर मुद्दा हो सकता है।


1

क्लाइंट साइड पर जटिल गैर-गेम-महत्वपूर्ण संचालन को संभालने के दौरान, सर्वर साइड पर कुछ सरल एआई रूटीन और गेम-क्रिटिकल गणना करना संभव है।

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

एक बार एनपीसी को हमले की स्थिति में स्थानांतरित कर दिया जाता है, तो ग्राहक एनीमेशन और ठीक-ठीक पथ खोज से निपट सकता है। जब एनपीसी क्लाइंट पर हमला करने के लिए पर्याप्त करीब है, तो सर्वर यह देखने के लिए गणना कर सकता है कि क्या हमला हुआ, क्या नुकसान हुआ, आदि ...

आप यह सुनिश्चित करना चाहेंगे कि कोई भी गणना जो खेल के परिणाम को वास्तव में प्रभावित करती है, सर्वर द्वारा नियंत्रित की जाती है और ग्राहक को दी जाती है, जबकि गैर-महत्वपूर्ण गणना ग्राहक द्वारा नियंत्रित की जाती है।

सबसे सरल स्थिति में आप क्लाइंट को सिंक में रख रहे होंगे जहां यह उम्मीद करता है कि सर्वर होगा, सर्वर सत्यापित करेगा, फिर ग्राहक फिर से गणना करेगा।

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