MMO खोज यांत्रिकी को लागू करने के लिए युक्तियाँ?


14

सूचीबद्ध आवश्यकताओं के नीचे दिए गए खोज यांत्रिकी को लागू करने के लिए आप कौन से उपकरण, पैटर्न या सर्वोत्तम प्रथाओं की सिफारिश करेंगे?

मैं सॉफ्टवेयर आर्किटेक्चर (आप कितना सामान्य होना चाहिए) के बारे में बात कर रहा हूं और ऑब्जेक्ट वायरिंग, इवेंट सब्सक्रिप्शन और स्थितियों का प्रतिनिधित्व करने के लिए विकल्प। आपके द्वारा सफलतापूर्वक उपयोग किए गए उपकरणों / पुस्तकालयों का उल्लेख करना स्वागत योग्य है। संपादित करें: यदि आप स्क्रिप्टिंग का उपयोग कर रहे हैं, तो आप किस सेटअप की सलाह देते हैं?

आवश्यकताएँ:

  • सरल 2 डी विजिटर (आरपीजी)
  • quests सहित सभी खेल डेटा, एक रिलेशनल डेटाबेस में संग्रहीत किया जाता है
  • खेल में कोई भी घटना खिलाड़ियों के लिए नई खोज या मौजूदा quests की उन्नति को ट्रिगर कर सकती है
  • एक खोज में मनमानी संख्या हो सकती है जो खिलाड़ियों को खोज से पहले उपलब्ध होनी चाहिए
  • एक खोज में मनमानी स्थितियों के साथ उप-quests / चरणों की एक मनमानी संख्या शामिल हो सकती है
  • quests सरल से लेकर होगा:

    A से बात करें - 5 B को मारें - A से बात करें - स्वास्थ्य में स्थायी रूप से वृद्धि करें

  • काफी शामिल करने के लिए:

    क्षेत्र में आइटम का उपयोग करें - क्षेत्र वाई पर जाएं - एक बॉट अंडे देगा - 10% से अधिक क्षति उठाए बिना बॉट को मारें - बॉट ड्रॉप आइटम - पिक आइटम - पोर्टल अनलॉक - पोर्टल के पीछे जे को आइटम वितरित करें - सोना और अनुभव प्राप्त करें - इस खिलाड़ी के लिए पोर्टल को एक बार फिर से पास करने की अनुमति दें

  • स्तर के उदाहरण एक संभावना है (खिलाड़ी टीमों या अलगाव में कुछ quests को पूरा कर सकते हैं जो उन प्रतिभागियों के लिए स्तर स्थान को स्पॉन करेंगे)

  • खोज या प्रोग्रामिंग ज्ञान के बिना किसी विश्व संपादक का उपयोग करते हुए उद्धरण अधिमानतः प्रबंधनीय होना चाहिए ( संपादित करें: सामान्य रूप से स्क्रिप्टिंग के खिलाफ वकालत नहीं करना)
  • मैं C ++ को कार्यान्वयन की भाषा मानता हूं

मैं सोच रहा था कि अगर मैं किसी भी श्रृंखला की घटनाओं और स्थितियों को जोड़ सकता हूं तो हम अधिक जटिल हो सकते हैं और इस प्रकार संभवतः अधिक आकर्षक quests। मैंने अपने ECA (इवेंट्स-कंडीशंस-एक्ट्स) इंजन को रोल करने के साथ प्रयोग किया लेकिन वह ओवरकिल हो सकता है। किसी भी प्रकार की स्क्रिप्टिंग का उपयोग किए बिना सामान्य परिस्थितियों को मॉडल करना विशेष रूप से कठिन है।


क्या कोई विशिष्ट कारण है कि आपने किसी स्क्रिप्टिंग को छोड़ना चुना? (जैसे कि लुआ / गमनीके आदि)।
साइमन

ज्यादातर अनुभव की कमी के कारण और संभवतः (संभवतः निराधार) धारणाओं के कारण कि यह प्रदर्शन को नकारात्मक रूप से कैसे प्रभावित कर सकता है। साथ ही मैं विश्व संपादन को यथासंभव सरल रखना चाहता था। हालांकि, मैं स्क्रिप्टिंग का उपयोग करने के लिए खुला हूं।
jmp97

1
मुझे पता है, स्क्रिप्टिंग समर्थन के बिना इंजन प्रोग्रामर को शामिल किए बिना quests में विविधता जोड़ना मुश्किल होगा।
drxzcl

1
स्क्रिप्टिंग भाषाएं इतनी तेज़ होती हैं कि यह कोई समस्या नहीं है। मैं दृढ़ता से उन्हें इस्तेमाल करने की सलाह दूंगा। उस ने कहा, वाह की स्क्रिप्टिंग का ज्यादातर भाग ट्रिगर मंत्र और घटनाओं के आसपास आधारित है। "टॉक टू ए", पर्दे के पीछे, ए के कारण खिलाड़ी पर "स्पेल" डाला जाएगा, और वास्तव में खोज को कोडित किया जाएगा "यह तब सफल होता है जब स्पेल # 55728 खिलाड़ी पर डाला जाता है"। फिर आपको खिलाड़ी पर स्पेल डालने के लिए प्राणियों को प्राप्त करने के लिए बस थोड़ी सी AI कोडिंग की आवश्यकता होती है और आप सेट हो जाते हैं।
ज़ोरबहुत

1
आधुनिक स्क्रिप्टिंग भाषाएं (जैसे कि लुआ वीएम) संभवतः आपके लिए पर्याप्त तेज़ हैं। वे उपयोग करने में आसान हैं, लागू करने में आसान हैं, आप रनटाइम में स्क्रिप्ट को फिर से लोड कर सकते हैं, आप रनटाइम में स्क्रिप्ट को डीबग और स्टेप कर सकते हैं और सामग्री बनाते समय आप तेजी से MUCH को पुन: व्यवस्थित कर सकते हैं। मैं स्क्रिप्ट की खोज के लिए स्क्रिप्टिंग इंजन (उदाहरण: लुआ और गमोंकी) में दृढ़ता से सुझाव देता हूं।
साइमन

जवाबों:


6

पहले एक चेतावनी, फिर कुछ सलाह।

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

मैं इस तरह (छद्मकोश) द्वारा हाथ से कम या ज्यादा मात्रा में शामिल सभी वस्तुओं पर लिपियों को रखने के लिए समाप्त हो गया:

Lever004_on_activate() {
    if isOnQuest(player, QUEST_0012) do_something();
    if isOnQuest(player, QUEST_0015) do_something_else();
}

यह पूरी तरह से बुरा सपना है। यह पता लगाने का कोई तरीका नहीं है कि गेम के माध्यम से सभी को कैसे खंगालें बिना खोज काम करती है। यह मत करो।

मैं एक ऐसी प्रणाली बनाने की सलाह दूंगा जहां संपूर्ण खोज (लाइन) को एक परिमित राज्य मशीन के रूप में दर्शाया गया हो, जिसमें संक्रमण के लिए प्रतिक्रिया करने के लिए संक्रमण और लिपियों की जांच करने की घटनाएं हों। इससे आपको यह पता लगाने में आसानी होती है कि आप किसी दिए गए खोज (लाइन) में कहाँ हैं और सभी खोज स्थिति को बड़े करीने से अतिक्रमित रखता है।

यदि आप चाहें, तो आप अपने वर्ल्ड एडिटर में स्क्रिप्ट / स्क्रिप्ट टेम्प्लेट की लाइब्रेरी को सामान्य अवरोधों के लिए बना सकते हैं (खिलाड़ी एनपीसी से बात करता है, खिलाड़ी भीड़ को मारता है, आदि)

मैं स्क्रिप्ट प्रदर्शन के बारे में बहुत अधिक चिंता नहीं करूंगा, जब तक कि आप अपनी घटना की स्क्रिप्ट्स को अक्सर आग नहीं देते। अंगूठे के एक नियम के रूप में, स्क्रिप्ट को कम से कम "कोर" गेम लॉजिक (एनीमेशन, भौतिकी आदि) से कम परिमाण के एक क्रम में आग लगनी चाहिए। उन्हें समय-समय पर फायरिंग के बजाय घटनाओं की प्रतिक्रिया देनी चाहिए, ताकि यह पता चल सके कि कोई शर्त पूरी हुई है या नहीं।


3
हालांकि, चेतावनी दी जाती है कि यदि आप खोज पथ को बाहरी कारकों से प्रभावित करना चाहते हैं या यदि आपके quests अपेक्षाकृत जटिल हैं, तो स्टेटमाइकिन्स बहुत तेजी से बहुत जटिल हो जाते हैं। इसके अलावा कई खोज राज्यमंच (यदि कई quests सक्रिय हो सकते हैं) एक बुरा सपना हो सकता है। हालाँकि, चूंकि प्रत्येक कार्यक्रम एक स्टेटमैचाइन है, इसलिए इसे किया जा सकता है। लेकिन जटिल समस्याएं जटिल रहती हैं, चाहे आप उन्हें कैसे भी कर लें। एक अच्छा उदाहरण (imo) Oblivion है जहां कुछ मॉड काम करने से अन्य मॉड्स को रोकते हैं - राज्यों के लिए आपके पूर्व और पोस्टकंडिशन को या तो बहुत ठोस होना चाहिए, या अत्यधिक क्षमा / त्रुटि सहिष्णु होना चाहिए।
काज

हाँ, काज सही है। अभी वाह मंच पर सिर और लोगों के बारे में अनजाने quests के बारे में शिकायत पढ़। यह हर समय होता है, यहां तक ​​कि प्रमुख लीग में भी। सबकुछ सही होना वाकई मुश्किल है।
drxzcl

3

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

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

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